[
  {
    "path": ".editorconfig",
    "content": "indent_style = space\nindent_size = 2\nend_of_line = lf"
  },
  {
    "path": ".eslintignore",
    "content": "**/prisma/client-generated/**/*\n**/prisma/client-generated/*\n**/.next/**"
  },
  {
    "path": ".eslintrc.js",
    "content": "/**\n * @remarks\n * Notes on plugins we _don't_ use:\n *\n *  ## plugin:react-hooks\n *  We don't use the react hooks plugin because it disallows valid use-cases\n *  such as this:\n *\n *  ```ts\n *  export default function useValToAtom<S>(val: S): Atom<S> {\n *  const atom = useMemo(() => {\n *    return new Atom(val)\n *  }, []) // <-- we don't _need_ to include `val` here, but the lint rule will require it\n *\n *  useLayoutEffect(() => {\n *    atom.setState(val)\n *  }, [val]) // <-- we also know `atom` will never change, but the lint rule doesn't\n *\n *  return atom\n * ```\n *\n * @type {import(\"eslint\").Linter.Config}\n */\nmodule.exports = {\n  root: true,\n  plugins: ['unused-imports', 'eslint-plugin-tsdoc', 'import', 'react'],\n  settings: {\n    react: {\n      version: '18.2',\n    },\n  },\n  extends: [],\n  rules: {\n    'unused-imports/no-unused-imports': 'warn',\n    'tsdoc/syntax': 'warn',\n    'no-debugger': 'error',\n    'react/no-deprecated': 'error',\n\n    'no-restricted-imports': [\n      'error',\n      {\n        paths: [\n          {\n            name: 'lodash',\n            message: 'Use lodash-es which is tree-shaking friendly',\n          },\n        ],\n      },\n    ],\n  },\n  ignorePatterns: ['*.d.ts', '*.ignore.ts', 'compat-tests/*'],\n  overrides: [\n    {\n      files: ['*.ts', '*.tsx'],\n      parser: '@typescript-eslint/parser',\n      plugins: ['@typescript-eslint'],\n      parserOptions: {\n        project: [\n          './packages/*/tsconfig.json',\n          './packages/*/devEnv/tsconfig.json',\n          './examples/*/tsconfig.json',\n          './devEnv/tsconfig.json',\n          './compat-tests/tsconfig.json',\n        ],\n      },\n      rules: {\n        '@typescript-eslint/await-thenable': 'warn',\n        '@typescript-eslint/no-throw-literal': 'warn',\n        '@typescript-eslint/switch-exhaustiveness-check': 'error',\n        '@typescript-eslint/consistent-type-imports': [\n          'warn',\n          {\n            prefer: 'type-imports',\n          },\n        ],\n        '@typescript-eslint/no-unused-vars': 'off',\n        '@typescript-eslint/no-floating-promises': 'warn',\n      },\n    },\n    {\n      plugins: ['react'],\n      files: ['*.mjs', '*.js'],\n      rules: {\n        'react/jsx-uses-react': 'error',\n        'react/jsx-uses-vars': 'error',\n        'tsdoc/syntax': 'off',\n      },\n      parser: 'espree',\n      parserOptions: {\n        sourceType: 'module',\n        ecmaVersion: 2021,\n        ecmaFeatures: {\n          jsx: true,\n        },\n      },\n    },\n  ],\n}\n"
  },
  {
    "path": ".github/.yarnrc.publish.yml",
    "content": "# Auth config for publishing to npm registry.\n# It's put in /.github so it's only picked up by\n# github actions.\n\nnpmPublishRegistry: 'https://registry.npmjs.org'\n\nnpmRegistries:\n  //registry.npmjs.org:\n    npmAlwaysAuth: true\n    npmAuthToken: ${NODE_AUTH_TOKEN}\n"
  },
  {
    "path": ".github/actions/yarn-nm-install/action.yml",
    "content": "name: yarn-nm-install\ndescription: Installs deps via yarn and re-uses the cache\nruns:\n  using: composite\n  steps:\n    # A shared action to install dependencies via yarn and re-use the cache.\n    # This will skip the install step if the cache is hit.\n    - name: Restore node_modules\n      id: yarn-node-modules-cache\n      uses: buildjet/cache@v3\n      with:\n        path: |\n          **/node_modules\n          .yarn/cache\n        key:\n          # Ideally we'd only have to list the lockfile, and `yarn install`\n          # would take care of the rest. But that's not the case, because\n          # `yarn install` would still build packages, even if they'd already\n          # been built before. Yarn's message is:\n          # `YN0007: │ esbuild@npm:0.16.7 must be built because it never has been before or the last one failed`\n          # I couldn't figure out how to make it not build packages, so I\n          # added the `package.json` files to the cache key (so in a later step, we can entirely skip the install step).\n          #\n          # However, this means that if we add a new workspace under any of the\n          # existing workspaces, run this action, and then change the package.json\n          # of that new workspace, then the cache will be hit, and the new package.json\n          # will be ignored.\n          ${{ runner.os }}-yarn-mono-nm-node-modules-${{ hashFiles('yarn.lock',\n          '.yarnrc.yml', 'package.json', '*/package.json', '*/*/package.json')\n          }}\n\n    # Thanks to https://github.com/rafaelbiten for this step https://github.com/microsoft/playwright/issues/7249#issuecomment-1385567519\n    - name: Cache Playwright Browsers for Playwright's Version\n      id: cache-playwright-browsers\n      uses: buildjet/cache@v3\n      with:\n        path: ~/.cache/ms-playwright\n        key: ${{ runner.os }}-playwright-${{ hashFiles('yarn.lock') }}\n\n    # This step is only needed if the cache was not hit.\n    - run: yarn install --immutable --inline-builds\n      if: steps.yarn-node-modules-cache.outputs.cache-hit != 'true'\n      shell: bash\n      env:\n        YARN_NM_MODE: 'hardlinks-local'\n\n    # This step is only needed if the job runs playwright tests. But we have\n    # to include it in all jobs. The reason is, both `yarn install` and `yarn run playwright install`\n    # modify the `~/.cache/ms-playwright` folder. If we don't include this step in all jobs,\n    # then the cache will change in some jobs and not in others, which would make the cache useless.\n    - name: Download playwright\n      if: steps.cache-playwright-browsers.outputs.cache-hit != 'true'\n      shell: bash\n      run: yarn workspace playground run playwright install --with-deps\n\n    - name: Run postinstall\n      shell: bash\n      run: yarn postinstall\n\n    # - name: Update browserlist\n    #   shell: bash\n    #   run: npx browserslist@latest --update-db\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  Build:\n    runs-on: buildjet-8vcpu-ubuntu-2204\n\n    strategy:\n      matrix:\n        node-version: [20.9]\n\n    steps:\n      - uses: actions/checkout@v3\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n      - uses: ./.github/actions/yarn-nm-install\n\n      - run: yarn cli build\n  Lint:\n    runs-on: buildjet-8vcpu-ubuntu-2204\n\n    strategy:\n      matrix:\n        node-version: [20.9]\n\n    steps:\n      - uses: actions/checkout@v3\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n      - uses: ./.github/actions/yarn-nm-install\n\n      - run: |\n          export NODE_OPTIONS=\"--max_old_space_size=4096\"\n          yarn lint:all --max-warnings 0\n\n  Test:\n    runs-on: buildjet-8vcpu-ubuntu-2204\n\n    strategy:\n      matrix:\n        node-version: [20.9]\n\n    steps:\n      - uses: actions/checkout@v3\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n      - uses: ./.github/actions/yarn-nm-install\n\n      - run: yarn test\n\n  VisualRegression:\n    # skip this until the new API is ready\n    if: false\n    name: Visual regression tests\n    runs-on: buildjet-8vcpu-ubuntu-2204\n\n    strategy:\n      matrix:\n        node-version: [20.9]\n\n    steps:\n      - uses: actions/checkout@v3\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n      - uses: ./.github/actions/yarn-nm-install\n\n      - name: Run e2e tests\n        run: yarn test:e2e:ci\n\n  Compatibility-Tests:\n    # skip this until the new API is ready\n    if: false\n    runs-on: buildjet-8vcpu-ubuntu-2204\n\n    strategy:\n      matrix:\n        node-version: [20.9]\n\n    steps:\n      - uses: actions/checkout@v3\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n      - uses: ./.github/actions/yarn-nm-install\n      # re-enable the following line if we start to get EINTEGRITY errors again\n      # - run: npm cache clean || npm cache verify\n      # This will test whether `npm install`/`yarn install` can actually run on each compatibility test fixture. See `compat-tests/README.md` for more info.\n      - run: yarn workspace @theatre/compat-tests run install-fixtures --verbose\n      # after that, we run the jest tests for each fixture\n      - run: yarn test:compat:run --verbose\n"
  },
  {
    "path": ".github/workflows/release-insiders.yml",
    "content": "name: Release insiders\n\n# This workflow is triggered when a comment is created on a PR that contains the string \"/release insiders\".\n# The comment must be created by a user with write access to the repo.\non:\n  # only run when a comment is created under a pr\n  issue_comment:\n    types: [created]\n\nenv:\n  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n\njobs:\n  insiders:\n    # run if the comment contains \"/release insiders\" and if the comment is created under a PR\n    if:\n      ${{ github.event.issue.pull_request && contains(github.event.comment.body,\n      '/release insiders') }}\n    runs-on: buildjet-8vcpu-ubuntu-2204\n\n    permissions:\n      issues: write\n      # allow writing comments on the PR\n      contents: write\n      pull-requests: write\n\n    steps:\n      # check if the user is an owner of the repo\n      - name: Has write access\n        id: has-write-access\n        uses: actions/github-script@v6\n        with:\n          script: |\n            const res = await github.rest.repos.getCollaboratorPermissionLevel({\n              ...context.repo,\n              username: context.payload.comment.user.login,\n            });\n\n            const hasPermission = ['admin', 'write', 'maintain'].includes(res.data.permission)\n\n            if (!hasPermission) {\n              // if the user doesn't have write access, comment on the PR\n              await github.rest.issues.createComment({\n                issue_number: context.issue.number,\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                body: `🚫 Cannot publish because user @${context.payload.comment.user.login} doesn't have write access.`\n              })\n            }\n\n            return hasPermission\n\n      # stop the workflow if the user doesn't have write access\n      - name: Stop if user doesn't have write access\n        if: ${{ !steps.has-write-access.outputs.result }}\n        run: |\n          echo \"User doesn't have write access. Stopping the workflow.\"\n          exit 1\n\n      - name: Start the comment\n        id: start-comment\n        uses: actions/github-script@v6\n        with:\n          result-encoding: string\n          script: |\n            const result = await github.rest.issues.createComment({\n              issue_number: context.issue.number,\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              body: `\n              ⏳ Okay @${context.payload.comment.user.login}, I'm releasing an insiders build to npm. I will update this comment when done.\n              <details><summary>More detail</summary>\n\n              In case this fails, follow the workflow run [here](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) to debug.\n\n              </details>\n              `\n            })\n\n            const commentId = result.data.id\n\n            return commentId\n\n      - name: Get the pull request's ref\n        id: pr-ref\n        uses: actions/github-script@v6\n        with:\n          result-encoding: string\n          script: |\n            const {data: pullRequest} = await github.rest.pulls.get({\n              ...context.repo,\n              pull_number: context.issue.number\n            })\n\n            return pullRequest.head.sha\n\n      # checkout the repo at the latest commit of the PR\n      - uses: actions/checkout@v2\n        with:\n          ref: ${{ steps.pr-ref.outputs.result }}\n\n      - name: Use Node.js\n        uses: actions/setup-node@v3\n        with:\n          node-version: 18.x\n\n      - uses: ./.github/actions/yarn-nm-install\n      - name: Build the Theatre.js packages\n        run: yarn cli build\n      - name: Update .yarnrc.yml with the auth config for the npmPublishRegistry\n        run: cat .github/.yarnrc.publish.yml >> .yarnrc.yml\n      - name: Publish the Theatre.js packages\n        id: publish\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n        run: yarn zx scripts/prerelease.mjs\n\n      - name: Update the comment\n        id: update-comment\n        uses: actions/github-script@v6\n        with:\n          script: |\n            const published = JSON.parse(${{ toJSON( steps.publish.outputs.data ) }})\n\n            const result = await github.rest.issues.updateComment({\n              issue_number: context.issue.number,\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              comment_id: \"${{ steps.start-comment.outputs.result }}\",\n              body: `\n              \n\n              <details>\n              <summary>🎉 Released an insiders' build to npm. Here is how to upgrade:</summary>\n\n              *  🚧 This is an insiders' build. It possibly **is not stable and _may_ corrupt your data**. Always **backup your work** before upgrading.\n              * If you do try this build, welcome aboard, insider 😉. If you're feeling generous, share some feedback here or on [\\`#contributing\\`](https://discord.com/channels/870988717190426644/940301611023073400) at Discord.\n              * 🔼 To upgrade, edit \\`package.json\\` and replace the versions of all \\`@theatre\\` or \\`theatric\\` packages with their new versions:\n              \n              \\`\\`\\`diff\n              ${published.map((pkg) => {\n                return `--- ${pkg.packageName}: \"old-version\",\\n+++ ${pkg.packageName}: \"${pkg.version}\",`\n              }).join('\\n')}\n              \\`\\`\\`\n\n              All published packages are on npm:\n\n              ${published.map((pkg) => {\n                return `* [\\`${pkg.packageName}@${pkg.version}\\`](https://www.npmjs.com/package/${pkg.packageName}/v/${pkg.version})`\n              }).join('\\n')}\n\n\n              Published at the request of @${context.payload.comment.user.login}, on commit ${{ steps.pr-ref.outputs.result }}. Workflow log [here](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) to debug.\n\n              </details>\n              `\n            })\n"
  },
  {
    "path": ".gitignore",
    "content": "**/node_modules\n**/xeno\n/packages/*/dist\n/examples/*/dist\n*.log\n*.temp\n/.vscode\n/.history\n**/.DS_Store\n*.tsbuildinfo\n.eslintcache\n\n.yarn/*\n# !.yarn/cache\n!.yarn/patches\n!.yarn/plugins\n!.yarn/releases\n!.yarn/sdks\n!.yarn/versions\n\n# Required by the `parcel_v2`\n# compatibility tests\n.parcel-cache\n\n/compat-tests/*/.yarn\n/compat-tests/*/build\n/TODO.md\n"
  },
  {
    "path": ".husky/.gitignore",
    "content": "_\n"
  },
  {
    "path": ".husky/pre-commit",
    "content": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\nyarn lint-staged\nyarn workspace @theatre/dataverse run precommit\n\n# if there are unstaged changes in ./packages/dataverse/docs, fail\nif ! git diff --quiet --exit-code -- docs; then\n  echo \"Please run 'yarn workspace @theatre/dataverse run doc' and commit the changes to the docs folder\"\n  exit 1\nfi\n"
  },
  {
    "path": ".prettierignore",
    "content": "**/prisma/client-generated/**/*\n**/prisma/client-generated/*"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"printWidth\": 80,\n  \"semi\": false,\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\",\n  \"bracketSpacing\": false,\n  \"proseWrap\": \"always\"\n}\n"
  },
  {
    "path": ".yarn/plugins/@yarnpkg/plugin-compat.cjs",
    "content": "module.exports = {\n  name: `@yarnpkg/plugin-compat`,\n  factory: (require) => {\n    // dummy implementation to override the built-in version of this plugin\n    return {}\n  },\n}\n"
  },
  {
    "path": ".yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs",
    "content": "/* eslint-disable */\nmodule.exports = {\nname: \"@yarnpkg/plugin-interactive-tools\",\nfactory: function (require) {\nvar plugin;plugin=(()=>{var __webpack_modules__={7560:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>K});function r(e,t,n,r){var i,o=arguments.length,u=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)u=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(u=(o<3?i(u):o>3?i(t,n,u):i(t,n))||u);return o>3&&u&&Object.defineProperty(t,n,u),u}const i=require(\"@yarnpkg/cli\"),o=require(\"@yarnpkg/core\");var u=n(9245),a=n(7382);const l=(0,a.memo)(({active:e})=>{const t=(0,a.useMemo)(()=>e?\"◉\":\"◯\",[e]),n=(0,a.useMemo)(()=>e?\"green\":\"yellow\",[e]);return a.createElement(u.Text,{color:n},t)});function s({active:e},t,n){const{stdin:r}=(0,u.useStdin)(),i=(0,a.useCallback)((e,n)=>t(e,n),n);(0,a.useEffect)(()=>{if(e&&r)return r.on(\"keypress\",i),()=>{r.off(\"keypress\",i)}},[e,i,r])}var c;!function(e){e.BEFORE=\"before\",e.AFTER=\"after\"}(c||(c={}));const f=function(e,t,{active:n,minus:r,plus:i,set:o,loop:u=!0}){s({active:n},(n,a)=>{const l=t.indexOf(e);switch(a.name){case r:{const e=l-1;if(u)return void o(t[(t.length+e)%t.length]);if(e<0)return;o(t[e])}break;case i:{const e=l+1;if(u)return void o(t[e%t.length]);if(e>=t.length)return;o(t[e])}}},[t,e,i,o,u])},d=({active:e=!0,children:t=[],radius:n=10,size:r=1,loop:i=!0,onFocusRequest:o,willReachEnd:l})=>{const d=a.Children.map(t,e=>(e=>{if(null===e.key)throw new Error(\"Expected all children to have a key\");return e.key})(e)),p=d[0],[h,v]=(0,a.useState)(p),m=d.indexOf(h);(0,a.useEffect)(()=>{d.includes(h)||v(p)},[t]),(0,a.useEffect)(()=>{l&&m>=d.length-2&&l()},[m]),function({active:e},t,n){s({active:e},(e,n)=>{\"tab\"===n.name&&(n.shift?t(c.BEFORE):t(c.AFTER))},n)}({active:e&&!!o},e=>{null==o||o(e)},[o]),f(h,d,{active:e,minus:\"up\",plus:\"down\",set:v,loop:i});let g=m-n,y=m+n;y>d.length&&(g-=y-d.length,y=d.length),g<0&&(y+=-g,g=0),y>=d.length&&(y=d.length-1);const _=[];for(let n=g;n<=y;++n){const i=d[n],o=e&&i===h;_.push(a.createElement(u.Box,{key:i,height:r},a.createElement(u.Box,{marginLeft:1,marginRight:1},a.createElement(u.Text,null,o?a.createElement(u.Text,{color:\"cyan\",bold:!0},\">\"):\" \")),a.createElement(u.Box,null,a.cloneElement(t[n],{active:o}))))}return a.createElement(u.Box,{flexDirection:\"column\",width:\"100%\"},_)},p=require(\"readline\"),h=a.createContext(null),v=({children:e})=>{const{stdin:t,setRawMode:n}=(0,u.useStdin)();(0,a.useEffect)(()=>{n&&n(!0),t&&(0,p.emitKeypressEvents)(t)},[t,n]);const[r,i]=(0,a.useState)(new Map),o=(0,a.useMemo)(()=>({getAll:()=>r,get:e=>r.get(e),set:(e,t)=>i(new Map([...r,[e,t]]))}),[r,i]);return a.createElement(h.Provider,{value:o,children:e})};function m(e,t){const n=(0,a.useContext)(h);if(null===n)throw new Error(\"Expected this hook to run with a ministore context attached\");if(void 0===e)return n.getAll();const r=(0,a.useCallback)(t=>{n.set(e,t)},[e,n.set]);let i=n.get(e);return void 0===i&&(i=t),[i,r]}async function g(e,t){let n;const{waitUntilExit:r}=(0,u.render)(a.createElement(v,null,a.createElement(e,Object.assign({},t,{useSubmit:e=>{const{exit:t}=(0,u.useApp)();s({active:!0},(r,i)=>{\"return\"===i.name&&(n=e,t())},[t,e])}}))));return await r(),n}const y=require(\"clipanion\");var _=n(7840),b=n(4410);const w={appId:\"OFCNCOG2CU\",apiKey:\"6fe4476ee5a1832882e326b506d14126\",indexName:\"npm-search\"},E=n.n(b)()(w.appId,w.apiKey).initIndex(w.indexName),D=async(e,t=0)=>await E.search(e,{analyticsTags:[\"yarn-plugin-interactive-tools\"],attributesToRetrieve:[\"name\",\"version\",\"owner\",\"repository\",\"humanDownloadsLast30Days\"],page:t,hitsPerPage:10}),S=[\"regular\",\"dev\",\"peer\"];class C extends i.BaseCommand{async execute(){const e=await o.Configuration.find(this.context.cwd,this.context.plugins),t=()=>a.createElement(u.Box,{flexDirection:\"row\"},a.createElement(u.Box,{flexDirection:\"column\",width:48},a.createElement(u.Box,null,a.createElement(u.Text,null,\"Press \",a.createElement(u.Text,{bold:!0,color:\"cyanBright\"},\"<up>\"),\"/\",a.createElement(u.Text,{bold:!0,color:\"cyanBright\"},\"<down>\"),\" to move between packages.\")),a.createElement(u.Box,null,a.createElement(u.Text,null,\"Press \",a.createElement(u.Text,{bold:!0,color:\"cyanBright\"},\"<space>\"),\" to select a package.\")),a.createElement(u.Box,null,a.createElement(u.Text,null,\"Press \",a.createElement(u.Text,{bold:!0,color:\"cyanBright\"},\"<space>\"),\" again to change the target.\"))),a.createElement(u.Box,{flexDirection:\"column\"},a.createElement(u.Box,{marginLeft:1},a.createElement(u.Text,null,\"Press \",a.createElement(u.Text,{bold:!0,color:\"cyanBright\"},\"<enter>\"),\" to install the selected packages.\")),a.createElement(u.Box,{marginLeft:1},a.createElement(u.Text,null,\"Press \",a.createElement(u.Text,{bold:!0,color:\"cyanBright\"},\"<ctrl+c>\"),\" to abort.\")))),n=()=>a.createElement(a.Fragment,null,a.createElement(u.Box,{width:15},a.createElement(u.Text,{bold:!0,underline:!0,color:\"gray\"},\"Owner\")),a.createElement(u.Box,{width:11},a.createElement(u.Text,{bold:!0,underline:!0,color:\"gray\"},\"Version\")),a.createElement(u.Box,{width:10},a.createElement(u.Text,{bold:!0,underline:!0,color:\"gray\"},\"Downloads\"))),r=()=>a.createElement(u.Box,{width:17},a.createElement(u.Text,{bold:!0,underline:!0,color:\"gray\"},\"Target\")),i=({hit:t,active:n})=>{const[r,i]=m(t.name,null);s({active:n},(e,t)=>{if(\"space\"!==t.name)return;if(!r)return void i(S[0]);const n=S.indexOf(r)+1;n===S.length?i(null):i(S[n])},[r,i]);const l=o.structUtils.parseIdent(t.name),c=o.structUtils.prettyIdent(e,l);return a.createElement(u.Box,null,a.createElement(u.Box,{width:45},a.createElement(u.Text,{bold:!0,wrap:\"wrap\"},c)),a.createElement(u.Box,{width:14,marginLeft:1},a.createElement(u.Text,{bold:!0,wrap:\"truncate\"},t.owner.name)),a.createElement(u.Box,{width:10,marginLeft:1},a.createElement(u.Text,{italic:!0,wrap:\"truncate\"},t.version)),a.createElement(u.Box,{width:16,marginLeft:1},a.createElement(u.Text,null,t.humanDownloadsLast30Days)))},c=({name:t,active:n})=>{const[r]=m(t,null),i=o.structUtils.parseIdent(t);return a.createElement(u.Box,null,a.createElement(u.Box,{width:47},a.createElement(u.Text,{bold:!0},\" - \",o.structUtils.prettyIdent(e,i))),S.map(e=>a.createElement(u.Box,{key:e,width:14,marginLeft:1},a.createElement(u.Text,null,\" \",a.createElement(l,{active:r===e}),\" \",a.createElement(u.Text,{bold:!0},e)))))},f=()=>a.createElement(u.Box,{marginTop:1},a.createElement(u.Text,null,\"Powered by Algolia.\")),p=await g(({useSubmit:e})=>{const o=m();e(o);const l=Array.from(o.keys()).filter(e=>null!==o.get(e)),[s,p]=(0,a.useState)(\"\"),[h,v]=(0,a.useState)(0),[g,y]=(0,a.useState)([]);return(0,a.useEffect)(()=>{s?(async()=>{v(0);const e=await D(s);e.query===s&&y(e.hits)})():y([])},[s]),a.createElement(u.Box,{flexDirection:\"column\"},a.createElement(t,null),a.createElement(u.Box,{flexDirection:\"row\",marginTop:1},a.createElement(u.Text,{bold:!0},\"Search: \"),a.createElement(u.Box,{width:41},a.createElement(_.ZP,{value:s,onChange:e=>{e.match(/\\t| /)||p(e)},placeholder:\"i.e. babel, webpack, react...\",showCursor:!1})),a.createElement(n,null)),g.length?a.createElement(d,{radius:2,loop:!1,children:g.map(e=>a.createElement(i,{key:e.name,hit:e,active:!1})),willReachEnd:async()=>{const e=await D(s,h+1);e.query===s&&e.page-1===h&&(v(e.page),y([...g,...e.hits]))}}):a.createElement(u.Text,{color:\"gray\"},\"Start typing...\"),a.createElement(u.Box,{flexDirection:\"row\",marginTop:1},a.createElement(u.Box,{width:49},a.createElement(u.Text,{bold:!0},\"Selected:\")),a.createElement(r,null)),l.length?l.map(e=>a.createElement(c,{key:e,name:e,active:!1})):a.createElement(u.Text,{color:\"gray\"},\"No selected packages...\"),a.createElement(f,null))},{});if(void 0===p)return 1;const h=Array.from(p.keys()).filter(e=>\"regular\"===p.get(e)),v=Array.from(p.keys()).filter(e=>\"dev\"===p.get(e)),y=Array.from(p.keys()).filter(e=>\"peer\"===p.get(e));return h.length&&await this.cli.run([\"add\",...h]),v.length&&await this.cli.run([\"add\",\"--dev\",...v]),y&&await this.cli.run([\"add\",\"--peer\",...y]),0}}C.usage=y.Command.Usage({category:\"Interactive commands\",description:\"open the search interface\",details:\"\\n    This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry.\\n    \",examples:[[\"Open the search window\",\"yarn search\"]]}),r([y.Command.Path(\"search\")],C.prototype,\"execute\",null);var k=n(5882),T=n.n(k);const x=({length:e,active:t})=>{if(0===e)return null;const n=e>1?\" \"+T().underline(\" \".repeat(e-1)):\" \";return a.createElement(u.Text,{dimColor:!t},n)},A=function({active:e,skewer:t,options:n,value:r,onChange:i,sizes:o=[]}){const s=n.map(({value:e})=>e),c=s.indexOf(r);return f(r,s,{active:e,minus:\"left\",plus:\"right\",set:i}),a.createElement(a.Fragment,null,n.map(({label:n},r)=>{const i=r===c,s=o[r]-1||0,f=n.replace(/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,\"\"),d=Math.max(0,s-f.length-2);return a.createElement(u.Box,{key:n,width:s,marginLeft:1},a.createElement(u.Text,{wrap:\"truncate\"},a.createElement(l,{active:i}),\" \",n),t?a.createElement(x,{active:e,length:d}):null)}))},O=require(\"@yarnpkg/plugin-essentials\");function P(){}function I(e,t,n,r,i){for(var o=0,u=t.length,a=0,l=0;o<u;o++){var s=t[o];if(s.removed){if(s.value=e.join(r.slice(l,l+s.count)),l+=s.count,o&&t[o-1].added){var c=t[o-1];t[o-1]=t[o],t[o]=c}}else{if(!s.added&&i){var f=n.slice(a,a+s.count);f=f.map((function(e,t){var n=r[l+t];return n.length>e.length?n:e})),s.value=e.join(f)}else s.value=e.join(n.slice(a,a+s.count));a+=s.count,s.added||(l+=s.count)}}var d=t[u-1];return u>1&&\"string\"==typeof d.value&&(d.added||d.removed)&&e.equals(\"\",d.value)&&(t[u-2].value+=d.value,t.pop()),t}function N(e){return{newPos:e.newPos,components:e.components.slice(0)}}P.prototype={diff:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.callback;\"function\"==typeof n&&(r=n,n={}),this.options=n;var i=this;function o(e){return r?(setTimeout((function(){r(void 0,e)}),0),!0):e}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e));var u=(t=this.removeEmpty(this.tokenize(t))).length,a=e.length,l=1,s=u+a,c=[{newPos:-1,components:[]}],f=this.extractCommon(c[0],t,e,0);if(c[0].newPos+1>=u&&f+1>=a)return o([{value:this.join(t),count:t.length}]);function d(){for(var n=-1*l;n<=l;n+=2){var r=void 0,s=c[n-1],f=c[n+1],d=(f?f.newPos:0)-n;s&&(c[n-1]=void 0);var p=s&&s.newPos+1<u,h=f&&0<=d&&d<a;if(p||h){if(!p||h&&s.newPos<f.newPos?(r=N(f),i.pushComponent(r.components,void 0,!0)):((r=s).newPos++,i.pushComponent(r.components,!0,void 0)),d=i.extractCommon(r,t,e,n),r.newPos+1>=u&&d+1>=a)return o(I(i,r.components,t,e,i.useLongestToken));c[n]=r}else c[n]=void 0}l++}if(r)!function e(){setTimeout((function(){if(l>s)return r();d()||e()}),0)}();else for(;l<=s;){var p=d();if(p)return p}},pushComponent:function(e,t,n){var r=e[e.length-1];r&&r.added===t&&r.removed===n?e[e.length-1]={count:r.count+1,added:t,removed:n}:e.push({count:1,added:t,removed:n})},extractCommon:function(e,t,n,r){for(var i=t.length,o=n.length,u=e.newPos,a=u-r,l=0;u+1<i&&a+1<o&&this.equals(t[u+1],n[a+1]);)u++,a++,l++;return l&&e.components.push({count:l}),e.newPos=u,a},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],n=0;n<e.length;n++)e[n]&&t.push(e[n]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(\"\")},join:function(e){return e.join(\"\")}};new P;function M(e,t){if(\"function\"==typeof e)t.callback=e;else if(e)for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var R=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,F=/\\S/,L=new P;L.equals=function(e,t){return this.options.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e===t||this.options.ignoreWhitespace&&!F.test(e)&&!F.test(t)},L.tokenize=function(e){for(var t=e.split(/(\\s+|[()[\\]{}'\"]|\\b)/),n=0;n<t.length-1;n++)!t[n+1]&&t[n+2]&&R.test(t[n])&&R.test(t[n+2])&&(t[n]+=t[n+2],t.splice(n+1,2),n--);return t};var B=new P;B.tokenize=function(e){var t=[],n=e.split(/(\\n|\\r\\n)/);n[n.length-1]||n.pop();for(var r=0;r<n.length;r++){var i=n[r];r%2&&!this.options.newlineIsToken?t[t.length-1]+=i:(this.options.ignoreWhitespace&&(i=i.trim()),t.push(i))}return t};var j=new P;j.tokenize=function(e){return e.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var U=new P;function z(e){return(z=\"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})(e)}U.tokenize=function(e){return e.split(/([{}:;,]|\\s+)/)};var W=Object.prototype.toString,H=new P;H.useLongestToken=!0,H.tokenize=B.tokenize,H.castInput=function(e){var t=this.options,n=t.undefinedReplacement,r=t.stringifyReplacer,i=void 0===r?function(e,t){return void 0===t?n:t}:r;return\"string\"==typeof e?e:JSON.stringify(function e(t,n,r,i,o){n=n||[],r=r||[],i&&(t=i(o,t));var u,a;for(u=0;u<n.length;u+=1)if(n[u]===t)return r[u];if(\"[object Array]\"===W.call(t)){for(n.push(t),a=new Array(t.length),r.push(a),u=0;u<t.length;u+=1)a[u]=e(t[u],n,r,i,o);return n.pop(),r.pop(),a}t&&t.toJSON&&(t=t.toJSON());if(\"object\"===z(t)&&null!==t){n.push(t),a={},r.push(a);var l,s=[];for(l in t)t.hasOwnProperty(l)&&s.push(l);for(s.sort(),u=0;u<s.length;u+=1)l=s[u],a[l]=e(t[l],n,r,i,l);n.pop(),r.pop()}else a=t;return a}(e,null,null,i),i,\"  \")},H.equals=function(e,t){return P.prototype.equals.call(H,e.replace(/,([\\r\\n])/g,\"$1\"),t.replace(/,([\\r\\n])/g,\"$1\"))};var V=new P;V.tokenize=function(e){return e.slice()},V.join=V.removeEmpty=function(e){return e};const q=require(\"semver\");var G=n.n(q);const $=/^((?:[\\^~]|>=?)?)([0-9]+)(\\.[0-9]+)(\\.[0-9]+)((?:-\\S+)?)$/;class Y extends i.BaseCommand{async execute(){const e=await o.Configuration.find(this.context.cwd,this.context.plugins),{project:t,workspace:n}=await o.Project.find(e,this.context.cwd),r=await o.Cache.find(e);if(!n)throw new i.WorkspaceRequiredError(t.cwd,this.context.cwd);const l=(t,n)=>{const r=(i=t,u=n,a=M(a,{ignoreWhitespace:!0}),L.diff(i,u,a));var i,u,a;let l=\"\";for(const t of r)t.added?l+=o.formatUtils.pretty(e,t.value,\"green\"):t.removed||(l+=t.value);return l},s=(t,n)=>{if(t===n)return n;const r=o.structUtils.parseRange(t),i=o.structUtils.parseRange(n),u=r.selector.match($),a=i.selector.match($);if(!u||!a)return l(t,n);const s=[\"gray\",\"red\",\"yellow\",\"green\",\"magenta\"];let c=null,f=\"\";for(let t=1;t<s.length;++t)null!==c||u[t]!==a[t]?(null===c&&(c=s[t-1]),f+=o.formatUtils.pretty(e,a[t],c)):f+=a[t];return f},c=async(e,i,o)=>{const u=await O.suggestUtils.fetchDescriptorFrom(e,o,{project:t,cache:r,preserveModifier:i,workspace:n});return null!==u?u.range:e.range},f=()=>a.createElement(u.Box,{flexDirection:\"row\"},a.createElement(u.Box,{flexDirection:\"column\",width:49},a.createElement(u.Box,{marginLeft:1},a.createElement(u.Text,null,\"Press \",a.createElement(u.Text,{bold:!0,color:\"cyanBright\"},\"<up>\"),\"/\",a.createElement(u.Text,{bold:!0,color:\"cyanBright\"},\"<down>\"),\" to select packages.\")),a.createElement(u.Box,{marginLeft:1},a.createElement(u.Text,null,\"Press \",a.createElement(u.Text,{bold:!0,color:\"cyanBright\"},\"<left>\"),\"/\",a.createElement(u.Text,{bold:!0,color:\"cyanBright\"},\"<right>\"),\" to select versions.\"))),a.createElement(u.Box,{flexDirection:\"column\"},a.createElement(u.Box,{marginLeft:1},a.createElement(u.Text,null,\"Press \",a.createElement(u.Text,{bold:!0,color:\"cyanBright\"},\"<enter>\"),\" to install.\")),a.createElement(u.Box,{marginLeft:1},a.createElement(u.Text,null,\"Press \",a.createElement(u.Text,{bold:!0,color:\"cyanBright\"},\"<ctrl+c>\"),\" to abort.\")))),p=()=>a.createElement(u.Box,{flexDirection:\"row\",paddingTop:1,paddingBottom:1},a.createElement(u.Box,{width:50},a.createElement(u.Text,{bold:!0},a.createElement(u.Text,{color:\"greenBright\"},\"?\"),\" Pick the packages you want to upgrade.\")),a.createElement(u.Box,{width:17},a.createElement(u.Text,{bold:!0,underline:!0,color:\"gray\"},\"Current\")),a.createElement(u.Box,{width:17},a.createElement(u.Text,{bold:!0,underline:!0,color:\"gray\"},\"Range\")),a.createElement(u.Box,{width:17},a.createElement(u.Text,{bold:!0,underline:!0,color:\"gray\"},\"Latest\"))),h=({active:t,descriptor:n,suggestions:r})=>{const[i,l]=m(n.descriptorHash,null),s=o.structUtils.stringifyIdent(n),c=Math.max(0,45-s.length);return a.createElement(a.Fragment,null,a.createElement(u.Box,null,a.createElement(u.Box,{width:45},a.createElement(u.Text,{bold:!0},o.structUtils.prettyIdent(e,n)),a.createElement(x,{active:t,length:c})),null!==r?a.createElement(A,{active:t,options:r,value:i,skewer:!0,onChange:l,sizes:[17,17,17]}):a.createElement(u.Box,{marginLeft:2},a.createElement(u.Text,{color:\"gray\"},\"Fetching suggestions...\"))))},v=({dependencies:e})=>{const[t,n]=(0,a.useState)(null),r=(0,a.useRef)(!0);return(0,a.useEffect)(()=>()=>{r.current=!1}),(0,a.useEffect)(()=>{Promise.all(e.map(e=>(async e=>{const t=G().valid(e.range)?\"^\"+e.range:e.range,[n,r]=await Promise.all([c(e,e.range,t).catch(()=>null),c(e,e.range,\"latest\").catch(()=>null)]),i=[{value:null,label:e.range}];return n&&n!==e.range&&i.push({value:n,label:s(e.range,n)}),r&&r!==n&&r!==e.range&&i.push({value:r,label:s(e.range,r)}),i})(e))).then(t=>{const i=e.map((e,n)=>[e,t[n]]).filter(([e,t])=>t.length>1);r.current&&n(i)})},[]),t?t.length?a.createElement(d,{radius:10,children:t.map(([e,t])=>a.createElement(h,{key:e.descriptorHash,active:!1,descriptor:e,suggestions:t}))}):a.createElement(u.Text,null,\"No upgrades found\"):a.createElement(u.Text,null,\"Fetching suggestions...\")},y=await g(({useSubmit:e})=>{e(m());const n=new Map;for(const e of t.workspaces)for(const r of[\"dependencies\",\"devDependencies\"])for(const i of e.manifest[r].values())null===t.tryWorkspaceByDescriptor(i)&&n.set(i.descriptorHash,i);const r=o.miscUtils.sortMap(n.values(),e=>o.structUtils.stringifyDescriptor(e));return a.createElement(u.Box,{flexDirection:\"column\"},a.createElement(f,null),a.createElement(p,null),a.createElement(v,{dependencies:r}))},{});if(void 0===y)return 1;let _=!1;for(const e of t.workspaces)for(const t of[\"dependencies\",\"devDependencies\"]){const n=e.manifest[t];for(const e of n.values()){const t=y.get(e.descriptorHash);null!=t&&(n.set(e.identHash,o.structUtils.makeDescriptor(e,t)),_=!0)}}if(!_)return 0;return(await o.StreamReport.start({configuration:e,stdout:this.context.stdout,includeLogs:!this.context.quiet},async e=>{await t.install({cache:r,report:e})})).exitCode()}}Y.usage=y.Command.Usage({category:\"Interactive commands\",description:\"open the upgrade interface\",details:\"\\n      This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade.\\n    \",examples:[[\"Open the upgrade window\",\"yarn upgrade-interactive\"]]}),r([y.Command.Path(\"upgrade-interactive\")],Y.prototype,\"execute\",null);const K={commands:[C,Y]}},7840:(e,t,n)=>{\"use strict\";const r=n(7382),i=n(7382),o=n(9245),u=n(1525),a=({value:e,placeholder:t=\"\",focus:n=!0,mask:a,highlightPastedText:l=!1,showCursor:s=!0,onChange:c,onSubmit:f})=>{const[{cursorOffset:d,cursorWidth:p},h]=i.useState({cursorOffset:(e||\"\").length,cursorWidth:0});i.useEffect(()=>{h(t=>{if(!n||!s)return t;const r=e||\"\";return t.cursorOffset>r.length-1?{cursorOffset:r.length,cursorWidth:0}:t})},[e,n,s]);const v=l?p:0,m=a?a.repeat(e.length):e;let g=m,y=t?u.grey(t):void 0;if(s&&n){y=t.length>0?u.inverse(t[0])+u.grey(t.slice(1)):u.inverse(\" \"),g=m.length>0?\"\":u.inverse(\" \");let e=0;for(const t of m)g+=e>=d-v&&e<=d?u.inverse(t):t,e++;m.length>0&&d===m.length&&(g+=u.inverse(\" \"))}return o.useInput((t,n)=>{if(n.upArrow||n.downArrow||n.ctrl&&\"c\"===t||n.tab||n.shift&&n.tab)return;if(n.return)return void(f&&f(e));let r=d,i=e,o=0;n.leftArrow?s&&r--:n.rightArrow?s&&r++:n.backspace||n.delete?d>0&&(i=e.slice(0,d-1)+e.slice(d,e.length),r--):(i=e.slice(0,d)+t+e.slice(d,e.length),r+=t.length,t.length>1&&(o=t.length)),d<0&&(r=0),d>e.length&&(r=e.length),h({cursorOffset:r,cursorWidth:o}),i!==e&&c(i)},{isActive:n}),r.createElement(o.Text,null,t?m.length>0?g:y:g)};t.ZP=a},9902:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(1525)),o=/^(rgb|hsl|hsv|hwb)\\(\\s?(\\d+),\\s?(\\d+),\\s?(\\d+)\\s?\\)$/,u=/^(ansi|ansi256)\\(\\s?(\\d+)\\s?\\)$/,a=(e,t)=>\"foreground\"===t?e:\"bg\"+e[0].toUpperCase()+e.slice(1);t.default=(e,t,n)=>{if(!t)return e;if(t in i.default){const r=a(t,n);return i.default[r](e)}if(t.startsWith(\"#\")){const r=a(\"hex\",n);return i.default[r](t)(e)}if(t.startsWith(\"ansi\")){const r=u.exec(t);if(!r)return e;const o=a(r[1],n),l=Number(r[2]);return i.default[o](l)(e)}if(t.startsWith(\"rgb\")||t.startsWith(\"hsl\")||t.startsWith(\"hsv\")||t.startsWith(\"hwb\")){const r=o.exec(t);if(!r)return e;const u=a(r[1],n),l=Number(r[2]),s=Number(r[3]),c=Number(r[4]);return i.default[u](l,s,c)(e)}return e}},2773:function(e,t,n){\"use strict\";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.hasOwnProperty.call(e,n)&&r(t,e,n);return i(t,e),t},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const a=o(n(7382)),l=u(n(1696)),s=u(n(5512)),c=u(n(1489)),f=u(n(6834)),d=u(n(5001)),p=u(n(2560)),h=u(n(9052));class v extends a.PureComponent{constructor(){super(...arguments),this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=e=>{const{stdin:t}=this.props;if(!this.isRawModeSupported())throw t===process.stdin?new Error(\"Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default.\\nRead about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported\"):new Error(\"Raw mode is not supported on the stdin provided to Ink.\\nRead about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported\");if(t.setEncoding(\"utf8\"),e)return 0===this.rawModeEnabledCount&&(t.addListener(\"data\",this.handleInput),t.resume(),t.setRawMode(!0)),void this.rawModeEnabledCount++;0==--this.rawModeEnabledCount&&(t.setRawMode(!1),t.removeListener(\"data\",this.handleInput),t.pause())},this.handleInput=e=>{\"\u0003\"===e&&this.props.exitOnCtrlC&&this.handleExit(),\"\u001b\"===e&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(\"\\t\"===e&&this.focusNext(),\"\u001b[Z\"===e&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(e=>{const t=e.focusables[0].id;return{activeFocusId:this.findNextFocusable(e)||t}})},this.focusPrevious=()=>{this.setState(e=>{const t=e.focusables[e.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(e)||t}})},this.addFocusable=(e,{autoFocus:t})=>{this.setState(n=>{let r=n.activeFocusId;return!r&&t&&(r=e),{activeFocusId:r,focusables:[...n.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(t=>({activeFocusId:t.activeFocusId===e?void 0:t.activeFocusId,focusables:t.focusables.filter(t=>t.id!==e)}))},this.activateFocusable=e=>{this.setState(t=>({focusables:t.focusables.map(t=>t.id!==e?t:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(t=>({activeFocusId:t.activeFocusId===e?void 0:t.activeFocusId,focusables:t.focusables.map(t=>t.id!==e?t:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{for(let t=e.focusables.findIndex(t=>t.id===e.activeFocusId)+1;t<e.focusables.length;t++)if(e.focusables[t].isActive)return e.focusables[t].id},this.findPreviousFocusable=e=>{for(let t=e.focusables.findIndex(t=>t.id===e.activeFocusId)-1;t>=0;t--)if(e.focusables[t].isActive)return e.focusables[t].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return a.default.createElement(s.default.Provider,{value:{exit:this.handleExit}},a.default.createElement(c.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},a.default.createElement(f.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},a.default.createElement(d.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},a.default.createElement(p.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?a.default.createElement(h.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){l.default.hide(this.props.stdout)}componentWillUnmount(){l.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}}t.default=v,v.displayName=\"InternalApp\"},5512:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});const r=n(7382).createContext({exit:()=>{}});r.displayName=\"InternalAppContext\",t.default=r},5277:function(e,t,n){\"use strict\";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.hasOwnProperty.call(e,n)&&r(t,e,n);return i(t,e),t},u=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n};Object.defineProperty(t,\"__esModule\",{value:!0});const a=o(n(7382)),l=a.forwardRef((e,t)=>{var{children:n}=e,r=u(e,[\"children\"]);const i=Object.assign(Object.assign({},r),{marginLeft:r.marginLeft||r.marginX||r.margin||0,marginRight:r.marginRight||r.marginX||r.margin||0,marginTop:r.marginTop||r.marginY||r.margin||0,marginBottom:r.marginBottom||r.marginY||r.margin||0,paddingLeft:r.paddingLeft||r.paddingX||r.padding||0,paddingRight:r.paddingRight||r.paddingX||r.padding||0,paddingTop:r.paddingTop||r.paddingY||r.padding||0,paddingBottom:r.paddingBottom||r.paddingY||r.padding||0});return a.default.createElement(\"ink-box\",{ref:t,style:i},n)});l.displayName=\"Box\",l.defaultProps={flexDirection:\"row\",flexGrow:0,flexShrink:1},t.default=l},9052:function(e,t,n){\"use strict\";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.hasOwnProperty.call(e,n)&&r(t,e,n);return i(t,e),t},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const a=o(n(5747)),l=u(n(7382)),s=u(n(9796)),c=u(n(9908)),f=u(n(5277)),d=u(n(9146)),p=new s.default({cwd:process.cwd(),internals:s.default.nodeInternals()});t.default=({error:e})=>{const t=e.stack?e.stack.split(\"\\n\").slice(1):void 0,n=t?p.parseLine(t[0]):void 0;let r,i=0;if((null==n?void 0:n.file)&&(null==n?void 0:n.line)&&a.existsSync(n.file)){const e=a.readFileSync(n.file,\"utf8\");if(r=c.default(e,n.line),r)for(const{line:e}of r)i=Math.max(i,String(e).length)}return l.default.createElement(f.default,{flexDirection:\"column\",padding:1},l.default.createElement(f.default,null,l.default.createElement(d.default,{backgroundColor:\"red\",color:\"white\"},\" \",\"ERROR\",\" \"),l.default.createElement(d.default,null,\" \",e.message)),n&&l.default.createElement(f.default,{marginTop:1},l.default.createElement(d.default,{dimColor:!0},n.file,\":\",n.line,\":\",n.column)),n&&r&&l.default.createElement(f.default,{marginTop:1,flexDirection:\"column\"},r.map(({line:e,value:t})=>l.default.createElement(f.default,{key:e},l.default.createElement(f.default,{width:i+1},l.default.createElement(d.default,{dimColor:e!==n.line,backgroundColor:e===n.line?\"red\":void 0,color:e===n.line?\"white\":void 0},String(e).padStart(i,\" \"),\":\")),l.default.createElement(d.default,{key:e,backgroundColor:e===n.line?\"red\":void 0,color:e===n.line?\"white\":void 0},\" \"+t)))),e.stack&&l.default.createElement(f.default,{marginTop:1,flexDirection:\"column\"},e.stack.split(\"\\n\").slice(1).map(e=>{const t=p.parseLine(e);return t?l.default.createElement(f.default,{key:e},l.default.createElement(d.default,{dimColor:!0},\"- \"),l.default.createElement(d.default,{dimColor:!0,bold:!0},t.function),l.default.createElement(d.default,{dimColor:!0,color:\"gray\"},\" \",\"(\",t.file,\":\",t.line,\":\",t.column,\")\")):l.default.createElement(f.default,{key:e},l.default.createElement(d.default,{dimColor:!0},\"- \"),l.default.createElement(d.default,{dimColor:!0,bold:!0},e))})))}},2560:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});const r=n(7382).createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});r.displayName=\"InternalFocusContext\",t.default=r},8200:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(7382)),o=({count:e=1})=>i.default.createElement(\"ink-text\",null,\"\\n\".repeat(e));o.displayName=\"Newline\",t.default=o},2198:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(7382)),o=r(n(5277)),u=()=>i.default.createElement(o.default,{flexGrow:1});u.displayName=\"Spacer\",t.default=u},8915:function(e,t,n){\"use strict\";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.hasOwnProperty.call(e,n)&&r(t,e,n);return i(t,e),t};Object.defineProperty(t,\"__esModule\",{value:!0});const u=o(n(7382)),a=e=>{const{items:t,children:n,style:r}=e,[i,o]=u.useState(0),a=u.useMemo(()=>t.slice(i),[t,i]);u.useLayoutEffect(()=>{o(t.length)},[t.length]);const l=a.map((e,t)=>n(e,i+t)),s=u.useMemo(()=>Object.assign({position:\"absolute\",flexDirection:\"column\"},r),[r]);return u.default.createElement(\"ink-box\",{internal_static:!0,style:s},l)};a.displayName=\"Static\",t.default=a},5001:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});const r=n(7382).createContext({stderr:void 0,write:()=>{}});r.displayName=\"InternalStderrContext\",t.default=r},1489:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});const r=n(7382).createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});r.displayName=\"InternalStdinContext\",t.default=r},6834:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});const r=n(7382).createContext({stdout:void 0,write:()=>{}});r.displayName=\"InternalStdoutContext\",t.default=r},9146:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(7382)),o=r(n(1525)),u=r(n(9902)),a=({color:e,backgroundColor:t,dimColor:n,bold:r,italic:a,underline:l,strikethrough:s,inverse:c,wrap:f,children:d})=>{if(null==d)return null;return i.default.createElement(\"ink-text\",{style:{flexGrow:0,flexShrink:1,flexDirection:\"row\",textWrap:f},internal_transform:i=>(n&&(i=o.default.dim(i)),e&&(i=u.default(i,e,\"foreground\")),t&&(i=u.default(i,t,\"background\")),r&&(i=o.default.bold(i)),a&&(i=o.default.italic(i)),l&&(i=o.default.underline(i)),s&&(i=o.default.strikethrough(i)),c&&(i=o.default.inverse(i)),i)},d)};a.displayName=\"Text\",a.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:\"wrap\"},t.default=a},4592:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(7382)),o=({children:e,transform:t})=>null==e?null:i.default.createElement(\"ink-text\",{style:{flexGrow:0,flexShrink:1,flexDirection:\"row\"},internal_transform:t},e);o.displayName=\"Transform\",t.default=o},146:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(3296)),o=n(5187),u=global;u.WebSocket||(u.WebSocket=i.default),u.window||(u.window=global),u.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:!0},{type:2,value:\"InternalApp\",isEnabled:!0,isValid:!0},{type:2,value:\"InternalAppContext\",isEnabled:!0,isValid:!0},{type:2,value:\"InternalStdoutContext\",isEnabled:!0,isValid:!0},{type:2,value:\"InternalStderrContext\",isEnabled:!0,isValid:!0},{type:2,value:\"InternalStdinContext\",isEnabled:!0,isValid:!0},{type:2,value:\"InternalFocusContext\",isEnabled:!0,isValid:!0}],o.connectToDevTools()},9864:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.setTextNodeValue=t.createTextNode=t.setStyle=t.setAttribute=t.removeChildNode=t.insertBeforeNode=t.appendChildNode=t.createNode=t.TEXT_NAME=void 0;const i=r(n(6401)),o=r(n(8113)),u=r(n(5809)),a=r(n(2030)),l=r(n(9099));t.TEXT_NAME=\"#text\",t.createNode=e=>{var t;const n={nodeName:e,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:\"ink-virtual-text\"===e?void 0:i.default.Node.create()};return\"ink-text\"===e&&(null===(t=n.yogaNode)||void 0===t||t.setMeasureFunc(s.bind(null,n))),n},t.appendChildNode=(e,n)=>{var r;n.parentNode&&t.removeChildNode(n.parentNode,n),n.parentNode=e,e.childNodes.push(n),n.yogaNode&&(null===(r=e.yogaNode)||void 0===r||r.insertChild(n.yogaNode,e.yogaNode.getChildCount())),\"ink-text\"!==e.nodeName&&\"ink-virtual-text\"!==e.nodeName||f(e)},t.insertBeforeNode=(e,n,r)=>{var i,o;n.parentNode&&t.removeChildNode(n.parentNode,n),n.parentNode=e;const u=e.childNodes.indexOf(r);if(u>=0)return e.childNodes.splice(u,0,n),void(n.yogaNode&&(null===(i=e.yogaNode)||void 0===i||i.insertChild(n.yogaNode,u)));e.childNodes.push(n),n.yogaNode&&(null===(o=e.yogaNode)||void 0===o||o.insertChild(n.yogaNode,e.yogaNode.getChildCount())),\"ink-text\"!==e.nodeName&&\"ink-virtual-text\"!==e.nodeName||f(e)},t.removeChildNode=(e,t)=>{var n,r;t.yogaNode&&(null===(r=null===(n=t.parentNode)||void 0===n?void 0:n.yogaNode)||void 0===r||r.removeChild(t.yogaNode)),t.parentNode=null;const i=e.childNodes.indexOf(t);i>=0&&e.childNodes.splice(i,1),\"ink-text\"!==e.nodeName&&\"ink-virtual-text\"!==e.nodeName||f(e)},t.setAttribute=(e,t,n)=>{e.attributes[t]=n},t.setStyle=(e,t)=>{e.style=t,e.yogaNode&&u.default(e.yogaNode,t)},t.createTextNode=e=>{const n={nodeName:\"#text\",nodeValue:e,yogaNode:void 0,parentNode:null,style:{}};return t.setTextNodeValue(n,e),n};const s=function(e,t){var n,r;const i=\"#text\"===e.nodeName?e.nodeValue:l.default(e),u=o.default(i);if(u.width<=t)return u;if(u.width>=1&&t>0&&t<1)return u;const s=null!==(r=null===(n=e.style)||void 0===n?void 0:n.textWrap)&&void 0!==r?r:\"wrap\",c=a.default(i,t,s);return o.default(c)},c=e=>{var t;if(e&&e.parentNode)return null!==(t=e.yogaNode)&&void 0!==t?t:c(e.parentNode)},f=e=>{const t=c(e);null==t||t.markDirty()};t.setTextNodeValue=(e,t)=>{\"string\"!=typeof t&&(t=String(t)),e.nodeValue=t,f(e)}},317:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(6401));t.default=e=>e.getComputedWidth()-e.getComputedPadding(i.default.EDGE_LEFT)-e.getComputedPadding(i.default.EDGE_RIGHT)-e.getComputedBorder(i.default.EDGE_LEFT)-e.getComputedBorder(i.default.EDGE_RIGHT)},4699:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=n(7382),o=r(n(5512));t.default=()=>i.useContext(o.default)},5442:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=n(7382),o=r(n(2560));t.default=()=>{const e=i.useContext(o.default);return{enableFocus:e.enableFocus,disableFocus:e.disableFocus,focusNext:e.focusNext,focusPrevious:e.focusPrevious}}},8230:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=n(7382),o=r(n(2560)),u=r(n(1541));t.default=({isActive:e=!0,autoFocus:t=!1}={})=>{const{isRawModeSupported:n,setRawMode:r}=u.default(),{activeId:a,add:l,remove:s,activate:c,deactivate:f}=i.useContext(o.default),d=i.useMemo(()=>Math.random().toString().slice(2,7),[]);return i.useEffect(()=>(l(d,{autoFocus:t}),()=>{s(d)}),[d,t]),i.useEffect(()=>{e?c(d):f(d)},[e,d]),i.useEffect(()=>{if(n&&e)return r(!0),()=>{r(!1)}},[e]),{isFocused:Boolean(d)&&a===d}}},4495:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=n(7382),o=r(n(1541));t.default=(e,t={})=>{const{stdin:n,setRawMode:r,internal_exitOnCtrlC:u}=o.default();i.useEffect(()=>{if(!1!==t.isActive)return r(!0),()=>{r(!1)}},[t.isActive,r]),i.useEffect(()=>{if(!1===t.isActive)return;const r=t=>{let n=String(t);const r={upArrow:\"\u001b[A\"===n,downArrow:\"\u001b[B\"===n,leftArrow:\"\u001b[D\"===n,rightArrow:\"\u001b[C\"===n,pageDown:\"\u001b[6~\"===n,pageUp:\"\u001b[5~\"===n,return:\"\\r\"===n,escape:\"\u001b\"===n,ctrl:!1,shift:!1,tab:\"\\t\"===n||\"\u001b[Z\"===n,backspace:\"\\b\"===n,delete:\"\"===n||\"\u001b[3~\"===n,meta:!1};n<=\"\u001a\"&&!r.return&&(n=String.fromCharCode(n.charCodeAt(0)+\"a\".charCodeAt(0)-1),r.ctrl=!0),n.startsWith(\"\u001b\")&&(n=n.slice(1),r.meta=!0);const i=n>=\"A\"&&n<=\"Z\",o=n>=\"А\"&&n<=\"Я\";1===n.length&&(i||o)&&(r.shift=!0),r.tab&&\"[Z\"===n&&(r.shift=!0),(r.tab||r.backspace||r.delete)&&(n=\"\"),\"c\"===n&&r.ctrl&&u||e(n,r)};return null==n||n.on(\"data\",r),()=>{null==n||n.off(\"data\",r)}},[t.isActive,n,u,e])}},1686:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=n(7382),o=r(n(5001));t.default=()=>i.useContext(o.default)},1541:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=n(7382),o=r(n(1489));t.default=()=>i.useContext(o.default)},9890:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=n(7382),o=r(n(6834));t.default=()=>i.useContext(o.default)},9245:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(9417);Object.defineProperty(t,\"render\",{enumerable:!0,get:function(){return r.default}});var i=n(5277);Object.defineProperty(t,\"Box\",{enumerable:!0,get:function(){return i.default}});var o=n(9146);Object.defineProperty(t,\"Text\",{enumerable:!0,get:function(){return o.default}});var u=n(8915);Object.defineProperty(t,\"Static\",{enumerable:!0,get:function(){return u.default}});var a=n(4592);Object.defineProperty(t,\"Transform\",{enumerable:!0,get:function(){return a.default}});var l=n(8200);Object.defineProperty(t,\"Newline\",{enumerable:!0,get:function(){return l.default}});var s=n(2198);Object.defineProperty(t,\"Spacer\",{enumerable:!0,get:function(){return s.default}});var c=n(4495);Object.defineProperty(t,\"useInput\",{enumerable:!0,get:function(){return c.default}});var f=n(4699);Object.defineProperty(t,\"useApp\",{enumerable:!0,get:function(){return f.default}});var d=n(1541);Object.defineProperty(t,\"useStdin\",{enumerable:!0,get:function(){return d.default}});var p=n(9890);Object.defineProperty(t,\"useStdout\",{enumerable:!0,get:function(){return p.default}});var h=n(1686);Object.defineProperty(t,\"useStderr\",{enumerable:!0,get:function(){return h.default}});var v=n(8230);Object.defineProperty(t,\"useFocus\",{enumerable:!0,get:function(){return v.default}});var m=n(5442);Object.defineProperty(t,\"useFocusManager\",{enumerable:!0,get:function(){return m.default}});var g=n(3887);Object.defineProperty(t,\"measureElement\",{enumerable:!0,get:function(){return g.default}})},3206:function(e,t,n){\"use strict\";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.hasOwnProperty.call(e,n)&&r(t,e,n);return i(t,e),t},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const a=u(n(7382)),l=n(464),s=u(n(503)),c=u(n(7589)),f=u(n(2738)),d=u(n(2633)),p=u(n(5117)),h=u(n(5691)),v=u(n(6458)),m=u(n(8070)),g=o(n(9864)),y=u(n(9679)),_=u(n(2773)),b=\"false\"!==process.env.CI&&f.default,w=()=>{};t.default=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;const{output:e,outputHeight:t,staticOutput:n}=h.default(this.rootNode,this.options.stdout.columns||80),r=n&&\"\\n\"!==n;return this.options.debug?(r&&(this.fullStaticOutput+=n),void this.options.stdout.write(this.fullStaticOutput+e)):b?(r&&this.options.stdout.write(n),void(this.lastOutput=e)):(r&&(this.fullStaticOutput+=n),t>=this.options.stdout.rows?(this.options.stdout.write(c.default.clearTerminal+this.fullStaticOutput+e),void(this.lastOutput=e)):(r&&(this.log.clear(),this.options.stdout.write(n),this.log(e)),r||e===this.lastOutput||this.throttledLog(e),void(this.lastOutput=e)))},d.default(this),this.options=e,this.rootNode=g.createNode(\"ink-root\"),this.rootNode.onRender=e.debug?this.onRender:l.throttle(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=s.default.create(e.stdout),this.throttledLog=e.debug?this.log:l.throttle(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput=\"\",this.fullStaticOutput=\"\",this.container=p.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=v.default(this.unmount,{alwaysLast:!1}),\"true\"===process.env.DEV&&p.default.injectIntoDevTools({bundleType:0,version:\"16.13.1\",rendererPackageName:\"ink\"}),e.patchConsole&&this.patchConsole(),b||(e.stdout.on(\"resize\",this.onRender),this.unsubscribeResize=()=>{e.stdout.off(\"resize\",this.onRender)})}render(e){const t=a.default.createElement(_.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},e);p.default.updateContainer(t,this.container,null,w)}writeToStdout(e){this.isUnmounted||(this.options.debug?this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput):b?this.options.stdout.write(e):(this.log.clear(),this.options.stdout.write(e),this.log(this.lastOutput)))}writeToStderr(e){if(!this.isUnmounted)return this.options.debug?(this.options.stderr.write(e),void this.options.stdout.write(this.fullStaticOutput+this.lastOutput)):void(b?this.options.stderr.write(e):(this.log.clear(),this.options.stderr.write(e),this.log(this.lastOutput)))}unmount(e){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),\"function\"==typeof this.restoreConsole&&this.restoreConsole(),\"function\"==typeof this.unsubscribeResize&&this.unsubscribeResize(),b?this.options.stdout.write(this.lastOutput+\"\\n\"):this.options.debug||this.log.done(),this.isUnmounted=!0,p.default.updateContainer(null,this.container,null,w),y.default.delete(this.options.stdout),e instanceof Error?this.rejectExitPromise(e):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((e,t)=>{this.resolveExitPromise=e,this.rejectExitPromise=t})),this.exitPromise}clear(){b||this.options.debug||this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=m.default((e,t)=>{if(\"stdout\"===e&&this.writeToStdout(t),\"stderr\"===e){t.startsWith(\"The above error occurred\")||this.writeToStderr(t)}}))}}},9679:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=new WeakMap},503:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(7589)),o=r(n(1696));t.default={create:(e,{showCursor:t=!1}={})=>{let n=0,r=\"\",u=!1;const a=a=>{t||u||(o.default.hide(),u=!0);const l=a+\"\\n\";l!==r&&(r=l,e.write(i.default.eraseLines(n)+l),n=l.split(\"\\n\").length)};return a.clear=()=>{e.write(i.default.eraseLines(n)),r=\"\",n=0},a.done=()=>{r=\"\",n=0,t||(o.default.show(),u=!1)},a}}},3887:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=e=>{var t,n,r,i;return{width:null!==(n=null===(t=e.yogaNode)||void 0===t?void 0:t.getComputedWidth())&&void 0!==n?n:0,height:null!==(i=null===(r=e.yogaNode)||void 0===r?void 0:r.getComputedHeight())&&void 0!==i?i:0}}},8113:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(8949)),o={};t.default=e=>{if(0===e.length)return{width:0,height:0};if(o[e])return o[e];const t=i.default(e),n=e.split(\"\\n\").length;return o[e]={width:t,height:n},{width:t,height:n}}},4110:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(1566)),o=r(n(3262));t.default=class{constructor(e){this.writes=[];const{width:t,height:n}=e;this.width=t,this.height=n}write(e,t,n,r){const{transformers:i}=r;n&&this.writes.push({x:e,y:t,text:n,transformers:i})}get(){const e=[];for(let t=0;t<this.height;t++)e.push(\" \".repeat(this.width));for(const t of this.writes){const{x:n,y:r,text:u,transformers:a}=t,l=u.split(\"\\n\");let s=0;for(let t of l){const u=e[r+s];if(!u)continue;const l=o.default(t);for(const e of a)t=e(t);e[r+s]=i.default(u,0,n)+t+i.default(u,n+l),s++}}return{output:e.map(e=>e.trimRight()).join(\"\\n\"),height:e.length}}}},5117:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=n(7181),o=r(n(7714)),u=r(n(6401)),a=n(9864);\"true\"===process.env.DEV&&n(146);const l=e=>{null==e||e.unsetMeasureFunc(),null==e||e.freeRecursive()};t.default=o.default({schedulePassiveEffects:i.unstable_scheduleCallback,cancelPassiveEffects:i.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:e=>{if(e.isStaticDirty)return e.isStaticDirty=!1,void(\"function\"==typeof e.onImmediateRender&&e.onImmediateRender());\"function\"==typeof e.onRender&&e.onRender()},getChildHostContext:(e,t)=>{const n=\"ink-text\"===t||\"ink-virtual-text\"===t;return e.isInsideText===n?e:{isInsideText:n}},shouldSetTextContent:()=>!1,createInstance:(e,t,n,r)=>{if(r.isInsideText&&\"ink-box\"===e)throw new Error(\"<Box> can’t be nested inside <Text> component\");const i=\"ink-text\"===e&&r.isInsideText?\"ink-virtual-text\":e,o=a.createNode(i);for(const[e,n]of Object.entries(t))\"children\"!==e&&(\"style\"===e?a.setStyle(o,n):\"internal_transform\"===e?o.internal_transform=n:\"internal_static\"===e?o.internal_static=!0:a.setAttribute(o,e,n));return o},createTextInstance:(e,t,n)=>{if(!n.isInsideText)throw new Error(`Text string \"${e}\" must be rendered inside <Text> component`);return a.createTextNode(e)},resetTextContent:()=>{},hideTextInstance:e=>{a.setTextNodeValue(e,\"\")},unhideTextInstance:(e,t)=>{a.setTextNodeValue(e,t)},getPublicInstance:e=>e,hideInstance:e=>{var t;null===(t=e.yogaNode)||void 0===t||t.setDisplay(u.default.DISPLAY_NONE)},unhideInstance:e=>{var t;null===(t=e.yogaNode)||void 0===t||t.setDisplay(u.default.DISPLAY_FLEX)},appendInitialChild:a.appendChildNode,appendChild:a.appendChildNode,insertBefore:a.insertBeforeNode,finalizeInitialChildren:(e,t,n,r)=>(e.internal_static&&(r.isStaticDirty=!0,r.staticNode=e),!1),supportsMutation:!0,appendChildToContainer:a.appendChildNode,insertInContainerBefore:a.insertBeforeNode,removeChildFromContainer:(e,t)=>{a.removeChildNode(e,t),l(t.yogaNode)},prepareUpdate:(e,t,n,r,i)=>{e.internal_static&&(i.isStaticDirty=!0);const o={},u=Object.keys(r);for(const e of u)if(r[e]!==n[e]){if(\"style\"===e&&\"object\"==typeof r.style&&\"object\"==typeof n.style){const e=r.style,t=n.style,i=Object.keys(e);for(const n of i){if(\"borderStyle\"===n||\"borderColor\"===n){if(\"object\"!=typeof o.style){const e={};o.style=e}o.style.borderStyle=e.borderStyle,o.style.borderColor=e.borderColor}if(e[n]!==t[n]){if(\"object\"!=typeof o.style){const e={};o.style=e}o.style[n]=e[n]}}continue}o[e]=r[e]}return o},commitUpdate:(e,t)=>{for(const[n,r]of Object.entries(t))\"children\"!==n&&(\"style\"===n?a.setStyle(e,r):\"internal_transform\"===n?e.internal_transform=r:\"internal_static\"===n?e.internal_static=!0:a.setAttribute(e,n,r))},commitTextUpdate:(e,t,n)=>{a.setTextNodeValue(e,n)},removeChild:(e,t)=>{a.removeChildNode(e,t),l(t.yogaNode)}})},4907:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(4097)),o=r(n(9902));t.default=(e,t,n,r)=>{if(\"string\"==typeof n.style.borderStyle){const u=n.yogaNode.getComputedWidth(),a=n.yogaNode.getComputedHeight(),l=n.style.borderColor,s=i.default[n.style.borderStyle],c=o.default(s.topLeft+s.horizontal.repeat(u-2)+s.topRight,l,\"foreground\"),f=(o.default(s.vertical,l,\"foreground\")+\"\\n\").repeat(a-2),d=o.default(s.bottomLeft+s.horizontal.repeat(u-2)+s.bottomRight,l,\"foreground\");r.write(e,t,c,{transformers:[]}),r.write(e,t+1,f,{transformers:[]}),r.write(e+u-1,t+1,f,{transformers:[]}),r.write(e,t+a-1,d,{transformers:[]})}}},3782:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(6401)),o=r(n(8949)),u=r(n(9646)),a=r(n(2030)),l=r(n(317)),s=r(n(9099)),c=r(n(4907)),f=(e,t,n)=>{var r;const{offsetX:d=0,offsetY:p=0,transformers:h=[],skipStaticElements:v}=n;if(v&&e.internal_static)return;const{yogaNode:m}=e;if(m){if(m.getDisplay()===i.default.DISPLAY_NONE)return;const n=d+m.getComputedLeft(),g=p+m.getComputedTop();let y=h;if(\"function\"==typeof e.internal_transform&&(y=[e.internal_transform,...h]),\"ink-text\"===e.nodeName){let i=s.default(e);if(i.length>0){const s=o.default(i),c=l.default(m);if(s>c){const t=null!==(r=e.style.textWrap)&&void 0!==r?r:\"wrap\";i=a.default(i,c,t)}i=((e,t)=>{var n;const r=null===(n=e.childNodes[0])||void 0===n?void 0:n.yogaNode;if(r){const e=r.getComputedLeft(),n=r.getComputedTop();t=\"\\n\".repeat(n)+u.default(t,e)}return t})(e,i),t.write(n,g,i,{transformers:y})}return}if(\"ink-box\"===e.nodeName&&c.default(n,g,e,t),\"ink-root\"===e.nodeName||\"ink-box\"===e.nodeName)for(const r of e.childNodes)f(r,t,{offsetX:n,offsetY:g,transformers:y,skipStaticElements:v})}};t.default=f},9417:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(3206)),o=r(n(9679)),u=n(2413);t.default=(e,t)=>{const n=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},a(t)),r=l(n.stdout,()=>new i.default(n));return r.render(e),{rerender:r.render,unmount:()=>r.unmount(),waitUntilExit:r.waitUntilExit,cleanup:()=>o.default.delete(n.stdout),clear:r.clear}};const a=(e={})=>e instanceof u.Stream?{stdout:e,stdin:process.stdin}:e,l=(e,t)=>{let n;return o.default.has(e)?n=o.default.get(e):(n=t(),o.default.set(e,n)),n}},5691:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(6401)),o=r(n(3782)),u=r(n(4110));t.default=(e,t)=>{var n;if(e.yogaNode.setWidth(t),e.yogaNode){e.yogaNode.calculateLayout(void 0,void 0,i.default.DIRECTION_LTR);const t=new u.default({width:e.yogaNode.getComputedWidth(),height:e.yogaNode.getComputedHeight()});let r;o.default(e,t,{skipStaticElements:!0}),(null===(n=e.staticNode)||void 0===n?void 0:n.yogaNode)&&(r=new u.default({width:e.staticNode.yogaNode.getComputedWidth(),height:e.staticNode.yogaNode.getComputedHeight()}),o.default(e.staticNode,r,{skipStaticElements:!1}));const{output:a,height:l}=t.get();return{output:a,outputHeight:l,staticOutput:r?r.get().output+\"\\n\":\"\"}}return{output:\"\",outputHeight:0,staticOutput:\"\"}}},9099:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});const n=e=>{let t=\"\";if(e.childNodes.length>0)for(const r of e.childNodes){let e=\"\";\"#text\"===r.nodeName?e=r.nodeValue:(\"ink-text\"!==r.nodeName&&\"ink-virtual-text\"!==r.nodeName||(e=n(r)),e.length>0&&\"function\"==typeof r.internal_transform&&(e=r.internal_transform(e))),t+=e}return t};t.default=n},5809:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(6401));t.default=(e,t={})=>{((e,t)=>{\"position\"in t&&e.setPositionType(\"absolute\"===t.position?i.default.POSITION_TYPE_ABSOLUTE:i.default.POSITION_TYPE_RELATIVE)})(e,t),((e,t)=>{\"marginLeft\"in t&&e.setMargin(i.default.EDGE_START,t.marginLeft||0),\"marginRight\"in t&&e.setMargin(i.default.EDGE_END,t.marginRight||0),\"marginTop\"in t&&e.setMargin(i.default.EDGE_TOP,t.marginTop||0),\"marginBottom\"in t&&e.setMargin(i.default.EDGE_BOTTOM,t.marginBottom||0)})(e,t),((e,t)=>{\"paddingLeft\"in t&&e.setPadding(i.default.EDGE_LEFT,t.paddingLeft||0),\"paddingRight\"in t&&e.setPadding(i.default.EDGE_RIGHT,t.paddingRight||0),\"paddingTop\"in t&&e.setPadding(i.default.EDGE_TOP,t.paddingTop||0),\"paddingBottom\"in t&&e.setPadding(i.default.EDGE_BOTTOM,t.paddingBottom||0)})(e,t),((e,t)=>{var n;\"flexGrow\"in t&&e.setFlexGrow(null!==(n=t.flexGrow)&&void 0!==n?n:0),\"flexShrink\"in t&&e.setFlexShrink(\"number\"==typeof t.flexShrink?t.flexShrink:1),\"flexDirection\"in t&&(\"row\"===t.flexDirection&&e.setFlexDirection(i.default.FLEX_DIRECTION_ROW),\"row-reverse\"===t.flexDirection&&e.setFlexDirection(i.default.FLEX_DIRECTION_ROW_REVERSE),\"column\"===t.flexDirection&&e.setFlexDirection(i.default.FLEX_DIRECTION_COLUMN),\"column-reverse\"===t.flexDirection&&e.setFlexDirection(i.default.FLEX_DIRECTION_COLUMN_REVERSE)),\"flexBasis\"in t&&(\"number\"==typeof t.flexBasis?e.setFlexBasis(t.flexBasis):\"string\"==typeof t.flexBasis?e.setFlexBasisPercent(Number.parseInt(t.flexBasis,10)):e.setFlexBasis(NaN)),\"alignItems\"in t&&(\"stretch\"!==t.alignItems&&t.alignItems||e.setAlignItems(i.default.ALIGN_STRETCH),\"flex-start\"===t.alignItems&&e.setAlignItems(i.default.ALIGN_FLEX_START),\"center\"===t.alignItems&&e.setAlignItems(i.default.ALIGN_CENTER),\"flex-end\"===t.alignItems&&e.setAlignItems(i.default.ALIGN_FLEX_END)),\"alignSelf\"in t&&(\"auto\"!==t.alignSelf&&t.alignSelf||e.setAlignSelf(i.default.ALIGN_AUTO),\"flex-start\"===t.alignSelf&&e.setAlignSelf(i.default.ALIGN_FLEX_START),\"center\"===t.alignSelf&&e.setAlignSelf(i.default.ALIGN_CENTER),\"flex-end\"===t.alignSelf&&e.setAlignSelf(i.default.ALIGN_FLEX_END)),\"justifyContent\"in t&&(\"flex-start\"!==t.justifyContent&&t.justifyContent||e.setJustifyContent(i.default.JUSTIFY_FLEX_START),\"center\"===t.justifyContent&&e.setJustifyContent(i.default.JUSTIFY_CENTER),\"flex-end\"===t.justifyContent&&e.setJustifyContent(i.default.JUSTIFY_FLEX_END),\"space-between\"===t.justifyContent&&e.setJustifyContent(i.default.JUSTIFY_SPACE_BETWEEN),\"space-around\"===t.justifyContent&&e.setJustifyContent(i.default.JUSTIFY_SPACE_AROUND))})(e,t),((e,t)=>{var n,r;\"width\"in t&&(\"number\"==typeof t.width?e.setWidth(t.width):\"string\"==typeof t.width?e.setWidthPercent(Number.parseInt(t.width,10)):e.setWidthAuto()),\"height\"in t&&(\"number\"==typeof t.height?e.setHeight(t.height):\"string\"==typeof t.height?e.setHeightPercent(Number.parseInt(t.height,10)):e.setHeightAuto()),\"minWidth\"in t&&(\"string\"==typeof t.minWidth?e.setMinWidthPercent(Number.parseInt(t.minWidth,10)):e.setMinWidth(null!==(n=t.minWidth)&&void 0!==n?n:0)),\"minHeight\"in t&&(\"string\"==typeof t.minHeight?e.setMinHeightPercent(Number.parseInt(t.minHeight,10)):e.setMinHeight(null!==(r=t.minHeight)&&void 0!==r?r:0))})(e,t),((e,t)=>{\"display\"in t&&e.setDisplay(\"flex\"===t.display?i.default.DISPLAY_FLEX:i.default.DISPLAY_NONE)})(e,t),((e,t)=>{if(\"borderStyle\"in t){const n=\"string\"==typeof t.borderStyle?1:0;e.setBorder(i.default.EDGE_TOP,n),e.setBorder(i.default.EDGE_BOTTOM,n),e.setBorder(i.default.EDGE_LEFT,n),e.setBorder(i.default.EDGE_RIGHT,n)}})(e,t)}},2030:function(e,t,n){\"use strict\";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:!0});const i=r(n(4332)),o=r(n(5301)),u={};t.default=(e,t,n)=>{const r=e+String(t)+String(n);if(u[r])return u[r];let a=e;if(\"wrap\"===n&&(a=i.default(e,t,{trim:!1,hard:!0})),n.startsWith(\"truncate\")){let r=\"end\";\"truncate-middle\"===n&&(r=\"middle\"),\"truncate-start\"===n&&(r=\"start\"),a=o.default(e,t,{position:r})}return u[r]=a,a}},5767:(e,t,n)=>{\n/** @license React v0.24.0\n * react-reconciler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\ne.exports=function t(r){\"use strict\";var i=n(9381),o=n(7382),u=n(7181);function a(e){for(var t=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,n=1;n<arguments.length;n++)t+=\"&args[]=\"+encodeURIComponent(arguments[n]);return\"Minified React error #\"+e+\"; visit \"+t+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var l=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;l.hasOwnProperty(\"ReactCurrentDispatcher\")||(l.ReactCurrentDispatcher={current:null}),l.hasOwnProperty(\"ReactCurrentBatchConfig\")||(l.ReactCurrentBatchConfig={suspense:null});var s=\"function\"==typeof Symbol&&Symbol.for,c=s?Symbol.for(\"react.element\"):60103,f=s?Symbol.for(\"react.portal\"):60106,d=s?Symbol.for(\"react.fragment\"):60107,p=s?Symbol.for(\"react.strict_mode\"):60108,h=s?Symbol.for(\"react.profiler\"):60114,v=s?Symbol.for(\"react.provider\"):60109,m=s?Symbol.for(\"react.context\"):60110,g=s?Symbol.for(\"react.concurrent_mode\"):60111,y=s?Symbol.for(\"react.forward_ref\"):60112,_=s?Symbol.for(\"react.suspense\"):60113,b=s?Symbol.for(\"react.suspense_list\"):60120,w=s?Symbol.for(\"react.memo\"):60115,E=s?Symbol.for(\"react.lazy\"):60116;s&&Symbol.for(\"react.fundamental\"),s&&Symbol.for(\"react.responder\"),s&&Symbol.for(\"react.scope\");var D=\"function\"==typeof Symbol&&Symbol.iterator;function S(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=D&&e[D]||e[\"@@iterator\"])?e:null}function C(e){if(null==e)return null;if(\"function\"==typeof e)return e.displayName||e.name||null;if(\"string\"==typeof e)return e;switch(e){case d:return\"Fragment\";case f:return\"Portal\";case h:return\"Profiler\";case p:return\"StrictMode\";case _:return\"Suspense\";case b:return\"SuspenseList\"}if(\"object\"==typeof e)switch(e.$$typeof){case m:return\"Context.Consumer\";case v:return\"Context.Provider\";case y:var t=e.render;return t=t.displayName||t.name||\"\",e.displayName||(\"\"!==t?\"ForwardRef(\"+t+\")\":\"ForwardRef\");case w:return C(e.type);case E:if(e=1===e._status?e._result:null)return C(e)}return null}function k(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).effectTag)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function T(e){if(k(e)!==e)throw Error(a(188))}function x(e){var t=e.alternate;if(!t){if(null===(t=k(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var i=n.return;if(null===i)break;var o=i.alternate;if(null===o){if(null!==(r=i.return)){n=r;continue}break}if(i.child===o.child){for(o=i.child;o;){if(o===n)return T(i),e;if(o===r)return T(i),t;o=o.sibling}throw Error(a(188))}if(n.return!==r.return)n=i,r=o;else{for(var u=!1,l=i.child;l;){if(l===n){u=!0,n=i,r=o;break}if(l===r){u=!0,r=i,n=o;break}l=l.sibling}if(!u){for(l=o.child;l;){if(l===n){u=!0,n=o,r=i;break}if(l===r){u=!0,r=o,n=i;break}l=l.sibling}if(!u)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}function A(e){if(!(e=x(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}var O=r.getPublicInstance,P=r.getRootHostContext,I=r.getChildHostContext,N=r.prepareForCommit,M=r.resetAfterCommit,R=r.createInstance,F=r.appendInitialChild,L=r.finalizeInitialChildren,B=r.prepareUpdate,j=r.shouldSetTextContent,U=r.shouldDeprioritizeSubtree,z=r.createTextInstance,W=r.setTimeout,H=r.clearTimeout,V=r.noTimeout,q=r.isPrimaryRenderer,G=r.supportsMutation,$=r.supportsPersistence,Y=r.supportsHydration,K=r.appendChild,X=r.appendChildToContainer,Q=r.commitTextUpdate,J=r.commitMount,Z=r.commitUpdate,ee=r.insertBefore,te=r.insertInContainerBefore,ne=r.removeChild,re=r.removeChildFromContainer,ie=r.resetTextContent,oe=r.hideInstance,ue=r.hideTextInstance,ae=r.unhideInstance,le=r.unhideTextInstance,se=r.cloneInstance,ce=r.createContainerChildSet,fe=r.appendChildToContainerChildSet,de=r.finalizeContainerChildren,pe=r.replaceContainerChildren,he=r.cloneHiddenInstance,ve=r.cloneHiddenTextInstance,me=r.canHydrateInstance,ge=r.canHydrateTextInstance,ye=r.isSuspenseInstancePending,_e=r.isSuspenseInstanceFallback,be=r.getNextHydratableSibling,we=r.getFirstHydratableChild,Ee=r.hydrateInstance,De=r.hydrateTextInstance,Se=r.getNextHydratableInstanceAfterSuspenseInstance,Ce=r.commitHydratedContainer,ke=r.commitHydratedSuspenseInstance,Te=/^(.*)[\\\\\\/]/;function xe(e){var t=\"\";do{e:switch(e.tag){case 3:case 4:case 6:case 7:case 10:case 9:var n=\"\";break e;default:var r=e._debugOwner,i=e._debugSource,o=C(e.type);n=null,r&&(n=C(r.type)),r=o,o=\"\",i?o=\" (at \"+i.fileName.replace(Te,\"\")+\":\"+i.lineNumber+\")\":n&&(o=\" (created by \"+n+\")\"),n=\"\\n    in \"+(r||\"Unknown\")+o}t+=n,e=e.return}while(e);return t}new Set;var Ae=[],Oe=-1;function Pe(e){0>Oe||(e.current=Ae[Oe],Ae[Oe]=null,Oe--)}function Ie(e,t){Oe++,Ae[Oe]=e.current,e.current=t}var Ne={},Me={current:Ne},Re={current:!1},Fe=Ne;function Le(e,t){var n=e.type.contextTypes;if(!n)return Ne;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var i,o={};for(i in n)o[i]=t[i];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function Be(e){return null!=(e=e.childContextTypes)}function je(e){Pe(Re),Pe(Me)}function Ue(e){Pe(Re),Pe(Me)}function ze(e,t,n){if(Me.current!==Ne)throw Error(a(168));Ie(Me,t),Ie(Re,n)}function We(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,\"function\"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in e))throw Error(a(108,C(t)||\"Unknown\",o));return i({},n,{},r)}function He(e){var t=e.stateNode;return t=t&&t.__reactInternalMemoizedMergedChildContext||Ne,Fe=Me.current,Ie(Me,t),Ie(Re,Re.current),!0}function Ve(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(t=We(e,t,Fe),r.__reactInternalMemoizedMergedChildContext=t,Pe(Re),Pe(Me),Ie(Me,t)):Pe(Re),Ie(Re,n)}var qe=u.unstable_runWithPriority,Ge=u.unstable_scheduleCallback,$e=u.unstable_cancelCallback,Ye=u.unstable_shouldYield,Ke=u.unstable_requestPaint,Xe=u.unstable_now,Qe=u.unstable_getCurrentPriorityLevel,Je=u.unstable_ImmediatePriority,Ze=u.unstable_UserBlockingPriority,et=u.unstable_NormalPriority,tt=u.unstable_LowPriority,nt=u.unstable_IdlePriority,rt={},it=void 0!==Ke?Ke:function(){},ot=null,ut=null,at=!1,lt=Xe(),st=1e4>lt?Xe:function(){return Xe()-lt};function ct(){switch(Qe()){case Je:return 99;case Ze:return 98;case et:return 97;case tt:return 96;case nt:return 95;default:throw Error(a(332))}}function ft(e){switch(e){case 99:return Je;case 98:return Ze;case 97:return et;case 96:return tt;case 95:return nt;default:throw Error(a(332))}}function dt(e,t){return e=ft(e),qe(e,t)}function pt(e,t,n){return e=ft(e),Ge(e,t,n)}function ht(e){return null===ot?(ot=[e],ut=Ge(Je,mt)):ot.push(e),rt}function vt(){if(null!==ut){var e=ut;ut=null,$e(e)}mt()}function mt(){if(!at&&null!==ot){at=!0;var e=0;try{var t=ot;dt(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),ot=null}catch(t){throw null!==ot&&(ot=ot.slice(e+1)),Ge(Je,vt),t}finally{at=!1}}}var gt=3;function yt(e,t,n){return 1073741821-(1+((1073741821-e+t/10)/(n/=10)|0))*n}var _t=\"function\"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},bt=Object.prototype.hasOwnProperty;function wt(e,t){if(_t(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(r=0;r<n.length;r++)if(!bt.call(t,n[r])||!_t(e[n[r]],t[n[r]]))return!1;return!0}function Et(e,t){if(e&&e.defaultProps)for(var n in t=i({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}var Dt={current:null},St=null,Ct=null,kt=null;function Tt(){kt=Ct=St=null}function xt(e,t){var n=e.type._context;q?(Ie(Dt,n._currentValue),n._currentValue=t):(Ie(Dt,n._currentValue2),n._currentValue2=t)}function At(e){var t=Dt.current;Pe(Dt),e=e.type._context,q?e._currentValue=t:e._currentValue2=t}function Ot(e,t){for(;null!==e;){var n=e.alternate;if(e.childExpirationTime<t)e.childExpirationTime=t,null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t);else{if(!(null!==n&&n.childExpirationTime<t))break;n.childExpirationTime=t}e=e.return}}function Pt(e,t){St=e,kt=Ct=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(e.expirationTime>=t&&(dr=!0),e.firstContext=null)}function It(e,t){if(kt!==e&&!1!==t&&0!==t)if(\"number\"==typeof t&&1073741823!==t||(kt=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Ct){if(null===St)throw Error(a(308));Ct=t,St.dependencies={expirationTime:0,firstContext:t,responders:null}}else Ct=Ct.next=t;return q?e._currentValue:e._currentValue2}var Nt=!1;function Mt(e){return{baseState:e,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Rt(e){return{baseState:e.baseState,firstUpdate:e.firstUpdate,lastUpdate:e.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Ft(e,t){return{expirationTime:e,suspenseConfig:t,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function Lt(e,t){null===e.lastUpdate?e.firstUpdate=e.lastUpdate=t:(e.lastUpdate.next=t,e.lastUpdate=t)}function Bt(e,t){var n=e.alternate;if(null===n){var r=e.updateQueue,i=null;null===r&&(r=e.updateQueue=Mt(e.memoizedState))}else r=e.updateQueue,i=n.updateQueue,null===r?null===i?(r=e.updateQueue=Mt(e.memoizedState),i=n.updateQueue=Mt(n.memoizedState)):r=e.updateQueue=Rt(i):null===i&&(i=n.updateQueue=Rt(r));null===i||r===i?Lt(r,t):null===r.lastUpdate||null===i.lastUpdate?(Lt(r,t),Lt(i,t)):(Lt(r,t),i.lastUpdate=t)}function jt(e,t){var n=e.updateQueue;null===(n=null===n?e.updateQueue=Mt(e.memoizedState):Ut(e,n)).lastCapturedUpdate?n.firstCapturedUpdate=n.lastCapturedUpdate=t:(n.lastCapturedUpdate.next=t,n.lastCapturedUpdate=t)}function Ut(e,t){var n=e.alternate;return null!==n&&t===n.updateQueue&&(t=e.updateQueue=Rt(t)),t}function zt(e,t,n,r,o,u){switch(n.tag){case 1:return\"function\"==typeof(e=n.payload)?e.call(u,r,o):e;case 3:e.effectTag=-4097&e.effectTag|64;case 0:if(null==(o=\"function\"==typeof(e=n.payload)?e.call(u,r,o):e))break;return i({},r,o);case 2:Nt=!0}return r}function Wt(e,t,n,r,i){Nt=!1;for(var o=(t=Ut(e,t)).baseState,u=null,a=0,l=t.firstUpdate,s=o;null!==l;){var c=l.expirationTime;c<i?(null===u&&(u=l,o=s),a<c&&(a=c)):(Ui(c,l.suspenseConfig),s=zt(e,0,l,s,n,r),null!==l.callback&&(e.effectTag|=32,l.nextEffect=null,null===t.lastEffect?t.firstEffect=t.lastEffect=l:(t.lastEffect.nextEffect=l,t.lastEffect=l))),l=l.next}for(c=null,l=t.firstCapturedUpdate;null!==l;){var f=l.expirationTime;f<i?(null===c&&(c=l,null===u&&(o=s)),a<f&&(a=f)):(s=zt(e,0,l,s,n,r),null!==l.callback&&(e.effectTag|=32,l.nextEffect=null,null===t.lastCapturedEffect?t.firstCapturedEffect=t.lastCapturedEffect=l:(t.lastCapturedEffect.nextEffect=l,t.lastCapturedEffect=l))),l=l.next}null===u&&(t.lastUpdate=null),null===c?t.lastCapturedUpdate=null:e.effectTag|=32,null===u&&null===c&&(o=s),t.baseState=o,t.firstUpdate=u,t.firstCapturedUpdate=c,zi(a),e.expirationTime=a,e.memoizedState=s}function Ht(e,t,n){null!==t.firstCapturedUpdate&&(null!==t.lastUpdate&&(t.lastUpdate.next=t.firstCapturedUpdate,t.lastUpdate=t.lastCapturedUpdate),t.firstCapturedUpdate=t.lastCapturedUpdate=null),Vt(t.firstEffect,n),t.firstEffect=t.lastEffect=null,Vt(t.firstCapturedEffect,n),t.firstCapturedEffect=t.lastCapturedEffect=null}function Vt(e,t){for(;null!==e;){var n=e.callback;if(null!==n){e.callback=null;var r=t;if(\"function\"!=typeof n)throw Error(a(191,n));n.call(r)}e=e.nextEffect}}var qt=l.ReactCurrentBatchConfig,Gt=(new o.Component).refs;function $t(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:i({},t,n),e.memoizedState=n,null!==(r=e.updateQueue)&&0===e.expirationTime&&(r.baseState=n)}var Yt={isMounted:function(e){return!!(e=e._reactInternalFiber)&&k(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternalFiber;var r=xi(),i=qt.suspense;(i=Ft(r=Ai(r,e,i),i)).payload=t,null!=n&&(i.callback=n),Bt(e,i),Oi(e,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternalFiber;var r=xi(),i=qt.suspense;(i=Ft(r=Ai(r,e,i),i)).tag=1,i.payload=t,null!=n&&(i.callback=n),Bt(e,i),Oi(e,r)},enqueueForceUpdate:function(e,t){e=e._reactInternalFiber;var n=xi(),r=qt.suspense;(r=Ft(n=Ai(n,e,r),r)).tag=2,null!=t&&(r.callback=t),Bt(e,r),Oi(e,n)}};function Kt(e,t,n,r,i,o,u){return\"function\"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,u):!t.prototype||!t.prototype.isPureReactComponent||(!wt(n,r)||!wt(i,o))}function Xt(e,t,n){var r=!1,i=Ne,o=t.contextType;return\"object\"==typeof o&&null!==o?o=It(o):(i=Be(t)?Fe:Me.current,o=(r=null!=(r=t.contextTypes))?Le(e,i):Ne),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=Yt,e.stateNode=t,t._reactInternalFiber=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=i,e.__reactInternalMemoizedMaskedChildContext=o),t}function Qt(e,t,n,r){e=t.state,\"function\"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),\"function\"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Yt.enqueueReplaceState(t,t.state,null)}function Jt(e,t,n,r){var i=e.stateNode;i.props=n,i.state=e.memoizedState,i.refs=Gt;var o=t.contextType;\"object\"==typeof o&&null!==o?i.context=It(o):(o=Be(t)?Fe:Me.current,i.context=Le(e,o)),null!==(o=e.updateQueue)&&(Wt(e,o,n,i,r),i.state=e.memoizedState),\"function\"==typeof(o=t.getDerivedStateFromProps)&&($t(e,t,o,n),i.state=e.memoizedState),\"function\"==typeof t.getDerivedStateFromProps||\"function\"==typeof i.getSnapshotBeforeUpdate||\"function\"!=typeof i.UNSAFE_componentWillMount&&\"function\"!=typeof i.componentWillMount||(t=i.state,\"function\"==typeof i.componentWillMount&&i.componentWillMount(),\"function\"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount(),t!==i.state&&Yt.enqueueReplaceState(i,i.state,null),null!==(o=e.updateQueue)&&(Wt(e,o,n,i,r),i.state=e.memoizedState)),\"function\"==typeof i.componentDidMount&&(e.effectTag|=4)}var Zt=Array.isArray;function en(e,t,n){if(null!==(e=n.ref)&&\"function\"!=typeof e&&\"object\"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var i=\"\"+e;return null!==t&&null!==t.ref&&\"function\"==typeof t.ref&&t.ref._stringRef===i?t.ref:((t=function(e){var t=r.refs;t===Gt&&(t=r.refs={}),null===e?delete t[i]:t[i]=e})._stringRef=i,t)}if(\"string\"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function tn(e,t){if(\"textarea\"!==e.type)throw Error(a(31,\"[object Object]\"===Object.prototype.toString.call(t)?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":t,\"\"))}function nn(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.effectTag=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function i(e,t,n){return(e=ao(e,t)).index=0,e.sibling=null,e}function o(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.effectTag=2,n):r:(t.effectTag=2,n):n}function u(t){return e&&null===t.alternate&&(t.effectTag=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=co(n,e.mode,r)).return=e,t):((t=i(t,n)).return=e,t)}function s(e,t,n,r){return null!==t&&t.elementType===n.type?((r=i(t,n.props)).ref=en(e,t,n),r.return=e,r):((r=lo(n.type,n.key,n.props,null,e.mode,r)).ref=en(e,t,n),r.return=e,r)}function p(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=fo(n,e.mode,r)).return=e,t):((t=i(t,n.children||[])).return=e,t)}function h(e,t,n,r,o){return null===t||7!==t.tag?((t=so(n,e.mode,r,o)).return=e,t):((t=i(t,n)).return=e,t)}function v(e,t,n){if(\"string\"==typeof t||\"number\"==typeof t)return(t=co(\"\"+t,e.mode,n)).return=e,t;if(\"object\"==typeof t&&null!==t){switch(t.$$typeof){case c:return(n=lo(t.type,t.key,t.props,null,e.mode,n)).ref=en(e,null,t),n.return=e,n;case f:return(t=fo(t,e.mode,n)).return=e,t}if(Zt(t)||S(t))return(t=so(t,e.mode,n,null)).return=e,t;tn(e,t)}return null}function m(e,t,n,r){var i=null!==t?t.key:null;if(\"string\"==typeof n||\"number\"==typeof n)return null!==i?null:l(e,t,\"\"+n,r);if(\"object\"==typeof n&&null!==n){switch(n.$$typeof){case c:return n.key===i?n.type===d?h(e,t,n.props.children,r,i):s(e,t,n,r):null;case f:return n.key===i?p(e,t,n,r):null}if(Zt(n)||S(n))return null!==i?null:h(e,t,n,r,null);tn(e,n)}return null}function g(e,t,n,r,i){if(\"string\"==typeof r||\"number\"==typeof r)return l(t,e=e.get(n)||null,\"\"+r,i);if(\"object\"==typeof r&&null!==r){switch(r.$$typeof){case c:return e=e.get(null===r.key?n:r.key)||null,r.type===d?h(t,e,r.props.children,i,r.key):s(t,e,r,i);case f:return p(t,e=e.get(null===r.key?n:r.key)||null,r,i)}if(Zt(r)||S(r))return h(t,e=e.get(n)||null,r,i,null);tn(t,r)}return null}function y(i,u,a,l){for(var s=null,c=null,f=u,d=u=0,p=null;null!==f&&d<a.length;d++){f.index>d?(p=f,f=null):p=f.sibling;var h=m(i,f,a[d],l);if(null===h){null===f&&(f=p);break}e&&f&&null===h.alternate&&t(i,f),u=o(h,u,d),null===c?s=h:c.sibling=h,c=h,f=p}if(d===a.length)return n(i,f),s;if(null===f){for(;d<a.length;d++)null!==(f=v(i,a[d],l))&&(u=o(f,u,d),null===c?s=f:c.sibling=f,c=f);return s}for(f=r(i,f);d<a.length;d++)null!==(p=g(f,i,d,a[d],l))&&(e&&null!==p.alternate&&f.delete(null===p.key?d:p.key),u=o(p,u,d),null===c?s=p:c.sibling=p,c=p);return e&&f.forEach((function(e){return t(i,e)})),s}function _(i,u,l,s){var c=S(l);if(\"function\"!=typeof c)throw Error(a(150));if(null==(l=c.call(l)))throw Error(a(151));for(var f=c=null,d=u,p=u=0,h=null,y=l.next();null!==d&&!y.done;p++,y=l.next()){d.index>p?(h=d,d=null):h=d.sibling;var _=m(i,d,y.value,s);if(null===_){null===d&&(d=h);break}e&&d&&null===_.alternate&&t(i,d),u=o(_,u,p),null===f?c=_:f.sibling=_,f=_,d=h}if(y.done)return n(i,d),c;if(null===d){for(;!y.done;p++,y=l.next())null!==(y=v(i,y.value,s))&&(u=o(y,u,p),null===f?c=y:f.sibling=y,f=y);return c}for(d=r(i,d);!y.done;p++,y=l.next())null!==(y=g(d,i,p,y.value,s))&&(e&&null!==y.alternate&&d.delete(null===y.key?p:y.key),u=o(y,u,p),null===f?c=y:f.sibling=y,f=y);return e&&d.forEach((function(e){return t(i,e)})),c}return function(e,r,o,l){var s=\"object\"==typeof o&&null!==o&&o.type===d&&null===o.key;s&&(o=o.props.children);var p=\"object\"==typeof o&&null!==o;if(p)switch(o.$$typeof){case c:e:{for(p=o.key,s=r;null!==s;){if(s.key===p){if(7===s.tag?o.type===d:s.elementType===o.type){n(e,s.sibling),(r=i(s,o.type===d?o.props.children:o.props)).ref=en(e,s,o),r.return=e,e=r;break e}n(e,s);break}t(e,s),s=s.sibling}o.type===d?((r=so(o.props.children,e.mode,l,o.key)).return=e,e=r):((l=lo(o.type,o.key,o.props,null,e.mode,l)).ref=en(e,r,o),l.return=e,e=l)}return u(e);case f:e:{for(s=o.key;null!==r;){if(r.key===s){if(4===r.tag&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),(r=i(r,o.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=fo(o,e.mode,l)).return=e,e=r}return u(e)}if(\"string\"==typeof o||\"number\"==typeof o)return o=\"\"+o,null!==r&&6===r.tag?(n(e,r.sibling),(r=i(r,o)).return=e,e=r):(n(e,r),(r=co(o,e.mode,l)).return=e,e=r),u(e);if(Zt(o))return y(e,r,o,l);if(S(o))return _(e,r,o,l);if(p&&tn(e,o),void 0===o&&!s)switch(e.tag){case 1:case 0:throw e=e.type,Error(a(152,e.displayName||e.name||\"Component\"))}return n(e,r)}}var rn=nn(!0),on=nn(!1),un={},an={current:un},ln={current:un},sn={current:un};function cn(e){if(e===un)throw Error(a(174));return e}function fn(e,t){Ie(sn,t),Ie(ln,e),Ie(an,un),t=P(t),Pe(an),Ie(an,t)}function dn(e){Pe(an),Pe(ln),Pe(sn)}function pn(e){var t=cn(sn.current),n=cn(an.current);n!==(t=I(n,e.type,t))&&(Ie(ln,e),Ie(an,t))}function hn(e){ln.current===e&&(Pe(an),Pe(ln))}var vn={current:0};function mn(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||ye(n)||_e(n)))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.effectTag))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}function gn(e,t){return{responder:e,props:t}}var yn=l.ReactCurrentDispatcher,_n=l.ReactCurrentBatchConfig,bn=0,wn=null,En=null,Dn=null,Sn=null,Cn=null,kn=null,Tn=0,xn=null,An=0,On=!1,Pn=null,In=0;function Nn(){throw Error(a(321))}function Mn(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!_t(e[n],t[n]))return!1;return!0}function Rn(e,t,n,r,i,o){if(bn=o,wn=t,Dn=null!==e?e.memoizedState:null,yn.current=null===Dn?er:tr,t=n(r,i),On){do{On=!1,In+=1,Dn=null!==e?e.memoizedState:null,kn=Sn,xn=Cn=En=null,yn.current=tr,t=n(r,i)}while(On);Pn=null,In=0}if(yn.current=Zn,(e=wn).memoizedState=Sn,e.expirationTime=Tn,e.updateQueue=xn,e.effectTag|=An,e=null!==En&&null!==En.next,bn=0,kn=Cn=Sn=Dn=En=wn=null,Tn=0,xn=null,An=0,e)throw Error(a(300));return t}function Fn(){yn.current=Zn,bn=0,kn=Cn=Sn=Dn=En=wn=null,Tn=0,xn=null,An=0,On=!1,Pn=null,In=0}function Ln(){var e={memoizedState:null,baseState:null,queue:null,baseUpdate:null,next:null};return null===Cn?Sn=Cn=e:Cn=Cn.next=e,Cn}function Bn(){if(null!==kn)kn=(Cn=kn).next,Dn=null!==(En=Dn)?En.next:null;else{if(null===Dn)throw Error(a(310));var e={memoizedState:(En=Dn).memoizedState,baseState:En.baseState,queue:En.queue,baseUpdate:En.baseUpdate,next:null};Cn=null===Cn?Sn=e:Cn.next=e,Dn=En.next}return Cn}function jn(e,t){return\"function\"==typeof t?t(e):t}function Un(e){var t=Bn(),n=t.queue;if(null===n)throw Error(a(311));if(n.lastRenderedReducer=e,0<In){var r=n.dispatch;if(null!==Pn){var i=Pn.get(n);if(void 0!==i){Pn.delete(n);var o=t.memoizedState;do{o=e(o,i.action),i=i.next}while(null!==i);return _t(o,t.memoizedState)||(dr=!0),t.memoizedState=o,t.baseUpdate===n.last&&(t.baseState=o),n.lastRenderedState=o,[o,r]}}return[t.memoizedState,r]}r=n.last;var u=t.baseUpdate;if(o=t.baseState,null!==u?(null!==r&&(r.next=null),r=u.next):r=null!==r?r.next:null,null!==r){var l=i=null,s=r,c=!1;do{var f=s.expirationTime;f<bn?(c||(c=!0,l=u,i=o),f>Tn&&zi(Tn=f)):(Ui(f,s.suspenseConfig),o=s.eagerReducer===e?s.eagerState:e(o,s.action)),u=s,s=s.next}while(null!==s&&s!==r);c||(l=u,i=o),_t(o,t.memoizedState)||(dr=!0),t.memoizedState=o,t.baseUpdate=l,t.baseState=i,n.lastRenderedState=o}return[t.memoizedState,n.dispatch]}function zn(e){var t=Ln();return\"function\"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={last:null,dispatch:null,lastRenderedReducer:jn,lastRenderedState:e}).dispatch=Jn.bind(null,wn,e),[t.memoizedState,e]}function Wn(e){return Un(jn)}function Hn(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===xn?(xn={lastEffect:null}).lastEffect=e.next=e:null===(t=xn.lastEffect)?xn.lastEffect=e.next=e:(n=t.next,t.next=e,e.next=n,xn.lastEffect=e),e}function Vn(e,t,n,r){var i=Ln();An|=e,i.memoizedState=Hn(t,n,void 0,void 0===r?null:r)}function qn(e,t,n,r){var i=Bn();r=void 0===r?null:r;var o=void 0;if(null!==En){var u=En.memoizedState;if(o=u.destroy,null!==r&&Mn(r,u.deps))return void Hn(0,n,o,r)}An|=e,i.memoizedState=Hn(t,n,o,r)}function Gn(e,t){return Vn(516,192,e,t)}function $n(e,t){return qn(516,192,e,t)}function Yn(e,t){return\"function\"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Kn(){}function Xn(e,t){return Ln().memoizedState=[e,void 0===t?null:t],e}function Qn(e,t){var n=Bn();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Mn(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Jn(e,t,n){if(!(25>In))throw Error(a(301));var r=e.alternate;if(e===wn||null!==r&&r===wn)if(On=!0,e={expirationTime:bn,suspenseConfig:null,action:n,eagerReducer:null,eagerState:null,next:null},null===Pn&&(Pn=new Map),void 0===(n=Pn.get(t)))Pn.set(t,e);else{for(t=n;null!==t.next;)t=t.next;t.next=e}else{var i=xi(),o=qt.suspense;o={expirationTime:i=Ai(i,e,o),suspenseConfig:o,action:n,eagerReducer:null,eagerState:null,next:null};var u=t.last;if(null===u)o.next=o;else{var l=u.next;null!==l&&(o.next=l),u.next=o}if(t.last=o,0===e.expirationTime&&(null===r||0===r.expirationTime)&&null!==(r=t.lastRenderedReducer))try{var s=t.lastRenderedState,c=r(s,n);if(o.eagerReducer=r,o.eagerState=c,_t(c,s))return}catch(e){}Oi(e,i)}}var Zn={readContext:It,useCallback:Nn,useContext:Nn,useEffect:Nn,useImperativeHandle:Nn,useLayoutEffect:Nn,useMemo:Nn,useReducer:Nn,useRef:Nn,useState:Nn,useDebugValue:Nn,useResponder:Nn,useDeferredValue:Nn,useTransition:Nn},er={readContext:It,useCallback:Xn,useContext:It,useEffect:Gn,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Vn(4,36,Yn.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Vn(4,36,e,t)},useMemo:function(e,t){var n=Ln();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ln();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={last:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Jn.bind(null,wn,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Ln().memoizedState=e},useState:zn,useDebugValue:Kn,useResponder:gn,useDeferredValue:function(e,t){var n=zn(e),r=n[0],i=n[1];return Gn((function(){u.unstable_next((function(){var n=_n.suspense;_n.suspense=void 0===t?null:t;try{i(e)}finally{_n.suspense=n}}))}),[e,t]),r},useTransition:function(e){var t=zn(!1),n=t[0],r=t[1];return[Xn((function(t){r(!0),u.unstable_next((function(){var n=_n.suspense;_n.suspense=void 0===e?null:e;try{r(!1),t()}finally{_n.suspense=n}}))}),[e,n]),n]}},tr={readContext:It,useCallback:Qn,useContext:It,useEffect:$n,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,qn(4,36,Yn.bind(null,t,e),n)},useLayoutEffect:function(e,t){return qn(4,36,e,t)},useMemo:function(e,t){var n=Bn();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Mn(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)},useReducer:Un,useRef:function(){return Bn().memoizedState},useState:Wn,useDebugValue:Kn,useResponder:gn,useDeferredValue:function(e,t){var n=Wn(),r=n[0],i=n[1];return $n((function(){u.unstable_next((function(){var n=_n.suspense;_n.suspense=void 0===t?null:t;try{i(e)}finally{_n.suspense=n}}))}),[e,t]),r},useTransition:function(e){var t=Wn(),n=t[0],r=t[1];return[Qn((function(t){r(!0),u.unstable_next((function(){var n=_n.suspense;_n.suspense=void 0===e?null:e;try{r(!1),t()}finally{_n.suspense=n}}))}),[e,n]),n]}},nr=null,rr=null,ir=!1;function or(e,t){var n=oo(5,null,null,0);n.elementType=\"DELETED\",n.type=\"DELETED\",n.stateNode=t,n.return=e,n.effectTag=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function ur(e,t){switch(e.tag){case 5:return null!==(t=me(t,e.type,e.pendingProps))&&(e.stateNode=t,!0);case 6:return null!==(t=ge(t,e.pendingProps))&&(e.stateNode=t,!0);case 13:default:return!1}}function ar(e){if(ir){var t=rr;if(t){var n=t;if(!ur(e,t)){if(!(t=be(n))||!ur(e,t))return e.effectTag=-1025&e.effectTag|2,ir=!1,void(nr=e);or(nr,n)}nr=e,rr=we(t)}else e.effectTag=-1025&e.effectTag|2,ir=!1,nr=e}}function lr(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;nr=e}function sr(e){if(!Y||e!==nr)return!1;if(!ir)return lr(e),ir=!0,!1;var t=e.type;if(5!==e.tag||\"head\"!==t&&\"body\"!==t&&!j(t,e.memoizedProps))for(t=rr;t;)or(e,t),t=be(t);if(lr(e),13===e.tag){if(!Y)throw Error(a(316));if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));rr=Se(e)}else rr=nr?be(e.stateNode):null;return!0}function cr(){Y&&(rr=nr=null,ir=!1)}var fr=l.ReactCurrentOwner,dr=!1;function pr(e,t,n,r){t.child=null===e?on(t,null,n,r):rn(t,e.child,n,r)}function hr(e,t,n,r,i){n=n.render;var o=t.ref;return Pt(t,i),r=Rn(e,t,n,r,o,i),null===e||dr?(t.effectTag|=1,pr(e,t,r,i),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=i&&(e.expirationTime=0),Pr(e,t,i))}function vr(e,t,n,r,i,o){if(null===e){var u=n.type;return\"function\"!=typeof u||uo(u)||void 0!==u.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=lo(n.type,null,r,null,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=u,mr(e,t,u,r,i,o))}return u=e.child,i<o&&(i=u.memoizedProps,(n=null!==(n=n.compare)?n:wt)(i,r)&&e.ref===t.ref)?Pr(e,t,o):(t.effectTag|=1,(e=ao(u,r)).ref=t.ref,e.return=t,t.child=e)}function mr(e,t,n,r,i,o){return null!==e&&wt(e.memoizedProps,r)&&e.ref===t.ref&&(dr=!1,i<o)?Pr(e,t,o):yr(e,t,n,r,o)}function gr(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.effectTag|=128)}function yr(e,t,n,r,i){var o=Be(n)?Fe:Me.current;return o=Le(t,o),Pt(t,i),n=Rn(e,t,n,r,o,i),null===e||dr?(t.effectTag|=1,pr(e,t,n,i),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=i&&(e.expirationTime=0),Pr(e,t,i))}function _r(e,t,n,r,i){if(Be(n)){var o=!0;He(t)}else o=!1;if(Pt(t,i),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),Xt(t,n,r),Jt(t,n,r,i),r=!0;else if(null===e){var u=t.stateNode,a=t.memoizedProps;u.props=a;var l=u.context,s=n.contextType;\"object\"==typeof s&&null!==s?s=It(s):s=Le(t,s=Be(n)?Fe:Me.current);var c=n.getDerivedStateFromProps,f=\"function\"==typeof c||\"function\"==typeof u.getSnapshotBeforeUpdate;f||\"function\"!=typeof u.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof u.componentWillReceiveProps||(a!==r||l!==s)&&Qt(t,u,r,s),Nt=!1;var d=t.memoizedState;l=u.state=d;var p=t.updateQueue;null!==p&&(Wt(t,p,r,u,i),l=t.memoizedState),a!==r||d!==l||Re.current||Nt?(\"function\"==typeof c&&($t(t,n,c,r),l=t.memoizedState),(a=Nt||Kt(t,n,a,r,d,l,s))?(f||\"function\"!=typeof u.UNSAFE_componentWillMount&&\"function\"!=typeof u.componentWillMount||(\"function\"==typeof u.componentWillMount&&u.componentWillMount(),\"function\"==typeof u.UNSAFE_componentWillMount&&u.UNSAFE_componentWillMount()),\"function\"==typeof u.componentDidMount&&(t.effectTag|=4)):(\"function\"==typeof u.componentDidMount&&(t.effectTag|=4),t.memoizedProps=r,t.memoizedState=l),u.props=r,u.state=l,u.context=s,r=a):(\"function\"==typeof u.componentDidMount&&(t.effectTag|=4),r=!1)}else u=t.stateNode,a=t.memoizedProps,u.props=t.type===t.elementType?a:Et(t.type,a),l=u.context,\"object\"==typeof(s=n.contextType)&&null!==s?s=It(s):s=Le(t,s=Be(n)?Fe:Me.current),(f=\"function\"==typeof(c=n.getDerivedStateFromProps)||\"function\"==typeof u.getSnapshotBeforeUpdate)||\"function\"!=typeof u.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof u.componentWillReceiveProps||(a!==r||l!==s)&&Qt(t,u,r,s),Nt=!1,l=t.memoizedState,d=u.state=l,null!==(p=t.updateQueue)&&(Wt(t,p,r,u,i),d=t.memoizedState),a!==r||l!==d||Re.current||Nt?(\"function\"==typeof c&&($t(t,n,c,r),d=t.memoizedState),(c=Nt||Kt(t,n,a,r,l,d,s))?(f||\"function\"!=typeof u.UNSAFE_componentWillUpdate&&\"function\"!=typeof u.componentWillUpdate||(\"function\"==typeof u.componentWillUpdate&&u.componentWillUpdate(r,d,s),\"function\"==typeof u.UNSAFE_componentWillUpdate&&u.UNSAFE_componentWillUpdate(r,d,s)),\"function\"==typeof u.componentDidUpdate&&(t.effectTag|=4),\"function\"==typeof u.getSnapshotBeforeUpdate&&(t.effectTag|=256)):(\"function\"!=typeof u.componentDidUpdate||a===e.memoizedProps&&l===e.memoizedState||(t.effectTag|=4),\"function\"!=typeof u.getSnapshotBeforeUpdate||a===e.memoizedProps&&l===e.memoizedState||(t.effectTag|=256),t.memoizedProps=r,t.memoizedState=d),u.props=r,u.state=d,u.context=s,r=c):(\"function\"!=typeof u.componentDidUpdate||a===e.memoizedProps&&l===e.memoizedState||(t.effectTag|=4),\"function\"!=typeof u.getSnapshotBeforeUpdate||a===e.memoizedProps&&l===e.memoizedState||(t.effectTag|=256),r=!1);return br(e,t,n,r,o,i)}function br(e,t,n,r,i,o){gr(e,t);var u=0!=(64&t.effectTag);if(!r&&!u)return i&&Ve(t,n,!1),Pr(e,t,o);r=t.stateNode,fr.current=t;var a=u&&\"function\"!=typeof n.getDerivedStateFromError?null:r.render();return t.effectTag|=1,null!==e&&u?(t.child=rn(t,e.child,null,o),t.child=rn(t,null,a,o)):pr(e,t,a,o),t.memoizedState=r.state,i&&Ve(t,n,!0),t.child}function wr(e){var t=e.stateNode;t.pendingContext?ze(0,t.pendingContext,t.pendingContext!==t.context):t.context&&ze(0,t.context,!1),fn(e,t.containerInfo)}var Er,Dr,Sr,Cr,kr={dehydrated:null,retryTime:0};function Tr(e,t,n){var r,i=t.mode,o=t.pendingProps,u=vn.current,a=!1;if((r=0!=(64&t.effectTag))||(r=0!=(2&u)&&(null===e||null!==e.memoizedState)),r?(a=!0,t.effectTag&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(u|=1),Ie(vn,1&u),null===e){if(void 0!==o.fallback&&ar(t),a){if(a=o.fallback,(o=so(null,i,0,null)).return=t,0==(2&t.mode))for(e=null!==t.memoizedState?t.child.child:t.child,o.child=e;null!==e;)e.return=o,e=e.sibling;return(n=so(a,i,n,null)).return=t,o.sibling=n,t.memoizedState=kr,t.child=o,n}return i=o.children,t.memoizedState=null,t.child=on(t,null,i,n)}if(null!==e.memoizedState){if(i=(e=e.child).sibling,a){if(o=o.fallback,(n=ao(e,e.pendingProps)).return=t,0==(2&t.mode)&&(a=null!==t.memoizedState?t.child.child:t.child)!==e.child)for(n.child=a;null!==a;)a.return=n,a=a.sibling;return(i=ao(i,o,i.expirationTime)).return=t,n.sibling=i,n.childExpirationTime=0,t.memoizedState=kr,t.child=n,i}return n=rn(t,e.child,o.children,n),t.memoizedState=null,t.child=n}if(e=e.child,a){if(a=o.fallback,(o=so(null,i,0,null)).return=t,o.child=e,null!==e&&(e.return=o),0==(2&t.mode))for(e=null!==t.memoizedState?t.child.child:t.child,o.child=e;null!==e;)e.return=o,e=e.sibling;return(n=so(a,i,n,null)).return=t,o.sibling=n,n.effectTag|=2,o.childExpirationTime=0,t.memoizedState=kr,t.child=o,n}return t.memoizedState=null,t.child=rn(t,e,o.children,n)}function xr(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t),Ot(e.return,t)}function Ar(e,t,n,r,i,o){var u=e.memoizedState;null===u?e.memoizedState={isBackwards:t,rendering:null,last:r,tail:n,tailExpiration:0,tailMode:i,lastEffect:o}:(u.isBackwards=t,u.rendering=null,u.last=r,u.tail=n,u.tailExpiration=0,u.tailMode=i,u.lastEffect=o)}function Or(e,t,n){var r=t.pendingProps,i=r.revealOrder,o=r.tail;if(pr(e,t,r.children,n),0!=(2&(r=vn.current)))r=1&r|2,t.effectTag|=64;else{if(null!==e&&0!=(64&e.effectTag))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&xr(e,n);else if(19===e.tag)xr(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Ie(vn,r),0==(2&t.mode))t.memoizedState=null;else switch(i){case\"forwards\":for(n=t.child,i=null;null!==n;)null!==(e=n.alternate)&&null===mn(e)&&(i=n),n=n.sibling;null===(n=i)?(i=t.child,t.child=null):(i=n.sibling,n.sibling=null),Ar(t,!1,i,n,o,t.lastEffect);break;case\"backwards\":for(n=null,i=t.child,t.child=null;null!==i;){if(null!==(e=i.alternate)&&null===mn(e)){t.child=i;break}e=i.sibling,i.sibling=n,n=i,i=e}Ar(t,!0,n,null,o,t.lastEffect);break;case\"together\":Ar(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function Pr(e,t,n){null!==e&&(t.dependencies=e.dependencies);var r=t.expirationTime;if(0!==r&&zi(r),t.childExpirationTime<n)return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=ao(e=t.child,e.pendingProps,e.expirationTime),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=ao(e,e.pendingProps,e.expirationTime)).return=t;n.sibling=null}return t.child}function Ir(e){e.effectTag|=4}if(G)Er=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)F(e,n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Dr=function(){},Sr=function(e,t,n,r,i){if((e=e.memoizedProps)!==r){var o=t.stateNode,u=cn(an.current);n=B(o,n,e,r,i,u),(t.updateQueue=n)&&Ir(t)}},Cr=function(e,t,n,r){n!==r&&Ir(t)};else if($){Er=function(e,t,n,r){for(var i=t.child;null!==i;){if(5===i.tag){var o=i.stateNode;n&&r&&(o=he(o,i.type,i.memoizedProps,i)),F(e,o)}else if(6===i.tag)o=i.stateNode,n&&r&&(o=ve(o,i.memoizedProps,i)),F(e,o);else if(4!==i.tag){if(13===i.tag&&0!=(4&i.effectTag)&&(o=null!==i.memoizedState)){var u=i.child;if(null!==u&&(null!==u.child&&(u.child.return=u,Er(e,u,!0,o)),null!==(o=u.sibling))){o.return=i,i=o;continue}}if(null!==i.child){i.child.return=i,i=i.child;continue}}if(i===t)break;for(;null===i.sibling;){if(null===i.return||i.return===t)return;i=i.return}i.sibling.return=i.return,i=i.sibling}};var Nr=function(e,t,n,r){for(var i=t.child;null!==i;){if(5===i.tag){var o=i.stateNode;n&&r&&(o=he(o,i.type,i.memoizedProps,i)),fe(e,o)}else if(6===i.tag)o=i.stateNode,n&&r&&(o=ve(o,i.memoizedProps,i)),fe(e,o);else if(4!==i.tag){if(13===i.tag&&0!=(4&i.effectTag)&&(o=null!==i.memoizedState)){var u=i.child;if(null!==u&&(null!==u.child&&(u.child.return=u,Nr(e,u,!0,o)),null!==(o=u.sibling))){o.return=i,i=o;continue}}if(null!==i.child){i.child.return=i,i=i.child;continue}}if(i===t)break;for(;null===i.sibling;){if(null===i.return||i.return===t)return;i=i.return}i.sibling.return=i.return,i=i.sibling}};Dr=function(e){var t=e.stateNode;if(null!==e.firstEffect){var n=t.containerInfo,r=ce(n);Nr(r,e,!1,!1),t.pendingChildren=r,Ir(e),de(n,r)}},Sr=function(e,t,n,r,i){var o=e.stateNode,u=e.memoizedProps;if((e=null===t.firstEffect)&&u===r)t.stateNode=o;else{var a=t.stateNode,l=cn(an.current),s=null;u!==r&&(s=B(a,n,u,r,i,l)),e&&null===s?t.stateNode=o:(o=se(o,s,n,u,r,t,e,a),L(o,n,r,i,l)&&Ir(t),t.stateNode=o,e?Ir(t):Er(o,t,!1,!1))}},Cr=function(e,t,n,r){n!==r&&(e=cn(sn.current),n=cn(an.current),t.stateNode=z(r,e,n,t),Ir(t))}}else Dr=function(){},Sr=function(){},Cr=function(){};function Mr(e,t){switch(e.tailMode){case\"hidden\":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case\"collapsed\":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Rr(e){switch(e.tag){case 1:Be(e.type)&&je();var t=e.effectTag;return 4096&t?(e.effectTag=-4097&t|64,e):null;case 3:if(dn(),Ue(),0!=(64&(t=e.effectTag)))throw Error(a(285));return e.effectTag=-4097&t|64,e;case 5:return hn(e),null;case 13:return Pe(vn),4096&(t=e.effectTag)?(e.effectTag=-4097&t|64,e):null;case 19:return Pe(vn),null;case 4:return dn(),null;case 10:return At(e),null;default:return null}}function Fr(e,t){return{value:e,source:t,stack:xe(t)}}var Lr=\"function\"==typeof WeakSet?WeakSet:Set;function Br(e,t){var n=t.source,r=t.stack;null===r&&null!==n&&(r=xe(n)),null!==n&&C(n.type),t=t.value,null!==e&&1===e.tag&&C(e.type);try{console.error(t)}catch(e){setTimeout((function(){throw e}))}}function jr(e){var t=e.ref;if(null!==t)if(\"function\"==typeof t)try{t(null)}catch(t){Zi(e,t)}else t.current=null}function Ur(e,t){switch(t.tag){case 0:case 11:case 15:zr(2,0,t);break;case 1:if(256&t.effectTag&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Et(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}break;case 3:case 5:case 6:case 4:case 17:break;default:throw Error(a(163))}}function zr(e,t,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var r=n=n.next;do{if(0!=(r.tag&e)){var i=r.destroy;r.destroy=void 0,void 0!==i&&i()}0!=(r.tag&t)&&(i=r.create,r.destroy=i()),r=r.next}while(r!==n)}}function Wr(e,t,n){switch(\"function\"==typeof ro&&ro(t),t.tag){case 0:case 11:case 14:case 15:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var r=e.next;dt(97<n?97:n,(function(){var e=r;do{var n=e.destroy;if(void 0!==n){var i=t;try{n()}catch(e){Zi(i,e)}}e=e.next}while(e!==r)}))}break;case 1:jr(t),\"function\"==typeof(n=t.stateNode).componentWillUnmount&&function(e,t){try{t.props=e.memoizedProps,t.state=e.memoizedState,t.componentWillUnmount()}catch(t){Zi(e,t)}}(t,n);break;case 5:jr(t);break;case 4:G?$r(e,t,n):$&&function(e){if($){e=e.stateNode.containerInfo;var t=ce(e);pe(e,t)}}(t)}}function Hr(e,t,n){for(var r=t;;)if(Wr(e,r,n),null===r.child||G&&4===r.tag){if(r===t)break;for(;null===r.sibling;){if(null===r.return||r.return===t)return;r=r.return}r.sibling.return=r.return,r=r.sibling}else r.child.return=r,r=r.child}function Vr(e){var t=e.alternate;e.return=null,e.child=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.alternate=null,e.firstEffect=null,e.lastEffect=null,e.pendingProps=null,e.memoizedProps=null,null!==t&&Vr(t)}function qr(e){return 5===e.tag||3===e.tag||4===e.tag}function Gr(e){if(G){e:{for(var t=e.return;null!==t;){if(qr(t)){var n=t;break e}t=t.return}throw Error(a(160))}switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(a(161))}16&n.effectTag&&(ie(t),n.effectTag&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||qr(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.effectTag)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.effectTag)){n=n.stateNode;break e}}for(var i=e;;){var o=5===i.tag||6===i.tag;if(o)o=o?i.stateNode:i.stateNode.instance,n?r?te(t,o,n):ee(t,o,n):r?X(t,o):K(t,o);else if(4!==i.tag&&null!==i.child){i.child.return=i,i=i.child;continue}if(i===e)break;for(;null===i.sibling;){if(null===i.return||i.return===e)return;i=i.return}i.sibling.return=i.return,i=i.sibling}}}function $r(e,t,n){for(var r,i,o=t,u=!1;;){if(!u){u=o.return;e:for(;;){if(null===u)throw Error(a(160));switch(r=u.stateNode,u.tag){case 5:i=!1;break e;case 3:case 4:r=r.containerInfo,i=!0;break e}u=u.return}u=!0}if(5===o.tag||6===o.tag)Hr(e,o,n),i?re(r,o.stateNode):ne(r,o.stateNode);else if(4===o.tag){if(null!==o.child){r=o.stateNode.containerInfo,i=!0,o.child.return=o,o=o.child;continue}}else if(Wr(e,o,n),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(u=!1)}o.sibling.return=o.return,o=o.sibling}}function Yr(e,t){if(G)switch(t.tag){case 0:case 11:case 14:case 15:zr(4,8,t);break;case 1:break;case 5:var n=t.stateNode;if(null!=n){var r=t.memoizedProps;e=null!==e?e.memoizedProps:r;var i=t.type,o=t.updateQueue;t.updateQueue=null,null!==o&&Z(n,o,i,e,r,t)}break;case 6:if(null===t.stateNode)throw Error(a(162));n=t.memoizedProps,Q(t.stateNode,null!==e?e.memoizedProps:n,n);break;case 3:Y&&((t=t.stateNode).hydrate&&(t.hydrate=!1,Ce(t.containerInfo)));break;case 12:break;case 13:Kr(t),Xr(t);break;case 19:Xr(t);break;case 17:case 20:case 21:break;default:throw Error(a(163))}else{switch(t.tag){case 0:case 11:case 14:case 15:return void zr(4,8,t);case 12:return;case 13:return Kr(t),void Xr(t);case 19:return void Xr(t);case 3:Y&&((n=t.stateNode).hydrate&&(n.hydrate=!1,Ce(n.containerInfo)))}e:if($)switch(t.tag){case 1:case 5:case 6:case 20:break e;case 3:case 4:t=t.stateNode,pe(t.containerInfo,t.pendingChildren);break e;default:throw Error(a(163))}}}function Kr(e){var t=e;if(null===e.memoizedState)var n=!1;else n=!0,t=e.child,mi=st();if(G&&null!==t)e:if(e=t,G)for(t=e;;){if(5===t.tag){var r=t.stateNode;n?oe(r):ae(t.stateNode,t.memoizedProps)}else if(6===t.tag)r=t.stateNode,n?ue(r):le(r,t.memoizedProps);else{if(13===t.tag&&null!==t.memoizedState&&null===t.memoizedState.dehydrated){(r=t.child.sibling).return=t,t=r;continue}if(null!==t.child){t.child.return=t,t=t.child;continue}}if(t===e)break e;for(;null===t.sibling;){if(null===t.return||t.return===e)break e;t=t.return}t.sibling.return=t.return,t=t.sibling}}function Xr(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Lr),t.forEach((function(t){var r=to.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}var Qr=\"function\"==typeof WeakMap?WeakMap:Map;function Jr(e,t,n){(n=Ft(n,null)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){yi||(yi=!0,_i=r),Br(e,t)},n}function Zr(e,t,n){(n=Ft(n,null)).tag=3;var r=e.type.getDerivedStateFromError;if(\"function\"==typeof r){var i=t.value;n.payload=function(){return Br(e,t),r(i)}}var o=e.stateNode;return null!==o&&\"function\"==typeof o.componentDidCatch&&(n.callback=function(){\"function\"!=typeof r&&(null===bi?bi=new Set([this]):bi.add(this),Br(e,t));var n=t.stack;this.componentDidCatch(t.value,{componentStack:null!==n?n:\"\"})}),n}var ei,ti=Math.ceil,ni=l.ReactCurrentDispatcher,ri=l.ReactCurrentOwner,ii=16,oi=0,ui=null,ai=null,li=0,si=0,ci=null,fi=1073741823,di=1073741823,pi=null,hi=0,vi=!1,mi=0,gi=null,yi=!1,_i=null,bi=null,wi=!1,Ei=null,Di=90,Si=null,Ci=0,ki=null,Ti=0;function xi(){return 0!=(48&oi)?1073741821-(st()/10|0):0!==Ti?Ti:Ti=1073741821-(st()/10|0)}function Ai(e,t,n){if(0==(2&(t=t.mode)))return 1073741823;var r=ct();if(0==(4&t))return 99===r?1073741823:1073741822;if(0!=(oi&ii))return li;if(null!==n)e=yt(e,0|n.timeoutMs||5e3,250);else switch(r){case 99:e=1073741823;break;case 98:e=yt(e,150,100);break;case 97:case 96:e=yt(e,5e3,250);break;case 95:e=2;break;default:throw Error(a(326))}return null!==ui&&e===li&&--e,e}function Oi(e,t){if(50<Ci)throw Ci=0,ki=null,Error(a(185));if(null!==(e=Pi(e,t))){var n=ct();1073741823===t?0!=(8&oi)&&0==(48&oi)?Ri(e):(Ni(e),0===oi&&vt()):Ni(e),0==(4&oi)||98!==n&&99!==n||(null===Si?Si=new Map([[e,t]]):(void 0===(n=Si.get(e))||n>t)&&Si.set(e,t))}}function Pi(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t);var r=e.return,i=null;if(null===r&&3===e.tag)i=e.stateNode;else for(;null!==r;){if(n=r.alternate,r.childExpirationTime<t&&(r.childExpirationTime=t),null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t),null===r.return&&3===r.tag){i=r.stateNode;break}r=r.return}return null!==i&&(ui===i&&(zi(t),4===si&&vo(i,li)),mo(i,t)),i}function Ii(e){var t=e.lastExpiredTime;return 0!==t?t:ho(e,t=e.firstPendingTime)?(t=e.lastPingedTime)>(e=e.nextKnownPendingLevel)?t:e:t}function Ni(e){if(0!==e.lastExpiredTime)e.callbackExpirationTime=1073741823,e.callbackPriority=99,e.callbackNode=ht(Ri.bind(null,e));else{var t=Ii(e),n=e.callbackNode;if(0===t)null!==n&&(e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90);else{var r=xi();if(1073741823===t?r=99:1===t||2===t?r=95:r=0>=(r=10*(1073741821-t)-10*(1073741821-r))?99:250>=r?98:5250>=r?97:95,null!==n){var i=e.callbackPriority;if(e.callbackExpirationTime===t&&i>=r)return;n!==rt&&$e(n)}e.callbackExpirationTime=t,e.callbackPriority=r,t=1073741823===t?ht(Ri.bind(null,e)):pt(r,Mi.bind(null,e),{timeout:10*(1073741821-t)-st()}),e.callbackNode=t}}}function Mi(e,t){if(Ti=0,t)return go(e,t=xi()),Ni(e),null;var n=Ii(e);if(0!==n){if(t=e.callbackNode,0!=(48&oi))throw Error(a(327));if(Xi(),e===ui&&n===li||Li(e,n),null!==ai){var r=oi;oi|=ii;for(var i=ji();;)try{Hi();break}catch(t){Bi(e,t)}if(Tt(),oi=r,ni.current=i,1===si)throw t=ci,Li(e,n),vo(e,n),Ni(e),t;if(null===ai)switch(i=e.finishedWork=e.current.alternate,e.finishedExpirationTime=n,r=si,ui=null,r){case 0:case 1:throw Error(a(345));case 2:go(e,2<n?2:n);break;case 3:if(vo(e,n),n===(r=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=Gi(i)),1073741823===fi&&10<(i=mi+500-st())){if(vi){var o=e.lastPingedTime;if(0===o||o>=n){e.lastPingedTime=n,Li(e,n);break}}if(0!==(o=Ii(e))&&o!==n)break;if(0!==r&&r!==n){e.lastPingedTime=r;break}e.timeoutHandle=W($i.bind(null,e),i);break}$i(e);break;case 4:if(vo(e,n),n===(r=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=Gi(i)),vi&&(0===(i=e.lastPingedTime)||i>=n)){e.lastPingedTime=n,Li(e,n);break}if(0!==(i=Ii(e))&&i!==n)break;if(0!==r&&r!==n){e.lastPingedTime=r;break}if(1073741823!==di?r=10*(1073741821-di)-st():1073741823===fi?r=0:(r=10*(1073741821-fi)-5e3,0>(r=(i=st())-r)&&(r=0),(n=10*(1073741821-n)-i)<(r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*ti(r/1960))-r)&&(r=n)),10<r){e.timeoutHandle=W($i.bind(null,e),r);break}$i(e);break;case 5:if(1073741823!==fi&&null!==pi){o=fi;var u=pi;if(0>=(r=0|u.busyMinDurationMs)?r=0:(i=0|u.busyDelayMs,r=(o=st()-(10*(1073741821-o)-(0|u.timeoutMs||5e3)))<=i?0:i+r-o),10<r){vo(e,n),e.timeoutHandle=W($i.bind(null,e),r);break}}$i(e);break;default:throw Error(a(329))}if(Ni(e),e.callbackNode===t)return Mi.bind(null,e)}}return null}function Ri(e){var t=e.lastExpiredTime;if(t=0!==t?t:1073741823,e.finishedExpirationTime===t)$i(e);else{if(0!=(48&oi))throw Error(a(327));if(Xi(),e===ui&&t===li||Li(e,t),null!==ai){var n=oi;oi|=ii;for(var r=ji();;)try{Wi();break}catch(t){Bi(e,t)}if(Tt(),oi=n,ni.current=r,1===si)throw n=ci,Li(e,t),vo(e,t),Ni(e),n;if(null!==ai)throw Error(a(261));e.finishedWork=e.current.alternate,e.finishedExpirationTime=t,ui=null,$i(e),Ni(e)}}return null}function Fi(e,t){if(0!=(48&oi))throw Error(a(187));var n=oi;oi|=1;try{return dt(99,e.bind(null,t))}finally{oi=n,vt()}}function Li(e,t){e.finishedWork=null,e.finishedExpirationTime=0;var n=e.timeoutHandle;if(n!==V&&(e.timeoutHandle=V,H(n)),null!==ai)for(n=ai.return;null!==n;){var r=n;switch(r.tag){case 1:var i=r.type.childContextTypes;null!=i&&je();break;case 3:dn(),Ue();break;case 5:hn(r);break;case 4:dn();break;case 13:case 19:Pe(vn);break;case 10:At(r)}n=n.return}ui=e,ai=ao(e.current,null),li=t,si=0,ci=null,di=fi=1073741823,pi=null,hi=0,vi=!1}function Bi(e,t){for(;;){try{if(Tt(),Fn(),null===ai||null===ai.return)return si=1,ci=t,null;e:{var n=e,r=ai.return,i=ai,o=t;if(t=li,i.effectTag|=2048,i.firstEffect=i.lastEffect=null,null!==o&&\"object\"==typeof o&&\"function\"==typeof o.then){var u=o,a=0!=(1&vn.current),l=r;do{var s;if(s=13===l.tag){var c=l.memoizedState;if(null!==c)s=null!==c.dehydrated;else{var f=l.memoizedProps;s=void 0!==f.fallback&&(!0!==f.unstable_avoidThisFallback||!a)}}if(s){var d=l.updateQueue;if(null===d){var p=new Set;p.add(u),l.updateQueue=p}else d.add(u);if(0==(2&l.mode)){if(l.effectTag|=64,i.effectTag&=-2981,1===i.tag)if(null===i.alternate)i.tag=17;else{var h=Ft(1073741823,null);h.tag=2,Bt(i,h)}i.expirationTime=1073741823;break e}o=void 0,i=t;var v=n.pingCache;if(null===v?(v=n.pingCache=new Qr,o=new Set,v.set(u,o)):void 0===(o=v.get(u))&&(o=new Set,v.set(u,o)),!o.has(i)){o.add(i);var m=eo.bind(null,n,u,i);u.then(m,m)}l.effectTag|=4096,l.expirationTime=t;break e}l=l.return}while(null!==l);o=Error((C(i.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\"+xe(i))}5!==si&&(si=2),o=Fr(o,i),l=r;do{switch(l.tag){case 3:u=o,l.effectTag|=4096,l.expirationTime=t,jt(l,Jr(l,u,t));break e;case 1:u=o;var g=l.type,y=l.stateNode;if(0==(64&l.effectTag)&&(\"function\"==typeof g.getDerivedStateFromError||null!==y&&\"function\"==typeof y.componentDidCatch&&(null===bi||!bi.has(y)))){l.effectTag|=4096,l.expirationTime=t,jt(l,Zr(l,u,t));break e}}l=l.return}while(null!==l)}ai=qi(ai)}catch(e){t=e;continue}break}}function ji(){var e=ni.current;return ni.current=Zn,null===e?Zn:e}function Ui(e,t){e<fi&&2<e&&(fi=e),null!==t&&e<di&&2<e&&(di=e,pi=t)}function zi(e){e>hi&&(hi=e)}function Wi(){for(;null!==ai;)ai=Vi(ai)}function Hi(){for(;null!==ai&&!Ye();)ai=Vi(ai)}function Vi(e){var t=ei(e.alternate,e,li);return e.memoizedProps=e.pendingProps,null===t&&(t=qi(e)),ri.current=null,t}function qi(e){ai=e;do{var t=ai.alternate;if(e=ai.return,0==(2048&ai.effectTag)){e:{var n=t,r=li,i=(t=ai).pendingProps;switch(t.tag){case 2:case 16:break;case 15:case 0:break;case 1:Be(t.type)&&je();break;case 3:dn(),Ue(),(i=t.stateNode).pendingContext&&(i.context=i.pendingContext,i.pendingContext=null),(null===n||null===n.child)&&sr(t)&&Ir(t),Dr(t);break;case 5:hn(t);var o=cn(sn.current);if(r=t.type,null!==n&&null!=t.stateNode)Sr(n,t,r,i,o),n.ref!==t.ref&&(t.effectTag|=128);else if(i){if(n=cn(an.current),sr(t)){if(i=t,!Y)throw Error(a(175));n=Ee(i.stateNode,i.type,i.memoizedProps,o,n,i),i.updateQueue=n,(n=null!==n)&&Ir(t)}else{var u=R(r,i,o,n,t);Er(u,t,!1,!1),t.stateNode=u,L(u,r,i,o,n)&&Ir(t)}null!==t.ref&&(t.effectTag|=128)}else if(null===t.stateNode)throw Error(a(166));break;case 6:if(n&&null!=t.stateNode)Cr(n,t,n.memoizedProps,i);else{if(\"string\"!=typeof i&&null===t.stateNode)throw Error(a(166));if(n=cn(sn.current),o=cn(an.current),sr(t)){if(n=t,!Y)throw Error(a(176));(n=De(n.stateNode,n.memoizedProps,n))&&Ir(t)}else t.stateNode=z(i,n,o,t)}break;case 11:break;case 13:if(Pe(vn),i=t.memoizedState,0!=(64&t.effectTag)){t.expirationTime=r;break e}i=null!==i,o=!1,null===n?void 0!==t.memoizedProps.fallback&&sr(t):(o=null!==(r=n.memoizedState),i||null===r||null!==(r=n.child.sibling)&&(null!==(u=t.firstEffect)?(t.firstEffect=r,r.nextEffect=u):(t.firstEffect=t.lastEffect=r,r.nextEffect=null),r.effectTag=8)),i&&!o&&0!=(2&t.mode)&&(null===n&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&vn.current)?0===si&&(si=3):(0!==si&&3!==si||(si=4),0!==hi&&null!==ui&&(vo(ui,li),mo(ui,hi)))),$&&i&&(t.effectTag|=4),G&&(i||o)&&(t.effectTag|=4);break;case 7:case 8:case 12:break;case 4:dn(),Dr(t);break;case 10:At(t);break;case 9:case 14:break;case 17:Be(t.type)&&je();break;case 19:if(Pe(vn),null===(i=t.memoizedState))break;if(o=0!=(64&t.effectTag),null===(u=i.rendering)){if(o)Mr(i,!1);else if(0!==si||null!==n&&0!=(64&n.effectTag))for(n=t.child;null!==n;){if(null!==(u=mn(n))){for(t.effectTag|=64,Mr(i,!1),null!==(n=u.updateQueue)&&(t.updateQueue=n,t.effectTag|=4),null===i.lastEffect&&(t.firstEffect=null),t.lastEffect=i.lastEffect,n=r,i=t.child;null!==i;)r=n,(o=i).effectTag&=2,o.nextEffect=null,o.firstEffect=null,o.lastEffect=null,null===(u=o.alternate)?(o.childExpirationTime=0,o.expirationTime=r,o.child=null,o.memoizedProps=null,o.memoizedState=null,o.updateQueue=null,o.dependencies=null):(o.childExpirationTime=u.childExpirationTime,o.expirationTime=u.expirationTime,o.child=u.child,o.memoizedProps=u.memoizedProps,o.memoizedState=u.memoizedState,o.updateQueue=u.updateQueue,r=u.dependencies,o.dependencies=null===r?null:{expirationTime:r.expirationTime,firstContext:r.firstContext,responders:r.responders}),i=i.sibling;Ie(vn,1&vn.current|2),t=t.child;break e}n=n.sibling}}else{if(!o)if(null!==(n=mn(u))){if(t.effectTag|=64,o=!0,null!==(n=n.updateQueue)&&(t.updateQueue=n,t.effectTag|=4),Mr(i,!0),null===i.tail&&\"hidden\"===i.tailMode&&!u.alternate){null!==(t=t.lastEffect=i.lastEffect)&&(t.nextEffect=null);break}}else st()>i.tailExpiration&&1<r&&(t.effectTag|=64,o=!0,Mr(i,!1),t.expirationTime=t.childExpirationTime=r-1);i.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=i.last)?n.sibling=u:t.child=u,i.last=u)}if(null!==i.tail){0===i.tailExpiration&&(i.tailExpiration=st()+500),n=i.tail,i.rendering=n,i.tail=n.sibling,i.lastEffect=t.lastEffect,n.sibling=null,i=vn.current,Ie(vn,i=o?1&i|2:1&i),t=n;break e}break;case 20:case 21:break;default:throw Error(a(156,t.tag))}t=null}if(n=ai,1===li||1!==n.childExpirationTime){for(i=0,o=n.child;null!==o;)(r=o.expirationTime)>i&&(i=r),(u=o.childExpirationTime)>i&&(i=u),o=o.sibling;n.childExpirationTime=i}if(null!==t)return t;null!==e&&0==(2048&e.effectTag)&&(null===e.firstEffect&&(e.firstEffect=ai.firstEffect),null!==ai.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=ai.firstEffect),e.lastEffect=ai.lastEffect),1<ai.effectTag&&(null!==e.lastEffect?e.lastEffect.nextEffect=ai:e.firstEffect=ai,e.lastEffect=ai))}else{if(null!==(t=Rr(ai)))return t.effectTag&=2047,t;null!==e&&(e.firstEffect=e.lastEffect=null,e.effectTag|=2048)}if(null!==(t=ai.sibling))return t;ai=e}while(null!==ai);return 0===si&&(si=5),null}function Gi(e){var t=e.expirationTime;return t>(e=e.childExpirationTime)?t:e}function $i(e){var t=ct();return dt(99,Yi.bind(null,e,t)),null}function Yi(e,t){do{Xi()}while(null!==Ei);if(0!=(48&oi))throw Error(a(327));var n=e.finishedWork,r=e.finishedExpirationTime;if(null===n)return null;if(e.finishedWork=null,e.finishedExpirationTime=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90,e.nextKnownPendingLevel=0;var i=Gi(n);if(e.firstPendingTime=i,r<=e.lastSuspendedTime?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:r<=e.firstSuspendedTime&&(e.firstSuspendedTime=r-1),r<=e.lastPingedTime&&(e.lastPingedTime=0),r<=e.lastExpiredTime&&(e.lastExpiredTime=0),e===ui&&(ai=ui=null,li=0),1<n.effectTag?null!==n.lastEffect?(n.lastEffect.nextEffect=n,i=n.firstEffect):i=n:i=n.firstEffect,null!==i){var o=oi;oi|=32,ri.current=null,N(e.containerInfo),gi=i;do{try{Ki()}catch(e){if(null===gi)throw Error(a(330));Zi(gi,e),gi=gi.nextEffect}}while(null!==gi);gi=i;do{try{for(var u=e,l=t;null!==gi;){var s=gi.effectTag;if(16&s&&G&&ie(gi.stateNode),128&s){var c=gi.alternate;if(null!==c){var f=c.ref;null!==f&&(\"function\"==typeof f?f(null):f.current=null)}}switch(1038&s){case 2:Gr(gi),gi.effectTag&=-3;break;case 6:Gr(gi),gi.effectTag&=-3,Yr(gi.alternate,gi);break;case 1024:gi.effectTag&=-1025;break;case 1028:gi.effectTag&=-1025,Yr(gi.alternate,gi);break;case 4:Yr(gi.alternate,gi);break;case 8:var d=u,p=gi,h=l;G?$r(d,p,h):Hr(d,p,h),Vr(p)}gi=gi.nextEffect}}catch(e){if(null===gi)throw Error(a(330));Zi(gi,e),gi=gi.nextEffect}}while(null!==gi);M(e.containerInfo),e.current=n,gi=i;do{try{for(s=r;null!==gi;){var v=gi.effectTag;if(36&v){var m=gi.alternate;switch(f=s,(c=gi).tag){case 0:case 11:case 15:zr(16,32,c);break;case 1:var g=c.stateNode;if(4&c.effectTag)if(null===m)g.componentDidMount();else{var y=c.elementType===c.type?m.memoizedProps:Et(c.type,m.memoizedProps);g.componentDidUpdate(y,m.memoizedState,g.__reactInternalSnapshotBeforeUpdate)}var _=c.updateQueue;null!==_&&Ht(0,_,g);break;case 3:var b=c.updateQueue;if(null!==b){if(u=null,null!==c.child)switch(c.child.tag){case 5:u=O(c.child.stateNode);break;case 1:u=c.child.stateNode}Ht(0,b,u)}break;case 5:var w=c.stateNode;null===m&&4&c.effectTag&&J(w,c.type,c.memoizedProps,c);break;case 6:case 4:case 12:break;case 13:if(Y&&null===c.memoizedState){var E=c.alternate;if(null!==E){var D=E.memoizedState;if(null!==D){var S=D.dehydrated;null!==S&&ke(S)}}}break;case 19:case 17:case 20:case 21:break;default:throw Error(a(163))}}if(128&v){c=void 0;var C=gi.ref;if(null!==C){var k=gi.stateNode;switch(gi.tag){case 5:c=O(k);break;default:c=k}\"function\"==typeof C?C(c):C.current=c}}gi=gi.nextEffect}}catch(e){if(null===gi)throw Error(a(330));Zi(gi,e),gi=gi.nextEffect}}while(null!==gi);gi=null,it(),oi=o}else e.current=n;if(wi)wi=!1,Ei=e,Di=t;else for(gi=i;null!==gi;)t=gi.nextEffect,gi.nextEffect=null,gi=t;if(0===(t=e.firstPendingTime)&&(bi=null),1073741823===t?e===ki?Ci++:(Ci=0,ki=e):Ci=0,\"function\"==typeof no&&no(n.stateNode,r),Ni(e),yi)throw yi=!1,e=_i,_i=null,e;return 0!=(8&oi)||vt(),null}function Ki(){for(;null!==gi;){var e=gi.effectTag;0!=(256&e)&&Ur(gi.alternate,gi),0==(512&e)||wi||(wi=!0,pt(97,(function(){return Xi(),null}))),gi=gi.nextEffect}}function Xi(){if(90!==Di){var e=97<Di?97:Di;return Di=90,dt(e,Qi)}}function Qi(){if(null===Ei)return!1;var e=Ei;if(Ei=null,0!=(48&oi))throw Error(a(331));var t=oi;for(oi|=32,e=e.current.firstEffect;null!==e;){try{var n=e;if(0!=(512&n.effectTag))switch(n.tag){case 0:case 11:case 15:zr(128,0,n),zr(0,64,n)}}catch(t){if(null===e)throw Error(a(330));Zi(e,t)}n=e.nextEffect,e.nextEffect=null,e=n}return oi=t,vt(),!0}function Ji(e,t,n){Bt(e,t=Jr(e,t=Fr(n,t),1073741823)),null!==(e=Pi(e,1073741823))&&Ni(e)}function Zi(e,t){if(3===e.tag)Ji(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Ji(n,e,t);break}if(1===n.tag){var r=n.stateNode;if(\"function\"==typeof n.type.getDerivedStateFromError||\"function\"==typeof r.componentDidCatch&&(null===bi||!bi.has(r))){Bt(n,e=Zr(n,e=Fr(t,e),1073741823)),null!==(n=Pi(n,1073741823))&&Ni(n);break}}n=n.return}}function eo(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),ui===e&&li===n?4===si||3===si&&1073741823===fi&&st()-mi<500?Li(e,li):vi=!0:ho(e,n)&&(0!==(t=e.lastPingedTime)&&t<n||(e.lastPingedTime=n,e.finishedExpirationTime===n&&(e.finishedExpirationTime=0,e.finishedWork=null),Ni(e)))}function to(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(t=Ai(t=xi(),e,null)),null!==(e=Pi(e,t))&&Ni(e)}ei=function(e,t,n){var r=t.expirationTime;if(null!==e){var i=t.pendingProps;if(e.memoizedProps!==i||Re.current)dr=!0;else{if(r<n){switch(dr=!1,t.tag){case 3:wr(t),cr();break;case 5:if(pn(t),4&t.mode&&1!==n&&U(t.type,i))return t.expirationTime=t.childExpirationTime=1,null;break;case 1:Be(t.type)&&He(t);break;case 4:fn(t,t.stateNode.containerInfo);break;case 10:xt(t,t.memoizedProps.value);break;case 13:if(null!==t.memoizedState)return 0!==(r=t.child.childExpirationTime)&&r>=n?Tr(e,t,n):(Ie(vn,1&vn.current),null!==(t=Pr(e,t,n))?t.sibling:null);Ie(vn,1&vn.current);break;case 19:if(r=t.childExpirationTime>=n,0!=(64&e.effectTag)){if(r)return Or(e,t,n);t.effectTag|=64}if(null!==(i=t.memoizedState)&&(i.rendering=null,i.tail=null),Ie(vn,vn.current),!r)return null}return Pr(e,t,n)}dr=!1}}else dr=!1;switch(t.expirationTime=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps,i=Le(t,Me.current),Pt(t,n),i=Rn(null,t,r,e,i,n),t.effectTag|=1,\"object\"==typeof i&&null!==i&&\"function\"==typeof i.render&&void 0===i.$$typeof){if(t.tag=1,Fn(),Be(r)){var o=!0;He(t)}else o=!1;t.memoizedState=null!==i.state&&void 0!==i.state?i.state:null;var u=r.getDerivedStateFromProps;\"function\"==typeof u&&$t(t,r,u,e),i.updater=Yt,t.stateNode=i,i._reactInternalFiber=t,Jt(t,r,e,n),t=br(null,t,r,!0,o,n)}else t.tag=0,pr(null,t,i,n),t=t.child;return t;case 16:if(i=t.elementType,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps,function(e){if(-1===e._status){e._status=0;var t=e._ctor;t=t(),e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}}(i),1!==i._status)throw i._result;switch(i=i._result,t.type=i,o=t.tag=function(e){if(\"function\"==typeof e)return uo(e)?1:0;if(null!=e){if((e=e.$$typeof)===y)return 11;if(e===w)return 14}return 2}(i),e=Et(i,e),o){case 0:t=yr(null,t,i,e,n);break;case 1:t=_r(null,t,i,e,n);break;case 11:t=hr(null,t,i,e,n);break;case 14:t=vr(null,t,i,Et(i.type,e),r,n);break;default:throw Error(a(306,i,\"\"))}return t;case 0:return r=t.type,i=t.pendingProps,yr(e,t,r,i=t.elementType===r?i:Et(r,i),n);case 1:return r=t.type,i=t.pendingProps,_r(e,t,r,i=t.elementType===r?i:Et(r,i),n);case 3:if(wr(t),null===(r=t.updateQueue))throw Error(a(282));if(i=null!==(i=t.memoizedState)?i.element:null,Wt(t,r,t.pendingProps,null,n),(r=t.memoizedState.element)===i)cr(),t=Pr(e,t,n);else{if((i=t.stateNode.hydrate)&&(Y?(rr=we(t.stateNode.containerInfo),nr=t,i=ir=!0):i=!1),i)for(n=on(t,null,r,n),t.child=n;n;)n.effectTag=-3&n.effectTag|1024,n=n.sibling;else pr(e,t,r,n),cr();t=t.child}return t;case 5:return pn(t),null===e&&ar(t),r=t.type,i=t.pendingProps,o=null!==e?e.memoizedProps:null,u=i.children,j(r,i)?u=null:null!==o&&j(r,o)&&(t.effectTag|=16),gr(e,t),4&t.mode&&1!==n&&U(r,i)?(t.expirationTime=t.childExpirationTime=1,t=null):(pr(e,t,u,n),t=t.child),t;case 6:return null===e&&ar(t),null;case 13:return Tr(e,t,n);case 4:return fn(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=rn(t,null,r,n):pr(e,t,r,n),t.child;case 11:return r=t.type,i=t.pendingProps,hr(e,t,r,i=t.elementType===r?i:Et(r,i),n);case 7:return pr(e,t,t.pendingProps,n),t.child;case 8:case 12:return pr(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,i=t.pendingProps,u=t.memoizedProps,xt(t,o=i.value),null!==u){var l=u.value;if(0===(o=_t(l,o)?0:0|(\"function\"==typeof r._calculateChangedBits?r._calculateChangedBits(l,o):1073741823))){if(u.children===i.children&&!Re.current){t=Pr(e,t,n);break e}}else for(null!==(l=t.child)&&(l.return=t);null!==l;){var s=l.dependencies;if(null!==s){u=l.child;for(var c=s.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&o)){1===l.tag&&((c=Ft(n,null)).tag=2,Bt(l,c)),l.expirationTime<n&&(l.expirationTime=n),null!==(c=l.alternate)&&c.expirationTime<n&&(c.expirationTime=n),Ot(l.return,n),s.expirationTime<n&&(s.expirationTime=n);break}c=c.next}}else u=10===l.tag&&l.type===t.type?null:l.child;if(null!==u)u.return=l;else for(u=l;null!==u;){if(u===t){u=null;break}if(null!==(l=u.sibling)){l.return=u.return,u=l;break}u=u.return}l=u}}pr(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,r=(o=t.pendingProps).children,Pt(t,n),r=r(i=It(i,o.unstable_observedBits)),t.effectTag|=1,pr(e,t,r,n),t.child;case 14:return o=Et(i=t.type,t.pendingProps),vr(e,t,i,o=Et(i.type,o),r,n);case 15:return mr(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Et(r,i),null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),t.tag=1,Be(r)?(e=!0,He(t)):e=!1,Pt(t,n),Xt(t,r,i),Jt(t,r,i,n),br(null,t,r,!0,e,n);case 19:return Or(e,t,n)}throw Error(a(156,t.tag))};var no=null,ro=null;function io(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function oo(e,t,n,r){return new io(e,t,n,r)}function uo(e){return!(!(e=e.prototype)||!e.isReactComponent)}function ao(e,t){var n=e.alternate;return null===n?((n=oo(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.effectTag=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childExpirationTime=e.childExpirationTime,n.expirationTime=e.expirationTime,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{expirationTime:t.expirationTime,firstContext:t.firstContext,responders:t.responders},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function lo(e,t,n,r,i,o){var u=2;if(r=e,\"function\"==typeof e)uo(e)&&(u=1);else if(\"string\"==typeof e)u=5;else e:switch(e){case d:return so(n.children,i,o,t);case g:u=8,i|=7;break;case p:u=8,i|=1;break;case h:return(e=oo(12,n,t,8|i)).elementType=h,e.type=h,e.expirationTime=o,e;case _:return(e=oo(13,n,t,i)).type=_,e.elementType=_,e.expirationTime=o,e;case b:return(e=oo(19,n,t,i)).elementType=b,e.expirationTime=o,e;default:if(\"object\"==typeof e&&null!==e)switch(e.$$typeof){case v:u=10;break e;case m:u=9;break e;case y:u=11;break e;case w:u=14;break e;case E:u=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,\"\"))}return(t=oo(u,n,t,i)).elementType=e,t.type=r,t.expirationTime=o,t}function so(e,t,n,r){return(e=oo(7,e,r,t)).expirationTime=n,e}function co(e,t,n){return(e=oo(6,e,null,t)).expirationTime=n,e}function fo(e,t,n){return(t=oo(4,null!==e.children?e.children:[],e.key,t)).expirationTime=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function po(e,t,n){this.tag=t,this.current=null,this.containerInfo=e,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=V,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function ho(e,t){var n=e.firstSuspendedTime;return e=e.lastSuspendedTime,0!==n&&n>=t&&e<=t}function vo(e,t){var n=e.firstSuspendedTime,r=e.lastSuspendedTime;n<t&&(e.firstSuspendedTime=t),(r>t||0===n)&&(e.lastSuspendedTime=t),t<=e.lastPingedTime&&(e.lastPingedTime=0),t<=e.lastExpiredTime&&(e.lastExpiredTime=0)}function mo(e,t){t>e.firstPendingTime&&(e.firstPendingTime=t);var n=e.firstSuspendedTime;0!==n&&(t>=n?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:t>=e.lastSuspendedTime&&(e.lastSuspendedTime=t+1),t>e.nextKnownPendingLevel&&(e.nextKnownPendingLevel=t))}function go(e,t){var n=e.lastExpiredTime;(0===n||n>t)&&(e.lastExpiredTime=t)}function yo(e){var t=e._reactInternalFiber;if(void 0===t){if(\"function\"==typeof e.render)throw Error(a(188));throw Error(a(268,Object.keys(e)))}return null===(e=A(t))?null:e.stateNode}function _o(e,t){null!==(e=e.memoizedState)&&null!==e.dehydrated&&e.retryTime<t&&(e.retryTime=t)}function bo(e,t){_o(e,t),(e=e.alternate)&&_o(e,t)}var wo={createContainer:function(e,t,n){return e=new po(e,t,n),t=oo(3,null,null,2===t?7:1===t?3:0),e.current=t,t.stateNode=e},updateContainer:function(e,t,n,r){var i=t.current,o=xi(),u=qt.suspense;o=Ai(o,i,u);e:if(n){t:{if(k(n=n._reactInternalFiber)!==n||1!==n.tag)throw Error(a(170));var l=n;do{switch(l.tag){case 3:l=l.stateNode.context;break t;case 1:if(Be(l.type)){l=l.stateNode.__reactInternalMemoizedMergedChildContext;break t}}l=l.return}while(null!==l);throw Error(a(171))}if(1===n.tag){var s=n.type;if(Be(s)){n=We(n,s,l);break e}}n=l}else n=Ne;return null===t.context?t.context=n:t.pendingContext=n,(t=Ft(o,u)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),Bt(i,t),Oi(i,o),o},batchedEventUpdates:function(e,t){var n=oi;oi|=2;try{return e(t)}finally{0===(oi=n)&&vt()}},batchedUpdates:function(e,t){var n=oi;oi|=1;try{return e(t)}finally{0===(oi=n)&&vt()}},unbatchedUpdates:function(e,t){var n=oi;oi&=-2,oi|=8;try{return e(t)}finally{0===(oi=n)&&vt()}},deferredUpdates:function(e){return dt(97,e)},syncUpdates:function(e,t,n,r){return dt(99,e.bind(null,t,n,r))},discreteUpdates:function(e,t,n,r){var i=oi;oi|=4;try{return dt(98,e.bind(null,t,n,r))}finally{0===(oi=i)&&vt()}},flushDiscreteUpdates:function(){0==(49&oi)&&(function(){if(null!==Si){var e=Si;Si=null,e.forEach((function(e,t){go(t,e),Ni(t)})),vt()}}(),Xi())},flushControlled:function(e){var t=oi;oi|=1;try{dt(99,e)}finally{0===(oi=t)&&vt()}},flushSync:Fi,flushPassiveEffects:Xi,IsThisRendererActing:{current:!1},getPublicRootInstance:function(e){if(!(e=e.current).child)return null;switch(e.child.tag){case 5:return O(e.child.stateNode);default:return e.child.stateNode}},attemptSynchronousHydration:function(e){switch(e.tag){case 3:var t=e.stateNode;t.hydrate&&function(e,t){go(e,t),Ni(e),0==(48&oi)&&vt()}(t,t.firstPendingTime);break;case 13:Fi((function(){return Oi(e,1073741823)})),t=yt(xi(),150,100),bo(e,t)}},attemptUserBlockingHydration:function(e){if(13===e.tag){var t=yt(xi(),150,100);Oi(e,t),bo(e,t)}},attemptContinuousHydration:function(e){if(13===e.tag){xi();var t=gt++;Oi(e,t),bo(e,t)}},attemptHydrationAtCurrentPriority:function(e){if(13===e.tag){var t=xi();Oi(e,t=Ai(t,e,null)),bo(e,t)}},findHostInstance:yo,findHostInstanceWithWarning:function(e){return yo(e)},findHostInstanceWithNoPortals:function(e){return null===(e=function(e){if(!(e=x(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child&&4!==t.tag)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}(e))?null:20===e.tag?e.stateNode.instance:e.stateNode},shouldSuspend:function(){return!1},injectIntoDevTools:function(e){var t=e.findFiberByHostInstance;return function(e){if(\"undefined\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var n=t.inject(e);no=function(e){try{t.onCommitFiberRoot(n,e,void 0,64==(64&e.current.effectTag))}catch(e){}},ro=function(e){try{t.onCommitFiberUnmount(n,e)}catch(e){}}}catch(e){}return!0}(i({},e,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:l.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=A(e))?null:e.stateNode},findFiberByHostInstance:function(e){return t?t(e):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))}};e.exports=wo.default||wo;var Eo=e.exports;return e.exports=t,Eo}},7714:(e,t,n)=>{\"use strict\";e.exports=n(5767)},3296:(e,t,n)=>{\"use strict\";const r=n(5760);r.createWebSocketStream=n(6387),r.Server=n(43),r.Receiver=n(1762),r.Sender=n(9576),e.exports=r},8716:(e,t,n)=>{\"use strict\";const{EMPTY_BUFFER:r}=n(5739);function i(e,t){if(0===e.length)return r;if(1===e.length)return e[0];const n=Buffer.allocUnsafe(t);let i=0;for(let t=0;t<e.length;t++){const r=e[t];n.set(r,i),i+=r.length}return i<t?n.slice(0,i):n}function o(e,t,n,r,i){for(let o=0;o<i;o++)n[r+o]=e[o]^t[3&o]}function u(e,t){const n=e.length;for(let r=0;r<n;r++)e[r]^=t[3&r]}function a(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function l(e){if(l.readOnly=!0,Buffer.isBuffer(e))return e;let t;return e instanceof ArrayBuffer?t=Buffer.from(e):ArrayBuffer.isView(e)?t=Buffer.from(e.buffer,e.byteOffset,e.byteLength):(t=Buffer.from(e),l.readOnly=!1),t}try{const t=n(Object(function(){var e=new Error(\"Cannot find module 'bufferutil'\");throw e.code=\"MODULE_NOT_FOUND\",e}())),r=t.BufferUtil||t;e.exports={concat:i,mask(e,t,n,i,u){u<48?o(e,t,n,i,u):r.mask(e,t,n,i,u)},toArrayBuffer:a,toBuffer:l,unmask(e,t){e.length<32?u(e,t):r.unmask(e,t)}}}catch(t){e.exports={concat:i,mask:o,toArrayBuffer:a,toBuffer:l,unmask:u}}},5739:e=>{\"use strict\";e.exports={BINARY_TYPES:[\"nodebuffer\",\"arraybuffer\",\"fragments\"],GUID:\"258EAFA5-E914-47DA-95CA-C5AB0DC85B11\",kStatusCode:Symbol(\"status-code\"),kWebSocket:Symbol(\"websocket\"),EMPTY_BUFFER:Buffer.alloc(0),NOOP:()=>{}}},7002:e=>{\"use strict\";class t{constructor(e,t){this.target=t,this.type=e}}class n extends t{constructor(e,t){super(\"message\",t),this.data=e}}class r extends t{constructor(e,t,n){super(\"close\",n),this.wasClean=n._closeFrameReceived&&n._closeFrameSent,this.reason=t,this.code=e}}class i extends t{constructor(e){super(\"open\",e)}}class o extends t{constructor(e,t){super(\"error\",t),this.message=e.message,this.error=e}}const u={addEventListener(e,t,u){if(\"function\"!=typeof t)return;function a(e){t.call(this,new n(e,this))}function l(e,n){t.call(this,new r(e,n,this))}function s(e){t.call(this,new o(e,this))}function c(){t.call(this,new i(this))}const f=u&&u.once?\"once\":\"on\";\"message\"===e?(a._listener=t,this[f](e,a)):\"close\"===e?(l._listener=t,this[f](e,l)):\"error\"===e?(s._listener=t,this[f](e,s)):\"open\"===e?(c._listener=t,this[f](e,c)):this[f](e,t)},removeEventListener(e,t){const n=this.listeners(e);for(let r=0;r<n.length;r++)n[r]!==t&&n[r]._listener!==t||this.removeListener(e,n[r])}};e.exports=u},8162:e=>{\"use strict\";const t=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function n(e,t,n){void 0===e[t]?e[t]=[n]:e[t].push(n)}e.exports={format:function(e){return Object.keys(e).map(t=>{let n=e[t];return Array.isArray(n)||(n=[n]),n.map(e=>[t].concat(Object.keys(e).map(t=>{let n=e[t];return Array.isArray(n)||(n=[n]),n.map(e=>!0===e?t:`${t}=${e}`).join(\"; \")})).join(\"; \")).join(\", \")}).join(\", \")},parse:function(e){const r=Object.create(null);if(void 0===e||\"\"===e)return r;let i,o,u=Object.create(null),a=!1,l=!1,s=!1,c=-1,f=-1,d=0;for(;d<e.length;d++){const p=e.charCodeAt(d);if(void 0===i)if(-1===f&&1===t[p])-1===c&&(c=d);else if(32===p||9===p)-1===f&&-1!==c&&(f=d);else{if(59!==p&&44!==p)throw new SyntaxError(\"Unexpected character at index \"+d);{if(-1===c)throw new SyntaxError(\"Unexpected character at index \"+d);-1===f&&(f=d);const t=e.slice(c,f);44===p?(n(r,t,u),u=Object.create(null)):i=t,c=f=-1}}else if(void 0===o)if(-1===f&&1===t[p])-1===c&&(c=d);else if(32===p||9===p)-1===f&&-1!==c&&(f=d);else if(59===p||44===p){if(-1===c)throw new SyntaxError(\"Unexpected character at index \"+d);-1===f&&(f=d),n(u,e.slice(c,f),!0),44===p&&(n(r,i,u),u=Object.create(null),i=void 0),c=f=-1}else{if(61!==p||-1===c||-1!==f)throw new SyntaxError(\"Unexpected character at index \"+d);o=e.slice(c,d),c=f=-1}else if(l){if(1!==t[p])throw new SyntaxError(\"Unexpected character at index \"+d);-1===c?c=d:a||(a=!0),l=!1}else if(s)if(1===t[p])-1===c&&(c=d);else if(34===p&&-1!==c)s=!1,f=d;else{if(92!==p)throw new SyntaxError(\"Unexpected character at index \"+d);l=!0}else if(34===p&&61===e.charCodeAt(d-1))s=!0;else if(-1===f&&1===t[p])-1===c&&(c=d);else if(-1===c||32!==p&&9!==p){if(59!==p&&44!==p)throw new SyntaxError(\"Unexpected character at index \"+d);{if(-1===c)throw new SyntaxError(\"Unexpected character at index \"+d);-1===f&&(f=d);let t=e.slice(c,f);a&&(t=t.replace(/\\\\/g,\"\"),a=!1),n(u,o,t),44===p&&(n(r,i,u),u=Object.create(null),i=void 0),o=void 0,c=f=-1}}else-1===f&&(f=d)}if(-1===c||s)throw new SyntaxError(\"Unexpected end of input\");-1===f&&(f=d);const p=e.slice(c,f);return void 0===i?n(r,p,u):(void 0===o?n(u,p,!0):n(u,o,a?p.replace(/\\\\/g,\"\"):p),n(r,i,u)),r}}},1390:e=>{\"use strict\";const t=Symbol(\"kDone\"),n=Symbol(\"kRun\");e.exports=class{constructor(e){this[t]=()=>{this.pending--,this[n]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[n]()}[n](){if(this.pending!==this.concurrency&&this.jobs.length){const e=this.jobs.shift();this.pending++,e(this[t])}}}},2309:(e,t,n)=>{\"use strict\";const r=n(8761),i=n(8716),o=n(1390),{kStatusCode:u,NOOP:a}=n(5739),l=Buffer.from([0,0,255,255]),s=Symbol(\"permessage-deflate\"),c=Symbol(\"total-length\"),f=Symbol(\"callback\"),d=Symbol(\"buffers\"),p=Symbol(\"error\");let h;function v(e){this[d].push(e),this[c]+=e.length}function m(e){this[c]+=e.length,this[s]._maxPayload<1||this[c]<=this[s]._maxPayload?this[d].push(e):(this[p]=new RangeError(\"Max payload size exceeded\"),this[p][u]=1009,this.removeListener(\"data\",m),this.reset())}function g(e){this[s]._inflate=null,e[u]=1007,this[f](e)}e.exports=class{constructor(e,t,n){if(this._maxPayload=0|n,this._options=e||{},this._threshold=void 0!==this._options.threshold?this._options.threshold:1024,this._isServer=!!t,this._deflate=null,this._inflate=null,this.params=null,!h){const e=void 0!==this._options.concurrencyLimit?this._options.concurrencyLimit:10;h=new o(e)}}static get extensionName(){return\"permessage-deflate\"}offer(){const e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:null==this._options.clientMaxWindowBits&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){const e=this._deflate[f];this._deflate.close(),this._deflate=null,e&&e(new Error(\"The deflate stream was closed while data was being processed\"))}}acceptAsServer(e){const t=this._options,n=e.find(e=>!(!1===t.serverNoContextTakeover&&e.server_no_context_takeover||e.server_max_window_bits&&(!1===t.serverMaxWindowBits||\"number\"==typeof t.serverMaxWindowBits&&t.serverMaxWindowBits>e.server_max_window_bits)||\"number\"==typeof t.clientMaxWindowBits&&!e.client_max_window_bits));if(!n)throw new Error(\"None of the extension offers can be accepted\");return t.serverNoContextTakeover&&(n.server_no_context_takeover=!0),t.clientNoContextTakeover&&(n.client_no_context_takeover=!0),\"number\"==typeof t.serverMaxWindowBits&&(n.server_max_window_bits=t.serverMaxWindowBits),\"number\"==typeof t.clientMaxWindowBits?n.client_max_window_bits=t.clientMaxWindowBits:!0!==n.client_max_window_bits&&!1!==t.clientMaxWindowBits||delete n.client_max_window_bits,n}acceptAsClient(e){const t=e[0];if(!1===this._options.clientNoContextTakeover&&t.client_no_context_takeover)throw new Error('Unexpected parameter \"client_no_context_takeover\"');if(t.client_max_window_bits){if(!1===this._options.clientMaxWindowBits||\"number\"==typeof this._options.clientMaxWindowBits&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter \"client_max_window_bits\"')}else\"number\"==typeof this._options.clientMaxWindowBits&&(t.client_max_window_bits=this._options.clientMaxWindowBits);return t}normalizeParams(e){return e.forEach(e=>{Object.keys(e).forEach(t=>{let n=e[t];if(n.length>1)throw new Error(`Parameter \"${t}\" must have only a single value`);if(n=n[0],\"client_max_window_bits\"===t){if(!0!==n){const e=+n;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter \"${t}\": ${n}`);n=e}else if(!this._isServer)throw new TypeError(`Invalid value for parameter \"${t}\": ${n}`)}else if(\"server_max_window_bits\"===t){const e=+n;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter \"${t}\": ${n}`);n=e}else{if(\"client_no_context_takeover\"!==t&&\"server_no_context_takeover\"!==t)throw new Error(`Unknown parameter \"${t}\"`);if(!0!==n)throw new TypeError(`Invalid value for parameter \"${t}\": ${n}`)}e[t]=n})}),e}decompress(e,t,n){h.add(r=>{this._decompress(e,t,(e,t)=>{r(),n(e,t)})})}compress(e,t,n){h.add(r=>{this._compress(e,t,(e,t)=>{r(),n(e,t)})})}_decompress(e,t,n){const o=this._isServer?\"client\":\"server\";if(!this._inflate){const e=o+\"_max_window_bits\",t=\"number\"!=typeof this.params[e]?r.Z_DEFAULT_WINDOWBITS:this.params[e];this._inflate=r.createInflateRaw({...this._options.zlibInflateOptions,windowBits:t}),this._inflate[s]=this,this._inflate[c]=0,this._inflate[d]=[],this._inflate.on(\"error\",g),this._inflate.on(\"data\",m)}this._inflate[f]=n,this._inflate.write(e),t&&this._inflate.write(l),this._inflate.flush(()=>{const e=this._inflate[p];if(e)return this._inflate.close(),this._inflate=null,void n(e);const r=i.concat(this._inflate[d],this._inflate[c]);t&&this.params[o+\"_no_context_takeover\"]?(this._inflate.close(),this._inflate=null):(this._inflate[c]=0,this._inflate[d]=[]),n(null,r)})}_compress(e,t,n){const o=this._isServer?\"server\":\"client\";if(!this._deflate){const e=o+\"_max_window_bits\",t=\"number\"!=typeof this.params[e]?r.Z_DEFAULT_WINDOWBITS:this.params[e];this._deflate=r.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:t}),this._deflate[c]=0,this._deflate[d]=[],this._deflate.on(\"error\",a),this._deflate.on(\"data\",v)}this._deflate[f]=n,this._deflate.write(e),this._deflate.flush(r.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let e=i.concat(this._deflate[d],this._deflate[c]);t&&(e=e.slice(0,e.length-4)),this._deflate[f]=null,t&&this.params[o+\"_no_context_takeover\"]?(this._deflate.close(),this._deflate=null):(this._deflate[c]=0,this._deflate[d]=[]),n(null,e)})}}},1762:(e,t,n)=>{\"use strict\";const{Writable:r}=n(2413),i=n(2309),{BINARY_TYPES:o,EMPTY_BUFFER:u,kStatusCode:a,kWebSocket:l}=n(5739),{concat:s,toArrayBuffer:c,unmask:f}=n(8716),{isValidStatusCode:d,isValidUTF8:p}=n(9498);function h(e,t,n,r){const i=new e(n?\"Invalid WebSocket frame: \"+t:t);return Error.captureStackTrace(i,h),i[a]=r,i}e.exports=class extends r{constructor(e,t,n,r){super(),this._binaryType=e||o[0],this[l]=void 0,this._extensions=t||{},this._isServer=!!n,this._maxPayload=0|r,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._state=0,this._loop=!1}_write(e,t,n){if(8===this._opcode&&0==this._state)return n();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(n)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){const t=this._buffers[0];return this._buffers[0]=t.slice(e),t.slice(0,e)}const t=Buffer.allocUnsafe(e);do{const n=this._buffers[0],r=t.length-e;e>=n.length?t.set(this._buffers.shift(),r):(t.set(new Uint8Array(n.buffer,n.byteOffset,e),r),this._buffers[0]=n.slice(e)),e-=n.length}while(e>0);return t}startLoop(e){let t;this._loop=!0;do{switch(this._state){case 0:t=this.getInfo();break;case 1:t=this.getPayloadLength16();break;case 2:t=this.getPayloadLength64();break;case 3:this.getMask();break;case 4:t=this.getData(e);break;default:return void(this._loop=!1)}}while(this._loop);e(t)}getInfo(){if(this._bufferedBytes<2)return void(this._loop=!1);const e=this.consume(2);if(0!=(48&e[0]))return this._loop=!1,h(RangeError,\"RSV2 and RSV3 must be clear\",!0,1002);const t=64==(64&e[0]);if(t&&!this._extensions[i.extensionName])return this._loop=!1,h(RangeError,\"RSV1 must be clear\",!0,1002);if(this._fin=128==(128&e[0]),this._opcode=15&e[0],this._payloadLength=127&e[1],0===this._opcode){if(t)return this._loop=!1,h(RangeError,\"RSV1 must be clear\",!0,1002);if(!this._fragmented)return this._loop=!1,h(RangeError,\"invalid opcode 0\",!0,1002);this._opcode=this._fragmented}else if(1===this._opcode||2===this._opcode){if(this._fragmented)return this._loop=!1,h(RangeError,\"invalid opcode \"+this._opcode,!0,1002);this._compressed=t}else{if(!(this._opcode>7&&this._opcode<11))return this._loop=!1,h(RangeError,\"invalid opcode \"+this._opcode,!0,1002);if(!this._fin)return this._loop=!1,h(RangeError,\"FIN must be set\",!0,1002);if(t)return this._loop=!1,h(RangeError,\"RSV1 must be clear\",!0,1002);if(this._payloadLength>125)return this._loop=!1,h(RangeError,\"invalid payload length \"+this._payloadLength,!0,1002)}if(this._fin||this._fragmented||(this._fragmented=this._opcode),this._masked=128==(128&e[1]),this._isServer){if(!this._masked)return this._loop=!1,h(RangeError,\"MASK must be set\",!0,1002)}else if(this._masked)return this._loop=!1,h(RangeError,\"MASK must be clear\",!0,1002);if(126===this._payloadLength)this._state=1;else{if(127!==this._payloadLength)return this.haveLength();this._state=2}}getPayloadLength16(){if(!(this._bufferedBytes<2))return this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength();this._loop=!1}getPayloadLength64(){if(this._bufferedBytes<8)return void(this._loop=!1);const e=this.consume(8),t=e.readUInt32BE(0);return t>Math.pow(2,21)-1?(this._loop=!1,h(RangeError,\"Unsupported WebSocket frame: payload length > 2^53 - 1\",!1,1009)):(this._payloadLength=t*Math.pow(2,32)+e.readUInt32BE(4),this.haveLength())}haveLength(){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0))return this._loop=!1,h(RangeError,\"Max payload size exceeded\",!1,1009);this._masked?this._state=3:this._state=4}getMask(){this._bufferedBytes<4?this._loop=!1:(this._mask=this.consume(4),this._state=4)}getData(e){let t=u;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength)return void(this._loop=!1);t=this.consume(this._payloadLength),this._masked&&f(t,this._mask)}return this._opcode>7?this.controlMessage(t):this._compressed?(this._state=5,void this.decompress(t,e)):(t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage())}decompress(e,t){this._extensions[i.extensionName].decompress(e,this._fin,(e,n)=>{if(e)return t(e);if(n.length){if(this._messageLength+=n.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return t(h(RangeError,\"Max payload size exceeded\",!1,1009));this._fragments.push(n)}const r=this.dataMessage();if(r)return t(r);this.startLoop(t)})}dataMessage(){if(this._fin){const e=this._messageLength,t=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],2===this._opcode){let n;n=\"nodebuffer\"===this._binaryType?s(t,e):\"arraybuffer\"===this._binaryType?c(s(t,e)):t,this.emit(\"message\",n)}else{const n=s(t,e);if(!p(n))return this._loop=!1,h(Error,\"invalid UTF-8 sequence\",!0,1007);this.emit(\"message\",n.toString())}}this._state=0}controlMessage(e){if(8===this._opcode)if(this._loop=!1,0===e.length)this.emit(\"conclude\",1005,\"\"),this.end();else{if(1===e.length)return h(RangeError,\"invalid payload length 1\",!0,1002);{const t=e.readUInt16BE(0);if(!d(t))return h(RangeError,\"invalid status code \"+t,!0,1002);const n=e.slice(2);if(!p(n))return h(Error,\"invalid UTF-8 sequence\",!0,1007);this.emit(\"conclude\",t,n.toString()),this.end()}}else 9===this._opcode?this.emit(\"ping\",e):this.emit(\"pong\",e);this._state=0}}},9576:(e,t,n)=>{\"use strict\";const{randomFillSync:r}=n(6417),i=n(2309),{EMPTY_BUFFER:o}=n(5739),{isValidStatusCode:u}=n(9498),{mask:a,toBuffer:l}=n(8716),s=Buffer.alloc(4);class c{constructor(e,t){this._extensions=t||{},this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(e,t){const n=t.mask&&t.readOnly;let i=t.mask?6:2,o=e.length;e.length>=65536?(i+=8,o=127):e.length>125&&(i+=2,o=126);const u=Buffer.allocUnsafe(n?e.length+i:i);return u[0]=t.fin?128|t.opcode:t.opcode,t.rsv1&&(u[0]|=64),u[1]=o,126===o?u.writeUInt16BE(e.length,2):127===o&&(u.writeUInt32BE(0,2),u.writeUInt32BE(e.length,6)),t.mask?(r(s,0,4),u[1]|=128,u[i-4]=s[0],u[i-3]=s[1],u[i-2]=s[2],u[i-1]=s[3],n?(a(e,s,u,i,e.length),[u]):(a(e,s,e,0,e.length),[u,e])):[u,e]}close(e,t,n,r){let i;if(void 0===e)i=o;else{if(\"number\"!=typeof e||!u(e))throw new TypeError(\"First argument must be a valid error code number\");if(void 0===t||\"\"===t)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{const n=Buffer.byteLength(t);if(n>123)throw new RangeError(\"The message must not be greater than 123 bytes\");i=Buffer.allocUnsafe(2+n),i.writeUInt16BE(e,0),i.write(t,2)}}this._deflating?this.enqueue([this.doClose,i,n,r]):this.doClose(i,n,r)}doClose(e,t,n){this.sendFrame(c.frame(e,{fin:!0,rsv1:!1,opcode:8,mask:t,readOnly:!1}),n)}ping(e,t,n){const r=l(e);if(r.length>125)throw new RangeError(\"The data size must not be greater than 125 bytes\");this._deflating?this.enqueue([this.doPing,r,t,l.readOnly,n]):this.doPing(r,t,l.readOnly,n)}doPing(e,t,n,r){this.sendFrame(c.frame(e,{fin:!0,rsv1:!1,opcode:9,mask:t,readOnly:n}),r)}pong(e,t,n){const r=l(e);if(r.length>125)throw new RangeError(\"The data size must not be greater than 125 bytes\");this._deflating?this.enqueue([this.doPong,r,t,l.readOnly,n]):this.doPong(r,t,l.readOnly,n)}doPong(e,t,n,r){this.sendFrame(c.frame(e,{fin:!0,rsv1:!1,opcode:10,mask:t,readOnly:n}),r)}send(e,t,n){const r=l(e),o=this._extensions[i.extensionName];let u=t.binary?2:1,a=t.compress;if(this._firstFragment?(this._firstFragment=!1,a&&o&&(a=r.length>=o._threshold),this._compress=a):(a=!1,u=0),t.fin&&(this._firstFragment=!0),o){const e={fin:t.fin,rsv1:a,opcode:u,mask:t.mask,readOnly:l.readOnly};this._deflating?this.enqueue([this.dispatch,r,this._compress,e,n]):this.dispatch(r,this._compress,e,n)}else this.sendFrame(c.frame(r,{fin:t.fin,rsv1:!1,opcode:u,mask:t.mask,readOnly:l.readOnly}),n)}dispatch(e,t,n,r){if(!t)return void this.sendFrame(c.frame(e,n),r);const o=this._extensions[i.extensionName];this._bufferedBytes+=e.length,this._deflating=!0,o.compress(e,n.fin,(t,i)=>{if(this._socket.destroyed){const e=new Error(\"The socket was closed while data was being compressed\");\"function\"==typeof r&&r(e);for(let t=0;t<this._queue.length;t++){const n=this._queue[t][4];\"function\"==typeof n&&n(e)}}else this._bufferedBytes-=e.length,this._deflating=!1,n.readOnly=!1,this.sendFrame(c.frame(i,n),r),this.dequeue()})}dequeue(){for(;!this._deflating&&this._queue.length;){const e=this._queue.shift();this._bufferedBytes-=e[1].length,Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[1].length,this._queue.push(e)}sendFrame(e,t){2===e.length?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}}e.exports=c},6387:(e,t,n)=>{\"use strict\";const{Duplex:r}=n(2413);function i(e){e.emit(\"close\")}function o(){!this.destroyed&&this._writableState.finished&&this.destroy()}function u(e){this.removeListener(\"error\",u),this.destroy(),0===this.listenerCount(\"error\")&&this.emit(\"error\",e)}e.exports=function(e,t){let n=!0;function a(){n&&e._socket.resume()}e.readyState===e.CONNECTING?e.once(\"open\",(function(){e._receiver.removeAllListeners(\"drain\"),e._receiver.on(\"drain\",a)})):(e._receiver.removeAllListeners(\"drain\"),e._receiver.on(\"drain\",a));const l=new r({...t,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return e.on(\"message\",(function(t){l.push(t)||(n=!1,e._socket.pause())})),e.once(\"error\",(function(e){l.destroyed||l.destroy(e)})),e.once(\"close\",(function(){l.destroyed||l.push(null)})),l._destroy=function(t,n){if(e.readyState===e.CLOSED)return n(t),void process.nextTick(i,l);let r=!1;e.once(\"error\",(function(e){r=!0,n(e)})),e.once(\"close\",(function(){r||n(t),process.nextTick(i,l)})),e.terminate()},l._final=function(t){e.readyState!==e.CONNECTING?null!==e._socket&&(e._socket._writableState.finished?(t(),l._readableState.endEmitted&&l.destroy()):(e._socket.once(\"finish\",(function(){t()})),e.close())):e.once(\"open\",(function(){l._final(t)}))},l._read=function(){e.readyState!==e.OPEN||n||(n=!0,e._receiver._writableState.needDrain||e._socket.resume())},l._write=function(t,n,r){e.readyState!==e.CONNECTING?e.send(t,r):e.once(\"open\",(function(){l._write(t,n,r)}))},l.on(\"end\",o),l.on(\"error\",u),l}},9498:(e,t,n)=>{\"use strict\";try{const e=n(Object(function(){var e=new Error(\"Cannot find module 'utf-8-validate'\");throw e.code=\"MODULE_NOT_FOUND\",e}()));t.isValidUTF8=\"object\"==typeof e?e.Validation.isValidUTF8:e}catch(e){t.isValidUTF8=()=>!0}t.isValidStatusCode=e=>e>=1e3&&e<=1014&&1004!==e&&1005!==e&&1006!==e||e>=3e3&&e<=4999},43:(e,t,n)=>{\"use strict\";const r=n(8614),{createHash:i}=n(6417),{createServer:o,STATUS_CODES:u}=n(8605),a=n(2309),l=n(5760),{format:s,parse:c}=n(8162),{GUID:f,kWebSocket:d}=n(5739),p=/^[+/0-9A-Za-z]{22}==$/;function h(e){e.emit(\"close\")}function v(){this.destroy()}function m(e,t,n,r){e.writable&&(n=n||u[t],r={Connection:\"close\",\"Content-Type\":\"text/html\",\"Content-Length\":Buffer.byteLength(n),...r},e.write(`HTTP/1.1 ${t} ${u[t]}\\r\\n`+Object.keys(r).map(e=>`${e}: ${r[e]}`).join(\"\\r\\n\")+\"\\r\\n\\r\\n\"+n)),e.removeListener(\"error\",v),e.destroy()}e.exports=class extends r{constructor(e,t){if(super(),null==(e={maxPayload:104857600,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,...e}).port&&!e.server&&!e.noServer)throw new TypeError('One of the \"port\", \"server\", or \"noServer\" options must be specified');null!=e.port?(this._server=o((e,t)=>{const n=u[426];t.writeHead(426,{\"Content-Length\":n.length,\"Content-Type\":\"text/plain\"}),t.end(n)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server&&(this._removeListeners=function(e,t){for(const n of Object.keys(t))e.on(n,t[n]);return function(){for(const n of Object.keys(t))e.removeListener(n,t[n])}}(this._server,{listening:this.emit.bind(this,\"listening\"),error:this.emit.bind(this,\"error\"),upgrade:(e,t,n)=>{this.handleUpgrade(e,t,n,t=>{this.emit(\"connection\",t,e)})}})),!0===e.perMessageDeflate&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set),this.options=e}address(){if(this.options.noServer)throw new Error('The server is operating in \"noServer\" mode');return this._server?this._server.address():null}close(e){if(e&&this.once(\"close\",e),this.clients)for(const e of this.clients)e.terminate();const t=this._server;t&&(this._removeListeners(),this._removeListeners=this._server=null,null!=this.options.port)?t.close(()=>this.emit(\"close\")):process.nextTick(h,this)}shouldHandle(e){if(this.options.path){const t=e.url.indexOf(\"?\");if((-1!==t?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,n,r){t.on(\"error\",v);const i=void 0!==e.headers[\"sec-websocket-key\"]&&e.headers[\"sec-websocket-key\"].trim(),o=+e.headers[\"sec-websocket-version\"],u={};if(\"GET\"!==e.method||\"websocket\"!==e.headers.upgrade.toLowerCase()||!i||!p.test(i)||8!==o&&13!==o||!this.shouldHandle(e))return m(t,400);if(this.options.perMessageDeflate){const n=new a(this.options.perMessageDeflate,!0,this.options.maxPayload);try{const t=c(e.headers[\"sec-websocket-extensions\"]);t[a.extensionName]&&(n.accept(t[a.extensionName]),u[a.extensionName]=n)}catch(e){return m(t,400)}}if(this.options.verifyClient){const a={origin:e.headers[\"\"+(8===o?\"sec-websocket-origin\":\"origin\")],secure:!(!e.connection.authorized&&!e.connection.encrypted),req:e};if(2===this.options.verifyClient.length)return void this.options.verifyClient(a,(o,a,l,s)=>{if(!o)return m(t,a||401,l,s);this.completeUpgrade(i,u,e,t,n,r)});if(!this.options.verifyClient(a))return m(t,401)}this.completeUpgrade(i,u,e,t,n,r)}completeUpgrade(e,t,n,r,o,u){if(!r.readable||!r.writable)return r.destroy();if(r[d])throw new Error(\"server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration\");const c=[\"HTTP/1.1 101 Switching Protocols\",\"Upgrade: websocket\",\"Connection: Upgrade\",\"Sec-WebSocket-Accept: \"+i(\"sha1\").update(e+f).digest(\"base64\")],p=new l(null);let h=n.headers[\"sec-websocket-protocol\"];if(h&&(h=h.trim().split(/ *, */),h=this.options.handleProtocols?this.options.handleProtocols(h,n):h[0],h&&(c.push(\"Sec-WebSocket-Protocol: \"+h),p.protocol=h)),t[a.extensionName]){const e=t[a.extensionName].params,n=s({[a.extensionName]:[e]});c.push(\"Sec-WebSocket-Extensions: \"+n),p._extensions=t}this.emit(\"headers\",c,n),r.write(c.concat(\"\\r\\n\").join(\"\\r\\n\")),r.removeListener(\"error\",v),p.setSocket(r,o,this.options.maxPayload),this.clients&&(this.clients.add(p),p.on(\"close\",()=>this.clients.delete(p))),u(p)}}},5760:(e,t,n)=>{\"use strict\";const r=n(8614),i=n(7211),o=n(8605),u=n(1631),a=n(4016),{randomBytes:l,createHash:s}=n(6417),{URL:c}=n(8835),f=n(2309),d=n(1762),p=n(9576),{BINARY_TYPES:h,EMPTY_BUFFER:v,GUID:m,kStatusCode:g,kWebSocket:y,NOOP:_}=n(5739),{addEventListener:b,removeEventListener:w}=n(7002),{format:E,parse:D}=n(8162),{toBuffer:S}=n(8716),C=[\"CONNECTING\",\"OPEN\",\"CLOSING\",\"CLOSED\"],k=[8,13];class T extends r{constructor(e,t,n){super(),this.readyState=T.CONNECTING,this.protocol=\"\",this._binaryType=h[0],this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=\"\",this._closeTimer=null,this._closeCode=1006,this._extensions={},this._receiver=null,this._sender=null,this._socket=null,null!==e?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,Array.isArray(t)?t=t.join(\", \"):\"object\"==typeof t&&null!==t&&(n=t,t=void 0),function e(t,n,r,u){const a={protocolVersion:k[1],maxPayload:104857600,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...u,createConnection:void 0,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:void 0,host:void 0,path:void 0,port:void 0};if(!k.includes(a.protocolVersion))throw new RangeError(`Unsupported protocol version: ${a.protocolVersion} (supported versions: ${k.join(\", \")})`);let d;n instanceof c?(d=n,t.url=n.href):(d=new c(n),t.url=n);const p=\"ws+unix:\"===d.protocol;if(!(d.host||p&&d.pathname))throw new Error(\"Invalid URL: \"+t.url);const h=\"wss:\"===d.protocol||\"https:\"===d.protocol,v=h?443:80,g=l(16).toString(\"base64\"),y=h?i.get:o.get;let _;a.createConnection=h?A:x,a.defaultPort=a.defaultPort||v,a.port=d.port||v,a.host=d.hostname.startsWith(\"[\")?d.hostname.slice(1,-1):d.hostname,a.headers={\"Sec-WebSocket-Version\":a.protocolVersion,\"Sec-WebSocket-Key\":g,Connection:\"Upgrade\",Upgrade:\"websocket\",...a.headers},a.path=d.pathname+d.search,a.timeout=a.handshakeTimeout,a.perMessageDeflate&&(_=new f(!0!==a.perMessageDeflate?a.perMessageDeflate:{},!1,a.maxPayload),a.headers[\"Sec-WebSocket-Extensions\"]=E({[f.extensionName]:_.offer()}));r&&(a.headers[\"Sec-WebSocket-Protocol\"]=r);a.origin&&(a.protocolVersion<13?a.headers[\"Sec-WebSocket-Origin\"]=a.origin:a.headers.Origin=a.origin);(d.username||d.password)&&(a.auth=`${d.username}:${d.password}`);if(p){const e=a.path.split(\":\");a.socketPath=e[0],a.path=e[1]}let b=t._req=y(a);a.timeout&&b.on(\"timeout\",()=>{O(t,b,\"Opening handshake has timed out\")});b.on(\"error\",e=>{t._req.aborted||(b=t._req=null,t.readyState=T.CLOSING,t.emit(\"error\",e),t.emitClose())}),b.on(\"response\",i=>{const o=i.headers.location,l=i.statusCode;if(o&&a.followRedirects&&l>=300&&l<400){if(++t._redirects>a.maxRedirects)return void O(t,b,\"Maximum redirects exceeded\");b.abort();const i=new c(o,n);e(t,i,r,u)}else t.emit(\"unexpected-response\",b,i)||O(t,b,\"Unexpected server response: \"+i.statusCode)}),b.on(\"upgrade\",(e,n,i)=>{if(t.emit(\"upgrade\",e),t.readyState!==T.CONNECTING)return;b=t._req=null;const o=s(\"sha1\").update(g+m).digest(\"base64\");if(e.headers[\"sec-websocket-accept\"]!==o)return void O(t,n,\"Invalid Sec-WebSocket-Accept header\");const u=e.headers[\"sec-websocket-protocol\"],l=(r||\"\").split(/, */);let c;if(!r&&u?c=\"Server sent a subprotocol but none was requested\":r&&!u?c=\"Server sent no subprotocol\":u&&!l.includes(u)&&(c=\"Server sent an invalid subprotocol\"),c)O(t,n,c);else{if(u&&(t.protocol=u),_)try{const n=D(e.headers[\"sec-websocket-extensions\"]);n[f.extensionName]&&(_.accept(n[f.extensionName]),t._extensions[f.extensionName]=_)}catch(e){return void O(t,n,\"Invalid Sec-WebSocket-Extensions header\")}t.setSocket(n,i,a.maxPayload)}})}(this,e,t,n)):this._isServer=!0}get CONNECTING(){return T.CONNECTING}get CLOSING(){return T.CLOSING}get CLOSED(){return T.CLOSED}get OPEN(){return T.OPEN}get binaryType(){return this._binaryType}set binaryType(e){h.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}setSocket(e,t,n){const r=new d(this._binaryType,this._extensions,this._isServer,n);this._sender=new p(e,this._extensions),this._receiver=r,this._socket=e,r[y]=this,e[y]=this,r.on(\"conclude\",I),r.on(\"drain\",N),r.on(\"error\",M),r.on(\"message\",F),r.on(\"ping\",L),r.on(\"pong\",B),e.setTimeout(0),e.setNoDelay(),t.length>0&&e.unshift(t),e.on(\"close\",j),e.on(\"data\",U),e.on(\"end\",z),e.on(\"error\",W),this.readyState=T.OPEN,this.emit(\"open\")}emitClose(){if(!this._socket)return this.readyState=T.CLOSED,void this.emit(\"close\",this._closeCode,this._closeMessage);this._extensions[f.extensionName]&&this._extensions[f.extensionName].cleanup(),this._receiver.removeAllListeners(),this.readyState=T.CLOSED,this.emit(\"close\",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==T.CLOSED){if(this.readyState===T.CONNECTING){const e=\"WebSocket was closed before the connection was established\";return O(this,this._req,e)}this.readyState!==T.CLOSING?(this.readyState=T.CLOSING,this._sender.close(e,t,!this._isServer,e=>{e||(this._closeFrameSent=!0,this._closeFrameReceived&&this._socket.end())}),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),3e4)):this._closeFrameSent&&this._closeFrameReceived&&this._socket.end()}}ping(e,t,n){if(this.readyState===T.CONNECTING)throw new Error(\"WebSocket is not open: readyState 0 (CONNECTING)\");\"function\"==typeof e?(n=e,e=t=void 0):\"function\"==typeof t&&(n=t,t=void 0),\"number\"==typeof e&&(e=e.toString()),this.readyState===T.OPEN?(void 0===t&&(t=!this._isServer),this._sender.ping(e||v,t,n)):P(this,e,n)}pong(e,t,n){if(this.readyState===T.CONNECTING)throw new Error(\"WebSocket is not open: readyState 0 (CONNECTING)\");\"function\"==typeof e?(n=e,e=t=void 0):\"function\"==typeof t&&(n=t,t=void 0),\"number\"==typeof e&&(e=e.toString()),this.readyState===T.OPEN?(void 0===t&&(t=!this._isServer),this._sender.pong(e||v,t,n)):P(this,e,n)}send(e,t,n){if(this.readyState===T.CONNECTING)throw new Error(\"WebSocket is not open: readyState 0 (CONNECTING)\");if(\"function\"==typeof t&&(n=t,t={}),\"number\"==typeof e&&(e=e.toString()),this.readyState!==T.OPEN)return void P(this,e,n);const r={binary:\"string\"!=typeof e,mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[f.extensionName]||(r.compress=!1),this._sender.send(e||v,r,n)}terminate(){if(this.readyState!==T.CLOSED){if(this.readyState===T.CONNECTING){const e=\"WebSocket was closed before the connection was established\";return O(this,this._req,e)}this._socket&&(this.readyState=T.CLOSING,this._socket.destroy())}}}function x(e){return e.path=e.socketPath,u.connect(e)}function A(e){return e.path=void 0,e.servername||\"\"===e.servername||(e.servername=e.host),a.connect(e)}function O(e,t,n){e.readyState=T.CLOSING;const r=new Error(n);Error.captureStackTrace(r,O),t.setHeader?(t.abort(),t.once(\"abort\",e.emitClose.bind(e)),e.emit(\"error\",r)):(t.destroy(r),t.once(\"error\",e.emit.bind(e,\"error\")),t.once(\"close\",e.emitClose.bind(e)))}function P(e,t,n){if(t){const n=S(t).length;e._socket?e._sender._bufferedBytes+=n:e._bufferedAmount+=n}if(n){n(new Error(`WebSocket is not open: readyState ${e.readyState} (${C[e.readyState]})`))}}function I(e,t){const n=this[y];n._socket.removeListener(\"data\",U),n._socket.resume(),n._closeFrameReceived=!0,n._closeMessage=t,n._closeCode=e,1005===e?n.close():n.close(e,t)}function N(){this[y]._socket.resume()}function M(e){const t=this[y];t._socket.removeListener(\"data\",U),t.readyState=T.CLOSING,t._closeCode=e[g],t.emit(\"error\",e),t._socket.destroy()}function R(){this[y].emitClose()}function F(e){this[y].emit(\"message\",e)}function L(e){const t=this[y];t.pong(e,!t._isServer,_),t.emit(\"ping\",e)}function B(e){this[y].emit(\"pong\",e)}function j(){const e=this[y];this.removeListener(\"close\",j),this.removeListener(\"end\",z),e.readyState=T.CLOSING,e._socket.read(),e._receiver.end(),this.removeListener(\"data\",U),this[y]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on(\"error\",R),e._receiver.on(\"finish\",R))}function U(e){this[y]._receiver.write(e)||this.pause()}function z(){const e=this[y];e.readyState=T.CLOSING,e._receiver.end(),this.end()}function W(){const e=this[y];this.removeListener(\"error\",W),this.on(\"error\",_),e&&(e.readyState=T.CLOSING,this.destroy())}C.forEach((e,t)=>{T[e]=t}),[\"open\",\"error\",\"close\",\"message\"].forEach(e=>{Object.defineProperty(T.prototype,\"on\"+e,{get(){const t=this.listeners(e);for(let e=0;e<t.length;e++)if(t[e]._listener)return t[e]._listener},set(t){const n=this.listeners(e);for(let t=0;t<n.length;t++)n[t]._listener&&this.removeListener(e,n[t]);this.addEventListener(e,t)}})}),T.prototype.addEventListener=b,T.prototype.removeEventListener=w,e.exports=T},469:(e,t,n)=>{\"use strict\";function r(e){const t=[...e.caches],n=t.shift();return void 0===n?i():{get:(e,i,o={miss:()=>Promise.resolve()})=>n.get(e,i,o).catch(()=>r({caches:t}).get(e,i,o)),set:(e,i)=>n.set(e,i).catch(()=>r({caches:t}).set(e,i)),delete:e=>n.delete(e).catch(()=>r({caches:t}).delete(e)),clear:()=>n.clear().catch(()=>r({caches:t}).clear())}}function i(){return{get:(e,t,n={miss:()=>Promise.resolve()})=>t().then(e=>Promise.all([e,n.miss(e)])).then(([e])=>e),set:(e,t)=>Promise.resolve(t),delete:e=>Promise.resolve(),clear:()=>Promise.resolve()}}n.r(t),n.d(t,{createFallbackableCache:()=>r,createNullCache:()=>i})},6712:(e,t,n)=>{\"use strict\";function r(e={serializable:!0}){let t={};return{get(n,r,i={miss:()=>Promise.resolve()}){const o=JSON.stringify(n);if(o in t)return Promise.resolve(e.serializable?JSON.parse(t[o]):t[o]);const u=r(),a=i&&i.miss||(()=>Promise.resolve());return u.then(e=>a(e)).then(()=>u)},set:(n,r)=>(t[JSON.stringify(n)]=e.serializable?JSON.stringify(r):r,Promise.resolve(r)),delete:e=>(delete t[JSON.stringify(e)],Promise.resolve()),clear:()=>(t={},Promise.resolve())}}n.r(t),n.d(t,{createInMemoryCache:()=>r})},2223:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{addABTest:()=>a,createAnalyticsClient:()=>u,deleteABTest:()=>l,getABTest:()=>s,getABTests:()=>c,stopABTest:()=>f});var r=n(1757),i=n(7858),o=n(5541);const u=e=>{const t=e.region||\"us\",n=(0,r.createAuth)(r.AuthMode.WithinHeaders,e.appId,e.apiKey),o=(0,i.createTransporter)({hosts:[{url:`analytics.${t}.algolia.com`}],...e,headers:{...n.headers(),\"content-type\":\"application/json\",...e.headers},queryParameters:{...n.queryParameters(),...e.queryParameters}}),u=e.appId;return(0,r.addMethods)({appId:u,transporter:o},e.methods)},a=e=>(t,n)=>e.transporter.write({method:o.N.Post,path:\"2/abtests\",data:t},n),l=e=>(t,n)=>e.transporter.write({method:o.N.Delete,path:(0,r.encode)(\"2/abtests/%s\",t)},n),s=e=>(t,n)=>e.transporter.read({method:o.N.Get,path:(0,r.encode)(\"2/abtests/%s\",t)},n),c=e=>t=>e.transporter.read({method:o.N.Get,path:\"2/abtests\"},t),f=e=>(t,n)=>e.transporter.write({method:o.N.Post,path:(0,r.encode)(\"2/abtests/%s/stop\",t)},n)},1757:(e,t,n)=>{\"use strict\";function r(e,t,n){const r={\"x-algolia-api-key\":n,\"x-algolia-application-id\":t};return{headers:()=>e===f.WithinHeaders?r:{},queryParameters:()=>e===f.WithinQueryParameters?r:{}}}function i(e){let t=0;const n=()=>(t++,new Promise(r=>{setTimeout(()=>{r(e(n))},Math.min(100*t,1e3))}));return e(n)}function o(e,t=((e,t)=>Promise.resolve())){return Object.assign(e,{wait:n=>o(e.then(e=>Promise.all([t(e,n),e])).then(e=>e[1]))})}function u(e){let t=e.length-1;for(;t>0;t--){const n=Math.floor(Math.random()*(t+1)),r=e[t];e[t]=e[n],e[n]=r}return e}function a(e,t){return Object.keys(void 0!==t?t:{}).forEach(n=>{e[n]=t[n](e)}),e}function l(e,...t){let n=0;return e.replace(/%s/g,()=>encodeURIComponent(t[n++]))}n.r(t),n.d(t,{AuthMode:()=>f,addMethods:()=>a,createAuth:()=>r,createRetryablePromise:()=>i,createWaitablePromise:()=>o,destroy:()=>c,encode:()=>l,shuffle:()=>u,version:()=>s});const s=\"4.2.0\",c=e=>()=>e.transporter.requester.destroy(),f={WithinQueryParameters:0,WithinHeaders:1}},103:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createRecommendationClient:()=>u,getPersonalizationStrategy:()=>a,setPersonalizationStrategy:()=>l});var r=n(1757),i=n(7858),o=n(5541);const u=e=>{const t=e.region||\"us\",n=(0,r.createAuth)(r.AuthMode.WithinHeaders,e.appId,e.apiKey),o=(0,i.createTransporter)({hosts:[{url:`recommendation.${t}.algolia.com`}],...e,headers:{...n.headers(),\"content-type\":\"application/json\",...e.headers},queryParameters:{...n.queryParameters(),...e.queryParameters}});return(0,r.addMethods)({appId:e.appId,transporter:o},e.methods)},a=e=>t=>e.transporter.read({method:o.N.Get,path:\"1/strategies/personalization\"},t),l=e=>(t,n)=>e.transporter.write({method:o.N.Post,path:\"1/strategies/personalization\",data:t},n)},6586:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{ApiKeyACLEnum:()=>Te,BatchActionEnum:()=>xe,ScopeEnum:()=>Ae,StrategyEnum:()=>Oe,SynonymEnum:()=>Pe,addApiKey:()=>d,assignUserID:()=>p,assignUserIDs:()=>h,batch:()=>z,browseObjects:()=>W,browseRules:()=>H,browseSynonyms:()=>V,chunkedBatch:()=>q,clearObjects:()=>G,clearRules:()=>$,clearSynonyms:()=>Y,copyIndex:()=>v,copyRules:()=>m,copySettings:()=>g,copySynonyms:()=>y,createBrowsablePromise:()=>a,createMissingObjectIDError:()=>s,createObjectNotFoundError:()=>c,createSearchClient:()=>l,createValidUntilNotFoundError:()=>f,deleteApiKey:()=>_,deleteBy:()=>K,deleteIndex:()=>X,deleteObject:()=>Q,deleteObjects:()=>J,deleteRule:()=>Z,deleteSynonym:()=>ee,exists:()=>te,findObject:()=>ne,generateSecuredApiKey:()=>b,getApiKey:()=>w,getLogs:()=>E,getObject:()=>re,getObjectPosition:()=>ie,getObjects:()=>oe,getRule:()=>ue,getSecuredApiKeyRemainingValidity:()=>D,getSettings:()=>ae,getSynonym:()=>le,getTask:()=>se,getTopUserIDs:()=>S,getUserID:()=>C,hasPendingMappings:()=>k,initIndex:()=>T,listApiKeys:()=>x,listClusters:()=>A,listIndices:()=>O,listUserIDs:()=>P,moveIndex:()=>I,multipleBatch:()=>N,multipleGetObjects:()=>M,multipleQueries:()=>R,multipleSearchForFacetValues:()=>F,partialUpdateObject:()=>ce,partialUpdateObjects:()=>fe,removeUserID:()=>L,replaceAllObjects:()=>de,replaceAllRules:()=>pe,replaceAllSynonyms:()=>he,restoreApiKey:()=>B,saveObject:()=>ve,saveObjects:()=>me,saveRule:()=>ge,saveRules:()=>ye,saveSynonym:()=>_e,saveSynonyms:()=>be,search:()=>we,searchForFacetValues:()=>Ee,searchRules:()=>De,searchSynonyms:()=>Se,searchUserIDs:()=>j,setSettings:()=>Ce,updateApiKey:()=>U,waitTask:()=>ke});var r=n(1757),i=n(7858),o=n(5541),u=n(6417);function a(e){const t=n=>e.request(n).then(r=>{if(void 0!==e.batch&&e.batch(r.hits),!e.shouldStop(r))return r.cursor?t({cursor:r.cursor}):t({page:(n.page||0)+1})});return t({})}const l=e=>{const t=e.appId,n=(0,r.createAuth)(void 0!==e.authMode?e.authMode:r.AuthMode.WithinHeaders,t,e.apiKey),o=(0,i.createTransporter)({hosts:[{url:t+\"-dsn.algolia.net\",accept:i.CallEnum.Read},{url:t+\".algolia.net\",accept:i.CallEnum.Write}].concat((0,r.shuffle)([{url:t+\"-1.algolianet.com\"},{url:t+\"-2.algolianet.com\"},{url:t+\"-3.algolianet.com\"}])),...e,headers:{...n.headers(),\"content-type\":\"application/x-www-form-urlencoded\",...e.headers},queryParameters:{...n.queryParameters(),...e.queryParameters}}),u={transporter:o,appId:t,addAlgoliaAgent(e,t){o.userAgent.add({segment:e,version:t})},clearCache:()=>Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})};return(0,r.addMethods)(u,e.methods)};function s(){return{name:\"MissingObjectIDError\",message:\"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option.\"}}function c(){return{name:\"ObjectNotFoundError\",message:\"Object not found.\"}}function f(){return{name:\"ValidUntilNotFoundError\",message:\"ValidUntil not found in given secured api key.\"}}const d=e=>(t,n)=>{const{queryParameters:i,...u}=n||{},a={acl:t,...void 0!==i?{queryParameters:i}:{}};return(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:\"1/keys\",data:a},u),(t,n)=>(0,r.createRetryablePromise)(r=>w(e)(t.key,n).catch(e=>{if(404!==e.status)throw e;return r()})))},p=e=>(t,n,r)=>{const u=(0,i.createMappedRequestOptions)(r);return u.queryParameters[\"X-Algolia-User-ID\"]=t,e.transporter.write({method:o.N.Post,path:\"1/clusters/mapping\",data:{cluster:n}},u)},h=e=>(t,n,r)=>e.transporter.write({method:o.N.Post,path:\"1/clusters/mapping/batch\",data:{users:t,cluster:n}},r),v=e=>(t,n,i)=>(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/operation\",t),data:{operation:\"copy\",destination:n}},i),(n,r)=>T(e)(t,{methods:{waitTask:ke}}).waitTask(n.taskID,r)),m=e=>(t,n,r)=>v(e)(t,n,{...r,scope:[Ae.Rules]}),g=e=>(t,n,r)=>v(e)(t,n,{...r,scope:[Ae.Settings]}),y=e=>(t,n,r)=>v(e)(t,n,{...r,scope:[Ae.Synonyms]}),_=e=>(t,n)=>(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Delete,path:(0,r.encode)(\"1/keys/%s\",t)},n),(n,i)=>(0,r.createRetryablePromise)(n=>w(e)(t,i).then(n).catch(e=>{if(404!==e.status)throw e}))),b=()=>(e,t)=>{const n=(0,i.serializeQueryParameters)(t),r=(0,u.createHmac)(\"sha256\",e).update(n).digest(\"hex\");return Buffer.from(r+n).toString(\"base64\")},w=e=>(t,n)=>e.transporter.read({method:o.N.Get,path:(0,r.encode)(\"1/keys/%s\",t)},n),E=e=>t=>e.transporter.read({method:o.N.Get,path:\"1/logs\"},t),D=()=>e=>{const t=Buffer.from(e,\"base64\").toString(\"ascii\").match(/validUntil=(\\d+)/);if(null===t)throw{name:\"ValidUntilNotFoundError\",message:\"ValidUntil not found in given secured api key.\"};return parseInt(t[1],10)-Math.round((new Date).getTime()/1e3)},S=e=>t=>e.transporter.read({method:o.N.Get,path:\"1/clusters/mapping/top\"},t),C=e=>(t,n)=>e.transporter.read({method:o.N.Get,path:(0,r.encode)(\"1/clusters/mapping/%s\",t)},n),k=e=>t=>{const{retrieveMappings:n,...r}=t||{};return!0===n&&(r.getClusters=!0),e.transporter.read({method:o.N.Get,path:\"1/clusters/mapping/pending\"},r)},T=e=>(t,n={})=>{const i={transporter:e.transporter,appId:e.appId,indexName:t};return(0,r.addMethods)(i,n.methods)},x=e=>t=>e.transporter.read({method:o.N.Get,path:\"1/keys\"},t),A=e=>t=>e.transporter.read({method:o.N.Get,path:\"1/clusters\"},t),O=e=>t=>e.transporter.read({method:o.N.Get,path:\"1/indexes\"},t),P=e=>t=>e.transporter.read({method:o.N.Get,path:\"1/clusters/mapping\"},t),I=e=>(t,n,i)=>(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/operation\",t),data:{operation:\"move\",destination:n}},i),(n,r)=>T(e)(t,{methods:{waitTask:ke}}).waitTask(n.taskID,r)),N=e=>(t,n)=>(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:\"1/indexes/*/batch\",data:{requests:t}},n),(t,n)=>Promise.all(Object.keys(t.taskID).map(r=>T(e)(r,{methods:{waitTask:ke}}).waitTask(t.taskID[r],n)))),M=e=>(t,n)=>e.transporter.read({method:o.N.Post,path:\"1/indexes/*/objects\",data:{requests:t}},n),R=e=>(t,n)=>{const r=t.map(e=>({...e,params:(0,i.serializeQueryParameters)(e.params||{})}));return e.transporter.read({method:o.N.Post,path:\"1/indexes/*/queries\",data:{requests:r},cacheable:!0},n)},F=e=>(t,n)=>Promise.all(t.map(t=>{const{facetName:r,facetQuery:i,...o}=t.params;return T(e)(t.indexName,{methods:{searchForFacetValues:Ee}}).searchForFacetValues(r,i,{...n,...o})})),L=e=>(t,n)=>{const r=(0,i.createMappedRequestOptions)(n);return r.queryParameters[\"X-Algolia-User-ID\"]=t,e.transporter.write({method:o.N.Delete,path:\"1/clusters/mapping\"},r)},B=e=>(t,n)=>(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:(0,r.encode)(\"1/keys/%s/restore\",t)},n),(n,i)=>(0,r.createRetryablePromise)(n=>w(e)(t,i).catch(e=>{if(404!==e.status)throw e;return n()}))),j=e=>(t,n)=>e.transporter.read({method:o.N.Post,path:\"1/clusters/mapping/search\",data:{query:t}},n),U=e=>(t,n)=>{const i=Object.assign({},n),{queryParameters:u,...a}=n||{},l=u?{queryParameters:u}:{},s=[\"acl\",\"indexes\",\"referers\",\"restrictSources\",\"queryParameters\",\"description\",\"maxQueriesPerIPPerHour\",\"maxHitsPerQuery\"];return(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Put,path:(0,r.encode)(\"1/keys/%s\",t),data:l},a),(n,o)=>(0,r.createRetryablePromise)(n=>w(e)(t,o).then(e=>(e=>Object.keys(i).filter(e=>-1!==s.indexOf(e)).every(t=>e[t]===i[t]))(e)?Promise.resolve():n())))},z=e=>(t,n)=>(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/batch\",e.indexName),data:{requests:t}},n),(t,n)=>ke(e)(t.taskID,n)),W=e=>t=>a({...t,shouldStop:e=>void 0===e.cursor,request:n=>e.transporter.read({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/browse\",e.indexName),data:n},t)}),H=e=>t=>{const n={hitsPerPage:1e3,...t};return a({...n,shouldStop:e=>e.hits.length<n.hitsPerPage,request:t=>De(e)(\"\",{...n,...t}).then(e=>({...e,hits:e.hits.map(e=>(delete e._highlightResult,e))}))})},V=e=>t=>{const n={hitsPerPage:1e3,...t};return a({...n,shouldStop:e=>e.hits.length<n.hitsPerPage,request:t=>Se(e)(\"\",{...n,...t}).then(e=>({...e,hits:e.hits.map(e=>(delete e._highlightResult,e))}))})},q=e=>(t,n,i)=>{const{batchSize:o,...u}=i||{},a={taskIDs:[],objectIDs:[]},l=(r=0)=>{const i=[];let s;for(s=r;s<t.length&&(i.push(t[s]),i.length!==(o||1e3));s++);return 0===i.length?Promise.resolve(a):z(e)(i.map(e=>({action:n,body:e})),u).then(e=>(a.objectIDs=a.objectIDs.concat(e.objectIDs),a.taskIDs.push(e.taskID),s++,l(s)))};return(0,r.createWaitablePromise)(l(),(t,n)=>Promise.all(t.taskIDs.map(t=>ke(e)(t,n))))},G=e=>t=>(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/clear\",e.indexName)},t),(t,n)=>ke(e)(t.taskID,n)),$=e=>t=>{const{forwardToReplicas:n,...u}=t||{},a=(0,i.createMappedRequestOptions)(u);return n&&(a.queryParameters.forwardToReplicas=1),(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/rules/clear\",e.indexName)},a),(t,n)=>ke(e)(t.taskID,n))},Y=e=>t=>{const{forwardToReplicas:n,...u}=t||{},a=(0,i.createMappedRequestOptions)(u);return n&&(a.queryParameters.forwardToReplicas=1),(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/synonyms/clear\",e.indexName)},a),(t,n)=>ke(e)(t.taskID,n))},K=e=>(t,n)=>(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/deleteByQuery\",e.indexName),data:t},n),(t,n)=>ke(e)(t.taskID,n)),X=e=>t=>(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Delete,path:(0,r.encode)(\"1/indexes/%s\",e.indexName)},t),(t,n)=>ke(e)(t.taskID,n)),Q=e=>(t,n)=>(0,r.createWaitablePromise)(J(e)([t],n).then(e=>({taskID:e.taskIDs[0]})),(t,n)=>ke(e)(t.taskID,n)),J=e=>(t,n)=>{const r=t.map(e=>({objectID:e}));return q(e)(r,xe.DeleteObject,n)},Z=e=>(t,n)=>{const{forwardToReplicas:u,...a}=n||{},l=(0,i.createMappedRequestOptions)(a);return u&&(l.queryParameters.forwardToReplicas=1),(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Delete,path:(0,r.encode)(\"1/indexes/%s/rules/%s\",e.indexName,t)},l),(t,n)=>ke(e)(t.taskID,n))},ee=e=>(t,n)=>{const{forwardToReplicas:u,...a}=n||{},l=(0,i.createMappedRequestOptions)(a);return u&&(l.queryParameters.forwardToReplicas=1),(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Delete,path:(0,r.encode)(\"1/indexes/%s/synonyms/%s\",e.indexName,t)},l),(t,n)=>ke(e)(t.taskID,n))},te=e=>t=>ae(e)(t).then(()=>!0).catch(e=>{if(404!==e.status)throw e;return!1}),ne=e=>(t,n)=>{const{query:r,paginate:i,...o}=n||{};let u=0;const a=()=>we(e)(r||\"\",{...o,page:u}).then(e=>{for(const[n,r]of Object.entries(e.hits))if(t(r))return{object:r,position:parseInt(n,10),page:u};if(u++,!1===i||u>=e.nbPages)throw{name:\"ObjectNotFoundError\",message:\"Object not found.\"};return a()});return a()},re=e=>(t,n)=>e.transporter.read({method:o.N.Get,path:(0,r.encode)(\"1/indexes/%s/%s\",e.indexName,t)},n),ie=()=>(e,t)=>{for(const[n,r]of Object.entries(e.hits))if(r.objectID===t)return parseInt(n,10);return-1},oe=e=>(t,n)=>{const{attributesToRetrieve:r,...i}=n||{},u=t.map(t=>({indexName:e.indexName,objectID:t,...r?{attributesToRetrieve:r}:{}}));return e.transporter.read({method:o.N.Post,path:\"1/indexes/*/objects\",data:{requests:u}},i)},ue=e=>(t,n)=>e.transporter.read({method:o.N.Get,path:(0,r.encode)(\"1/indexes/%s/rules/%s\",e.indexName,t)},n),ae=e=>t=>e.transporter.read({method:o.N.Get,path:(0,r.encode)(\"1/indexes/%s/settings\",e.indexName),data:{getVersion:2}},t),le=e=>(t,n)=>e.transporter.read({method:o.N.Get,path:(0,r.encode)(\"1/indexes/%s/synonyms/%s\",e.indexName,t)},n),se=e=>(t,n)=>e.transporter.read({method:o.N.Get,path:(0,r.encode)(\"1/indexes/%s/task/%s\",e.indexName,t.toString())},n),ce=e=>(t,n)=>(0,r.createWaitablePromise)(fe(e)([t],n).then(e=>({objectID:e.objectIDs[0],taskID:e.taskIDs[0]})),(t,n)=>ke(e)(t.taskID,n)),fe=e=>(t,n)=>{const{createIfNotExists:r,...i}=n||{},o=r?xe.PartialUpdateObject:xe.PartialUpdateObjectNoCreate;return q(e)(t,o,i)},de=e=>(t,n)=>{const{safe:i,autoGenerateObjectIDIfNotExist:u,batchSize:a,...l}=n||{},s=(t,n,i,u)=>(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/operation\",t),data:{operation:i,destination:n}},u),(t,n)=>ke(e)(t.taskID,n)),c=Math.random().toString(36).substring(7),f=`${e.indexName}_tmp_${c}`,d=me({appId:e.appId,transporter:e.transporter,indexName:f});let p=[];const h=s(e.indexName,f,\"copy\",{...l,scope:[\"settings\",\"synonyms\",\"rules\"]});p.push(h);const v=(i?h.wait(l):h).then(()=>{const e=d(t,{...l,autoGenerateObjectIDIfNotExist:u,batchSize:a});return p.push(e),i?e.wait(l):e}).then(()=>{const t=s(f,e.indexName,\"move\",l);return p.push(t),i?t.wait(l):t}).then(()=>Promise.all(p)).then(([e,t,n])=>({objectIDs:t.objectIDs,taskIDs:[e.taskID,...t.taskIDs,n.taskID]}));return(0,r.createWaitablePromise)(v,(e,t)=>Promise.all(p.map(e=>e.wait(t))))},pe=e=>(t,n)=>ye(e)(t,{...n,clearExistingRules:!0}),he=e=>(t,n)=>be(e)(t,{...n,replaceExistingSynonyms:!0}),ve=e=>(t,n)=>(0,r.createWaitablePromise)(me(e)([t],n).then(e=>({objectID:e.objectIDs[0],taskID:e.taskIDs[0]})),(t,n)=>ke(e)(t.taskID,n)),me=e=>(t,n)=>{const{autoGenerateObjectIDIfNotExist:i,...o}=n||{},u=i?xe.AddObject:xe.UpdateObject;if(u===xe.UpdateObject)for(const e of t)if(void 0===e.objectID)return(0,r.createWaitablePromise)(Promise.reject({name:\"MissingObjectIDError\",message:\"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option.\"}));return q(e)(t,u,o)},ge=e=>(t,n)=>ye(e)([t],n),ye=e=>(t,n)=>{const{forwardToReplicas:u,clearExistingRules:a,...l}=n||{},s=(0,i.createMappedRequestOptions)(l);return u&&(s.queryParameters.forwardToReplicas=1),a&&(s.queryParameters.clearExistingRules=1),(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/rules/batch\",e.indexName),data:t},s),(t,n)=>ke(e)(t.taskID,n))},_e=e=>(t,n)=>be(e)([t],n),be=e=>(t,n)=>{const{forwardToReplicas:u,replaceExistingSynonyms:a,...l}=n||{},s=(0,i.createMappedRequestOptions)(l);return u&&(s.queryParameters.forwardToReplicas=1),a&&(s.queryParameters.replaceExistingSynonyms=1),(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/synonyms/batch\",e.indexName),data:t},s),(t,n)=>ke(e)(t.taskID,n))},we=e=>(t,n)=>e.transporter.read({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/query\",e.indexName),data:{query:t},cacheable:!0},n),Ee=e=>(t,n,i)=>e.transporter.read({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/facets/%s/query\",e.indexName,t),data:{facetQuery:n},cacheable:!0},i),De=e=>(t,n)=>e.transporter.read({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/rules/search\",e.indexName),data:{query:t}},n),Se=e=>(t,n)=>e.transporter.read({method:o.N.Post,path:(0,r.encode)(\"1/indexes/%s/synonyms/search\",e.indexName),data:{query:t}},n),Ce=e=>(t,n)=>{const{forwardToReplicas:u,...a}=n||{},l=(0,i.createMappedRequestOptions)(a);return u&&(l.queryParameters.forwardToReplicas=1),(0,r.createWaitablePromise)(e.transporter.write({method:o.N.Put,path:(0,r.encode)(\"1/indexes/%s/settings\",e.indexName),data:t},l),(t,n)=>ke(e)(t.taskID,n))},ke=e=>(t,n)=>(0,r.createRetryablePromise)(r=>se(e)(t,n).then(e=>\"published\"!==e.status?r():void 0)),Te={AddObject:\"addObject\",Analytics:\"analytics\",Browser:\"browse\",DeleteIndex:\"deleteIndex\",DeleteObject:\"deleteObject\",EditSettings:\"editSettings\",ListIndexes:\"listIndexes\",Logs:\"logs\",Recommendation:\"recommendation\",Search:\"search\",SeeUnretrievableAttributes:\"seeUnretrievableAttributes\",Settings:\"settings\",Usage:\"usage\"},xe={AddObject:\"addObject\",UpdateObject:\"updateObject\",PartialUpdateObject:\"partialUpdateObject\",PartialUpdateObjectNoCreate:\"partialUpdateObjectNoCreate\",DeleteObject:\"deleteObject\"},Ae={Settings:\"settings\",Synonyms:\"synonyms\",Rules:\"rules\"},Oe={None:\"none\",StopIfEnoughMatches:\"stopIfEnoughMatches\"},Pe={Synonym:\"synonym\",OneWaySynonym:\"oneWaySynonym\",AltCorrection1:\"altCorrection1\",AltCorrection2:\"altCorrection2\",Placeholder:\"placeholder\"}},8045:(e,t,n)=>{\"use strict\";function r(){return{debug:(e,t)=>Promise.resolve(),info:(e,t)=>Promise.resolve(),error:(e,t)=>Promise.resolve()}}n.r(t),n.d(t,{LogLevelEnum:()=>i,createNullLogger:()=>r});const i={Debug:1,Info:2,Error:3}},5541:(e,t,n)=>{\"use strict\";n.d(t,{N:()=>r});const r={Delete:\"DELETE\",Get:\"GET\",Post:\"POST\",Put:\"PUT\"}},9178:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createNodeHttpRequester:()=>u});var r=n(8605),i=n(7211),o=n(8835);function u(){const e={keepAlive:!0},t=new r.Agent(e),n=new i.Agent(e);return{send:e=>new Promise(u=>{const a=(0,o.parse)(e.url),l=null===a.query?a.pathname:`${a.pathname}?${a.query}`,s={agent:\"https:\"===a.protocol?n:t,hostname:a.hostname,path:l,method:e.method,headers:e.headers,...void 0!==a.port?{port:a.port||\"\"}:{}},c=(\"https:\"===a.protocol?i:r).request(s,e=>{let t=\"\";e.on(\"data\",e=>t+=e),e.on(\"end\",()=>{clearTimeout(d),clearTimeout(p),u({status:e.statusCode||0,content:t,isTimedOut:!1})})}),f=(e,t)=>setTimeout(()=>{c.abort(),u({status:0,content:t,isTimedOut:!0})},1e3*e),d=f(e.connectTimeout,\"Connection timeout\");let p;c.on(\"error\",e=>{clearTimeout(d),clearTimeout(p),u({status:0,content:e.message,isTimedOut:!1})}),c.once(\"response\",()=>{clearTimeout(d),p=f(e.responseTimeout,\"Socket timeout\")}),void 0!==e.data&&c.write(e.data),c.end()}),destroy:()=>(t.destroy(),n.destroy(),Promise.resolve())}}},7858:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{CallEnum:()=>o,HostStatusEnum:()=>u,createApiError:()=>E,createDeserializationError:()=>D,createMappedRequestOptions:()=>i,createRetryError:()=>S,createStatefulHost:()=>a,createStatelessHost:()=>c,createTransporter:()=>d,createUserAgent:()=>p,deserializeFailure:()=>v,deserializeSuccess:()=>h,isStatefulHostTimeouted:()=>s,isStatefulHostUp:()=>l,serializeData:()=>y,serializeHeaders:()=>_,serializeQueryParameters:()=>g,serializeUrl:()=>m,stackFrameWithoutCredentials:()=>w,stackTraceWithoutCredentials:()=>b});var r=n(5541);function i(e,t){const n=e||{},r=n.data||{};return Object.keys(n).forEach(e=>{-1===[\"timeout\",\"headers\",\"queryParameters\",\"data\",\"cacheable\"].indexOf(e)&&(r[e]=n[e])}),{data:Object.entries(r).length>0?r:void 0,timeout:n.timeout||t,headers:n.headers||{},queryParameters:n.queryParameters||{},cacheable:n.cacheable}}const o={Read:1,Write:2,Any:3},u={Up:1,Down:2,Timeouted:3};function a(e,t=u.Up){return{...e,status:t,lastUpdate:Date.now()}}function l(e){return e.status===u.Up||Date.now()-e.lastUpdate>12e4}function s(e){return e.status===u.Timeouted&&Date.now()-e.lastUpdate<=12e4}function c(e){return{protocol:e.protocol||\"https\",url:e.url,accept:e.accept||o.Any}}function f(e,t,n,i){const o=[],f=y(n,i),d=_(e,i),p=n.method,g=n.method!==r.N.Get?{}:{...n.data,...i.data},E={\"x-algolia-agent\":e.userAgent.value,...e.queryParameters,...g,...i.queryParameters};let D=0;const C=(t,r)=>{const l=t.pop();if(void 0===l)throw S(b(o));const s={data:f,headers:d,method:p,url:m(l,n.path,E),connectTimeout:r(D,e.timeouts.connect),responseTimeout:r(D,i.timeout)},c=e=>{const n={request:s,response:e,host:l,triesLeft:t.length};return o.push(n),n},g={onSucess:e=>h(e),onRetry(n){const i=c(n);return n.isTimedOut&&D++,Promise.all([e.logger.info(\"Retryable failure\",w(i)),e.hostsCache.set(l,a(l,n.isTimedOut?u.Timeouted:u.Down))]).then(()=>C(t,r))},onFail(e){throw c(e),v(e,b(o))}};return e.requester.send(s).then(e=>((e,t)=>(e=>{const t=e.status;return e.isTimedOut||(({isTimedOut:e,status:t})=>!e&&0==~~t)(e)||2!=~~(t/100)&&4!=~~(t/100)})(e)?t.onRetry(e):(({status:e})=>2==~~(e/100))(e)?t.onSucess(e):t.onFail(e))(e,g))};return function(e,t){return Promise.all(t.map(t=>e.get(t,()=>Promise.resolve(a(t))))).then(e=>{const n=e.filter(e=>l(e)),r=e.filter(e=>s(e)),i=[...n,...r];return{getTimeout:(e,t)=>(0===r.length&&0===e?1:r.length+3+e)*t,statelessHosts:i.length>0?i.map(e=>c(e)):t}})}(e.hostsCache,t).then(e=>C([...e.statelessHosts].reverse(),e.getTimeout))}function d(e){const{hostsCache:t,logger:n,requester:r,requestsCache:u,responsesCache:a,timeouts:l,userAgent:s,hosts:d,queryParameters:p,headers:h}=e,v={hostsCache:t,logger:n,requester:r,requestsCache:u,responsesCache:a,timeouts:l,userAgent:s,headers:h,queryParameters:p,hosts:d.map(e=>c(e)),read(e,t){const n=i(t,v.timeouts.read),r=()=>f(v,v.hosts.filter(e=>0!=(e.accept&o.Read)),e,n);if(!0!==(void 0!==n.cacheable?n.cacheable:e.cacheable))return r();const u={request:e,mappedRequestOptions:n,transporter:{queryParameters:v.queryParameters,headers:v.headers}};return v.responsesCache.get(u,()=>v.requestsCache.get(u,()=>v.requestsCache.set(u,r()).then(e=>Promise.all([v.requestsCache.delete(u),e]),e=>Promise.all([v.requestsCache.delete(u),Promise.reject(e)])).then(([e,t])=>t)),{miss:e=>v.responsesCache.set(u,e)})},write:(e,t)=>f(v,v.hosts.filter(e=>0!=(e.accept&o.Write)),e,i(t,v.timeouts.write))};return v}function p(e){const t={value:`Algolia for JavaScript (${e})`,add(e){const n=`; ${e.segment}${void 0!==e.version?` (${e.version})`:\"\"}`;return-1===t.value.indexOf(n)&&(t.value=`${t.value}${n}`),t}};return t}function h(e){try{return JSON.parse(e.content)}catch(t){throw D(t.message,e)}}function v({content:e,status:t},n){let r=e;try{r=JSON.parse(e).message}catch(e){}return E(r,t,n)}function m(e,t,n){const r=g(n);let i=`${e.protocol}://${e.url}/${\"/\"===t.charAt(0)?t.substr(1):t}`;return r.length&&(i+=\"?\"+r),i}function g(e){return Object.keys(e).map(t=>{return function(e,...t){let n=0;return e.replace(/%s/g,()=>encodeURIComponent(t[n++]))}(\"%s=%s\",t,(n=e[t],\"[object Object]\"===Object.prototype.toString.call(n)||\"[object Array]\"===Object.prototype.toString.call(n)?JSON.stringify(e[t]):e[t]));var n}).join(\"&\")}function y(e,t){if(e.method===r.N.Get||void 0===e.data&&void 0===t.data)return;const n=Array.isArray(e.data)?e.data:{...e.data,...t.data};return JSON.stringify(n)}function _(e,t){const n={...e.headers,...t.headers},r={};return Object.keys(n).forEach(e=>{const t=n[e];r[e.toLowerCase()]=t}),r}function b(e){return e.map(e=>w(e))}function w(e){const t=e.request.headers[\"x-algolia-api-key\"]?{\"x-algolia-api-key\":\"*****\"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...t}}}}function E(e,t,n){return{name:\"ApiError\",message:e,status:t,transporterStackTrace:n}}function D(e,t){return{name:\"DeserializationError\",message:e,response:t}}function S(e){return{name:\"RetryError\",message:\"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.\",transporterStackTrace:e}}},8774:(e,t,n)=>{\"use strict\";var r=n(469),i=n(6712),o=n(2223),u=n(1757),a=n(103),l=n(6586),s=n(8045),c=n(9178),f=n(7858);function d(e,t,n){const d={appId:e,apiKey:t,timeouts:{connect:2,read:5,write:30},requester:c.createNodeHttpRequester(),logger:s.createNullLogger(),responsesCache:r.createNullCache(),requestsCache:r.createNullCache(),hostsCache:i.createInMemoryCache(),userAgent:f.createUserAgent(u.version).add({segment:\"Node.js\",version:process.versions.node})};return l.createSearchClient({...d,...n,methods:{search:l.multipleQueries,searchForFacetValues:l.multipleSearchForFacetValues,multipleBatch:l.multipleBatch,multipleGetObjects:l.multipleGetObjects,multipleQueries:l.multipleQueries,copyIndex:l.copyIndex,copySettings:l.copySettings,copyRules:l.copyRules,copySynonyms:l.copySynonyms,moveIndex:l.moveIndex,listIndices:l.listIndices,getLogs:l.getLogs,listClusters:l.listClusters,multipleSearchForFacetValues:l.multipleSearchForFacetValues,getApiKey:l.getApiKey,addApiKey:l.addApiKey,listApiKeys:l.listApiKeys,updateApiKey:l.updateApiKey,deleteApiKey:l.deleteApiKey,restoreApiKey:l.restoreApiKey,assignUserID:l.assignUserID,assignUserIDs:l.assignUserIDs,getUserID:l.getUserID,searchUserIDs:l.searchUserIDs,listUserIDs:l.listUserIDs,getTopUserIDs:l.getTopUserIDs,removeUserID:l.removeUserID,hasPendingMappings:l.hasPendingMappings,generateSecuredApiKey:l.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:l.getSecuredApiKeyRemainingValidity,destroy:u.destroy,initIndex:e=>t=>l.initIndex(e)(t,{methods:{batch:l.batch,delete:l.deleteIndex,getObject:l.getObject,getObjects:l.getObjects,saveObject:l.saveObject,saveObjects:l.saveObjects,search:l.search,searchForFacetValues:l.searchForFacetValues,waitTask:l.waitTask,setSettings:l.setSettings,getSettings:l.getSettings,partialUpdateObject:l.partialUpdateObject,partialUpdateObjects:l.partialUpdateObjects,deleteObject:l.deleteObject,deleteObjects:l.deleteObjects,deleteBy:l.deleteBy,clearObjects:l.clearObjects,browseObjects:l.browseObjects,getObjectPosition:l.getObjectPosition,findObject:l.findObject,exists:l.exists,saveSynonym:l.saveSynonym,saveSynonyms:l.saveSynonyms,getSynonym:l.getSynonym,searchSynonyms:l.searchSynonyms,browseSynonyms:l.browseSynonyms,deleteSynonym:l.deleteSynonym,clearSynonyms:l.clearSynonyms,replaceAllObjects:l.replaceAllObjects,replaceAllSynonyms:l.replaceAllSynonyms,searchRules:l.searchRules,getRule:l.getRule,deleteRule:l.deleteRule,saveRule:l.saveRule,saveRules:l.saveRules,replaceAllRules:l.replaceAllRules,browseRules:l.browseRules,clearRules:l.clearRules}}),initAnalytics:()=>e=>o.createAnalyticsClient({...d,...e,methods:{addABTest:o.addABTest,getABTest:o.getABTest,getABTests:o.getABTests,stopABTest:o.stopABTest,deleteABTest:o.deleteABTest}}),initRecommendation:()=>e=>a.createRecommendationClient({...d,...e,methods:{getPersonalizationStrategy:a.getPersonalizationStrategy,setPersonalizationStrategy:a.setPersonalizationStrategy}})}})}d.version=u.version,e.exports=d},4410:(e,t,n)=>{const r=n(8774);e.exports=r,e.exports.default=r},7589:e=>{\"use strict\";const t=e.exports;e.exports.default=t;const n=\"\u001b[\",r=\"\u001b]\",i=\"\u0007\",o=\";\",u=\"Apple_Terminal\"===process.env.TERM_PROGRAM;t.cursorTo=(e,t)=>{if(\"number\"!=typeof e)throw new TypeError(\"The `x` argument is required\");return\"number\"!=typeof t?n+(e+1)+\"G\":n+(t+1)+\";\"+(e+1)+\"H\"},t.cursorMove=(e,t)=>{if(\"number\"!=typeof e)throw new TypeError(\"The `x` argument is required\");let r=\"\";return e<0?r+=n+-e+\"D\":e>0&&(r+=n+e+\"C\"),t<0?r+=n+-t+\"A\":t>0&&(r+=n+t+\"B\"),r},t.cursorUp=(e=1)=>n+e+\"A\",t.cursorDown=(e=1)=>n+e+\"B\",t.cursorForward=(e=1)=>n+e+\"C\",t.cursorBackward=(e=1)=>n+e+\"D\",t.cursorLeft=\"\u001b[G\",t.cursorSavePosition=u?\"\u001b7\":\"\u001b[s\",t.cursorRestorePosition=u?\"\u001b8\":\"\u001b[u\",t.cursorGetPosition=\"\u001b[6n\",t.cursorNextLine=\"\u001b[E\",t.cursorPrevLine=\"\u001b[F\",t.cursorHide=\"\u001b[?25l\",t.cursorShow=\"\u001b[?25h\",t.eraseLines=e=>{let n=\"\";for(let r=0;r<e;r++)n+=t.eraseLine+(r<e-1?t.cursorUp():\"\");return e&&(n+=t.cursorLeft),n},t.eraseEndLine=\"\u001b[K\",t.eraseStartLine=\"\u001b[1K\",t.eraseLine=\"\u001b[2K\",t.eraseDown=\"\u001b[J\",t.eraseUp=\"\u001b[1J\",t.eraseScreen=\"\u001b[2J\",t.scrollUp=\"\u001b[S\",t.scrollDown=\"\u001b[T\",t.clearScreen=\"\u001bc\",t.clearTerminal=\"win32\"===process.platform?t.eraseScreen+\"\u001b[0f\":t.eraseScreen+\"\u001b[3J\u001b[H\",t.beep=i,t.link=(e,t)=>[r,\"8\",o,o,t,i,e,r,\"8\",o,o,i].join(\"\"),t.image=(e,t={})=>{let n=r+\"1337;File=inline=1\";return t.width&&(n+=\";width=\"+t.width),t.height&&(n+=\";height=\"+t.height),!1===t.preserveAspectRatio&&(n+=\";preserveAspectRatio=0\"),n+\":\"+e.toString(\"base64\")+i},t.iTerm={setCwd:(e=process.cwd())=>`${r}50;CurrentDir=${e}${i}`,annotation:(e,t={})=>{let n=r+\"1337;\";const o=void 0!==t.x,u=void 0!==t.y;if((o||u)&&(!o||!u||void 0===t.length))throw new Error(\"`x`, `y` and `length` must be defined when `x` or `y` is defined\");return e=e.replace(/\\|/g,\"\"),n+=t.isHidden?\"AddHiddenAnnotation=\":\"AddAnnotation=\",t.length>0?n+=(o?[e,t.length,t.x,t.y]:[t.length,e]).join(\"|\"):n+=e,n+i}}},5378:e=>{\"use strict\";e.exports=e=>{e=Object.assign({onlyFirst:!1},e);const t=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:[a-zA-Z\\\\d]*(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(t,e.onlyFirst?void 0:\"g\")}},1337:e=>{\"use strict\";e.exports=({onlyFirst:e=!1}={})=>{const t=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:[a-zA-Z\\\\d]*(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(t,e?void 0:\"g\")}},8483:(e,t,n)=>{\"use strict\";e=n.nmd(e);const r=(e,t)=>(...n)=>`\u001b[${e(...n)+t}m`,i=(e,t)=>(...n)=>{const r=e(...n);return`\u001b[${38+t};5;${r}m`},o=(e,t)=>(...n)=>{const r=e(...n);return`\u001b[${38+t};2;${r[0]};${r[1]};${r[2]}m`},u=e=>e,a=(e,t,n)=>[e,t,n],l=(e,t,n)=>{Object.defineProperty(e,t,{get:()=>{const r=n();return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0}),r},enumerable:!0,configurable:!0})};let s;const c=(e,t,r,i)=>{void 0===s&&(s=n(2744));const o=i?10:0,u={};for(const[n,i]of Object.entries(s)){const a=\"ansi16\"===n?\"ansi\":n;n===t?u[a]=e(r,o):\"object\"==typeof i&&(u[a]=e(i[t],o))}return u};Object.defineProperty(e,\"exports\",{enumerable:!0,get:function(){const e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.gray=t.color.blackBright,t.bgColor.bgGray=t.bgColor.bgBlackBright,t.color.grey=t.color.blackBright,t.bgColor.bgGrey=t.bgColor.bgBlackBright;for(const[n,r]of Object.entries(t)){for(const[n,i]of Object.entries(r))t[n]={open:`\u001b[${i[0]}m`,close:`\u001b[${i[1]}m`},r[n]=t[n],e.set(i[0],i[1]);Object.defineProperty(t,n,{value:r,enumerable:!1})}return Object.defineProperty(t,\"codes\",{value:e,enumerable:!1}),t.color.close=\"\u001b[39m\",t.bgColor.close=\"\u001b[49m\",l(t.color,\"ansi\",()=>c(r,\"ansi16\",u,!1)),l(t.color,\"ansi256\",()=>c(i,\"ansi256\",u,!1)),l(t.color,\"ansi16m\",()=>c(o,\"rgb\",a,!1)),l(t.bgColor,\"ansi\",()=>c(r,\"ansi16\",u,!0)),l(t.bgColor,\"ansi256\",()=>c(i,\"ansi256\",u,!0)),l(t.bgColor,\"ansi16m\",()=>c(o,\"rgb\",a,!0)),t}})},5640:e=>{\"use strict\";e.exports=e=>e&&e.exact?new RegExp(\"^[\\ud800-\\udbff][\\udc00-\\udfff]$\"):new RegExp(\"[\\ud800-\\udbff][\\udc00-\\udfff]\",\"g\")},409:e=>{\"use strict\";e.exports=e=>e&&e.exact?new RegExp(\"^[\\ud800-\\udbff][\\udc00-\\udfff]$\"):new RegExp(\"[\\ud800-\\udbff][\\udc00-\\udfff]\",\"g\")},2633:e=>{\"use strict\";e.exports=(e,{include:t,exclude:n}={})=>{const r=e=>{const r=t=>\"string\"==typeof t?e===t:t.test(e);return t?t.some(r):!n||!n.some(r)};for(const[t,n]of(e=>{const t=new Set;do{for(const n of Reflect.ownKeys(e))t.add([e,n])}while((e=Reflect.getPrototypeOf(e))&&e!==Object.prototype);return t})(e.constructor.prototype)){if(\"constructor\"===n||!r(n))continue;const i=Reflect.getOwnPropertyDescriptor(t,n);i&&\"function\"==typeof i.value&&(e[n]=e[n].bind(e))}return e}},5882:(e,t,n)=>{\"use strict\";const r=n(8483),{stdout:i,stderr:o}=n(9428),{stringReplaceAll:u,stringEncaseCRLFWithFirstIndex:a}=n(3327),l=[\"ansi\",\"ansi\",\"ansi256\",\"ansi16m\"],s=Object.create(null);class c{constructor(e){return f(e)}}const f=e=>{const t={};return((e,t={})=>{if(t.level>3||t.level<0)throw new Error(\"The `level` option should be an integer from 0 to 3\");const n=i?i.level:0;e.level=void 0===t.level?n:t.level})(t,e),t.template=(...e)=>_(t.template,...e),Object.setPrototypeOf(t,d.prototype),Object.setPrototypeOf(t.template,t),t.template.constructor=()=>{throw new Error(\"`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.\")},t.template.Instance=c,t.template};function d(e){return f(e)}for(const[e,t]of Object.entries(r))s[e]={get(){const n=m(this,v(t.open,t.close,this._styler),this._isEmpty);return Object.defineProperty(this,e,{value:n}),n}};s.visible={get(){const e=m(this,this._styler,!0);return Object.defineProperty(this,\"visible\",{value:e}),e}};const p=[\"rgb\",\"hex\",\"keyword\",\"hsl\",\"hsv\",\"hwb\",\"ansi\",\"ansi256\"];for(const e of p)s[e]={get(){const{level:t}=this;return function(...n){const i=v(r.color[l[t]][e](...n),r.color.close,this._styler);return m(this,i,this._isEmpty)}}};for(const e of p){s[\"bg\"+e[0].toUpperCase()+e.slice(1)]={get(){const{level:t}=this;return function(...n){const i=v(r.bgColor[l[t]][e](...n),r.bgColor.close,this._styler);return m(this,i,this._isEmpty)}}}}const h=Object.defineProperties(()=>{},{...s,level:{enumerable:!0,get(){return this._generator.level},set(e){this._generator.level=e}}}),v=(e,t,n)=>{let r,i;return void 0===n?(r=e,i=t):(r=n.openAll+e,i=t+n.closeAll),{open:e,close:t,openAll:r,closeAll:i,parent:n}},m=(e,t,n)=>{const r=(...e)=>g(r,1===e.length?\"\"+e[0]:e.join(\" \"));return r.__proto__=h,r._generator=e,r._styler=t,r._isEmpty=n,r},g=(e,t)=>{if(e.level<=0||!t)return e._isEmpty?\"\":t;let n=e._styler;if(void 0===n)return t;const{openAll:r,closeAll:i}=n;if(-1!==t.indexOf(\"\u001b\"))for(;void 0!==n;)t=u(t,n.close,n.open),n=n.parent;const o=t.indexOf(\"\\n\");return-1!==o&&(t=a(t,i,r,o)),r+t+i};let y;const _=(e,...t)=>{const[r]=t;if(!Array.isArray(r))return t.join(\" \");const i=t.slice(1),o=[r.raw[0]];for(let e=1;e<r.length;e++)o.push(String(i[e-1]).replace(/[{}\\\\]/g,\"\\\\$&\"),String(r.raw[e]));return void 0===y&&(y=n(690)),y(e,o.join(\"\"))};Object.defineProperties(d.prototype,s);const b=d();b.supportsColor=i,b.stderr=d({level:o?o.level:0}),b.stderr.supportsColor=o,b.Level={None:0,Basic:1,Ansi256:2,TrueColor:3,0:\"None\",1:\"Basic\",2:\"Ansi256\",3:\"TrueColor\"},e.exports=b},690:e=>{\"use strict\";const t=/(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi,n=/(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g,r=/^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/,i=/\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.)|([^\\\\])/gi,o=new Map([[\"n\",\"\\n\"],[\"r\",\"\\r\"],[\"t\",\"\\t\"],[\"b\",\"\\b\"],[\"f\",\"\\f\"],[\"v\",\"\\v\"],[\"0\",\"\\0\"],[\"\\\\\",\"\\\\\"],[\"e\",\"\u001b\"],[\"a\",\"\u0007\"]]);function u(e){const t=\"u\"===e[0],n=\"{\"===e[1];return t&&!n&&5===e.length||\"x\"===e[0]&&3===e.length?String.fromCharCode(parseInt(e.slice(1),16)):t&&n?String.fromCodePoint(parseInt(e.slice(2,-1),16)):o.get(e)||e}function a(e,t){const n=[],o=t.trim().split(/\\s*,\\s*/g);let a;for(const t of o){const o=Number(t);if(Number.isNaN(o)){if(!(a=t.match(r)))throw new Error(`Invalid Chalk template style argument: ${t} (in style '${e}')`);n.push(a[2].replace(i,(e,t,n)=>t?u(t):n))}else n.push(o)}return n}function l(e){n.lastIndex=0;const t=[];let r;for(;null!==(r=n.exec(e));){const e=r[1];if(r[2]){const n=a(e,r[2]);t.push([e].concat(n))}else t.push([e])}return t}function s(e,t){const n={};for(const e of t)for(const t of e.styles)n[t[0]]=e.inverse?null:t.slice(1);let r=e;for(const[e,t]of Object.entries(n))if(Array.isArray(t)){if(!(e in r))throw new Error(\"Unknown Chalk style: \"+e);r=t.length>0?r[e](...t):r[e]}return r}e.exports=(e,n)=>{const r=[],i=[];let o=[];if(n.replace(t,(t,n,a,c,f,d)=>{if(n)o.push(u(n));else if(c){const t=o.join(\"\");o=[],i.push(0===r.length?t:s(e,r)(t)),r.push({inverse:a,styles:l(c)})}else if(f){if(0===r.length)throw new Error(\"Found extraneous } in Chalk template literal\");i.push(s(e,r)(o.join(\"\"))),o=[],r.pop()}else o.push(d)}),i.push(o.join(\"\")),r.length>0){const e=`Chalk template literal is missing ${r.length} closing bracket${1===r.length?\"\":\"s\"} (\\`}\\`)`;throw new Error(e)}return i.join(\"\")}},3327:e=>{\"use strict\";e.exports={stringReplaceAll:(e,t,n)=>{let r=e.indexOf(t);if(-1===r)return e;const i=t.length;let o=0,u=\"\";do{u+=e.substr(o,r-o)+t+n,o=r+i,r=e.indexOf(t,o)}while(-1!==r);return u+=e.substr(o),u},stringEncaseCRLFWithFirstIndex:(e,t,n,r)=>{let i=0,o=\"\";do{const u=\"\\r\"===e[r-1];o+=e.substr(i,(u?r-1:r)-i)+t+(u?\"\\r\\n\":\"\\n\")+n,i=r+1,r=e.indexOf(\"\\n\",i)}while(-1!==r);return o+=e.substr(i),o}}},1525:(e,t,n)=>{\"use strict\";const r=n(8483),{stdout:i,stderr:o}=n(9428),{stringReplaceAll:u,stringEncaseCRLFWithFirstIndex:a}=n(6539),{isArray:l}=Array,s=[\"ansi\",\"ansi\",\"ansi256\",\"ansi16m\"],c=Object.create(null);class f{constructor(e){return d(e)}}const d=e=>{const t={};return((e,t={})=>{if(t.level&&!(Number.isInteger(t.level)&&t.level>=0&&t.level<=3))throw new Error(\"The `level` option should be an integer from 0 to 3\");const n=i?i.level:0;e.level=void 0===t.level?n:t.level})(t,e),t.template=(...e)=>b(t.template,...e),Object.setPrototypeOf(t,p.prototype),Object.setPrototypeOf(t.template,t),t.template.constructor=()=>{throw new Error(\"`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.\")},t.template.Instance=f,t.template};function p(e){return d(e)}for(const[e,t]of Object.entries(r))c[e]={get(){const n=g(this,m(t.open,t.close,this._styler),this._isEmpty);return Object.defineProperty(this,e,{value:n}),n}};c.visible={get(){const e=g(this,this._styler,!0);return Object.defineProperty(this,\"visible\",{value:e}),e}};const h=[\"rgb\",\"hex\",\"keyword\",\"hsl\",\"hsv\",\"hwb\",\"ansi\",\"ansi256\"];for(const e of h)c[e]={get(){const{level:t}=this;return function(...n){const i=m(r.color[s[t]][e](...n),r.color.close,this._styler);return g(this,i,this._isEmpty)}}};for(const e of h){c[\"bg\"+e[0].toUpperCase()+e.slice(1)]={get(){const{level:t}=this;return function(...n){const i=m(r.bgColor[s[t]][e](...n),r.bgColor.close,this._styler);return g(this,i,this._isEmpty)}}}}const v=Object.defineProperties(()=>{},{...c,level:{enumerable:!0,get(){return this._generator.level},set(e){this._generator.level=e}}}),m=(e,t,n)=>{let r,i;return void 0===n?(r=e,i=t):(r=n.openAll+e,i=t+n.closeAll),{open:e,close:t,openAll:r,closeAll:i,parent:n}},g=(e,t,n)=>{const r=(...e)=>l(e[0])&&l(e[0].raw)?y(r,b(r,...e)):y(r,1===e.length?\"\"+e[0]:e.join(\" \"));return Object.setPrototypeOf(r,v),r._generator=e,r._styler=t,r._isEmpty=n,r},y=(e,t)=>{if(e.level<=0||!t)return e._isEmpty?\"\":t;let n=e._styler;if(void 0===n)return t;const{openAll:r,closeAll:i}=n;if(-1!==t.indexOf(\"\u001b\"))for(;void 0!==n;)t=u(t,n.close,n.open),n=n.parent;const o=t.indexOf(\"\\n\");return-1!==o&&(t=a(t,i,r,o)),r+t+i};let _;const b=(e,...t)=>{const[r]=t;if(!l(r)||!l(r.raw))return t.join(\" \");const i=t.slice(1),o=[r.raw[0]];for(let e=1;e<r.length;e++)o.push(String(i[e-1]).replace(/[{}\\\\]/g,\"\\\\$&\"),String(r.raw[e]));return void 0===_&&(_=n(534)),_(e,o.join(\"\"))};Object.defineProperties(p.prototype,c);const w=p();w.supportsColor=i,w.stderr=p({level:o?o.level:0}),w.stderr.supportsColor=o,e.exports=w},534:e=>{\"use strict\";const t=/(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi,n=/(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g,r=/^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/,i=/\\\\(u(?:[a-f\\d]{4}|{[a-f\\d]{1,6}})|x[a-f\\d]{2}|.)|([^\\\\])/gi,o=new Map([[\"n\",\"\\n\"],[\"r\",\"\\r\"],[\"t\",\"\\t\"],[\"b\",\"\\b\"],[\"f\",\"\\f\"],[\"v\",\"\\v\"],[\"0\",\"\\0\"],[\"\\\\\",\"\\\\\"],[\"e\",\"\u001b\"],[\"a\",\"\u0007\"]]);function u(e){const t=\"u\"===e[0],n=\"{\"===e[1];return t&&!n&&5===e.length||\"x\"===e[0]&&3===e.length?String.fromCharCode(parseInt(e.slice(1),16)):t&&n?String.fromCodePoint(parseInt(e.slice(2,-1),16)):o.get(e)||e}function a(e,t){const n=[],o=t.trim().split(/\\s*,\\s*/g);let a;for(const t of o){const o=Number(t);if(Number.isNaN(o)){if(!(a=t.match(r)))throw new Error(`Invalid Chalk template style argument: ${t} (in style '${e}')`);n.push(a[2].replace(i,(e,t,n)=>t?u(t):n))}else n.push(o)}return n}function l(e){n.lastIndex=0;const t=[];let r;for(;null!==(r=n.exec(e));){const e=r[1];if(r[2]){const n=a(e,r[2]);t.push([e].concat(n))}else t.push([e])}return t}function s(e,t){const n={};for(const e of t)for(const t of e.styles)n[t[0]]=e.inverse?null:t.slice(1);let r=e;for(const[e,t]of Object.entries(n))if(Array.isArray(t)){if(!(e in r))throw new Error(\"Unknown Chalk style: \"+e);r=t.length>0?r[e](...t):r[e]}return r}e.exports=(e,n)=>{const r=[],i=[];let o=[];if(n.replace(t,(t,n,a,c,f,d)=>{if(n)o.push(u(n));else if(c){const t=o.join(\"\");o=[],i.push(0===r.length?t:s(e,r)(t)),r.push({inverse:a,styles:l(c)})}else if(f){if(0===r.length)throw new Error(\"Found extraneous } in Chalk template literal\");i.push(s(e,r)(o.join(\"\"))),o=[],r.pop()}else o.push(d)}),i.push(o.join(\"\")),r.length>0){const e=`Chalk template literal is missing ${r.length} closing bracket${1===r.length?\"\":\"s\"} (\\`}\\`)`;throw new Error(e)}return i.join(\"\")}},6539:e=>{\"use strict\";e.exports={stringReplaceAll:(e,t,n)=>{let r=e.indexOf(t);if(-1===r)return e;const i=t.length;let o=0,u=\"\";do{u+=e.substr(o,r-o)+t+n,o=r+i,r=e.indexOf(t,o)}while(-1!==r);return u+=e.substr(o),u},stringEncaseCRLFWithFirstIndex:(e,t,n,r)=>{let i=0,o=\"\";do{const u=\"\\r\"===e[r-1];o+=e.substr(i,(u?r-1:r)-i)+t+(u?\"\\r\\n\":\"\\n\")+n,i=r+1,r=e.indexOf(\"\\n\",i)}while(-1!==r);return o+=e.substr(i),o}}},5864:(e,t,n)=>{\"use strict\";var r=n(5832),i=process.env;function o(e){return\"string\"==typeof e?!!i[e]:Object.keys(e).every((function(t){return i[t]===e[t]}))}Object.defineProperty(t,\"_vendors\",{value:r.map((function(e){return e.constant}))}),t.name=null,t.isPR=null,r.forEach((function(e){var n=(Array.isArray(e.env)?e.env:[e.env]).every((function(e){return o(e)}));if(t[e.constant]=n,n)switch(t.name=e.name,typeof e.pr){case\"string\":t.isPR=!!i[e.pr];break;case\"object\":\"env\"in e.pr?t.isPR=e.pr.env in i&&i[e.pr.env]!==e.pr.ne:\"any\"in e.pr?t.isPR=e.pr.any.some((function(e){return!!i[e]})):t.isPR=o(e.pr);break;default:t.isPR=null}})),t.isCI=!!(i.CI||i.CONTINUOUS_INTEGRATION||i.BUILD_NUMBER||i.RUN_ID||t.name)},5832:e=>{\"use strict\";e.exports=JSON.parse('[{\"name\":\"AppVeyor\",\"constant\":\"APPVEYOR\",\"env\":\"APPVEYOR\",\"pr\":\"APPVEYOR_PULL_REQUEST_NUMBER\"},{\"name\":\"Azure Pipelines\",\"constant\":\"AZURE_PIPELINES\",\"env\":\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\",\"pr\":\"SYSTEM_PULLREQUEST_PULLREQUESTID\"},{\"name\":\"Bamboo\",\"constant\":\"BAMBOO\",\"env\":\"bamboo_planKey\"},{\"name\":\"Bitbucket Pipelines\",\"constant\":\"BITBUCKET\",\"env\":\"BITBUCKET_COMMIT\",\"pr\":\"BITBUCKET_PR_ID\"},{\"name\":\"Bitrise\",\"constant\":\"BITRISE\",\"env\":\"BITRISE_IO\",\"pr\":\"BITRISE_PULL_REQUEST\"},{\"name\":\"Buddy\",\"constant\":\"BUDDY\",\"env\":\"BUDDY_WORKSPACE_ID\",\"pr\":\"BUDDY_EXECUTION_PULL_REQUEST_ID\"},{\"name\":\"Buildkite\",\"constant\":\"BUILDKITE\",\"env\":\"BUILDKITE\",\"pr\":{\"env\":\"BUILDKITE_PULL_REQUEST\",\"ne\":\"false\"}},{\"name\":\"CircleCI\",\"constant\":\"CIRCLE\",\"env\":\"CIRCLECI\",\"pr\":\"CIRCLE_PULL_REQUEST\"},{\"name\":\"Cirrus CI\",\"constant\":\"CIRRUS\",\"env\":\"CIRRUS_CI\",\"pr\":\"CIRRUS_PR\"},{\"name\":\"AWS CodeBuild\",\"constant\":\"CODEBUILD\",\"env\":\"CODEBUILD_BUILD_ARN\"},{\"name\":\"Codeship\",\"constant\":\"CODESHIP\",\"env\":{\"CI_NAME\":\"codeship\"}},{\"name\":\"Drone\",\"constant\":\"DRONE\",\"env\":\"DRONE\",\"pr\":{\"DRONE_BUILD_EVENT\":\"pull_request\"}},{\"name\":\"dsari\",\"constant\":\"DSARI\",\"env\":\"DSARI\"},{\"name\":\"GitLab CI\",\"constant\":\"GITLAB\",\"env\":\"GITLAB_CI\"},{\"name\":\"GoCD\",\"constant\":\"GOCD\",\"env\":\"GO_PIPELINE_LABEL\"},{\"name\":\"Hudson\",\"constant\":\"HUDSON\",\"env\":\"HUDSON_URL\"},{\"name\":\"Jenkins\",\"constant\":\"JENKINS\",\"env\":[\"JENKINS_URL\",\"BUILD_ID\"],\"pr\":{\"any\":[\"ghprbPullId\",\"CHANGE_ID\"]}},{\"name\":\"Magnum CI\",\"constant\":\"MAGNUM\",\"env\":\"MAGNUM\"},{\"name\":\"Netlify CI\",\"constant\":\"NETLIFY\",\"env\":\"NETLIFY_BUILD_BASE\",\"pr\":{\"env\":\"PULL_REQUEST\",\"ne\":\"false\"}},{\"name\":\"Sail CI\",\"constant\":\"SAIL\",\"env\":\"SAILCI\",\"pr\":\"SAIL_PULL_REQUEST_NUMBER\"},{\"name\":\"Semaphore\",\"constant\":\"SEMAPHORE\",\"env\":\"SEMAPHORE\",\"pr\":\"PULL_REQUEST_NUMBER\"},{\"name\":\"Shippable\",\"constant\":\"SHIPPABLE\",\"env\":\"SHIPPABLE\",\"pr\":{\"IS_PULL_REQUEST\":\"true\"}},{\"name\":\"Solano CI\",\"constant\":\"SOLANO\",\"env\":\"TDDIUM\",\"pr\":\"TDDIUM_PR_ID\"},{\"name\":\"Strider CD\",\"constant\":\"STRIDER\",\"env\":\"STRIDER\"},{\"name\":\"TaskCluster\",\"constant\":\"TASKCLUSTER\",\"env\":[\"TASK_ID\",\"RUN_ID\"]},{\"name\":\"TeamCity\",\"constant\":\"TEAMCITY\",\"env\":\"TEAMCITY_VERSION\"},{\"name\":\"Travis CI\",\"constant\":\"TRAVIS\",\"env\":\"TRAVIS\",\"pr\":{\"env\":\"TRAVIS_PULL_REQUEST\",\"ne\":\"false\"}}]')},4163:e=>{\"use strict\";e.exports=JSON.parse('{\"single\":{\"topLeft\":\"┌\",\"topRight\":\"┐\",\"bottomRight\":\"┘\",\"bottomLeft\":\"└\",\"vertical\":\"│\",\"horizontal\":\"─\"},\"double\":{\"topLeft\":\"╔\",\"topRight\":\"╗\",\"bottomRight\":\"╝\",\"bottomLeft\":\"╚\",\"vertical\":\"║\",\"horizontal\":\"═\"},\"round\":{\"topLeft\":\"╭\",\"topRight\":\"╮\",\"bottomRight\":\"╯\",\"bottomLeft\":\"╰\",\"vertical\":\"│\",\"horizontal\":\"─\"},\"bold\":{\"topLeft\":\"┏\",\"topRight\":\"┓\",\"bottomRight\":\"┛\",\"bottomLeft\":\"┗\",\"vertical\":\"┃\",\"horizontal\":\"━\"},\"singleDouble\":{\"topLeft\":\"╓\",\"topRight\":\"╖\",\"bottomRight\":\"╜\",\"bottomLeft\":\"╙\",\"vertical\":\"║\",\"horizontal\":\"─\"},\"doubleSingle\":{\"topLeft\":\"╒\",\"topRight\":\"╕\",\"bottomRight\":\"╛\",\"bottomLeft\":\"╘\",\"vertical\":\"│\",\"horizontal\":\"═\"},\"classic\":{\"topLeft\":\"+\",\"topRight\":\"+\",\"bottomRight\":\"+\",\"bottomLeft\":\"+\",\"vertical\":\"|\",\"horizontal\":\"-\"}}')},4097:(e,t,n)=>{\"use strict\";const r=n(4163);e.exports=r,e.exports.default=r},1696:(e,t,n)=>{\"use strict\";const r=n(3390);let i=!1;t.show=(e=process.stderr)=>{e.isTTY&&(i=!1,e.write(\"\u001b[?25h\"))},t.hide=(e=process.stderr)=>{e.isTTY&&(r(),i=!0,e.write(\"\u001b[?25l\"))},t.toggle=(e,n)=>{void 0!==e&&(i=e),i?t.show(n):t.hide(n)}},5301:(e,t,n)=>{\"use strict\";const r=n(1566),i=n(5043);function o(e,t,n){if(\" \"===e.charAt(t))return t;for(let r=1;r<=3;r++)if(n){if(\" \"===e.charAt(t+r))return t+r}else if(\" \"===e.charAt(t-r))return t-r;return t}e.exports=(e,t,n)=>{n={position:\"end\",preferTruncationOnSpace:!1,...n};const{position:u,space:a,preferTruncationOnSpace:l}=n;let s=\"…\",c=1;if(\"string\"!=typeof e)throw new TypeError(\"Expected `input` to be a string, got \"+typeof e);if(\"number\"!=typeof t)throw new TypeError(\"Expected `columns` to be a number, got \"+typeof t);if(t<1)return\"\";if(1===t)return s;const f=i(e);if(f<=t)return e;if(\"start\"===u){if(l){const n=o(e,f-t+1,!0);return s+r(e,n,f).trim()}return!0===a&&(s+=\" \",c=2),s+r(e,f-t+c,f)}if(\"middle\"===u){!0===a&&(s=\" \"+s+\" \",c=3);const n=Math.floor(t/2);if(l){const i=o(e,n),u=o(e,f-(t-n)+1,!0);return r(e,0,i)+s+r(e,u,f).trim()}return r(e,0,n)+s+r(e,f-(t-n)+c,f)}if(\"end\"===u){if(l){const n=o(e,t-1);return r(e,0,n)+s}return!0===a&&(s=\" \"+s,c=2),r(e,0,t-c)+s}throw new Error(\"Expected `options.position` to be either `start`, `middle` or `end`, got \"+u)}},9908:(e,t,n)=>{\"use strict\";const r=n(3287);e.exports=(e,t,n)=>{if(\"string\"!=typeof e)throw new TypeError(\"Source code is missing.\");if(!t||t<1)throw new TypeError(\"Line number must start from `1`.\");if(!(t>(e=r(e).split(/\\r?\\n/)).length))return((e,t)=>{const n=[],r=e+t;for(let i=e-t;i<=r;i++)n.push(i);return n})(t,(n={around:3,...n}).around).filter(t=>void 0!==e[t-1]).map(t=>({line:t,value:e[t-1]}))}},5311:(e,t,n)=>{const r=n(3300),i={};for(const e of Object.keys(r))i[r[e]]=e;const o={rgb:{channels:3,labels:\"rgb\"},hsl:{channels:3,labels:\"hsl\"},hsv:{channels:3,labels:\"hsv\"},hwb:{channels:3,labels:\"hwb\"},cmyk:{channels:4,labels:\"cmyk\"},xyz:{channels:3,labels:\"xyz\"},lab:{channels:3,labels:\"lab\"},lch:{channels:3,labels:\"lch\"},hex:{channels:1,labels:[\"hex\"]},keyword:{channels:1,labels:[\"keyword\"]},ansi16:{channels:1,labels:[\"ansi16\"]},ansi256:{channels:1,labels:[\"ansi256\"]},hcg:{channels:3,labels:[\"h\",\"c\",\"g\"]},apple:{channels:3,labels:[\"r16\",\"g16\",\"b16\"]},gray:{channels:1,labels:[\"gray\"]}};e.exports=o;for(const e of Object.keys(o)){if(!(\"channels\"in o[e]))throw new Error(\"missing channels property: \"+e);if(!(\"labels\"in o[e]))throw new Error(\"missing channel labels property: \"+e);if(o[e].labels.length!==o[e].channels)throw new Error(\"channel and label counts mismatch: \"+e);const{channels:t,labels:n}=o[e];delete o[e].channels,delete o[e].labels,Object.defineProperty(o[e],\"channels\",{value:t}),Object.defineProperty(o[e],\"labels\",{value:n})}o.rgb.hsl=function(e){const t=e[0]/255,n=e[1]/255,r=e[2]/255,i=Math.min(t,n,r),o=Math.max(t,n,r),u=o-i;let a,l;o===i?a=0:t===o?a=(n-r)/u:n===o?a=2+(r-t)/u:r===o&&(a=4+(t-n)/u),a=Math.min(60*a,360),a<0&&(a+=360);const s=(i+o)/2;return l=o===i?0:s<=.5?u/(o+i):u/(2-o-i),[a,100*l,100*s]},o.rgb.hsv=function(e){let t,n,r,i,o;const u=e[0]/255,a=e[1]/255,l=e[2]/255,s=Math.max(u,a,l),c=s-Math.min(u,a,l),f=function(e){return(s-e)/6/c+.5};return 0===c?(i=0,o=0):(o=c/s,t=f(u),n=f(a),r=f(l),u===s?i=r-n:a===s?i=1/3+t-r:l===s&&(i=2/3+n-t),i<0?i+=1:i>1&&(i-=1)),[360*i,100*o,100*s]},o.rgb.hwb=function(e){const t=e[0],n=e[1];let r=e[2];const i=o.rgb.hsl(e)[0],u=1/255*Math.min(t,Math.min(n,r));return r=1-1/255*Math.max(t,Math.max(n,r)),[i,100*u,100*r]},o.rgb.cmyk=function(e){const t=e[0]/255,n=e[1]/255,r=e[2]/255,i=Math.min(1-t,1-n,1-r);return[100*((1-t-i)/(1-i)||0),100*((1-n-i)/(1-i)||0),100*((1-r-i)/(1-i)||0),100*i]},o.rgb.keyword=function(e){const t=i[e];if(t)return t;let n,o=1/0;for(const t of Object.keys(r)){const i=r[t],l=(a=i,((u=e)[0]-a[0])**2+(u[1]-a[1])**2+(u[2]-a[2])**2);l<o&&(o=l,n=t)}var u,a;return n},o.keyword.rgb=function(e){return r[e]},o.rgb.xyz=function(e){let t=e[0]/255,n=e[1]/255,r=e[2]/255;t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92;return[100*(.4124*t+.3576*n+.1805*r),100*(.2126*t+.7152*n+.0722*r),100*(.0193*t+.1192*n+.9505*r)]},o.rgb.lab=function(e){const t=o.rgb.xyz(e);let n=t[0],r=t[1],i=t[2];n/=95.047,r/=100,i/=108.883,n=n>.008856?n**(1/3):7.787*n+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;return[116*r-16,500*(n-r),200*(r-i)]},o.hsl.rgb=function(e){const t=e[0]/360,n=e[1]/100,r=e[2]/100;let i,o,u;if(0===n)return u=255*r,[u,u,u];i=r<.5?r*(1+n):r+n-r*n;const a=2*r-i,l=[0,0,0];for(let e=0;e<3;e++)o=t+1/3*-(e-1),o<0&&o++,o>1&&o--,u=6*o<1?a+6*(i-a)*o:2*o<1?i:3*o<2?a+(i-a)*(2/3-o)*6:a,l[e]=255*u;return l},o.hsl.hsv=function(e){const t=e[0];let n=e[1]/100,r=e[2]/100,i=n;const o=Math.max(r,.01);r*=2,n*=r<=1?r:2-r,i*=o<=1?o:2-o;return[t,100*(0===r?2*i/(o+i):2*n/(r+n)),100*((r+n)/2)]},o.hsv.rgb=function(e){const t=e[0]/60,n=e[1]/100;let r=e[2]/100;const i=Math.floor(t)%6,o=t-Math.floor(t),u=255*r*(1-n),a=255*r*(1-n*o),l=255*r*(1-n*(1-o));switch(r*=255,i){case 0:return[r,l,u];case 1:return[a,r,u];case 2:return[u,r,l];case 3:return[u,a,r];case 4:return[l,u,r];case 5:return[r,u,a]}},o.hsv.hsl=function(e){const t=e[0],n=e[1]/100,r=e[2]/100,i=Math.max(r,.01);let o,u;u=(2-n)*r;const a=(2-n)*i;return o=n*i,o/=a<=1?a:2-a,o=o||0,u/=2,[t,100*o,100*u]},o.hwb.rgb=function(e){const t=e[0]/360;let n=e[1]/100,r=e[2]/100;const i=n+r;let o;i>1&&(n/=i,r/=i);const u=Math.floor(6*t),a=1-r;o=6*t-u,0!=(1&u)&&(o=1-o);const l=n+o*(a-n);let s,c,f;switch(u){default:case 6:case 0:s=a,c=l,f=n;break;case 1:s=l,c=a,f=n;break;case 2:s=n,c=a,f=l;break;case 3:s=n,c=l,f=a;break;case 4:s=l,c=n,f=a;break;case 5:s=a,c=n,f=l}return[255*s,255*c,255*f]},o.cmyk.rgb=function(e){const t=e[0]/100,n=e[1]/100,r=e[2]/100,i=e[3]/100;return[255*(1-Math.min(1,t*(1-i)+i)),255*(1-Math.min(1,n*(1-i)+i)),255*(1-Math.min(1,r*(1-i)+i))]},o.xyz.rgb=function(e){const t=e[0]/100,n=e[1]/100,r=e[2]/100;let i,o,u;return i=3.2406*t+-1.5372*n+-.4986*r,o=-.9689*t+1.8758*n+.0415*r,u=.0557*t+-.204*n+1.057*r,i=i>.0031308?1.055*i**(1/2.4)-.055:12.92*i,o=o>.0031308?1.055*o**(1/2.4)-.055:12.92*o,u=u>.0031308?1.055*u**(1/2.4)-.055:12.92*u,i=Math.min(Math.max(0,i),1),o=Math.min(Math.max(0,o),1),u=Math.min(Math.max(0,u),1),[255*i,255*o,255*u]},o.xyz.lab=function(e){let t=e[0],n=e[1],r=e[2];t/=95.047,n/=100,r/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,r=r>.008856?r**(1/3):7.787*r+16/116;return[116*n-16,500*(t-n),200*(n-r)]},o.lab.xyz=function(e){let t,n,r;n=(e[0]+16)/116,t=e[1]/500+n,r=n-e[2]/200;const i=n**3,o=t**3,u=r**3;return n=i>.008856?i:(n-16/116)/7.787,t=o>.008856?o:(t-16/116)/7.787,r=u>.008856?u:(r-16/116)/7.787,t*=95.047,n*=100,r*=108.883,[t,n,r]},o.lab.lch=function(e){const t=e[0],n=e[1],r=e[2];let i;i=360*Math.atan2(r,n)/2/Math.PI,i<0&&(i+=360);return[t,Math.sqrt(n*n+r*r),i]},o.lch.lab=function(e){const t=e[0],n=e[1],r=e[2]/360*2*Math.PI;return[t,n*Math.cos(r),n*Math.sin(r)]},o.rgb.ansi16=function(e,t=null){const[n,r,i]=e;let u=null===t?o.rgb.hsv(e)[2]:t;if(u=Math.round(u/50),0===u)return 30;let a=30+(Math.round(i/255)<<2|Math.round(r/255)<<1|Math.round(n/255));return 2===u&&(a+=60),a},o.hsv.ansi16=function(e){return o.rgb.ansi16(o.hsv.rgb(e),e[2])},o.rgb.ansi256=function(e){const t=e[0],n=e[1],r=e[2];if(t===n&&n===r)return t<8?16:t>248?231:Math.round((t-8)/247*24)+232;return 16+36*Math.round(t/255*5)+6*Math.round(n/255*5)+Math.round(r/255*5)},o.ansi16.rgb=function(e){let t=e%10;if(0===t||7===t)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];const n=.5*(1+~~(e>50));return[(1&t)*n*255,(t>>1&1)*n*255,(t>>2&1)*n*255]},o.ansi256.rgb=function(e){if(e>=232){const t=10*(e-232)+8;return[t,t,t]}let t;e-=16;return[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},o.rgb.hex=function(e){const t=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return\"000000\".substring(t.length)+t},o.hex.rgb=function(e){const t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let n=t[0];3===t[0].length&&(n=n.split(\"\").map(e=>e+e).join(\"\"));const r=parseInt(n,16);return[r>>16&255,r>>8&255,255&r]},o.rgb.hcg=function(e){const t=e[0]/255,n=e[1]/255,r=e[2]/255,i=Math.max(Math.max(t,n),r),o=Math.min(Math.min(t,n),r),u=i-o;let a,l;return a=u<1?o/(1-u):0,l=u<=0?0:i===t?(n-r)/u%6:i===n?2+(r-t)/u:4+(t-n)/u,l/=6,l%=1,[360*l,100*u,100*a]},o.hsl.hcg=function(e){const t=e[1]/100,n=e[2]/100,r=n<.5?2*t*n:2*t*(1-n);let i=0;return r<1&&(i=(n-.5*r)/(1-r)),[e[0],100*r,100*i]},o.hsv.hcg=function(e){const t=e[1]/100,n=e[2]/100,r=t*n;let i=0;return r<1&&(i=(n-r)/(1-r)),[e[0],100*r,100*i]},o.hcg.rgb=function(e){const t=e[0]/360,n=e[1]/100,r=e[2]/100;if(0===n)return[255*r,255*r,255*r];const i=[0,0,0],o=t%1*6,u=o%1,a=1-u;let l=0;switch(Math.floor(o)){case 0:i[0]=1,i[1]=u,i[2]=0;break;case 1:i[0]=a,i[1]=1,i[2]=0;break;case 2:i[0]=0,i[1]=1,i[2]=u;break;case 3:i[0]=0,i[1]=a,i[2]=1;break;case 4:i[0]=u,i[1]=0,i[2]=1;break;default:i[0]=1,i[1]=0,i[2]=a}return l=(1-n)*r,[255*(n*i[0]+l),255*(n*i[1]+l),255*(n*i[2]+l)]},o.hcg.hsv=function(e){const t=e[1]/100,n=t+e[2]/100*(1-t);let r=0;return n>0&&(r=t/n),[e[0],100*r,100*n]},o.hcg.hsl=function(e){const t=e[1]/100,n=e[2]/100*(1-t)+.5*t;let r=0;return n>0&&n<.5?r=t/(2*n):n>=.5&&n<1&&(r=t/(2*(1-n))),[e[0],100*r,100*n]},o.hcg.hwb=function(e){const t=e[1]/100,n=t+e[2]/100*(1-t);return[e[0],100*(n-t),100*(1-n)]},o.hwb.hcg=function(e){const t=e[1]/100,n=1-e[2]/100,r=n-t;let i=0;return r<1&&(i=(n-r)/(1-r)),[e[0],100*r,100*i]},o.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},o.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},o.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},o.gray.hsl=function(e){return[0,0,e[0]]},o.gray.hsv=o.gray.hsl,o.gray.hwb=function(e){return[0,100,e[0]]},o.gray.cmyk=function(e){return[0,0,0,e[0]]},o.gray.lab=function(e){return[e[0],0,0]},o.gray.hex=function(e){const t=255&Math.round(e[0]/100*255),n=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return\"000000\".substring(n.length)+n},o.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}},2744:(e,t,n)=>{const r=n(5311),i=n(8577),o={};Object.keys(r).forEach(e=>{o[e]={},Object.defineProperty(o[e],\"channels\",{value:r[e].channels}),Object.defineProperty(o[e],\"labels\",{value:r[e].labels});const t=i(e);Object.keys(t).forEach(n=>{const r=t[n];o[e][n]=function(e){const t=function(...t){const n=t[0];if(null==n)return n;n.length>1&&(t=n);const r=e(t);if(\"object\"==typeof r)for(let e=r.length,t=0;t<e;t++)r[t]=Math.round(r[t]);return r};return\"conversion\"in e&&(t.conversion=e.conversion),t}(r),o[e][n].raw=function(e){const t=function(...t){const n=t[0];return null==n?n:(n.length>1&&(t=n),e(t))};return\"conversion\"in e&&(t.conversion=e.conversion),t}(r)})}),e.exports=o},8577:(e,t,n)=>{const r=n(5311);function i(e){const t=function(){const e={},t=Object.keys(r);for(let n=t.length,r=0;r<n;r++)e[t[r]]={distance:-1,parent:null};return e}(),n=[e];for(t[e].distance=0;n.length;){const e=n.pop(),i=Object.keys(r[e]);for(let r=i.length,o=0;o<r;o++){const r=i[o],u=t[r];-1===u.distance&&(u.distance=t[e].distance+1,u.parent=e,n.unshift(r))}}return t}function o(e,t){return function(n){return t(e(n))}}function u(e,t){const n=[t[e].parent,e];let i=r[t[e].parent][e],u=t[e].parent;for(;t[u].parent;)n.unshift(t[u].parent),i=o(r[t[u].parent][u],i),u=t[u].parent;return i.conversion=n,i}e.exports=function(e){const t=i(e),n={},r=Object.keys(t);for(let e=r.length,i=0;i<e;i++){const e=r[i];null!==t[e].parent&&(n[e]=u(e,t))}return n}},3300:e=>{\"use strict\";e.exports={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],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,221],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:[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]}},3287:e=>{\"use strict\";e.exports=(e,t)=>e.replace(/^\\t+/gm,e=>\" \".repeat(e.length*(t||2)))},1013:e=>{\"use strict\";e.exports=function(){return/\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C\\uDFFB|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83D[\\uDC66\\uDC67]|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)\\uD83C\\uDFFB|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83D\\uDC69(?:\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|(?:(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)\\uFE0F|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\u200D[\\u2640\\u2642])|\\uD83C\\uDFF4\\u200D\\u2620)\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDF6\\uD83C\\uDDE6|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDB5\\uDDB6\\uDDBB\\uDDD2-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5\\uDEEB\\uDEEC\\uDEF4-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g}},8759:e=>{\"use strict\";const t=/[|\\\\{}()[\\]^$+*?.-]/g;e.exports=e=>{if(\"string\"!=typeof e)throw new TypeError(\"Expected a string\");return e.replace(t,\"\\\\$&\")}},2918:e=>{\"use strict\";e.exports=(e,t=process.argv)=>{const n=e.startsWith(\"-\")?\"\":1===e.length?\"-\":\"--\",r=t.indexOf(n+e),i=t.indexOf(\"--\");return-1!==r&&(-1===i||r<i)}},9646:e=>{\"use strict\";e.exports=(e,t=1,n)=>{if(n={indent:\" \",includeEmptyLines:!1,...n},\"string\"!=typeof e)throw new TypeError(`Expected \\`input\\` to be a \\`string\\`, got \\`${typeof e}\\``);if(\"number\"!=typeof t)throw new TypeError(`Expected \\`count\\` to be a \\`number\\`, got \\`${typeof t}\\``);if(\"string\"!=typeof n.indent)throw new TypeError(`Expected \\`options.indent\\` to be a \\`string\\`, got \\`${typeof n.indent}\\``);if(0===t)return e;const r=n.includeEmptyLines?/^/gm:/^(?!\\s*$)/gm;return e.replace(r,n.indent.repeat(t))}},2738:(e,t,n)=>{\"use strict\";e.exports=n(5864).isCI},7347:e=>{\"use strict\";const t=e=>!Number.isNaN(e)&&(e>=4352&&(e<=4447||9001===e||9002===e||11904<=e&&e<=12871&&12351!==e||12880<=e&&e<=19903||19968<=e&&e<=42182||43360<=e&&e<=43388||44032<=e&&e<=55203||63744<=e&&e<=64255||65040<=e&&e<=65049||65072<=e&&e<=65131||65281<=e&&e<=65376||65504<=e&&e<=65510||110592<=e&&e<=110593||127488<=e&&e<=127569||131072<=e&&e<=262141));e.exports=t,e.exports.default=t},464:function(e,t,n){var r;\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 */e=n.nmd(e),function(){var i=\"Expected a function\",o=\"__lodash_placeholder__\",u=[[\"ary\",128],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",32],[\"partialRight\",64],[\"rearg\",256]],a=\"[object Arguments]\",l=\"[object Array]\",s=\"[object Boolean]\",c=\"[object Date]\",f=\"[object Error]\",d=\"[object Function]\",p=\"[object GeneratorFunction]\",h=\"[object Map]\",v=\"[object Number]\",m=\"[object Object]\",g=\"[object RegExp]\",y=\"[object Set]\",_=\"[object String]\",b=\"[object Symbol]\",w=\"[object WeakMap]\",E=\"[object ArrayBuffer]\",D=\"[object DataView]\",S=\"[object Float32Array]\",C=\"[object Float64Array]\",k=\"[object Int8Array]\",T=\"[object Int16Array]\",x=\"[object Int32Array]\",A=\"[object Uint8Array]\",O=\"[object Uint16Array]\",P=\"[object Uint32Array]\",I=/\\b__p \\+= '';/g,N=/\\b(__p \\+=) '' \\+/g,M=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,R=/&(?:amp|lt|gt|quot|#39);/g,F=/[&<>\"']/g,L=RegExp(R.source),B=RegExp(F.source),j=/<%-([\\s\\S]+?)%>/g,U=/<%([\\s\\S]+?)%>/g,z=/<%=([\\s\\S]+?)%>/g,W=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,H=/^\\w*$/,V=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,q=/[\\\\^$.*+?()[\\]{}|]/g,G=RegExp(q.source),$=/^\\s+|\\s+$/g,Y=/^\\s+/,K=/\\s+$/,X=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,Q=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,J=/,? & /,Z=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ee=/\\\\(\\\\)?/g,te=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,ne=/\\w*$/,re=/^[-+]0x[0-9a-f]+$/i,ie=/^0b[01]+$/i,oe=/^\\[object .+?Constructor\\]$/,ue=/^0o[0-7]+$/i,ae=/^(?:0|[1-9]\\d*)$/,le=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,se=/($^)/,ce=/['\\n\\r\\u2028\\u2029\\\\]/g,fe=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",de=\"\\\\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\",pe=\"[\\\\ud800-\\\\udfff]\",he=\"[\"+de+\"]\",ve=\"[\"+fe+\"]\",me=\"\\\\d+\",ge=\"[\\\\u2700-\\\\u27bf]\",ye=\"[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]\",_e=\"[^\\\\ud800-\\\\udfff\"+de+me+\"\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",be=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",we=\"[^\\\\ud800-\\\\udfff]\",Ee=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",De=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Se=\"[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",Ce=\"(?:\"+ye+\"|\"+_e+\")\",ke=\"(?:\"+Se+\"|\"+_e+\")\",Te=\"(?:\"+ve+\"|\"+be+\")\"+\"?\",xe=\"[\\\\ufe0e\\\\ufe0f]?\"+Te+(\"(?:\\\\u200d(?:\"+[we,Ee,De].join(\"|\")+\")[\\\\ufe0e\\\\ufe0f]?\"+Te+\")*\"),Ae=\"(?:\"+[ge,Ee,De].join(\"|\")+\")\"+xe,Oe=\"(?:\"+[we+ve+\"?\",ve,Ee,De,pe].join(\"|\")+\")\",Pe=RegExp(\"['’]\",\"g\"),Ie=RegExp(ve,\"g\"),Ne=RegExp(be+\"(?=\"+be+\")|\"+Oe+xe,\"g\"),Me=RegExp([Se+\"?\"+ye+\"+(?:['’](?:d|ll|m|re|s|t|ve))?(?=\"+[he,Se,\"$\"].join(\"|\")+\")\",ke+\"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=\"+[he,Se+Ce,\"$\"].join(\"|\")+\")\",Se+\"?\"+Ce+\"+(?:['’](?:d|ll|m|re|s|t|ve))?\",Se+\"+(?:['’](?: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_])\",me,Ae].join(\"|\"),\"g\"),Re=RegExp(\"[\\\\u200d\\\\ud800-\\\\udfff\"+fe+\"\\\\ufe0e\\\\ufe0f]\"),Fe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Le=[\"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\"],Be=-1,je={};je[S]=je[C]=je[k]=je[T]=je[x]=je[A]=je[\"[object Uint8ClampedArray]\"]=je[O]=je[P]=!0,je[a]=je[l]=je[E]=je[s]=je[D]=je[c]=je[f]=je[d]=je[h]=je[v]=je[m]=je[g]=je[y]=je[_]=je[w]=!1;var Ue={};Ue[a]=Ue[l]=Ue[E]=Ue[D]=Ue[s]=Ue[c]=Ue[S]=Ue[C]=Ue[k]=Ue[T]=Ue[x]=Ue[h]=Ue[v]=Ue[m]=Ue[g]=Ue[y]=Ue[_]=Ue[b]=Ue[A]=Ue[\"[object Uint8ClampedArray]\"]=Ue[O]=Ue[P]=!0,Ue[f]=Ue[d]=Ue[w]=!1;var ze={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},We=parseFloat,He=parseInt,Ve=\"object\"==typeof global&&global&&global.Object===Object&&global,qe=\"object\"==typeof self&&self&&self.Object===Object&&self,Ge=Ve||qe||Function(\"return this\")(),$e=t&&!t.nodeType&&t,Ye=$e&&e&&!e.nodeType&&e,Ke=Ye&&Ye.exports===$e,Xe=Ke&&Ve.process,Qe=function(){try{var e=Ye&&Ye.require&&Ye.require(\"util\").types;return e||Xe&&Xe.binding&&Xe.binding(\"util\")}catch(e){}}(),Je=Qe&&Qe.isArrayBuffer,Ze=Qe&&Qe.isDate,et=Qe&&Qe.isMap,tt=Qe&&Qe.isRegExp,nt=Qe&&Qe.isSet,rt=Qe&&Qe.isTypedArray;function it(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 ot(e,t,n,r){for(var i=-1,o=null==e?0:e.length;++i<o;){var u=e[i];t(r,u,n(u),e)}return r}function ut(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}function at(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function lt(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 st(e,t){for(var n=-1,r=null==e?0:e.length,i=0,o=[];++n<r;){var u=e[n];t(u,n,e)&&(o[i++]=u)}return o}function ct(e,t){return!!(null==e?0:e.length)&&bt(e,t,0)>-1}function ft(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function dt(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}function pt(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}function ht(e,t,n,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(n=e[++i]);++i<o;)n=t(n,e[i],i,e);return n}function vt(e,t,n,r){var i=null==e?0:e.length;for(r&&i&&(n=e[--i]);i--;)n=t(n,e[i],i,e);return n}function mt(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 gt=St(\"length\");function yt(e,t,n){var r;return n(e,(function(e,n,i){if(t(e,n,i))return r=n,!1})),r}function _t(e,t,n,r){for(var i=e.length,o=n+(r?1:-1);r?o--:++o<i;)if(t(e[o],o,e))return o;return-1}function bt(e,t,n){return t==t?function(e,t,n){var r=n-1,i=e.length;for(;++r<i;)if(e[r]===t)return r;return-1}(e,t,n):_t(e,Et,n)}function wt(e,t,n,r){for(var i=n-1,o=e.length;++i<o;)if(r(e[i],t))return i;return-1}function Et(e){return e!=e}function Dt(e,t){var n=null==e?0:e.length;return n?Tt(e,t)/n:NaN}function St(e){return function(t){return null==t?void 0:t[e]}}function Ct(e){return function(t){return null==e?void 0:e[t]}}function kt(e,t,n,r,i){return i(e,(function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)})),n}function Tt(e,t){for(var n,r=-1,i=e.length;++r<i;){var o=t(e[r]);void 0!==o&&(n=void 0===n?o:n+o)}return n}function xt(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}function At(e){return function(t){return e(t)}}function Ot(e,t){return dt(t,(function(t){return e[t]}))}function Pt(e,t){return e.has(t)}function It(e,t){for(var n=-1,r=e.length;++n<r&&bt(t,e[n],0)>-1;);return n}function Nt(e,t){for(var n=e.length;n--&&bt(t,e[n],0)>-1;);return n}function Mt(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}var Rt=Ct({À:\"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\"}),Ft=Ct({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function Lt(e){return\"\\\\\"+ze[e]}function Bt(e){return Re.test(e)}function jt(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}function Ut(e,t){return function(n){return e(t(n))}}function zt(e,t){for(var n=-1,r=e.length,i=0,u=[];++n<r;){var a=e[n];a!==t&&a!==o||(e[n]=o,u[i++]=n)}return u}function Wt(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}function Ht(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=[e,e]})),n}function Vt(e){return Bt(e)?function(e){var t=Ne.lastIndex=0;for(;Ne.test(e);)++t;return t}(e):gt(e)}function qt(e){return Bt(e)?function(e){return e.match(Ne)||[]}(e):function(e){return e.split(\"\")}(e)}var Gt=Ct({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"});var $t=function e(t){var n,r=(t=null==t?Ge:$t.defaults(Ge.Object(),t,$t.pick(Ge,Le))).Array,fe=t.Date,de=t.Error,pe=t.Function,he=t.Math,ve=t.Object,me=t.RegExp,ge=t.String,ye=t.TypeError,_e=r.prototype,be=pe.prototype,we=ve.prototype,Ee=t[\"__core-js_shared__\"],De=be.toString,Se=we.hasOwnProperty,Ce=0,ke=(n=/[^.]+$/.exec(Ee&&Ee.keys&&Ee.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Te=we.toString,xe=De.call(ve),Ae=Ge._,Oe=me(\"^\"+De.call(Se).replace(q,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Ne=Ke?t.Buffer:void 0,Re=t.Symbol,ze=t.Uint8Array,Ve=Ne?Ne.allocUnsafe:void 0,qe=Ut(ve.getPrototypeOf,ve),$e=ve.create,Ye=we.propertyIsEnumerable,Xe=_e.splice,Qe=Re?Re.isConcatSpreadable:void 0,gt=Re?Re.iterator:void 0,Ct=Re?Re.toStringTag:void 0,Yt=function(){try{var e=Zi(ve,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),Kt=t.clearTimeout!==Ge.clearTimeout&&t.clearTimeout,Xt=fe&&fe.now!==Ge.Date.now&&fe.now,Qt=t.setTimeout!==Ge.setTimeout&&t.setTimeout,Jt=he.ceil,Zt=he.floor,en=ve.getOwnPropertySymbols,tn=Ne?Ne.isBuffer:void 0,nn=t.isFinite,rn=_e.join,on=Ut(ve.keys,ve),un=he.max,an=he.min,ln=fe.now,sn=t.parseInt,cn=he.random,fn=_e.reverse,dn=Zi(t,\"DataView\"),pn=Zi(t,\"Map\"),hn=Zi(t,\"Promise\"),vn=Zi(t,\"Set\"),mn=Zi(t,\"WeakMap\"),gn=Zi(ve,\"create\"),yn=mn&&new mn,_n={},bn=To(dn),wn=To(pn),En=To(hn),Dn=To(vn),Sn=To(mn),Cn=Re?Re.prototype:void 0,kn=Cn?Cn.valueOf:void 0,Tn=Cn?Cn.toString:void 0;function xn(e){if(Vu(e)&&!Nu(e)&&!(e instanceof In)){if(e instanceof Pn)return e;if(Se.call(e,\"__wrapped__\"))return xo(e)}return new Pn(e)}var An=function(){function e(){}return function(t){if(!Hu(t))return{};if($e)return $e(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function On(){}function Pn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function In(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Nn(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 Mn(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 Rn(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 Fn(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new Rn;++t<n;)this.add(e[t])}function Ln(e){var t=this.__data__=new Mn(e);this.size=t.size}function Bn(e,t){var n=Nu(e),r=!n&&Iu(e),i=!n&&!r&&Lu(e),o=!n&&!r&&!i&&Ju(e),u=n||r||i||o,a=u?xt(e.length,ge):[],l=a.length;for(var s in e)!t&&!Se.call(e,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||uo(s,l))||a.push(s);return a}function jn(e){var t=e.length;return t?e[Fr(0,t-1)]:void 0}function Un(e,t){return So(gi(e),Kn(t,0,e.length))}function zn(e){return So(gi(e))}function Wn(e,t,n){(void 0!==n&&!Au(e[t],n)||void 0===n&&!(t in e))&&$n(e,t,n)}function Hn(e,t,n){var r=e[t];Se.call(e,t)&&Au(r,n)&&(void 0!==n||t in e)||$n(e,t,n)}function Vn(e,t){for(var n=e.length;n--;)if(Au(e[n][0],t))return n;return-1}function qn(e,t,n,r){return er(e,(function(e,i,o){t(r,e,n(e),o)})),r}function Gn(e,t){return e&&yi(t,ba(t),e)}function $n(e,t,n){\"__proto__\"==t&&Yt?Yt(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function Yn(e,t){for(var n=-1,i=t.length,o=r(i),u=null==e;++n<i;)o[n]=u?void 0:va(e,t[n]);return o}function Kn(e,t,n){return e==e&&(void 0!==n&&(e=e<=n?e:n),void 0!==t&&(e=e>=t?e:t)),e}function Xn(e,t,n,r,i,o){var u,l=1&t,f=2&t,w=4&t;if(n&&(u=i?n(e,r,i,o):n(e)),void 0!==u)return u;if(!Hu(e))return e;var I=Nu(e);if(I){if(u=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),!l)return gi(e,u)}else{var N=no(e),M=N==d||N==p;if(Lu(e))return fi(e,l);if(N==m||N==a||M&&!i){if(u=f||M?{}:io(e),!l)return f?function(e,t){return yi(e,to(e),t)}(e,function(e,t){return e&&yi(t,wa(t),e)}(u,e)):function(e,t){return yi(e,eo(e),t)}(e,Gn(u,e))}else{if(!Ue[N])return i?e:{};u=function(e,t,n){var r=e.constructor;switch(t){case E:return di(e);case s:case c:return new r(+e);case D:return function(e,t){var n=t?di(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case S:case C:case k:case T:case x:case A:case\"[object Uint8ClampedArray]\":case O:case P:return pi(e,n);case h:return new r;case v:case _:return new r(e);case g:return function(e){var t=new e.constructor(e.source,ne.exec(e));return t.lastIndex=e.lastIndex,t}(e);case y:return new r;case b:return i=e,kn?ve(kn.call(i)):{}}var i}(e,N,l)}}o||(o=new Ln);var R=o.get(e);if(R)return R;o.set(e,u),Ku(e)?e.forEach((function(r){u.add(Xn(r,t,n,r,e,o))})):qu(e)&&e.forEach((function(r,i){u.set(i,Xn(r,t,n,i,e,o))}));var F=I?void 0:(w?f?Gi:qi:f?wa:ba)(e);return ut(F||e,(function(r,i){F&&(r=e[i=r]),Hn(u,i,Xn(r,t,n,i,e,o))})),u}function Qn(e,t,n){var r=n.length;if(null==e)return!r;for(e=ve(e);r--;){var i=n[r],o=t[i],u=e[i];if(void 0===u&&!(i in e)||!o(u))return!1}return!0}function Jn(e,t,n){if(\"function\"!=typeof e)throw new ye(i);return bo((function(){e.apply(void 0,n)}),t)}function Zn(e,t,n,r){var i=-1,o=ct,u=!0,a=e.length,l=[],s=t.length;if(!a)return l;n&&(t=dt(t,At(n))),r?(o=ft,u=!1):t.length>=200&&(o=Pt,u=!1,t=new Fn(t));e:for(;++i<a;){var c=e[i],f=null==n?c:n(c);if(c=r||0!==c?c:0,u&&f==f){for(var d=s;d--;)if(t[d]===f)continue e;l.push(c)}else o(t,f,r)||l.push(c)}return l}xn.templateSettings={escape:j,evaluate:U,interpolate:z,variable:\"\",imports:{_:xn}},xn.prototype=On.prototype,xn.prototype.constructor=xn,Pn.prototype=An(On.prototype),Pn.prototype.constructor=Pn,In.prototype=An(On.prototype),In.prototype.constructor=In,Nn.prototype.clear=function(){this.__data__=gn?gn(null):{},this.size=0},Nn.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Nn.prototype.get=function(e){var t=this.__data__;if(gn){var n=t[e];return\"__lodash_hash_undefined__\"===n?void 0:n}return Se.call(t,e)?t[e]:void 0},Nn.prototype.has=function(e){var t=this.__data__;return gn?void 0!==t[e]:Se.call(t,e)},Nn.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=gn&&void 0===t?\"__lodash_hash_undefined__\":t,this},Mn.prototype.clear=function(){this.__data__=[],this.size=0},Mn.prototype.delete=function(e){var t=this.__data__,n=Vn(t,e);return!(n<0)&&(n==t.length-1?t.pop():Xe.call(t,n,1),--this.size,!0)},Mn.prototype.get=function(e){var t=this.__data__,n=Vn(t,e);return n<0?void 0:t[n][1]},Mn.prototype.has=function(e){return Vn(this.__data__,e)>-1},Mn.prototype.set=function(e,t){var n=this.__data__,r=Vn(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Rn.prototype.clear=function(){this.size=0,this.__data__={hash:new Nn,map:new(pn||Mn),string:new Nn}},Rn.prototype.delete=function(e){var t=Qi(this,e).delete(e);return this.size-=t?1:0,t},Rn.prototype.get=function(e){return Qi(this,e).get(e)},Rn.prototype.has=function(e){return Qi(this,e).has(e)},Rn.prototype.set=function(e,t){var n=Qi(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Fn.prototype.add=Fn.prototype.push=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this},Fn.prototype.has=function(e){return this.__data__.has(e)},Ln.prototype.clear=function(){this.__data__=new Mn,this.size=0},Ln.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Ln.prototype.get=function(e){return this.__data__.get(e)},Ln.prototype.has=function(e){return this.__data__.has(e)},Ln.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Mn){var r=n.__data__;if(!pn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Rn(r)}return n.set(e,t),this.size=n.size,this};var er=wi(lr),tr=wi(sr,!0);function nr(e,t){var n=!0;return er(e,(function(e,r,i){return n=!!t(e,r,i)})),n}function rr(e,t,n){for(var r=-1,i=e.length;++r<i;){var o=e[r],u=t(o);if(null!=u&&(void 0===a?u==u&&!Qu(u):n(u,a)))var a=u,l=o}return l}function ir(e,t){var n=[];return er(e,(function(e,r,i){t(e,r,i)&&n.push(e)})),n}function or(e,t,n,r,i){var o=-1,u=e.length;for(n||(n=oo),i||(i=[]);++o<u;){var a=e[o];t>0&&n(a)?t>1?or(a,t-1,n,r,i):pt(i,a):r||(i[i.length]=a)}return i}var ur=Ei(),ar=Ei(!0);function lr(e,t){return e&&ur(e,t,ba)}function sr(e,t){return e&&ar(e,t,ba)}function cr(e,t){return st(t,(function(t){return Uu(e[t])}))}function fr(e,t){for(var n=0,r=(t=ai(t,e)).length;null!=e&&n<r;)e=e[ko(t[n++])];return n&&n==r?e:void 0}function dr(e,t,n){var r=t(e);return Nu(e)?r:pt(r,n(e))}function pr(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":Ct&&Ct in ve(e)?function(e){var t=Se.call(e,Ct),n=e[Ct];try{e[Ct]=void 0;var r=!0}catch(e){}var i=Te.call(e);r&&(t?e[Ct]=n:delete e[Ct]);return i}(e):function(e){return Te.call(e)}(e)}function hr(e,t){return e>t}function vr(e,t){return null!=e&&Se.call(e,t)}function mr(e,t){return null!=e&&t in ve(e)}function gr(e,t,n){for(var i=n?ft:ct,o=e[0].length,u=e.length,a=u,l=r(u),s=1/0,c=[];a--;){var f=e[a];a&&t&&(f=dt(f,At(t))),s=an(f.length,s),l[a]=!n&&(t||o>=120&&f.length>=120)?new Fn(a&&f):void 0}f=e[0];var d=-1,p=l[0];e:for(;++d<o&&c.length<s;){var h=f[d],v=t?t(h):h;if(h=n||0!==h?h:0,!(p?Pt(p,v):i(c,v,n))){for(a=u;--a;){var m=l[a];if(!(m?Pt(m,v):i(e[a],v,n)))continue e}p&&p.push(v),c.push(h)}}return c}function yr(e,t,n){var r=null==(e=mo(e,t=ai(t,e)))?e:e[ko(jo(t))];return null==r?void 0:it(r,e,n)}function _r(e){return Vu(e)&&pr(e)==a}function br(e,t,n,r,i){return e===t||(null==e||null==t||!Vu(e)&&!Vu(t)?e!=e&&t!=t:function(e,t,n,r,i,o){var u=Nu(e),d=Nu(t),p=u?l:no(e),w=d?l:no(t),S=(p=p==a?m:p)==m,C=(w=w==a?m:w)==m,k=p==w;if(k&&Lu(e)){if(!Lu(t))return!1;u=!0,S=!1}if(k&&!S)return o||(o=new Ln),u||Ju(e)?Hi(e,t,n,r,i,o):function(e,t,n,r,i,o,u){switch(n){case D:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case E:return!(e.byteLength!=t.byteLength||!o(new ze(e),new ze(t)));case s:case c:case v:return Au(+e,+t);case f:return e.name==t.name&&e.message==t.message;case g:case _:return e==t+\"\";case h:var a=jt;case y:var l=1&r;if(a||(a=Wt),e.size!=t.size&&!l)return!1;var d=u.get(e);if(d)return d==t;r|=2,u.set(e,t);var p=Hi(a(e),a(t),r,i,o,u);return u.delete(e),p;case b:if(kn)return kn.call(e)==kn.call(t)}return!1}(e,t,p,n,r,i,o);if(!(1&n)){var T=S&&Se.call(e,\"__wrapped__\"),x=C&&Se.call(t,\"__wrapped__\");if(T||x){var A=T?e.value():e,O=x?t.value():t;return o||(o=new Ln),i(A,O,n,r,o)}}if(!k)return!1;return o||(o=new Ln),function(e,t,n,r,i,o){var u=1&n,a=qi(e),l=a.length,s=qi(t).length;if(l!=s&&!u)return!1;var c=l;for(;c--;){var f=a[c];if(!(u?f in t:Se.call(t,f)))return!1}var d=o.get(e),p=o.get(t);if(d&&p)return d==t&&p==e;var h=!0;o.set(e,t),o.set(t,e);var v=u;for(;++c<l;){f=a[c];var m=e[f],g=t[f];if(r)var y=u?r(g,m,f,t,e,o):r(m,g,f,e,t,o);if(!(void 0===y?m===g||i(m,g,n,r,o):y)){h=!1;break}v||(v=\"constructor\"==f)}if(h&&!v){var _=e.constructor,b=t.constructor;_==b||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof _&&_ instanceof _&&\"function\"==typeof b&&b instanceof b||(h=!1)}return o.delete(e),o.delete(t),h}(e,t,n,r,i,o)}(e,t,n,r,br,i))}function wr(e,t,n,r){var i=n.length,o=i,u=!r;if(null==e)return!o;for(e=ve(e);i--;){var a=n[i];if(u&&a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++i<o;){var l=(a=n[i])[0],s=e[l],c=a[1];if(u&&a[2]){if(void 0===s&&!(l in e))return!1}else{var f=new Ln;if(r)var d=r(s,c,l,e,t,f);if(!(void 0===d?br(c,s,3,r,f):d))return!1}}return!0}function Er(e){return!(!Hu(e)||(t=e,ke&&ke in t))&&(Uu(e)?Oe:oe).test(To(e));var t}function Dr(e){return\"function\"==typeof e?e:null==e?Ga:\"object\"==typeof e?Nu(e)?Ar(e[0],e[1]):xr(e):tl(e)}function Sr(e){if(!fo(e))return on(e);var t=[];for(var n in ve(e))Se.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}function Cr(e){if(!Hu(e))return function(e){var t=[];if(null!=e)for(var n in ve(e))t.push(n);return t}(e);var t=fo(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&Se.call(e,r))&&n.push(r);return n}function kr(e,t){return e<t}function Tr(e,t){var n=-1,i=Ru(e)?r(e.length):[];return er(e,(function(e,r,o){i[++n]=t(e,r,o)})),i}function xr(e){var t=Ji(e);return 1==t.length&&t[0][2]?ho(t[0][0],t[0][1]):function(n){return n===e||wr(n,e,t)}}function Ar(e,t){return lo(e)&&po(t)?ho(ko(e),t):function(n){var r=va(n,e);return void 0===r&&r===t?ma(n,e):br(t,r,3)}}function Or(e,t,n,r,i){e!==t&&ur(t,(function(o,u){if(i||(i=new Ln),Hu(o))!function(e,t,n,r,i,o,u){var a=yo(e,n),l=yo(t,n),s=u.get(l);if(s)return void Wn(e,n,s);var c=o?o(a,l,n+\"\",e,t,u):void 0,f=void 0===c;if(f){var d=Nu(l),p=!d&&Lu(l),h=!d&&!p&&Ju(l);c=l,d||p||h?Nu(a)?c=a:Fu(a)?c=gi(a):p?(f=!1,c=fi(l,!0)):h?(f=!1,c=pi(l,!0)):c=[]:$u(l)||Iu(l)?(c=a,Iu(a)?c=ua(a):Hu(a)&&!Uu(a)||(c=io(l))):f=!1}f&&(u.set(l,c),i(c,l,r,o,u),u.delete(l));Wn(e,n,c)}(e,t,u,n,Or,r,i);else{var a=r?r(yo(e,u),o,u+\"\",e,t,i):void 0;void 0===a&&(a=o),Wn(e,u,a)}}),wa)}function Pr(e,t){var n=e.length;if(n)return uo(t+=t<0?n:0,n)?e[t]:void 0}function Ir(e,t,n){t=t.length?dt(t,(function(e){return Nu(e)?function(t){return fr(t,1===e.length?e[0]:e)}:e})):[Ga];var r=-1;return t=dt(t,At(Xi())),function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}(Tr(e,(function(e,n,i){return{criteria:dt(t,(function(t){return t(e)})),index:++r,value:e}})),(function(e,t){return function(e,t,n){var r=-1,i=e.criteria,o=t.criteria,u=i.length,a=n.length;for(;++r<u;){var l=hi(i[r],o[r]);if(l){if(r>=a)return l;var s=n[r];return l*(\"desc\"==s?-1:1)}}return e.index-t.index}(e,t,n)}))}function Nr(e,t,n){for(var r=-1,i=t.length,o={};++r<i;){var u=t[r],a=fr(e,u);n(a,u)&&zr(o,ai(u,e),a)}return o}function Mr(e,t,n,r){var i=r?wt:bt,o=-1,u=t.length,a=e;for(e===t&&(t=gi(t)),n&&(a=dt(e,At(n)));++o<u;)for(var l=0,s=t[o],c=n?n(s):s;(l=i(a,c,l,r))>-1;)a!==e&&Xe.call(a,l,1),Xe.call(e,l,1);return e}function Rr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==o){var o=i;uo(i)?Xe.call(e,i,1):Zr(e,i)}}return e}function Fr(e,t){return e+Zt(cn()*(t-e+1))}function Lr(e,t){var n=\"\";if(!e||t<1||t>9007199254740991)return n;do{t%2&&(n+=e),(t=Zt(t/2))&&(e+=e)}while(t);return n}function Br(e,t){return wo(vo(e,t,Ga),e+\"\")}function jr(e){return jn(Aa(e))}function Ur(e,t){var n=Aa(e);return So(n,Kn(t,0,n.length))}function zr(e,t,n,r){if(!Hu(e))return e;for(var i=-1,o=(t=ai(t,e)).length,u=o-1,a=e;null!=a&&++i<o;){var l=ko(t[i]),s=n;if(\"__proto__\"===l||\"constructor\"===l||\"prototype\"===l)return e;if(i!=u){var c=a[l];void 0===(s=r?r(c,l,a):void 0)&&(s=Hu(c)?c:uo(t[i+1])?[]:{})}Hn(a,l,s),a=a[l]}return e}var Wr=yn?function(e,t){return yn.set(e,t),e}:Ga,Hr=Yt?function(e,t){return Yt(e,\"toString\",{configurable:!0,enumerable:!1,value:Ha(t),writable:!0})}:Ga;function Vr(e){return So(Aa(e))}function qr(e,t,n){var i=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var u=r(o);++i<o;)u[i]=e[i+t];return u}function Gr(e,t){var n;return er(e,(function(e,r,i){return!(n=t(e,r,i))})),!!n}function $r(e,t,n){var r=0,i=null==e?r:e.length;if(\"number\"==typeof t&&t==t&&i<=2147483647){for(;r<i;){var o=r+i>>>1,u=e[o];null!==u&&!Qu(u)&&(n?u<=t:u<t)?r=o+1:i=o}return i}return Yr(e,t,Ga,n)}function Yr(e,t,n,r){var i=0,o=null==e?0:e.length;if(0===o)return 0;for(var u=(t=n(t))!=t,a=null===t,l=Qu(t),s=void 0===t;i<o;){var c=Zt((i+o)/2),f=n(e[c]),d=void 0!==f,p=null===f,h=f==f,v=Qu(f);if(u)var m=r||h;else m=s?h&&(r||d):a?h&&d&&(r||!p):l?h&&d&&!p&&(r||!v):!p&&!v&&(r?f<=t:f<t);m?i=c+1:o=c}return an(o,4294967294)}function Kr(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var u=e[n],a=t?t(u):u;if(!n||!Au(a,l)){var l=a;o[i++]=0===u?0:u}}return o}function Xr(e){return\"number\"==typeof e?e:Qu(e)?NaN:+e}function Qr(e){if(\"string\"==typeof e)return e;if(Nu(e))return dt(e,Qr)+\"\";if(Qu(e))return Tn?Tn.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function Jr(e,t,n){var r=-1,i=ct,o=e.length,u=!0,a=[],l=a;if(n)u=!1,i=ft;else if(o>=200){var s=t?null:Li(e);if(s)return Wt(s);u=!1,i=Pt,l=new Fn}else l=t?[]:a;e:for(;++r<o;){var c=e[r],f=t?t(c):c;if(c=n||0!==c?c:0,u&&f==f){for(var d=l.length;d--;)if(l[d]===f)continue e;t&&l.push(f),a.push(c)}else i(l,f,n)||(l!==a&&l.push(f),a.push(c))}return a}function Zr(e,t){return null==(e=mo(e,t=ai(t,e)))||delete e[ko(jo(t))]}function ei(e,t,n,r){return zr(e,t,n(fr(e,t)),r)}function ti(e,t,n,r){for(var i=e.length,o=r?i:-1;(r?o--:++o<i)&&t(e[o],o,e););return n?qr(e,r?0:o,r?o+1:i):qr(e,r?o+1:0,r?i:o)}function ni(e,t){var n=e;return n instanceof In&&(n=n.value()),ht(t,(function(e,t){return t.func.apply(t.thisArg,pt([e],t.args))}),n)}function ri(e,t,n){var i=e.length;if(i<2)return i?Jr(e[0]):[];for(var o=-1,u=r(i);++o<i;)for(var a=e[o],l=-1;++l<i;)l!=o&&(u[o]=Zn(u[o]||a,e[l],t,n));return Jr(or(u,1),t,n)}function ii(e,t,n){for(var r=-1,i=e.length,o=t.length,u={};++r<i;){var a=r<o?t[r]:void 0;n(u,e[r],a)}return u}function oi(e){return Fu(e)?e:[]}function ui(e){return\"function\"==typeof e?e:Ga}function ai(e,t){return Nu(e)?e:lo(e,t)?[e]:Co(aa(e))}var li=Br;function si(e,t,n){var r=e.length;return n=void 0===n?r:n,!t&&n>=r?e:qr(e,t,n)}var ci=Kt||function(e){return Ge.clearTimeout(e)};function fi(e,t){if(t)return e.slice();var n=e.length,r=Ve?Ve(n):new e.constructor(n);return e.copy(r),r}function di(e){var t=new e.constructor(e.byteLength);return new ze(t).set(new ze(e)),t}function pi(e,t){var n=t?di(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function hi(e,t){if(e!==t){var n=void 0!==e,r=null===e,i=e==e,o=Qu(e),u=void 0!==t,a=null===t,l=t==t,s=Qu(t);if(!a&&!s&&!o&&e>t||o&&u&&l&&!a&&!s||r&&u&&l||!n&&l||!i)return 1;if(!r&&!o&&!s&&e<t||s&&n&&i&&!r&&!o||a&&n&&i||!u&&i||!l)return-1}return 0}function vi(e,t,n,i){for(var o=-1,u=e.length,a=n.length,l=-1,s=t.length,c=un(u-a,0),f=r(s+c),d=!i;++l<s;)f[l]=t[l];for(;++o<a;)(d||o<u)&&(f[n[o]]=e[o]);for(;c--;)f[l++]=e[o++];return f}function mi(e,t,n,i){for(var o=-1,u=e.length,a=-1,l=n.length,s=-1,c=t.length,f=un(u-l,0),d=r(f+c),p=!i;++o<f;)d[o]=e[o];for(var h=o;++s<c;)d[h+s]=t[s];for(;++a<l;)(p||o<u)&&(d[h+n[a]]=e[o++]);return d}function gi(e,t){var n=-1,i=e.length;for(t||(t=r(i));++n<i;)t[n]=e[n];return t}function yi(e,t,n,r){var i=!n;n||(n={});for(var o=-1,u=t.length;++o<u;){var a=t[o],l=r?r(n[a],e[a],a,n,e):void 0;void 0===l&&(l=e[a]),i?$n(n,a,l):Hn(n,a,l)}return n}function _i(e,t){return function(n,r){var i=Nu(n)?ot:qn,o=t?t():{};return i(n,e,Xi(r,2),o)}}function bi(e){return Br((function(t,n){var r=-1,i=n.length,o=i>1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(o=e.length>3&&\"function\"==typeof o?(i--,o):void 0,u&&ao(n[0],n[1],u)&&(o=i<3?void 0:o,i=1),t=ve(t);++r<i;){var a=n[r];a&&e(t,a,r,o)}return t}))}function wi(e,t){return function(n,r){if(null==n)return n;if(!Ru(n))return e(n,r);for(var i=n.length,o=t?i:-1,u=ve(n);(t?o--:++o<i)&&!1!==r(u[o],o,u););return n}}function Ei(e){return function(t,n,r){for(var i=-1,o=ve(t),u=r(t),a=u.length;a--;){var l=u[e?a:++i];if(!1===n(o[l],l,o))break}return t}}function Di(e){return function(t){var n=Bt(t=aa(t))?qt(t):void 0,r=n?n[0]:t.charAt(0),i=n?si(n,1).join(\"\"):t.slice(1);return r[e]()+i}}function Si(e){return function(t){return ht(Ua(Ia(t).replace(Pe,\"\")),e,\"\")}}function Ci(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=An(e.prototype),r=e.apply(n,t);return Hu(r)?r:n}}function ki(e){return function(t,n,r){var i=ve(t);if(!Ru(t)){var o=Xi(n,3);t=ba(t),n=function(e){return o(i[e],e,i)}}var u=e(t,n,r);return u>-1?i[o?t[u]:u]:void 0}}function Ti(e){return Vi((function(t){var n=t.length,r=n,o=Pn.prototype.thru;for(e&&t.reverse();r--;){var u=t[r];if(\"function\"!=typeof u)throw new ye(i);if(o&&!a&&\"wrapper\"==Yi(u))var a=new Pn([],!0)}for(r=a?r:n;++r<n;){var l=Yi(u=t[r]),s=\"wrapper\"==l?$i(u):void 0;a=s&&so(s[0])&&424==s[1]&&!s[4].length&&1==s[9]?a[Yi(s[0])].apply(a,s[3]):1==u.length&&so(u)?a[l]():a.thru(u)}return function(){var e=arguments,r=e[0];if(a&&1==e.length&&Nu(r))return a.plant(r).value();for(var i=0,o=n?t[i].apply(this,e):r;++i<n;)o=t[i].call(this,o);return o}}))}function xi(e,t,n,i,o,u,a,l,s,c){var f=128&t,d=1&t,p=2&t,h=24&t,v=512&t,m=p?void 0:Ci(e);return function g(){for(var y=arguments.length,_=r(y),b=y;b--;)_[b]=arguments[b];if(h)var w=Ki(g),E=Mt(_,w);if(i&&(_=vi(_,i,o,h)),u&&(_=mi(_,u,a,h)),y-=E,h&&y<c){var D=zt(_,w);return Ri(e,t,xi,g.placeholder,n,_,D,l,s,c-y)}var S=d?n:this,C=p?S[e]:e;return y=_.length,l?_=go(_,l):v&&y>1&&_.reverse(),f&&s<y&&(_.length=s),this&&this!==Ge&&this instanceof g&&(C=m||Ci(C)),C.apply(S,_)}}function Ai(e,t){return function(n,r){return function(e,t,n,r){return lr(e,(function(e,i,o){t(r,n(e),i,o)})),r}(n,e,t(r),{})}}function Oi(e,t){return function(n,r){var i;if(void 0===n&&void 0===r)return t;if(void 0!==n&&(i=n),void 0!==r){if(void 0===i)return r;\"string\"==typeof n||\"string\"==typeof r?(n=Qr(n),r=Qr(r)):(n=Xr(n),r=Xr(r)),i=e(n,r)}return i}}function Pi(e){return Vi((function(t){return t=dt(t,At(Xi())),Br((function(n){var r=this;return e(t,(function(e){return it(e,r,n)}))}))}))}function Ii(e,t){var n=(t=void 0===t?\" \":Qr(t)).length;if(n<2)return n?Lr(t,e):t;var r=Lr(t,Jt(e/Vt(t)));return Bt(t)?si(qt(r),0,e).join(\"\"):r.slice(0,e)}function Ni(e){return function(t,n,i){return i&&\"number\"!=typeof i&&ao(t,n,i)&&(n=i=void 0),t=na(t),void 0===n?(n=t,t=0):n=na(n),function(e,t,n,i){for(var o=-1,u=un(Jt((t-e)/(n||1)),0),a=r(u);u--;)a[i?u:++o]=e,e+=n;return a}(t,n,i=void 0===i?t<n?1:-1:na(i),e)}}function Mi(e){return function(t,n){return\"string\"==typeof t&&\"string\"==typeof n||(t=oa(t),n=oa(n)),e(t,n)}}function Ri(e,t,n,r,i,o,u,a,l,s){var c=8&t;t|=c?32:64,4&(t&=~(c?64:32))||(t&=-4);var f=[e,t,i,c?o:void 0,c?u:void 0,c?void 0:o,c?void 0:u,a,l,s],d=n.apply(void 0,f);return so(e)&&_o(d,f),d.placeholder=r,Eo(d,e,t)}function Fi(e){var t=he[e];return function(e,n){if(e=oa(e),(n=null==n?0:an(ra(n),292))&&nn(e)){var r=(aa(e)+\"e\").split(\"e\");return+((r=(aa(t(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return t(e)}}var Li=vn&&1/Wt(new vn([,-0]))[1]==1/0?function(e){return new vn(e)}:Qa;function Bi(e){return function(t){var n=no(t);return n==h?jt(t):n==y?Ht(t):function(e,t){return dt(t,(function(t){return[t,e[t]]}))}(t,e(t))}}function ji(e,t,n,u,a,l,s,c){var f=2&t;if(!f&&\"function\"!=typeof e)throw new ye(i);var d=u?u.length:0;if(d||(t&=-97,u=a=void 0),s=void 0===s?s:un(ra(s),0),c=void 0===c?c:ra(c),d-=a?a.length:0,64&t){var p=u,h=a;u=a=void 0}var v=f?void 0:$i(e),m=[e,t,n,u,a,p,h,l,s,c];if(v&&function(e,t){var n=e[1],r=t[1],i=n|r,u=i<131,a=128==r&&8==n||128==r&&256==n&&e[7].length<=t[8]||384==r&&t[7].length<=t[8]&&8==n;if(!u&&!a)return e;1&r&&(e[2]=t[2],i|=1&n?0:4);var l=t[3];if(l){var s=e[3];e[3]=s?vi(s,l,t[4]):l,e[4]=s?zt(e[3],o):t[4]}(l=t[5])&&(s=e[5],e[5]=s?mi(s,l,t[6]):l,e[6]=s?zt(e[5],o):t[6]);(l=t[7])&&(e[7]=l);128&r&&(e[8]=null==e[8]?t[8]:an(e[8],t[8]));null==e[9]&&(e[9]=t[9]);e[0]=t[0],e[1]=i}(m,v),e=m[0],t=m[1],n=m[2],u=m[3],a=m[4],!(c=m[9]=void 0===m[9]?f?0:e.length:un(m[9]-d,0))&&24&t&&(t&=-25),t&&1!=t)g=8==t||16==t?function(e,t,n){var i=Ci(e);return function o(){for(var u=arguments.length,a=r(u),l=u,s=Ki(o);l--;)a[l]=arguments[l];var c=u<3&&a[0]!==s&&a[u-1]!==s?[]:zt(a,s);if((u-=c.length)<n)return Ri(e,t,xi,o.placeholder,void 0,a,c,void 0,void 0,n-u);var f=this&&this!==Ge&&this instanceof o?i:e;return it(f,this,a)}}(e,t,c):32!=t&&33!=t||a.length?xi.apply(void 0,m):function(e,t,n,i){var o=1&t,u=Ci(e);return function t(){for(var a=-1,l=arguments.length,s=-1,c=i.length,f=r(c+l),d=this&&this!==Ge&&this instanceof t?u:e;++s<c;)f[s]=i[s];for(;l--;)f[s++]=arguments[++a];return it(d,o?n:this,f)}}(e,t,n,u);else var g=function(e,t,n){var r=1&t,i=Ci(e);return function t(){var o=this&&this!==Ge&&this instanceof t?i:e;return o.apply(r?n:this,arguments)}}(e,t,n);return Eo((v?Wr:_o)(g,m),e,t)}function Ui(e,t,n,r){return void 0===e||Au(e,we[n])&&!Se.call(r,n)?t:e}function zi(e,t,n,r,i,o){return Hu(e)&&Hu(t)&&(o.set(t,e),Or(e,t,void 0,zi,o),o.delete(t)),e}function Wi(e){return $u(e)?void 0:e}function Hi(e,t,n,r,i,o){var u=1&n,a=e.length,l=t.length;if(a!=l&&!(u&&l>a))return!1;var s=o.get(e),c=o.get(t);if(s&&c)return s==t&&c==e;var f=-1,d=!0,p=2&n?new Fn:void 0;for(o.set(e,t),o.set(t,e);++f<a;){var h=e[f],v=t[f];if(r)var m=u?r(v,h,f,t,e,o):r(h,v,f,e,t,o);if(void 0!==m){if(m)continue;d=!1;break}if(p){if(!mt(t,(function(e,t){if(!Pt(p,t)&&(h===e||i(h,e,n,r,o)))return p.push(t)}))){d=!1;break}}else if(h!==v&&!i(h,v,n,r,o)){d=!1;break}}return o.delete(e),o.delete(t),d}function Vi(e){return wo(vo(e,void 0,Mo),e+\"\")}function qi(e){return dr(e,ba,eo)}function Gi(e){return dr(e,wa,to)}var $i=yn?function(e){return yn.get(e)}:Qa;function Yi(e){for(var t=e.name+\"\",n=_n[t],r=Se.call(_n,t)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==e)return i.name}return t}function Ki(e){return(Se.call(xn,\"placeholder\")?xn:e).placeholder}function Xi(){var e=xn.iteratee||$a;return e=e===$a?Dr:e,arguments.length?e(arguments[0],arguments[1]):e}function Qi(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function Ji(e){for(var t=ba(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,po(i)]}return t}function Zi(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return Er(n)?n:void 0}var eo=en?function(e){return null==e?[]:(e=ve(e),st(en(e),(function(t){return Ye.call(e,t)})))}:il,to=en?function(e){for(var t=[];e;)pt(t,eo(e)),e=qe(e);return t}:il,no=pr;function ro(e,t,n){for(var r=-1,i=(t=ai(t,e)).length,o=!1;++r<i;){var u=ko(t[r]);if(!(o=null!=e&&n(e,u)))break;e=e[u]}return o||++r!=i?o:!!(i=null==e?0:e.length)&&Wu(i)&&uo(u,i)&&(Nu(e)||Iu(e))}function io(e){return\"function\"!=typeof e.constructor||fo(e)?{}:An(qe(e))}function oo(e){return Nu(e)||Iu(e)||!!(Qe&&e&&e[Qe])}function uo(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&(\"number\"==n||\"symbol\"!=n&&ae.test(e))&&e>-1&&e%1==0&&e<t}function ao(e,t,n){if(!Hu(n))return!1;var r=typeof t;return!!(\"number\"==r?Ru(n)&&uo(t,n.length):\"string\"==r&&t in n)&&Au(n[t],e)}function lo(e,t){if(Nu(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!Qu(e))||(H.test(e)||!W.test(e)||null!=t&&e in ve(t))}function so(e){var t=Yi(e),n=xn[t];if(\"function\"!=typeof n||!(t in In.prototype))return!1;if(e===n)return!0;var r=$i(n);return!!r&&e===r[0]}(dn&&no(new dn(new ArrayBuffer(1)))!=D||pn&&no(new pn)!=h||hn&&\"[object Promise]\"!=no(hn.resolve())||vn&&no(new vn)!=y||mn&&no(new mn)!=w)&&(no=function(e){var t=pr(e),n=t==m?e.constructor:void 0,r=n?To(n):\"\";if(r)switch(r){case bn:return D;case wn:return h;case En:return\"[object Promise]\";case Dn:return y;case Sn:return w}return t});var co=Ee?Uu:ol;function fo(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||we)}function po(e){return e==e&&!Hu(e)}function ho(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in ve(n)))}}function vo(e,t,n){return t=un(void 0===t?e.length-1:t,0),function(){for(var i=arguments,o=-1,u=un(i.length-t,0),a=r(u);++o<u;)a[o]=i[t+o];o=-1;for(var l=r(t+1);++o<t;)l[o]=i[o];return l[t]=n(a),it(e,this,l)}}function mo(e,t){return t.length<2?e:fr(e,qr(t,0,-1))}function go(e,t){for(var n=e.length,r=an(t.length,n),i=gi(e);r--;){var o=t[r];e[r]=uo(o,n)?i[o]:void 0}return e}function yo(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var _o=Do(Wr),bo=Qt||function(e,t){return Ge.setTimeout(e,t)},wo=Do(Hr);function Eo(e,t,n){var r=t+\"\";return wo(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(X,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(r,function(e,t){return ut(u,(function(n){var r=\"_.\"+n[0];t&n[1]&&!ct(e,r)&&e.push(r)})),e.sort()}(function(e){var t=e.match(Q);return t?t[1].split(J):[]}(r),n)))}function Do(e){var t=0,n=0;return function(){var r=ln(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function So(e,t){var n=-1,r=e.length,i=r-1;for(t=void 0===t?r:t;++n<t;){var o=Fr(n,i),u=e[o];e[o]=e[n],e[n]=u}return e.length=t,e}var Co=function(e){var t=Du(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(V,(function(e,n,r,i){t.push(r?i.replace(ee,\"$1\"):n||e)})),t}));function ko(e){if(\"string\"==typeof e||Qu(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function To(e){if(null!=e){try{return De.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}function xo(e){if(e instanceof In)return e.clone();var t=new Pn(e.__wrapped__,e.__chain__);return t.__actions__=gi(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var Ao=Br((function(e,t){return Fu(e)?Zn(e,or(t,1,Fu,!0)):[]})),Oo=Br((function(e,t){var n=jo(t);return Fu(n)&&(n=void 0),Fu(e)?Zn(e,or(t,1,Fu,!0),Xi(n,2)):[]})),Po=Br((function(e,t){var n=jo(t);return Fu(n)&&(n=void 0),Fu(e)?Zn(e,or(t,1,Fu,!0),void 0,n):[]}));function Io(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ra(n);return i<0&&(i=un(r+i,0)),_t(e,Xi(t,3),i)}function No(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r-1;return void 0!==n&&(i=ra(n),i=n<0?un(r+i,0):an(i,r-1)),_t(e,Xi(t,3),i,!0)}function Mo(e){return(null==e?0:e.length)?or(e,1):[]}function Ro(e){return e&&e.length?e[0]:void 0}var Fo=Br((function(e){var t=dt(e,oi);return t.length&&t[0]===e[0]?gr(t):[]})),Lo=Br((function(e){var t=jo(e),n=dt(e,oi);return t===jo(n)?t=void 0:n.pop(),n.length&&n[0]===e[0]?gr(n,Xi(t,2)):[]})),Bo=Br((function(e){var t=jo(e),n=dt(e,oi);return(t=\"function\"==typeof t?t:void 0)&&n.pop(),n.length&&n[0]===e[0]?gr(n,void 0,t):[]}));function jo(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}var Uo=Br(zo);function zo(e,t){return e&&e.length&&t&&t.length?Mr(e,t):e}var Wo=Vi((function(e,t){var n=null==e?0:e.length,r=Yn(e,t);return Rr(e,dt(t,(function(e){return uo(e,n)?+e:e})).sort(hi)),r}));function Ho(e){return null==e?e:fn.call(e)}var Vo=Br((function(e){return Jr(or(e,1,Fu,!0))})),qo=Br((function(e){var t=jo(e);return Fu(t)&&(t=void 0),Jr(or(e,1,Fu,!0),Xi(t,2))})),Go=Br((function(e){var t=jo(e);return t=\"function\"==typeof t?t:void 0,Jr(or(e,1,Fu,!0),void 0,t)}));function $o(e){if(!e||!e.length)return[];var t=0;return e=st(e,(function(e){if(Fu(e))return t=un(e.length,t),!0})),xt(t,(function(t){return dt(e,St(t))}))}function Yo(e,t){if(!e||!e.length)return[];var n=$o(e);return null==t?n:dt(n,(function(e){return it(t,void 0,e)}))}var Ko=Br((function(e,t){return Fu(e)?Zn(e,t):[]})),Xo=Br((function(e){return ri(st(e,Fu))})),Qo=Br((function(e){var t=jo(e);return Fu(t)&&(t=void 0),ri(st(e,Fu),Xi(t,2))})),Jo=Br((function(e){var t=jo(e);return t=\"function\"==typeof t?t:void 0,ri(st(e,Fu),void 0,t)})),Zo=Br($o);var eu=Br((function(e){var t=e.length,n=t>1?e[t-1]:void 0;return n=\"function\"==typeof n?(e.pop(),n):void 0,Yo(e,n)}));function tu(e){var t=xn(e);return t.__chain__=!0,t}function nu(e,t){return t(e)}var ru=Vi((function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,i=function(t){return Yn(t,e)};return!(t>1||this.__actions__.length)&&r instanceof In&&uo(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:nu,args:[i],thisArg:void 0}),new Pn(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(i)}));var iu=_i((function(e,t,n){Se.call(e,n)?++e[n]:$n(e,n,1)}));var ou=ki(Io),uu=ki(No);function au(e,t){return(Nu(e)?ut:er)(e,Xi(t,3))}function lu(e,t){return(Nu(e)?at:tr)(e,Xi(t,3))}var su=_i((function(e,t,n){Se.call(e,n)?e[n].push(t):$n(e,n,[t])}));var cu=Br((function(e,t,n){var i=-1,o=\"function\"==typeof t,u=Ru(e)?r(e.length):[];return er(e,(function(e){u[++i]=o?it(t,e,n):yr(e,t,n)})),u})),fu=_i((function(e,t,n){$n(e,n,t)}));function du(e,t){return(Nu(e)?dt:Tr)(e,Xi(t,3))}var pu=_i((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var hu=Br((function(e,t){if(null==e)return[];var n=t.length;return n>1&&ao(e,t[0],t[1])?t=[]:n>2&&ao(t[0],t[1],t[2])&&(t=[t[0]]),Ir(e,or(t,1),[])})),vu=Xt||function(){return Ge.Date.now()};function mu(e,t,n){return t=n?void 0:t,ji(e,128,void 0,void 0,void 0,void 0,t=e&&null==t?e.length:t)}function gu(e,t){var n;if(\"function\"!=typeof t)throw new ye(i);return e=ra(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=void 0),n}}var yu=Br((function(e,t,n){var r=1;if(n.length){var i=zt(n,Ki(yu));r|=32}return ji(e,r,t,n,i)})),_u=Br((function(e,t,n){var r=3;if(n.length){var i=zt(n,Ki(_u));r|=32}return ji(t,r,e,n,i)}));function bu(e,t,n){var r,o,u,a,l,s,c=0,f=!1,d=!1,p=!0;if(\"function\"!=typeof e)throw new ye(i);function h(t){var n=r,i=o;return r=o=void 0,c=t,a=e.apply(i,n)}function v(e){return c=e,l=bo(g,t),f?h(e):a}function m(e){var n=e-s;return void 0===s||n>=t||n<0||d&&e-c>=u}function g(){var e=vu();if(m(e))return y(e);l=bo(g,function(e){var n=t-(e-s);return d?an(n,u-(e-c)):n}(e))}function y(e){return l=void 0,p&&r?h(e):(r=o=void 0,a)}function _(){var e=vu(),n=m(e);if(r=arguments,o=this,s=e,n){if(void 0===l)return v(s);if(d)return ci(l),l=bo(g,t),h(s)}return void 0===l&&(l=bo(g,t)),a}return t=oa(t)||0,Hu(n)&&(f=!!n.leading,u=(d=\"maxWait\"in n)?un(oa(n.maxWait)||0,t):u,p=\"trailing\"in n?!!n.trailing:p),_.cancel=function(){void 0!==l&&ci(l),c=0,r=s=o=l=void 0},_.flush=function(){return void 0===l?a:y(vu())},_}var wu=Br((function(e,t){return Jn(e,1,t)})),Eu=Br((function(e,t,n){return Jn(e,oa(t)||0,n)}));function Du(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new ye(i);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var u=e.apply(this,r);return n.cache=o.set(i,u)||o,u};return n.cache=new(Du.Cache||Rn),n}function Su(e){if(\"function\"!=typeof e)throw new ye(i);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)}}Du.Cache=Rn;var Cu=li((function(e,t){var n=(t=1==t.length&&Nu(t[0])?dt(t[0],At(Xi())):dt(or(t,1),At(Xi()))).length;return Br((function(r){for(var i=-1,o=an(r.length,n);++i<o;)r[i]=t[i].call(this,r[i]);return it(e,this,r)}))})),ku=Br((function(e,t){return ji(e,32,void 0,t,zt(t,Ki(ku)))})),Tu=Br((function(e,t){return ji(e,64,void 0,t,zt(t,Ki(Tu)))})),xu=Vi((function(e,t){return ji(e,256,void 0,void 0,void 0,t)}));function Au(e,t){return e===t||e!=e&&t!=t}var Ou=Mi(hr),Pu=Mi((function(e,t){return e>=t})),Iu=_r(function(){return arguments}())?_r:function(e){return Vu(e)&&Se.call(e,\"callee\")&&!Ye.call(e,\"callee\")},Nu=r.isArray,Mu=Je?At(Je):function(e){return Vu(e)&&pr(e)==E};function Ru(e){return null!=e&&Wu(e.length)&&!Uu(e)}function Fu(e){return Vu(e)&&Ru(e)}var Lu=tn||ol,Bu=Ze?At(Ze):function(e){return Vu(e)&&pr(e)==c};function ju(e){if(!Vu(e))return!1;var t=pr(e);return t==f||\"[object DOMException]\"==t||\"string\"==typeof e.message&&\"string\"==typeof e.name&&!$u(e)}function Uu(e){if(!Hu(e))return!1;var t=pr(e);return t==d||t==p||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function zu(e){return\"number\"==typeof e&&e==ra(e)}function Wu(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Hu(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function Vu(e){return null!=e&&\"object\"==typeof e}var qu=et?At(et):function(e){return Vu(e)&&no(e)==h};function Gu(e){return\"number\"==typeof e||Vu(e)&&pr(e)==v}function $u(e){if(!Vu(e)||pr(e)!=m)return!1;var t=qe(e);if(null===t)return!0;var n=Se.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&De.call(n)==xe}var Yu=tt?At(tt):function(e){return Vu(e)&&pr(e)==g};var Ku=nt?At(nt):function(e){return Vu(e)&&no(e)==y};function Xu(e){return\"string\"==typeof e||!Nu(e)&&Vu(e)&&pr(e)==_}function Qu(e){return\"symbol\"==typeof e||Vu(e)&&pr(e)==b}var Ju=rt?At(rt):function(e){return Vu(e)&&Wu(e.length)&&!!je[pr(e)]};var Zu=Mi(kr),ea=Mi((function(e,t){return e<=t}));function ta(e){if(!e)return[];if(Ru(e))return Xu(e)?qt(e):gi(e);if(gt&&e[gt])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[gt]());var t=no(e);return(t==h?jt:t==y?Wt:Aa)(e)}function na(e){return e?(e=oa(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function ra(e){var t=na(e),n=t%1;return t==t?n?t-n:t:0}function ia(e){return e?Kn(ra(e),0,4294967295):0}function oa(e){if(\"number\"==typeof e)return e;if(Qu(e))return NaN;if(Hu(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=Hu(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace($,\"\");var n=ie.test(e);return n||ue.test(e)?He(e.slice(2),n?2:8):re.test(e)?NaN:+e}function ua(e){return yi(e,wa(e))}function aa(e){return null==e?\"\":Qr(e)}var la=bi((function(e,t){if(fo(t)||Ru(t))yi(t,ba(t),e);else for(var n in t)Se.call(t,n)&&Hn(e,n,t[n])})),sa=bi((function(e,t){yi(t,wa(t),e)})),ca=bi((function(e,t,n,r){yi(t,wa(t),e,r)})),fa=bi((function(e,t,n,r){yi(t,ba(t),e,r)})),da=Vi(Yn);var pa=Br((function(e,t){e=ve(e);var n=-1,r=t.length,i=r>2?t[2]:void 0;for(i&&ao(t[0],t[1],i)&&(r=1);++n<r;)for(var o=t[n],u=wa(o),a=-1,l=u.length;++a<l;){var s=u[a],c=e[s];(void 0===c||Au(c,we[s])&&!Se.call(e,s))&&(e[s]=o[s])}return e})),ha=Br((function(e){return e.push(void 0,zi),it(Da,void 0,e)}));function va(e,t,n){var r=null==e?void 0:fr(e,t);return void 0===r?n:r}function ma(e,t){return null!=e&&ro(e,t,mr)}var ga=Ai((function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=Te.call(t)),e[t]=n}),Ha(Ga)),ya=Ai((function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=Te.call(t)),Se.call(e,t)?e[t].push(n):e[t]=[n]}),Xi),_a=Br(yr);function ba(e){return Ru(e)?Bn(e):Sr(e)}function wa(e){return Ru(e)?Bn(e,!0):Cr(e)}var Ea=bi((function(e,t,n){Or(e,t,n)})),Da=bi((function(e,t,n,r){Or(e,t,n,r)})),Sa=Vi((function(e,t){var n={};if(null==e)return n;var r=!1;t=dt(t,(function(t){return t=ai(t,e),r||(r=t.length>1),t})),yi(e,Gi(e),n),r&&(n=Xn(n,7,Wi));for(var i=t.length;i--;)Zr(n,t[i]);return n}));var Ca=Vi((function(e,t){return null==e?{}:function(e,t){return Nr(e,t,(function(t,n){return ma(e,n)}))}(e,t)}));function ka(e,t){if(null==e)return{};var n=dt(Gi(e),(function(e){return[e]}));return t=Xi(t),Nr(e,n,(function(e,n){return t(e,n[0])}))}var Ta=Bi(ba),xa=Bi(wa);function Aa(e){return null==e?[]:Ot(e,ba(e))}var Oa=Si((function(e,t,n){return t=t.toLowerCase(),e+(n?Pa(t):t)}));function Pa(e){return ja(aa(e).toLowerCase())}function Ia(e){return(e=aa(e))&&e.replace(le,Rt).replace(Ie,\"\")}var Na=Si((function(e,t,n){return e+(n?\"-\":\"\")+t.toLowerCase()})),Ma=Si((function(e,t,n){return e+(n?\" \":\"\")+t.toLowerCase()})),Ra=Di(\"toLowerCase\");var Fa=Si((function(e,t,n){return e+(n?\"_\":\"\")+t.toLowerCase()}));var La=Si((function(e,t,n){return e+(n?\" \":\"\")+ja(t)}));var Ba=Si((function(e,t,n){return e+(n?\" \":\"\")+t.toUpperCase()})),ja=Di(\"toUpperCase\");function Ua(e,t,n){return e=aa(e),void 0===(t=n?void 0:t)?function(e){return Fe.test(e)}(e)?function(e){return e.match(Me)||[]}(e):function(e){return e.match(Z)||[]}(e):e.match(t)||[]}var za=Br((function(e,t){try{return it(e,void 0,t)}catch(e){return ju(e)?e:new de(e)}})),Wa=Vi((function(e,t){return ut(t,(function(t){t=ko(t),$n(e,t,yu(e[t],e))})),e}));function Ha(e){return function(){return e}}var Va=Ti(),qa=Ti(!0);function Ga(e){return e}function $a(e){return Dr(\"function\"==typeof e?e:Xn(e,1))}var Ya=Br((function(e,t){return function(n){return yr(n,e,t)}})),Ka=Br((function(e,t){return function(n){return yr(e,n,t)}}));function Xa(e,t,n){var r=ba(t),i=cr(t,r);null!=n||Hu(t)&&(i.length||!r.length)||(n=t,t=e,e=this,i=cr(t,ba(t)));var o=!(Hu(n)&&\"chain\"in n&&!n.chain),u=Uu(e);return ut(i,(function(n){var r=t[n];e[n]=r,u&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__),i=n.__actions__=gi(this.__actions__);return i.push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,pt([this.value()],arguments))})})),e}function Qa(){}var Ja=Pi(dt),Za=Pi(lt),el=Pi(mt);function tl(e){return lo(e)?St(ko(e)):function(e){return function(t){return fr(t,e)}}(e)}var nl=Ni(),rl=Ni(!0);function il(){return[]}function ol(){return!1}var ul=Oi((function(e,t){return e+t}),0),al=Fi(\"ceil\"),ll=Oi((function(e,t){return e/t}),1),sl=Fi(\"floor\");var cl,fl=Oi((function(e,t){return e*t}),1),dl=Fi(\"round\"),pl=Oi((function(e,t){return e-t}),0);return xn.after=function(e,t){if(\"function\"!=typeof t)throw new ye(i);return e=ra(e),function(){if(--e<1)return t.apply(this,arguments)}},xn.ary=mu,xn.assign=la,xn.assignIn=sa,xn.assignInWith=ca,xn.assignWith=fa,xn.at=da,xn.before=gu,xn.bind=yu,xn.bindAll=Wa,xn.bindKey=_u,xn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Nu(e)?e:[e]},xn.chain=tu,xn.chunk=function(e,t,n){t=(n?ao(e,t,n):void 0===t)?1:un(ra(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var o=0,u=0,a=r(Jt(i/t));o<i;)a[u++]=qr(e,o,o+=t);return a},xn.compact=function(e){for(var t=-1,n=null==e?0:e.length,r=0,i=[];++t<n;){var o=e[t];o&&(i[r++]=o)}return i},xn.concat=function(){var e=arguments.length;if(!e)return[];for(var t=r(e-1),n=arguments[0],i=e;i--;)t[i-1]=arguments[i];return pt(Nu(n)?gi(n):[n],or(t,1))},xn.cond=function(e){var t=null==e?0:e.length,n=Xi();return e=t?dt(e,(function(e){if(\"function\"!=typeof e[1])throw new ye(i);return[n(e[0]),e[1]]})):[],Br((function(n){for(var r=-1;++r<t;){var i=e[r];if(it(i[0],this,n))return it(i[1],this,n)}}))},xn.conforms=function(e){return function(e){var t=ba(e);return function(n){return Qn(n,e,t)}}(Xn(e,1))},xn.constant=Ha,xn.countBy=iu,xn.create=function(e,t){var n=An(e);return null==t?n:Gn(n,t)},xn.curry=function e(t,n,r){var i=ji(t,8,void 0,void 0,void 0,void 0,void 0,n=r?void 0:n);return i.placeholder=e.placeholder,i},xn.curryRight=function e(t,n,r){var i=ji(t,16,void 0,void 0,void 0,void 0,void 0,n=r?void 0:n);return i.placeholder=e.placeholder,i},xn.debounce=bu,xn.defaults=pa,xn.defaultsDeep=ha,xn.defer=wu,xn.delay=Eu,xn.difference=Ao,xn.differenceBy=Oo,xn.differenceWith=Po,xn.drop=function(e,t,n){var r=null==e?0:e.length;return r?qr(e,(t=n||void 0===t?1:ra(t))<0?0:t,r):[]},xn.dropRight=function(e,t,n){var r=null==e?0:e.length;return r?qr(e,0,(t=r-(t=n||void 0===t?1:ra(t)))<0?0:t):[]},xn.dropRightWhile=function(e,t){return e&&e.length?ti(e,Xi(t,3),!0,!0):[]},xn.dropWhile=function(e,t){return e&&e.length?ti(e,Xi(t,3),!0):[]},xn.fill=function(e,t,n,r){var i=null==e?0:e.length;return i?(n&&\"number\"!=typeof n&&ao(e,t,n)&&(n=0,r=i),function(e,t,n,r){var i=e.length;for((n=ra(n))<0&&(n=-n>i?0:i+n),(r=void 0===r||r>i?i:ra(r))<0&&(r+=i),r=n>r?0:ia(r);n<r;)e[n++]=t;return e}(e,t,n,r)):[]},xn.filter=function(e,t){return(Nu(e)?st:ir)(e,Xi(t,3))},xn.flatMap=function(e,t){return or(du(e,t),1)},xn.flatMapDeep=function(e,t){return or(du(e,t),1/0)},xn.flatMapDepth=function(e,t,n){return n=void 0===n?1:ra(n),or(du(e,t),n)},xn.flatten=Mo,xn.flattenDeep=function(e){return(null==e?0:e.length)?or(e,1/0):[]},xn.flattenDepth=function(e,t){return(null==e?0:e.length)?or(e,t=void 0===t?1:ra(t)):[]},xn.flip=function(e){return ji(e,512)},xn.flow=Va,xn.flowRight=qa,xn.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,r={};++t<n;){var i=e[t];r[i[0]]=i[1]}return r},xn.functions=function(e){return null==e?[]:cr(e,ba(e))},xn.functionsIn=function(e){return null==e?[]:cr(e,wa(e))},xn.groupBy=su,xn.initial=function(e){return(null==e?0:e.length)?qr(e,0,-1):[]},xn.intersection=Fo,xn.intersectionBy=Lo,xn.intersectionWith=Bo,xn.invert=ga,xn.invertBy=ya,xn.invokeMap=cu,xn.iteratee=$a,xn.keyBy=fu,xn.keys=ba,xn.keysIn=wa,xn.map=du,xn.mapKeys=function(e,t){var n={};return t=Xi(t,3),lr(e,(function(e,r,i){$n(n,t(e,r,i),e)})),n},xn.mapValues=function(e,t){var n={};return t=Xi(t,3),lr(e,(function(e,r,i){$n(n,r,t(e,r,i))})),n},xn.matches=function(e){return xr(Xn(e,1))},xn.matchesProperty=function(e,t){return Ar(e,Xn(t,1))},xn.memoize=Du,xn.merge=Ea,xn.mergeWith=Da,xn.method=Ya,xn.methodOf=Ka,xn.mixin=Xa,xn.negate=Su,xn.nthArg=function(e){return e=ra(e),Br((function(t){return Pr(t,e)}))},xn.omit=Sa,xn.omitBy=function(e,t){return ka(e,Su(Xi(t)))},xn.once=function(e){return gu(2,e)},xn.orderBy=function(e,t,n,r){return null==e?[]:(Nu(t)||(t=null==t?[]:[t]),Nu(n=r?void 0:n)||(n=null==n?[]:[n]),Ir(e,t,n))},xn.over=Ja,xn.overArgs=Cu,xn.overEvery=Za,xn.overSome=el,xn.partial=ku,xn.partialRight=Tu,xn.partition=pu,xn.pick=Ca,xn.pickBy=ka,xn.property=tl,xn.propertyOf=function(e){return function(t){return null==e?void 0:fr(e,t)}},xn.pull=Uo,xn.pullAll=zo,xn.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?Mr(e,t,Xi(n,2)):e},xn.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?Mr(e,t,void 0,n):e},xn.pullAt=Wo,xn.range=nl,xn.rangeRight=rl,xn.rearg=xu,xn.reject=function(e,t){return(Nu(e)?st:ir)(e,Su(Xi(t,3)))},xn.remove=function(e,t){var n=[];if(!e||!e.length)return n;var r=-1,i=[],o=e.length;for(t=Xi(t,3);++r<o;){var u=e[r];t(u,r,e)&&(n.push(u),i.push(r))}return Rr(e,i),n},xn.rest=function(e,t){if(\"function\"!=typeof e)throw new ye(i);return Br(e,t=void 0===t?t:ra(t))},xn.reverse=Ho,xn.sampleSize=function(e,t,n){return t=(n?ao(e,t,n):void 0===t)?1:ra(t),(Nu(e)?Un:Ur)(e,t)},xn.set=function(e,t,n){return null==e?e:zr(e,t,n)},xn.setWith=function(e,t,n,r){return r=\"function\"==typeof r?r:void 0,null==e?e:zr(e,t,n,r)},xn.shuffle=function(e){return(Nu(e)?zn:Vr)(e)},xn.slice=function(e,t,n){var r=null==e?0:e.length;return r?(n&&\"number\"!=typeof n&&ao(e,t,n)?(t=0,n=r):(t=null==t?0:ra(t),n=void 0===n?r:ra(n)),qr(e,t,n)):[]},xn.sortBy=hu,xn.sortedUniq=function(e){return e&&e.length?Kr(e):[]},xn.sortedUniqBy=function(e,t){return e&&e.length?Kr(e,Xi(t,2)):[]},xn.split=function(e,t,n){return n&&\"number\"!=typeof n&&ao(e,t,n)&&(t=n=void 0),(n=void 0===n?4294967295:n>>>0)?(e=aa(e))&&(\"string\"==typeof t||null!=t&&!Yu(t))&&!(t=Qr(t))&&Bt(e)?si(qt(e),0,n):e.split(t,n):[]},xn.spread=function(e,t){if(\"function\"!=typeof e)throw new ye(i);return t=null==t?0:un(ra(t),0),Br((function(n){var r=n[t],i=si(n,0,t);return r&&pt(i,r),it(e,this,i)}))},xn.tail=function(e){var t=null==e?0:e.length;return t?qr(e,1,t):[]},xn.take=function(e,t,n){return e&&e.length?qr(e,0,(t=n||void 0===t?1:ra(t))<0?0:t):[]},xn.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?qr(e,(t=r-(t=n||void 0===t?1:ra(t)))<0?0:t,r):[]},xn.takeRightWhile=function(e,t){return e&&e.length?ti(e,Xi(t,3),!1,!0):[]},xn.takeWhile=function(e,t){return e&&e.length?ti(e,Xi(t,3)):[]},xn.tap=function(e,t){return t(e),e},xn.throttle=function(e,t,n){var r=!0,o=!0;if(\"function\"!=typeof e)throw new ye(i);return Hu(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),bu(e,t,{leading:r,maxWait:t,trailing:o})},xn.thru=nu,xn.toArray=ta,xn.toPairs=Ta,xn.toPairsIn=xa,xn.toPath=function(e){return Nu(e)?dt(e,ko):Qu(e)?[e]:gi(Co(aa(e)))},xn.toPlainObject=ua,xn.transform=function(e,t,n){var r=Nu(e),i=r||Lu(e)||Ju(e);if(t=Xi(t,4),null==n){var o=e&&e.constructor;n=i?r?new o:[]:Hu(e)&&Uu(o)?An(qe(e)):{}}return(i?ut:lr)(e,(function(e,r,i){return t(n,e,r,i)})),n},xn.unary=function(e){return mu(e,1)},xn.union=Vo,xn.unionBy=qo,xn.unionWith=Go,xn.uniq=function(e){return e&&e.length?Jr(e):[]},xn.uniqBy=function(e,t){return e&&e.length?Jr(e,Xi(t,2)):[]},xn.uniqWith=function(e,t){return t=\"function\"==typeof t?t:void 0,e&&e.length?Jr(e,void 0,t):[]},xn.unset=function(e,t){return null==e||Zr(e,t)},xn.unzip=$o,xn.unzipWith=Yo,xn.update=function(e,t,n){return null==e?e:ei(e,t,ui(n))},xn.updateWith=function(e,t,n,r){return r=\"function\"==typeof r?r:void 0,null==e?e:ei(e,t,ui(n),r)},xn.values=Aa,xn.valuesIn=function(e){return null==e?[]:Ot(e,wa(e))},xn.without=Ko,xn.words=Ua,xn.wrap=function(e,t){return ku(ui(t),e)},xn.xor=Xo,xn.xorBy=Qo,xn.xorWith=Jo,xn.zip=Zo,xn.zipObject=function(e,t){return ii(e||[],t||[],Hn)},xn.zipObjectDeep=function(e,t){return ii(e||[],t||[],zr)},xn.zipWith=eu,xn.entries=Ta,xn.entriesIn=xa,xn.extend=sa,xn.extendWith=ca,Xa(xn,xn),xn.add=ul,xn.attempt=za,xn.camelCase=Oa,xn.capitalize=Pa,xn.ceil=al,xn.clamp=function(e,t,n){return void 0===n&&(n=t,t=void 0),void 0!==n&&(n=(n=oa(n))==n?n:0),void 0!==t&&(t=(t=oa(t))==t?t:0),Kn(oa(e),t,n)},xn.clone=function(e){return Xn(e,4)},xn.cloneDeep=function(e){return Xn(e,5)},xn.cloneDeepWith=function(e,t){return Xn(e,5,t=\"function\"==typeof t?t:void 0)},xn.cloneWith=function(e,t){return Xn(e,4,t=\"function\"==typeof t?t:void 0)},xn.conformsTo=function(e,t){return null==t||Qn(e,t,ba(t))},xn.deburr=Ia,xn.defaultTo=function(e,t){return null==e||e!=e?t:e},xn.divide=ll,xn.endsWith=function(e,t,n){e=aa(e),t=Qr(t);var r=e.length,i=n=void 0===n?r:Kn(ra(n),0,r);return(n-=t.length)>=0&&e.slice(n,i)==t},xn.eq=Au,xn.escape=function(e){return(e=aa(e))&&B.test(e)?e.replace(F,Ft):e},xn.escapeRegExp=function(e){return(e=aa(e))&&G.test(e)?e.replace(q,\"\\\\$&\"):e},xn.every=function(e,t,n){var r=Nu(e)?lt:nr;return n&&ao(e,t,n)&&(t=void 0),r(e,Xi(t,3))},xn.find=ou,xn.findIndex=Io,xn.findKey=function(e,t){return yt(e,Xi(t,3),lr)},xn.findLast=uu,xn.findLastIndex=No,xn.findLastKey=function(e,t){return yt(e,Xi(t,3),sr)},xn.floor=sl,xn.forEach=au,xn.forEachRight=lu,xn.forIn=function(e,t){return null==e?e:ur(e,Xi(t,3),wa)},xn.forInRight=function(e,t){return null==e?e:ar(e,Xi(t,3),wa)},xn.forOwn=function(e,t){return e&&lr(e,Xi(t,3))},xn.forOwnRight=function(e,t){return e&&sr(e,Xi(t,3))},xn.get=va,xn.gt=Ou,xn.gte=Pu,xn.has=function(e,t){return null!=e&&ro(e,t,vr)},xn.hasIn=ma,xn.head=Ro,xn.identity=Ga,xn.includes=function(e,t,n,r){e=Ru(e)?e:Aa(e),n=n&&!r?ra(n):0;var i=e.length;return n<0&&(n=un(i+n,0)),Xu(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&bt(e,t,n)>-1},xn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ra(n);return i<0&&(i=un(r+i,0)),bt(e,t,i)},xn.inRange=function(e,t,n){return t=na(t),void 0===n?(n=t,t=0):n=na(n),function(e,t,n){return e>=an(t,n)&&e<un(t,n)}(e=oa(e),t,n)},xn.invoke=_a,xn.isArguments=Iu,xn.isArray=Nu,xn.isArrayBuffer=Mu,xn.isArrayLike=Ru,xn.isArrayLikeObject=Fu,xn.isBoolean=function(e){return!0===e||!1===e||Vu(e)&&pr(e)==s},xn.isBuffer=Lu,xn.isDate=Bu,xn.isElement=function(e){return Vu(e)&&1===e.nodeType&&!$u(e)},xn.isEmpty=function(e){if(null==e)return!0;if(Ru(e)&&(Nu(e)||\"string\"==typeof e||\"function\"==typeof e.splice||Lu(e)||Ju(e)||Iu(e)))return!e.length;var t=no(e);if(t==h||t==y)return!e.size;if(fo(e))return!Sr(e).length;for(var n in e)if(Se.call(e,n))return!1;return!0},xn.isEqual=function(e,t){return br(e,t)},xn.isEqualWith=function(e,t,n){var r=(n=\"function\"==typeof n?n:void 0)?n(e,t):void 0;return void 0===r?br(e,t,void 0,n):!!r},xn.isError=ju,xn.isFinite=function(e){return\"number\"==typeof e&&nn(e)},xn.isFunction=Uu,xn.isInteger=zu,xn.isLength=Wu,xn.isMap=qu,xn.isMatch=function(e,t){return e===t||wr(e,t,Ji(t))},xn.isMatchWith=function(e,t,n){return n=\"function\"==typeof n?n:void 0,wr(e,t,Ji(t),n)},xn.isNaN=function(e){return Gu(e)&&e!=+e},xn.isNative=function(e){if(co(e))throw new de(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Er(e)},xn.isNil=function(e){return null==e},xn.isNull=function(e){return null===e},xn.isNumber=Gu,xn.isObject=Hu,xn.isObjectLike=Vu,xn.isPlainObject=$u,xn.isRegExp=Yu,xn.isSafeInteger=function(e){return zu(e)&&e>=-9007199254740991&&e<=9007199254740991},xn.isSet=Ku,xn.isString=Xu,xn.isSymbol=Qu,xn.isTypedArray=Ju,xn.isUndefined=function(e){return void 0===e},xn.isWeakMap=function(e){return Vu(e)&&no(e)==w},xn.isWeakSet=function(e){return Vu(e)&&\"[object WeakSet]\"==pr(e)},xn.join=function(e,t){return null==e?\"\":rn.call(e,t)},xn.kebabCase=Na,xn.last=jo,xn.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return void 0!==n&&(i=(i=ra(n))<0?un(r+i,0):an(i,r-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,i):_t(e,Et,i,!0)},xn.lowerCase=Ma,xn.lowerFirst=Ra,xn.lt=Zu,xn.lte=ea,xn.max=function(e){return e&&e.length?rr(e,Ga,hr):void 0},xn.maxBy=function(e,t){return e&&e.length?rr(e,Xi(t,2),hr):void 0},xn.mean=function(e){return Dt(e,Ga)},xn.meanBy=function(e,t){return Dt(e,Xi(t,2))},xn.min=function(e){return e&&e.length?rr(e,Ga,kr):void 0},xn.minBy=function(e,t){return e&&e.length?rr(e,Xi(t,2),kr):void 0},xn.stubArray=il,xn.stubFalse=ol,xn.stubObject=function(){return{}},xn.stubString=function(){return\"\"},xn.stubTrue=function(){return!0},xn.multiply=fl,xn.nth=function(e,t){return e&&e.length?Pr(e,ra(t)):void 0},xn.noConflict=function(){return Ge._===this&&(Ge._=Ae),this},xn.noop=Qa,xn.now=vu,xn.pad=function(e,t,n){e=aa(e);var r=(t=ra(t))?Vt(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return Ii(Zt(i),n)+e+Ii(Jt(i),n)},xn.padEnd=function(e,t,n){e=aa(e);var r=(t=ra(t))?Vt(e):0;return t&&r<t?e+Ii(t-r,n):e},xn.padStart=function(e,t,n){e=aa(e);var r=(t=ra(t))?Vt(e):0;return t&&r<t?Ii(t-r,n)+e:e},xn.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),sn(aa(e).replace(Y,\"\"),t||0)},xn.random=function(e,t,n){if(n&&\"boolean\"!=typeof n&&ao(e,t,n)&&(t=n=void 0),void 0===n&&(\"boolean\"==typeof t?(n=t,t=void 0):\"boolean\"==typeof e&&(n=e,e=void 0)),void 0===e&&void 0===t?(e=0,t=1):(e=na(e),void 0===t?(t=e,e=0):t=na(t)),e>t){var r=e;e=t,t=r}if(n||e%1||t%1){var i=cn();return an(e+i*(t-e+We(\"1e-\"+((i+\"\").length-1))),t)}return Fr(e,t)},xn.reduce=function(e,t,n){var r=Nu(e)?ht:kt,i=arguments.length<3;return r(e,Xi(t,4),n,i,er)},xn.reduceRight=function(e,t,n){var r=Nu(e)?vt:kt,i=arguments.length<3;return r(e,Xi(t,4),n,i,tr)},xn.repeat=function(e,t,n){return t=(n?ao(e,t,n):void 0===t)?1:ra(t),Lr(aa(e),t)},xn.replace=function(){var e=arguments,t=aa(e[0]);return e.length<3?t:t.replace(e[1],e[2])},xn.result=function(e,t,n){var r=-1,i=(t=ai(t,e)).length;for(i||(i=1,e=void 0);++r<i;){var o=null==e?void 0:e[ko(t[r])];void 0===o&&(r=i,o=n),e=Uu(o)?o.call(e):o}return e},xn.round=dl,xn.runInContext=e,xn.sample=function(e){return(Nu(e)?jn:jr)(e)},xn.size=function(e){if(null==e)return 0;if(Ru(e))return Xu(e)?Vt(e):e.length;var t=no(e);return t==h||t==y?e.size:Sr(e).length},xn.snakeCase=Fa,xn.some=function(e,t,n){var r=Nu(e)?mt:Gr;return n&&ao(e,t,n)&&(t=void 0),r(e,Xi(t,3))},xn.sortedIndex=function(e,t){return $r(e,t)},xn.sortedIndexBy=function(e,t,n){return Yr(e,t,Xi(n,2))},xn.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var r=$r(e,t);if(r<n&&Au(e[r],t))return r}return-1},xn.sortedLastIndex=function(e,t){return $r(e,t,!0)},xn.sortedLastIndexBy=function(e,t,n){return Yr(e,t,Xi(n,2),!0)},xn.sortedLastIndexOf=function(e,t){if(null==e?0:e.length){var n=$r(e,t,!0)-1;if(Au(e[n],t))return n}return-1},xn.startCase=La,xn.startsWith=function(e,t,n){return e=aa(e),n=null==n?0:Kn(ra(n),0,e.length),t=Qr(t),e.slice(n,n+t.length)==t},xn.subtract=pl,xn.sum=function(e){return e&&e.length?Tt(e,Ga):0},xn.sumBy=function(e,t){return e&&e.length?Tt(e,Xi(t,2)):0},xn.template=function(e,t,n){var r=xn.templateSettings;n&&ao(e,t,n)&&(t=void 0),e=aa(e),t=ca({},t,r,Ui);var i,o,u=ca({},t.imports,r.imports,Ui),a=ba(u),l=Ot(u,a),s=0,c=t.interpolate||se,f=\"__p += '\",d=me((t.escape||se).source+\"|\"+c.source+\"|\"+(c===z?te:se).source+\"|\"+(t.evaluate||se).source+\"|$\",\"g\"),p=\"//# sourceURL=\"+(Se.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++Be+\"]\")+\"\\n\";e.replace(d,(function(t,n,r,u,a,l){return r||(r=u),f+=e.slice(s,l).replace(ce,Lt),n&&(i=!0,f+=\"' +\\n__e(\"+n+\") +\\n'\"),a&&(o=!0,f+=\"';\\n\"+a+\";\\n__p += '\"),r&&(f+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),s=l+t.length,t})),f+=\"';\\n\";var h=Se.call(t,\"variable\")&&t.variable;h||(f=\"with (obj) {\\n\"+f+\"\\n}\\n\"),f=(o?f.replace(I,\"\"):f).replace(N,\"$1\").replace(M,\"$1;\"),f=\"function(\"+(h||\"obj\")+\") {\\n\"+(h?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(i?\", __e = _.escape\":\"\")+(o?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+f+\"return __p\\n}\";var v=za((function(){return pe(a,p+\"return \"+f).apply(void 0,l)}));if(v.source=f,ju(v))throw v;return v},xn.times=function(e,t){if((e=ra(e))<1||e>9007199254740991)return[];var n=4294967295,r=an(e,4294967295);e-=4294967295;for(var i=xt(r,t=Xi(t));++n<e;)t(n);return i},xn.toFinite=na,xn.toInteger=ra,xn.toLength=ia,xn.toLower=function(e){return aa(e).toLowerCase()},xn.toNumber=oa,xn.toSafeInteger=function(e){return e?Kn(ra(e),-9007199254740991,9007199254740991):0===e?e:0},xn.toString=aa,xn.toUpper=function(e){return aa(e).toUpperCase()},xn.trim=function(e,t,n){if((e=aa(e))&&(n||void 0===t))return e.replace($,\"\");if(!e||!(t=Qr(t)))return e;var r=qt(e),i=qt(t);return si(r,It(r,i),Nt(r,i)+1).join(\"\")},xn.trimEnd=function(e,t,n){if((e=aa(e))&&(n||void 0===t))return e.replace(K,\"\");if(!e||!(t=Qr(t)))return e;var r=qt(e);return si(r,0,Nt(r,qt(t))+1).join(\"\")},xn.trimStart=function(e,t,n){if((e=aa(e))&&(n||void 0===t))return e.replace(Y,\"\");if(!e||!(t=Qr(t)))return e;var r=qt(e);return si(r,It(r,qt(t))).join(\"\")},xn.truncate=function(e,t){var n=30,r=\"...\";if(Hu(t)){var i=\"separator\"in t?t.separator:i;n=\"length\"in t?ra(t.length):n,r=\"omission\"in t?Qr(t.omission):r}var o=(e=aa(e)).length;if(Bt(e)){var u=qt(e);o=u.length}if(n>=o)return e;var a=n-Vt(r);if(a<1)return r;var l=u?si(u,0,a).join(\"\"):e.slice(0,a);if(void 0===i)return l+r;if(u&&(a+=l.length-a),Yu(i)){if(e.slice(a).search(i)){var s,c=l;for(i.global||(i=me(i.source,aa(ne.exec(i))+\"g\")),i.lastIndex=0;s=i.exec(c);)var f=s.index;l=l.slice(0,void 0===f?a:f)}}else if(e.indexOf(Qr(i),a)!=a){var d=l.lastIndexOf(i);d>-1&&(l=l.slice(0,d))}return l+r},xn.unescape=function(e){return(e=aa(e))&&L.test(e)?e.replace(R,Gt):e},xn.uniqueId=function(e){var t=++Ce;return aa(e)+t},xn.upperCase=Ba,xn.upperFirst=ja,xn.each=au,xn.eachRight=lu,xn.first=Ro,Xa(xn,(cl={},lr(xn,(function(e,t){Se.call(xn.prototype,t)||(cl[t]=e)})),cl),{chain:!1}),xn.VERSION=\"4.17.20\",ut([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],(function(e){xn[e].placeholder=xn})),ut([\"drop\",\"take\"],(function(e,t){In.prototype[e]=function(n){n=void 0===n?1:un(ra(n),0);var r=this.__filtered__&&!t?new In(this):this.clone();return r.__filtered__?r.__takeCount__=an(n,r.__takeCount__):r.__views__.push({size:an(n,4294967295),type:e+(r.__dir__<0?\"Right\":\"\")}),r},In.prototype[e+\"Right\"]=function(t){return this.reverse()[e](t).reverse()}})),ut([\"filter\",\"map\",\"takeWhile\"],(function(e,t){var n=t+1,r=1==n||3==n;In.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Xi(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),ut([\"head\",\"last\"],(function(e,t){var n=\"take\"+(t?\"Right\":\"\");In.prototype[e]=function(){return this[n](1).value()[0]}})),ut([\"initial\",\"tail\"],(function(e,t){var n=\"drop\"+(t?\"\":\"Right\");In.prototype[e]=function(){return this.__filtered__?new In(this):this[n](1)}})),In.prototype.compact=function(){return this.filter(Ga)},In.prototype.find=function(e){return this.filter(e).head()},In.prototype.findLast=function(e){return this.reverse().find(e)},In.prototype.invokeMap=Br((function(e,t){return\"function\"==typeof e?new In(this):this.map((function(n){return yr(n,e,t)}))})),In.prototype.reject=function(e){return this.filter(Su(Xi(e)))},In.prototype.slice=function(e,t){e=ra(e);var n=this;return n.__filtered__&&(e>0||t<0)?new In(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),void 0!==t&&(n=(t=ra(t))<0?n.dropRight(-t):n.take(t-e)),n)},In.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},In.prototype.toArray=function(){return this.take(4294967295)},lr(In.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=xn[r?\"take\"+(\"last\"==t?\"Right\":\"\"):t],o=r||/^find/.test(t);i&&(xn.prototype[t]=function(){var t=this.__wrapped__,u=r?[1]:arguments,a=t instanceof In,l=u[0],s=a||Nu(t),c=function(e){var t=i.apply(xn,pt([e],u));return r&&f?t[0]:t};s&&n&&\"function\"==typeof l&&1!=l.length&&(a=s=!1);var f=this.__chain__,d=!!this.__actions__.length,p=o&&!f,h=a&&!d;if(!o&&s){t=h?t:new In(this);var v=e.apply(t,u);return v.__actions__.push({func:nu,args:[c],thisArg:void 0}),new Pn(v,f)}return p&&h?e.apply(this,u):(v=this.thru(c),p?r?v.value()[0]:v.value():v)})})),ut([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],(function(e){var t=_e[e],n=/^(?:push|sort|unshift)$/.test(e)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(e);xn.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(Nu(i)?i:[],e)}return this[n]((function(n){return t.apply(Nu(n)?n:[],e)}))}})),lr(In.prototype,(function(e,t){var n=xn[t];if(n){var r=n.name+\"\";Se.call(_n,r)||(_n[r]=[]),_n[r].push({name:t,func:n})}})),_n[xi(void 0,2).name]=[{name:\"wrapper\",func:void 0}],In.prototype.clone=function(){var e=new In(this.__wrapped__);return e.__actions__=gi(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=gi(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=gi(this.__views__),e},In.prototype.reverse=function(){if(this.__filtered__){var e=new In(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},In.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Nu(e),r=t<0,i=n?e.length:0,o=function(e,t,n){var r=-1,i=n.length;for(;++r<i;){var o=n[r],u=o.size;switch(o.type){case\"drop\":e+=u;break;case\"dropRight\":t-=u;break;case\"take\":t=an(t,e+u);break;case\"takeRight\":e=un(e,t-u)}}return{start:e,end:t}}(0,i,this.__views__),u=o.start,a=o.end,l=a-u,s=r?a:u-1,c=this.__iteratees__,f=c.length,d=0,p=an(l,this.__takeCount__);if(!n||!r&&i==l&&p==l)return ni(e,this.__actions__);var h=[];e:for(;l--&&d<p;){for(var v=-1,m=e[s+=t];++v<f;){var g=c[v],y=g.iteratee,_=g.type,b=y(m);if(2==_)m=b;else if(!b){if(1==_)continue e;break e}}h[d++]=m}return h},xn.prototype.at=ru,xn.prototype.chain=function(){return tu(this)},xn.prototype.commit=function(){return new Pn(this.value(),this.__chain__)},xn.prototype.next=function(){void 0===this.__values__&&(this.__values__=ta(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}},xn.prototype.plant=function(e){for(var t,n=this;n instanceof On;){var r=xo(n);r.__index__=0,r.__values__=void 0,t?i.__wrapped__=r:t=r;var i=r;n=n.__wrapped__}return i.__wrapped__=e,t},xn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof In){var t=e;return this.__actions__.length&&(t=new In(this)),(t=t.reverse()).__actions__.push({func:nu,args:[Ho],thisArg:void 0}),new Pn(t,this.__chain__)}return this.thru(Ho)},xn.prototype.toJSON=xn.prototype.valueOf=xn.prototype.value=function(){return ni(this.__wrapped__,this.__actions__)},xn.prototype.first=xn.prototype.head,gt&&(xn.prototype[gt]=function(){return this}),xn}();Ge._=$t,void 0===(r=function(){return $t}.call(t,n,t,e))||(e.exports=r)}.call(this)},1573:e=>{\"use strict\";const t=(e,t)=>{for(const n of Reflect.ownKeys(t))Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n));return e};e.exports=t,e.exports.default=t},9381:e=>{\"use strict\";\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function i(e){if(null==e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}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,o){for(var u,a,l=i(e),s=1;s<arguments.length;s++){for(var c in u=Object(arguments[s]))n.call(u,c)&&(l[c]=u[c]);if(t){a=t(u);for(var f=0;f<a.length;f++)r.call(u,a[f])&&(l[a[f]]=u[a[f]])}}return l}},834:(e,t,n)=>{\"use strict\";const r=n(1573),i=new WeakMap,o=(e,t={})=>{if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");let n,o=!1,u=0;const a=e.displayName||e.name||\"<anonymous>\",l=function(...r){if(i.set(l,++u),o){if(!0===t.throw)throw new Error(`Function \\`${a}\\` can only be called once`);return n}return o=!0,n=e.apply(this,r),e=null,n};return r(l,e),i.set(l,u),l};e.exports=o,e.exports.default=o,e.exports.callCount=e=>{if(!i.has(e))throw new Error(`The given function \\`${e.name}\\` is not wrapped by the \\`onetime\\` package`);return i.get(e)}},8070:(e,t,n)=>{\"use strict\";const r=n(2413),i=[\"assert\",\"count\",\"countReset\",\"debug\",\"dir\",\"dirxml\",\"error\",\"group\",\"groupCollapsed\",\"groupEnd\",\"info\",\"log\",\"table\",\"time\",\"timeEnd\",\"timeLog\",\"trace\",\"warn\"];let o={};e.exports=e=>{const t=new r.PassThrough,n=new r.PassThrough;t.write=t=>e(\"stdout\",t),n.write=t=>e(\"stderr\",t);const u=new console.Console(t,n);for(const e of i)o[e]=console[e],console[e]=u[e];return()=>{for(const e of i)console[e]=o[e];o={}}}},5187:e=>{window,e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.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 i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));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=20)}([function(e,t,n){\"use strict\";e.exports=n(12)},function(e,t,n){\"use strict\";\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/var r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function u(e){if(null==e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}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,a,l=u(e),s=1;s<arguments.length;s++){for(var c in n=Object(arguments[s]))i.call(n,c)&&(l[c]=n[c]);if(r){a=r(n);for(var f=0;f<a.length;f++)o.call(n,a[f])&&(l[a[f]]=n[a[f]])}}return l}},function(e,t,n){(function(t){function n(e){return(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})(e)}var r=/^\\s+|\\s+$/g,i=/^[-+]0x[0-9a-f]+$/i,o=/^0b[01]+$/i,u=/^0o[0-7]+$/i,a=parseInt,l=\"object\"==(void 0===t?\"undefined\":n(t))&&t&&t.Object===Object&&t,s=\"object\"==(\"undefined\"==typeof self?\"undefined\":n(self))&&self&&self.Object===Object&&self,c=l||s||Function(\"return this\")(),f=Object.prototype.toString,d=Math.max,p=Math.min,h=function(){return c.Date.now()};function v(e){var t=n(e);return!!e&&(\"object\"==t||\"function\"==t)}function m(e){return\"symbol\"==n(e)||function(e){return!!e&&\"object\"==n(e)}(e)&&\"[object Symbol]\"==f.call(e)}function g(e){if(\"number\"==typeof e)return e;if(m(e))return NaN;if(v(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=v(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(r,\"\");var n=o.test(e);return n||u.test(e)?a(e.slice(2),n?2:8):i.test(e)?NaN:+e}e.exports=function(e,t,n){var r=!0,i=!0;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");return v(n)&&(r=\"leading\"in n?!!n.leading:r,i=\"trailing\"in n?!!n.trailing:i),function(e,t,n){var r,i,o,u,a,l,s=0,c=!1,f=!1,m=!0;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");function y(t){var n=r,o=i;return r=i=void 0,s=t,u=e.apply(o,n)}function _(e){return s=e,a=setTimeout(w,t),c?y(e):u}function b(e){var n=e-l;return void 0===l||n>=t||n<0||f&&e-s>=o}function w(){var e=h();if(b(e))return E(e);a=setTimeout(w,function(e){var n=t-(e-l);return f?p(n,o-(e-s)):n}(e))}function E(e){return a=void 0,m&&r?y(e):(r=i=void 0,u)}function D(){var e=h(),n=b(e);if(r=arguments,i=this,l=e,n){if(void 0===a)return _(l);if(f)return a=setTimeout(w,t),y(l)}return void 0===a&&(a=setTimeout(w,t)),u}return t=g(t)||0,v(n)&&(c=!!n.leading,o=(f=\"maxWait\"in n)?d(g(n.maxWait)||0,t):o,m=\"trailing\"in n?!!n.trailing:m),D.cancel=function(){void 0!==a&&clearTimeout(a),s=0,r=l=i=a=void 0},D.flush=function(){return void 0===a?u:E(h())},D}(e,t,{leading:r,maxWait:t,trailing:i})}}).call(this,n(4))},function(e,t,n){(function(n){function r(e){return(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})(e)}var i;t=e.exports=p,i=\"object\"===(void 0===n?\"undefined\":r(n))&&n.env&&n.env.NODE_DEBUG&&/\\bsemver\\b/i.test(n.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments,0);e.unshift(\"SEMVER\"),console.log.apply(console,e)}:function(){},t.SEMVER_SPEC_VERSION=\"2.0.0\";var o=Number.MAX_SAFE_INTEGER||9007199254740991,u=t.re=[],a=t.src=[],l=t.tokens={},s=0;function c(e){l[e]=s++}c(\"NUMERICIDENTIFIER\"),a[l.NUMERICIDENTIFIER]=\"0|[1-9]\\\\d*\",c(\"NUMERICIDENTIFIERLOOSE\"),a[l.NUMERICIDENTIFIERLOOSE]=\"[0-9]+\",c(\"NONNUMERICIDENTIFIER\"),a[l.NONNUMERICIDENTIFIER]=\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\",c(\"MAINVERSION\"),a[l.MAINVERSION]=\"(\"+a[l.NUMERICIDENTIFIER]+\")\\\\.(\"+a[l.NUMERICIDENTIFIER]+\")\\\\.(\"+a[l.NUMERICIDENTIFIER]+\")\",c(\"MAINVERSIONLOOSE\"),a[l.MAINVERSIONLOOSE]=\"(\"+a[l.NUMERICIDENTIFIERLOOSE]+\")\\\\.(\"+a[l.NUMERICIDENTIFIERLOOSE]+\")\\\\.(\"+a[l.NUMERICIDENTIFIERLOOSE]+\")\",c(\"PRERELEASEIDENTIFIER\"),a[l.PRERELEASEIDENTIFIER]=\"(?:\"+a[l.NUMERICIDENTIFIER]+\"|\"+a[l.NONNUMERICIDENTIFIER]+\")\",c(\"PRERELEASEIDENTIFIERLOOSE\"),a[l.PRERELEASEIDENTIFIERLOOSE]=\"(?:\"+a[l.NUMERICIDENTIFIERLOOSE]+\"|\"+a[l.NONNUMERICIDENTIFIER]+\")\",c(\"PRERELEASE\"),a[l.PRERELEASE]=\"(?:-(\"+a[l.PRERELEASEIDENTIFIER]+\"(?:\\\\.\"+a[l.PRERELEASEIDENTIFIER]+\")*))\",c(\"PRERELEASELOOSE\"),a[l.PRERELEASELOOSE]=\"(?:-?(\"+a[l.PRERELEASEIDENTIFIERLOOSE]+\"(?:\\\\.\"+a[l.PRERELEASEIDENTIFIERLOOSE]+\")*))\",c(\"BUILDIDENTIFIER\"),a[l.BUILDIDENTIFIER]=\"[0-9A-Za-z-]+\",c(\"BUILD\"),a[l.BUILD]=\"(?:\\\\+(\"+a[l.BUILDIDENTIFIER]+\"(?:\\\\.\"+a[l.BUILDIDENTIFIER]+\")*))\",c(\"FULL\"),c(\"FULLPLAIN\"),a[l.FULLPLAIN]=\"v?\"+a[l.MAINVERSION]+a[l.PRERELEASE]+\"?\"+a[l.BUILD]+\"?\",a[l.FULL]=\"^\"+a[l.FULLPLAIN]+\"$\",c(\"LOOSEPLAIN\"),a[l.LOOSEPLAIN]=\"[v=\\\\s]*\"+a[l.MAINVERSIONLOOSE]+a[l.PRERELEASELOOSE]+\"?\"+a[l.BUILD]+\"?\",c(\"LOOSE\"),a[l.LOOSE]=\"^\"+a[l.LOOSEPLAIN]+\"$\",c(\"GTLT\"),a[l.GTLT]=\"((?:<|>)?=?)\",c(\"XRANGEIDENTIFIERLOOSE\"),a[l.XRANGEIDENTIFIERLOOSE]=a[l.NUMERICIDENTIFIERLOOSE]+\"|x|X|\\\\*\",c(\"XRANGEIDENTIFIER\"),a[l.XRANGEIDENTIFIER]=a[l.NUMERICIDENTIFIER]+\"|x|X|\\\\*\",c(\"XRANGEPLAIN\"),a[l.XRANGEPLAIN]=\"[v=\\\\s]*(\"+a[l.XRANGEIDENTIFIER]+\")(?:\\\\.(\"+a[l.XRANGEIDENTIFIER]+\")(?:\\\\.(\"+a[l.XRANGEIDENTIFIER]+\")(?:\"+a[l.PRERELEASE]+\")?\"+a[l.BUILD]+\"?)?)?\",c(\"XRANGEPLAINLOOSE\"),a[l.XRANGEPLAINLOOSE]=\"[v=\\\\s]*(\"+a[l.XRANGEIDENTIFIERLOOSE]+\")(?:\\\\.(\"+a[l.XRANGEIDENTIFIERLOOSE]+\")(?:\\\\.(\"+a[l.XRANGEIDENTIFIERLOOSE]+\")(?:\"+a[l.PRERELEASELOOSE]+\")?\"+a[l.BUILD]+\"?)?)?\",c(\"XRANGE\"),a[l.XRANGE]=\"^\"+a[l.GTLT]+\"\\\\s*\"+a[l.XRANGEPLAIN]+\"$\",c(\"XRANGELOOSE\"),a[l.XRANGELOOSE]=\"^\"+a[l.GTLT]+\"\\\\s*\"+a[l.XRANGEPLAINLOOSE]+\"$\",c(\"COERCE\"),a[l.COERCE]=\"(^|[^\\\\d])(\\\\d{1,16})(?:\\\\.(\\\\d{1,16}))?(?:\\\\.(\\\\d{1,16}))?(?:$|[^\\\\d])\",c(\"COERCERTL\"),u[l.COERCERTL]=new RegExp(a[l.COERCE],\"g\"),c(\"LONETILDE\"),a[l.LONETILDE]=\"(?:~>?)\",c(\"TILDETRIM\"),a[l.TILDETRIM]=\"(\\\\s*)\"+a[l.LONETILDE]+\"\\\\s+\",u[l.TILDETRIM]=new RegExp(a[l.TILDETRIM],\"g\"),c(\"TILDE\"),a[l.TILDE]=\"^\"+a[l.LONETILDE]+a[l.XRANGEPLAIN]+\"$\",c(\"TILDELOOSE\"),a[l.TILDELOOSE]=\"^\"+a[l.LONETILDE]+a[l.XRANGEPLAINLOOSE]+\"$\",c(\"LONECARET\"),a[l.LONECARET]=\"(?:\\\\^)\",c(\"CARETTRIM\"),a[l.CARETTRIM]=\"(\\\\s*)\"+a[l.LONECARET]+\"\\\\s+\",u[l.CARETTRIM]=new RegExp(a[l.CARETTRIM],\"g\"),c(\"CARET\"),a[l.CARET]=\"^\"+a[l.LONECARET]+a[l.XRANGEPLAIN]+\"$\",c(\"CARETLOOSE\"),a[l.CARETLOOSE]=\"^\"+a[l.LONECARET]+a[l.XRANGEPLAINLOOSE]+\"$\",c(\"COMPARATORLOOSE\"),a[l.COMPARATORLOOSE]=\"^\"+a[l.GTLT]+\"\\\\s*(\"+a[l.LOOSEPLAIN]+\")$|^$\",c(\"COMPARATOR\"),a[l.COMPARATOR]=\"^\"+a[l.GTLT]+\"\\\\s*(\"+a[l.FULLPLAIN]+\")$|^$\",c(\"COMPARATORTRIM\"),a[l.COMPARATORTRIM]=\"(\\\\s*)\"+a[l.GTLT]+\"\\\\s*(\"+a[l.LOOSEPLAIN]+\"|\"+a[l.XRANGEPLAIN]+\")\",u[l.COMPARATORTRIM]=new RegExp(a[l.COMPARATORTRIM],\"g\"),c(\"HYPHENRANGE\"),a[l.HYPHENRANGE]=\"^\\\\s*(\"+a[l.XRANGEPLAIN]+\")\\\\s+-\\\\s+(\"+a[l.XRANGEPLAIN]+\")\\\\s*$\",c(\"HYPHENRANGELOOSE\"),a[l.HYPHENRANGELOOSE]=\"^\\\\s*(\"+a[l.XRANGEPLAINLOOSE]+\")\\\\s+-\\\\s+(\"+a[l.XRANGEPLAINLOOSE]+\")\\\\s*$\",c(\"STAR\"),a[l.STAR]=\"(<|>)?=?\\\\s*\\\\*\";for(var f=0;f<s;f++)i(f,a[f]),u[f]||(u[f]=new RegExp(a[f]));function d(e,t){if(t&&\"object\"===r(t)||(t={loose:!!t,includePrerelease:!1}),e instanceof p)return e;if(\"string\"!=typeof e)return null;if(e.length>256)return null;if(!(t.loose?u[l.LOOSE]:u[l.FULL]).test(e))return null;try{return new p(e,t)}catch(e){return null}}function p(e,t){if(t&&\"object\"===r(t)||(t={loose:!!t,includePrerelease:!1}),e instanceof p){if(e.loose===t.loose)return e;e=e.version}else if(\"string\"!=typeof e)throw new TypeError(\"Invalid Version: \"+e);if(e.length>256)throw new TypeError(\"version is longer than 256 characters\");if(!(this instanceof p))return new p(e,t);i(\"SemVer\",e,t),this.options=t,this.loose=!!t.loose;var n=e.trim().match(t.loose?u[l.LOOSE]:u[l.FULL]);if(!n)throw new TypeError(\"Invalid Version: \"+e);if(this.raw=e,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>o||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>o||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>o||this.patch<0)throw new TypeError(\"Invalid patch version\");n[4]?this.prerelease=n[4].split(\".\").map((function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t<o)return t}return e})):this.prerelease=[],this.build=n[5]?n[5].split(\".\"):[],this.format()}t.parse=d,t.valid=function(e,t){var n=d(e,t);return n?n.version:null},t.clean=function(e,t){var n=d(e.trim().replace(/^[=v]+/,\"\"),t);return n?n.version:null},t.SemVer=p,p.prototype.format=function(){return this.version=this.major+\".\"+this.minor+\".\"+this.patch,this.prerelease.length&&(this.version+=\"-\"+this.prerelease.join(\".\")),this.version},p.prototype.toString=function(){return this.version},p.prototype.compare=function(e){return i(\"SemVer.compare\",this.version,this.options,e),e instanceof p||(e=new p(e,this.options)),this.compareMain(e)||this.comparePre(e)},p.prototype.compareMain=function(e){return e instanceof p||(e=new p(e,this.options)),v(this.major,e.major)||v(this.minor,e.minor)||v(this.patch,e.patch)},p.prototype.comparePre=function(e){if(e instanceof p||(e=new p(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var t=0;do{var n=this.prerelease[t],r=e.prerelease[t];if(i(\"prerelease compare\",t,n,r),void 0===n&&void 0===r)return 0;if(void 0===r)return 1;if(void 0===n)return-1;if(n!==r)return v(n,r)}while(++t)},p.prototype.compareBuild=function(e){e instanceof p||(e=new p(e,this.options));var t=0;do{var n=this.build[t],r=e.build[t];if(i(\"prerelease compare\",t,n,r),void 0===n&&void 0===r)return 0;if(void 0===r)return 1;if(void 0===n)return-1;if(n!==r)return v(n,r)}while(++t)},p.prototype.inc=function(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":0===this.prerelease.length&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case\"pre\":if(0===this.prerelease.length)this.prerelease=[0];else{for(var n=this.prerelease.length;--n>=0;)\"number\"==typeof this.prerelease[n]&&(this.prerelease[n]++,n=-2);-1===n&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(\"invalid increment argument: \"+e)}return this.format(),this.raw=this.version,this},t.inc=function(e,t,n,r){\"string\"==typeof n&&(r=n,n=void 0);try{return new p(e,n).inc(t,r).version}catch(e){return null}},t.diff=function(e,t){if(_(e,t))return null;var n=d(e),r=d(t),i=\"\";if(n.prerelease.length||r.prerelease.length){i=\"pre\";var o=\"prerelease\"}for(var u in n)if((\"major\"===u||\"minor\"===u||\"patch\"===u)&&n[u]!==r[u])return i+u;return o},t.compareIdentifiers=v;var h=/^[0-9]+$/;function v(e,t){var n=h.test(e),r=h.test(t);return n&&r&&(e=+e,t=+t),e===t?0:n&&!r?-1:r&&!n?1:e<t?-1:1}function m(e,t,n){return new p(e,n).compare(new p(t,n))}function g(e,t,n){return m(e,t,n)>0}function y(e,t,n){return m(e,t,n)<0}function _(e,t,n){return 0===m(e,t,n)}function b(e,t,n){return 0!==m(e,t,n)}function w(e,t,n){return m(e,t,n)>=0}function E(e,t,n){return m(e,t,n)<=0}function D(e,t,n,i){switch(t){case\"===\":return\"object\"===r(e)&&(e=e.version),\"object\"===r(n)&&(n=n.version),e===n;case\"!==\":return\"object\"===r(e)&&(e=e.version),\"object\"===r(n)&&(n=n.version),e!==n;case\"\":case\"=\":case\"==\":return _(e,n,i);case\"!=\":return b(e,n,i);case\">\":return g(e,n,i);case\">=\":return w(e,n,i);case\"<\":return y(e,n,i);case\"<=\":return E(e,n,i);default:throw new TypeError(\"Invalid operator: \"+t)}}function S(e,t){if(t&&\"object\"===r(t)||(t={loose:!!t,includePrerelease:!1}),e instanceof S){if(e.loose===!!t.loose)return e;e=e.value}if(!(this instanceof S))return new S(e,t);i(\"comparator\",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===C?this.value=\"\":this.value=this.operator+this.semver.version,i(\"comp\",this)}t.rcompareIdentifiers=function(e,t){return v(t,e)},t.major=function(e,t){return new p(e,t).major},t.minor=function(e,t){return new p(e,t).minor},t.patch=function(e,t){return new p(e,t).patch},t.compare=m,t.compareLoose=function(e,t){return m(e,t,!0)},t.compareBuild=function(e,t,n){var r=new p(e,n),i=new p(t,n);return r.compare(i)||r.compareBuild(i)},t.rcompare=function(e,t,n){return m(t,e,n)},t.sort=function(e,n){return e.sort((function(e,r){return t.compareBuild(e,r,n)}))},t.rsort=function(e,n){return e.sort((function(e,r){return t.compareBuild(r,e,n)}))},t.gt=g,t.lt=y,t.eq=_,t.neq=b,t.gte=w,t.lte=E,t.cmp=D,t.Comparator=S;var C={};function k(e,t){if(t&&\"object\"===r(t)||(t={loose:!!t,includePrerelease:!1}),e instanceof k)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new k(e.raw,t);if(e instanceof S)return new k(e.value,t);if(!(this instanceof k))return new k(e,t);if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map((function(e){return this.parseRange(e.trim())}),this).filter((function(e){return e.length})),!this.set.length)throw new TypeError(\"Invalid SemVer Range: \"+e);this.format()}function T(e,t){for(var n=!0,r=e.slice(),i=r.pop();n&&r.length;)n=r.every((function(e){return i.intersects(e,t)})),i=r.pop();return n}function x(e){return!e||\"x\"===e.toLowerCase()||\"*\"===e}function A(e,t,n,r,i,o,u,a,l,s,c,f,d){return((t=x(n)?\"\":x(r)?\">=\"+n+\".0.0\":x(i)?\">=\"+n+\".\"+r+\".0\":\">=\"+t)+\" \"+(a=x(l)?\"\":x(s)?\"<\"+(+l+1)+\".0.0\":x(c)?\"<\"+l+\".\"+(+s+1)+\".0\":f?\"<=\"+l+\".\"+s+\".\"+c+\"-\"+f:\"<=\"+a)).trim()}function O(e,t,n){for(var r=0;r<e.length;r++)if(!e[r].test(t))return!1;if(t.prerelease.length&&!n.includePrerelease){for(r=0;r<e.length;r++)if(i(e[r].semver),e[r].semver!==C&&e[r].semver.prerelease.length>0){var o=e[r].semver;if(o.major===t.major&&o.minor===t.minor&&o.patch===t.patch)return!0}return!1}return!0}function P(e,t,n){try{t=new k(t,n)}catch(e){return!1}return t.test(e)}function I(e,t,n,r){var i,o,u,a,l;switch(e=new p(e,r),t=new k(t,r),n){case\">\":i=g,o=E,u=y,a=\">\",l=\">=\";break;case\"<\":i=y,o=w,u=g,a=\"<\",l=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(P(e,t,r))return!1;for(var s=0;s<t.set.length;++s){var c=t.set[s],f=null,d=null;if(c.forEach((function(e){e.semver===C&&(e=new S(\">=0.0.0\")),f=f||e,d=d||e,i(e.semver,f.semver,r)?f=e:u(e.semver,d.semver,r)&&(d=e)})),f.operator===a||f.operator===l)return!1;if((!d.operator||d.operator===a)&&o(e,d.semver))return!1;if(d.operator===l&&u(e,d.semver))return!1}return!0}S.prototype.parse=function(e){var t=this.options.loose?u[l.COMPARATORLOOSE]:u[l.COMPARATOR],n=e.match(t);if(!n)throw new TypeError(\"Invalid comparator: \"+e);this.operator=void 0!==n[1]?n[1]:\"\",\"=\"===this.operator&&(this.operator=\"\"),n[2]?this.semver=new p(n[2],this.options.loose):this.semver=C},S.prototype.toString=function(){return this.value},S.prototype.test=function(e){if(i(\"Comparator.test\",e,this.options.loose),this.semver===C||e===C)return!0;if(\"string\"==typeof e)try{e=new p(e,this.options)}catch(e){return!1}return D(e,this.operator,this.semver,this.options)},S.prototype.intersects=function(e,t){if(!(e instanceof S))throw new TypeError(\"a Comparator is required\");var n;if(t&&\"object\"===r(t)||(t={loose:!!t,includePrerelease:!1}),\"\"===this.operator)return\"\"===this.value||(n=new k(e.value,t),P(this.value,n,t));if(\"\"===e.operator)return\"\"===e.value||(n=new k(this.value,t),P(e.semver,n,t));var i=!(\">=\"!==this.operator&&\">\"!==this.operator||\">=\"!==e.operator&&\">\"!==e.operator),o=!(\"<=\"!==this.operator&&\"<\"!==this.operator||\"<=\"!==e.operator&&\"<\"!==e.operator),u=this.semver.version===e.semver.version,a=!(\">=\"!==this.operator&&\"<=\"!==this.operator||\">=\"!==e.operator&&\"<=\"!==e.operator),l=D(this.semver,\"<\",e.semver,t)&&(\">=\"===this.operator||\">\"===this.operator)&&(\"<=\"===e.operator||\"<\"===e.operator),s=D(this.semver,\">\",e.semver,t)&&(\"<=\"===this.operator||\"<\"===this.operator)&&(\">=\"===e.operator||\">\"===e.operator);return i||o||u&&a||l||s},t.Range=k,k.prototype.format=function(){return this.range=this.set.map((function(e){return e.join(\" \").trim()})).join(\"||\").trim(),this.range},k.prototype.toString=function(){return this.range},k.prototype.parseRange=function(e){var t=this.options.loose;e=e.trim();var n=t?u[l.HYPHENRANGELOOSE]:u[l.HYPHENRANGE];e=e.replace(n,A),i(\"hyphen replace\",e),e=e.replace(u[l.COMPARATORTRIM],\"$1$2$3\"),i(\"comparator trim\",e,u[l.COMPARATORTRIM]),e=(e=(e=e.replace(u[l.TILDETRIM],\"$1~\")).replace(u[l.CARETTRIM],\"$1^\")).split(/\\s+/).join(\" \");var r=t?u[l.COMPARATORLOOSE]:u[l.COMPARATOR],o=e.split(\" \").map((function(e){return function(e,t){return i(\"comp\",e,t),e=function(e,t){return e.trim().split(/\\s+/).map((function(e){return function(e,t){i(\"caret\",e,t);var n=t.loose?u[l.CARETLOOSE]:u[l.CARET];return e.replace(n,(function(t,n,r,o,u){var a;return i(\"caret\",e,t,n,r,o,u),x(n)?a=\"\":x(r)?a=\">=\"+n+\".0.0 <\"+(+n+1)+\".0.0\":x(o)?a=\"0\"===n?\">=\"+n+\".\"+r+\".0 <\"+n+\".\"+(+r+1)+\".0\":\">=\"+n+\".\"+r+\".0 <\"+(+n+1)+\".0.0\":u?(i(\"replaceCaret pr\",u),a=\"0\"===n?\"0\"===r?\">=\"+n+\".\"+r+\".\"+o+\"-\"+u+\" <\"+n+\".\"+r+\".\"+(+o+1):\">=\"+n+\".\"+r+\".\"+o+\"-\"+u+\" <\"+n+\".\"+(+r+1)+\".0\":\">=\"+n+\".\"+r+\".\"+o+\"-\"+u+\" <\"+(+n+1)+\".0.0\"):(i(\"no pr\"),a=\"0\"===n?\"0\"===r?\">=\"+n+\".\"+r+\".\"+o+\" <\"+n+\".\"+r+\".\"+(+o+1):\">=\"+n+\".\"+r+\".\"+o+\" <\"+n+\".\"+(+r+1)+\".0\":\">=\"+n+\".\"+r+\".\"+o+\" <\"+(+n+1)+\".0.0\"),i(\"caret return\",a),a}))}(e,t)})).join(\" \")}(e,t),i(\"caret\",e),e=function(e,t){return e.trim().split(/\\s+/).map((function(e){return function(e,t){var n=t.loose?u[l.TILDELOOSE]:u[l.TILDE];return e.replace(n,(function(t,n,r,o,u){var a;return i(\"tilde\",e,t,n,r,o,u),x(n)?a=\"\":x(r)?a=\">=\"+n+\".0.0 <\"+(+n+1)+\".0.0\":x(o)?a=\">=\"+n+\".\"+r+\".0 <\"+n+\".\"+(+r+1)+\".0\":u?(i(\"replaceTilde pr\",u),a=\">=\"+n+\".\"+r+\".\"+o+\"-\"+u+\" <\"+n+\".\"+(+r+1)+\".0\"):a=\">=\"+n+\".\"+r+\".\"+o+\" <\"+n+\".\"+(+r+1)+\".0\",i(\"tilde return\",a),a}))}(e,t)})).join(\" \")}(e,t),i(\"tildes\",e),e=function(e,t){return i(\"replaceXRanges\",e,t),e.split(/\\s+/).map((function(e){return function(e,t){e=e.trim();var n=t.loose?u[l.XRANGELOOSE]:u[l.XRANGE];return e.replace(n,(function(n,r,o,u,a,l){i(\"xRange\",e,n,r,o,u,a,l);var s=x(o),c=s||x(u),f=c||x(a),d=f;return\"=\"===r&&d&&(r=\"\"),l=t.includePrerelease?\"-0\":\"\",s?n=\">\"===r||\"<\"===r?\"<0.0.0-0\":\"*\":r&&d?(c&&(u=0),a=0,\">\"===r?(r=\">=\",c?(o=+o+1,u=0,a=0):(u=+u+1,a=0)):\"<=\"===r&&(r=\"<\",c?o=+o+1:u=+u+1),n=r+o+\".\"+u+\".\"+a+l):c?n=\">=\"+o+\".0.0\"+l+\" <\"+(+o+1)+\".0.0\"+l:f&&(n=\">=\"+o+\".\"+u+\".0\"+l+\" <\"+o+\".\"+(+u+1)+\".0\"+l),i(\"xRange return\",n),n}))}(e,t)})).join(\" \")}(e,t),i(\"xrange\",e),e=function(e,t){return i(\"replaceStars\",e,t),e.trim().replace(u[l.STAR],\"\")}(e,t),i(\"stars\",e),e}(e,this.options)}),this).join(\" \").split(/\\s+/);return this.options.loose&&(o=o.filter((function(e){return!!e.match(r)}))),o.map((function(e){return new S(e,this.options)}),this)},k.prototype.intersects=function(e,t){if(!(e instanceof k))throw new TypeError(\"a Range is required\");return this.set.some((function(n){return T(n,t)&&e.set.some((function(e){return T(e,t)&&n.every((function(n){return e.every((function(e){return n.intersects(e,t)}))}))}))}))},t.toComparators=function(e,t){return new k(e,t).set.map((function(e){return e.map((function(e){return e.value})).join(\" \").trim().split(\" \")}))},k.prototype.test=function(e){if(!e)return!1;if(\"string\"==typeof e)try{e=new p(e,this.options)}catch(e){return!1}for(var t=0;t<this.set.length;t++)if(O(this.set[t],e,this.options))return!0;return!1},t.satisfies=P,t.maxSatisfying=function(e,t,n){var r=null,i=null;try{var o=new k(t,n)}catch(e){return null}return e.forEach((function(e){o.test(e)&&(r&&-1!==i.compare(e)||(i=new p(r=e,n)))})),r},t.minSatisfying=function(e,t,n){var r=null,i=null;try{var o=new k(t,n)}catch(e){return null}return e.forEach((function(e){o.test(e)&&(r&&1!==i.compare(e)||(i=new p(r=e,n)))})),r},t.minVersion=function(e,t){e=new k(e,t);var n=new p(\"0.0.0\");if(e.test(n))return n;if(n=new p(\"0.0.0-0\"),e.test(n))return n;n=null;for(var r=0;r<e.set.length;++r)e.set[r].forEach((function(e){var t=new p(e.semver.version);switch(e.operator){case\">\":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case\"\":case\">=\":n&&!g(n,t)||(n=t);break;case\"<\":case\"<=\":break;default:throw new Error(\"Unexpected operation: \"+e.operator)}}));return n&&e.test(n)?n:null},t.validRange=function(e,t){try{return new k(e,t).range||\"*\"}catch(e){return null}},t.ltr=function(e,t,n){return I(e,t,\"<\",n)},t.gtr=function(e,t,n){return I(e,t,\">\",n)},t.outside=I,t.prerelease=function(e,t){var n=d(e,t);return n&&n.prerelease.length?n.prerelease:null},t.intersects=function(e,t,n){return e=new k(e,n),t=new k(t,n),e.intersects(t)},t.coerce=function(e,t){if(e instanceof p)return e;if(\"number\"==typeof e&&(e=String(e)),\"string\"!=typeof e)return null;var n=null;if((t=t||{}).rtl){for(var r;(r=u[l.COERCERTL].exec(e))&&(!n||n.index+n[0].length!==e.length);)n&&r.index+r[0].length===n.index+n[0].length||(n=r),u[l.COERCERTL].lastIndex=r.index+r[1].length+r[2].length;u[l.COERCERTL].lastIndex=-1}else n=e.match(u[l.COERCE]);return null===n?null:d(n[2]+\".\"+(n[3]||\"0\")+\".\"+(n[4]||\"0\"),t)}}).call(this,n(5))},function(e,t){function n(e){return(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})(e)}var r;r=function(){return this}();try{r=r||new Function(\"return this\")()}catch(e){\"object\"===(\"undefined\"==typeof window?\"undefined\":n(window))&&(r=window)}e.exports=r},function(e,t){var n,r,i=e.exports={};function o(){throw new Error(\"setTimeout has not been defined\")}function u(){throw new Error(\"clearTimeout has not been defined\")}function a(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!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:o}catch(e){n=o}try{r=\"function\"==typeof clearTimeout?clearTimeout:u}catch(e){r=u}}();var l,s=[],c=!1,f=-1;function d(){c&&l&&(c=!1,l.length?s=l.concat(s):f=-1,s.length&&p())}function p(){if(!c){var e=a(d);c=!0;for(var t=s.length;t;){for(l=s,s=[];++f<t;)l&&l[f].run();f=-1,t=s.length}l=null,c=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===u||!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 v(){}i.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];s.push(new h(e,t)),1!==s.length||c||a(p)},h.prototype.run=function(){this.fun.apply(null,this.array)},i.title=\"browser\",i.browser=!0,i.env={},i.argv=[],i.version=\"\",i.versions={},i.on=v,i.addListener=v,i.once=v,i.off=v,i.removeListener=v,i.removeAllListeners=v,i.emit=v,i.prependListener=v,i.prependOnceListener=v,i.listeners=function(e){return[]},i.binding=function(e){throw new Error(\"process.binding is not supported\")},i.cwd=function(){return\"/\"},i.chdir=function(e){throw new Error(\"process.chdir is not supported\")},i.umask=function(){return 0}},function(e,t,n){\"use strict\";function r(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(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)}}var o=n(10),u=Symbol(\"max\"),a=Symbol(\"length\"),l=Symbol(\"lengthCalculator\"),s=Symbol(\"allowStale\"),c=Symbol(\"maxAge\"),f=Symbol(\"dispose\"),d=Symbol(\"noDisposeOnSet\"),p=Symbol(\"lruList\"),h=Symbol(\"cache\"),v=Symbol(\"updateAgeOnGet\"),m=function(){return 1},g=function(){function e(t){if(r(this,e),\"number\"==typeof t&&(t={max:t}),t||(t={}),t.max&&(\"number\"!=typeof t.max||t.max<0))throw new TypeError(\"max must be a non-negative number\");this[u]=t.max||1/0;var n=t.length||m;if(this[l]=\"function\"!=typeof n?m:n,this[s]=t.stale||!1,t.maxAge&&\"number\"!=typeof t.maxAge)throw new TypeError(\"maxAge must be a number\");this[c]=t.maxAge||0,this[f]=t.dispose,this[d]=t.noDisposeOnSet||!1,this[v]=t.updateAgeOnGet||!1,this.reset()}var t,n;return t=e,(n=[{key:\"rforEach\",value:function(e,t){t=t||this;for(var n=this[p].tail;null!==n;){var r=n.prev;D(this,e,n,t),n=r}}},{key:\"forEach\",value:function(e,t){t=t||this;for(var n=this[p].head;null!==n;){var r=n.next;D(this,e,n,t),n=r}}},{key:\"keys\",value:function(){return this[p].toArray().map((function(e){return e.key}))}},{key:\"values\",value:function(){return this[p].toArray().map((function(e){return e.value}))}},{key:\"reset\",value:function(){var e=this;this[f]&&this[p]&&this[p].length&&this[p].forEach((function(t){return e[f](t.key,t.value)})),this[h]=new Map,this[p]=new o,this[a]=0}},{key:\"dump\",value:function(){var e=this;return this[p].map((function(t){return!_(e,t)&&{k:t.key,v:t.value,e:t.now+(t.maxAge||0)}})).toArray().filter((function(e){return e}))}},{key:\"dumpLru\",value:function(){return this[p]}},{key:\"set\",value:function(e,t,n){if((n=n||this[c])&&\"number\"!=typeof n)throw new TypeError(\"maxAge must be a number\");var r=n?Date.now():0,i=this[l](t,e);if(this[h].has(e)){if(i>this[u])return w(this,this[h].get(e)),!1;var o=this[h].get(e).value;return this[f]&&(this[d]||this[f](e,o.value)),o.now=r,o.maxAge=n,o.value=t,this[a]+=i-o.length,o.length=i,this.get(e),b(this),!0}var s=new E(e,t,i,r,n);return s.length>this[u]?(this[f]&&this[f](e,t),!1):(this[a]+=s.length,this[p].unshift(s),this[h].set(e,this[p].head),b(this),!0)}},{key:\"has\",value:function(e){if(!this[h].has(e))return!1;var t=this[h].get(e).value;return!_(this,t)}},{key:\"get\",value:function(e){return y(this,e,!0)}},{key:\"peek\",value:function(e){return y(this,e,!1)}},{key:\"pop\",value:function(){var e=this[p].tail;return e?(w(this,e),e.value):null}},{key:\"del\",value:function(e){w(this,this[h].get(e))}},{key:\"load\",value:function(e){this.reset();for(var t=Date.now(),n=e.length-1;n>=0;n--){var r=e[n],i=r.e||0;if(0===i)this.set(r.k,r.v);else{var o=i-t;o>0&&this.set(r.k,r.v,o)}}}},{key:\"prune\",value:function(){var e=this;this[h].forEach((function(t,n){return y(e,n,!1)}))}},{key:\"max\",set:function(e){if(\"number\"!=typeof e||e<0)throw new TypeError(\"max must be a non-negative number\");this[u]=e||1/0,b(this)},get:function(){return this[u]}},{key:\"allowStale\",set:function(e){this[s]=!!e},get:function(){return this[s]}},{key:\"maxAge\",set:function(e){if(\"number\"!=typeof e)throw new TypeError(\"maxAge must be a non-negative number\");this[c]=e,b(this)},get:function(){return this[c]}},{key:\"lengthCalculator\",set:function(e){var t=this;\"function\"!=typeof e&&(e=m),e!==this[l]&&(this[l]=e,this[a]=0,this[p].forEach((function(e){e.length=t[l](e.value,e.key),t[a]+=e.length}))),b(this)},get:function(){return this[l]}},{key:\"length\",get:function(){return this[a]}},{key:\"itemCount\",get:function(){return this[p].length}}])&&i(t.prototype,n),e}(),y=function(e,t,n){var r=e[h].get(t);if(r){var i=r.value;if(_(e,i)){if(w(e,r),!e[s])return}else n&&(e[v]&&(r.value.now=Date.now()),e[p].unshiftNode(r));return i.value}},_=function(e,t){if(!t||!t.maxAge&&!e[c])return!1;var n=Date.now()-t.now;return t.maxAge?n>t.maxAge:e[c]&&n>e[c]},b=function(e){if(e[a]>e[u])for(var t=e[p].tail;e[a]>e[u]&&null!==t;){var n=t.prev;w(e,t),t=n}},w=function(e,t){if(t){var n=t.value;e[f]&&e[f](n.key,n.value),e[a]-=n.length,e[h].delete(n.key),e[p].removeNode(t)}},E=function e(t,n,i,o,u){r(this,e),this.key=t,this.value=n,this.length=i,this.now=o,this.maxAge=u||0},D=function(e,t,n,r){var i=n.value;_(e,i)&&(w(e,n),e[s]||(i=void 0)),i&&t.call(r,i.value,i.key,e)};e.exports=g},function(e,t,n){(function(t){function n(e){return(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})(e)}e.exports=function(){if(\"undefined\"==typeof document||!document.addEventListener)return null;var r,i,o,u={};return u.copy=function(){var e=!1,t=null,n=!1;function r(){e=!1,t=null,n&&window.getSelection().removeAllRanges(),n=!1}return document.addEventListener(\"copy\",(function(n){if(e){for(var r in t)n.clipboardData.setData(r,t[r]);n.preventDefault()}})),function(i){return new Promise((function(o,u){e=!0,\"string\"==typeof i?t={\"text/plain\":i}:i instanceof Node?t={\"text/html\":(new XMLSerializer).serializeToString(i)}:i instanceof Object?t=i:u(\"Invalid data type. Must be string, DOM node, or an object mapping MIME types to strings.\"),function e(t){try{if(document.execCommand(\"copy\"))r(),o();else{if(t)throw r(),new Error(\"Unable to copy. Perhaps it's not available in your browser?\");!function(){var e=document.getSelection();if(!document.queryCommandEnabled(\"copy\")&&e.isCollapsed){var t=document.createRange();t.selectNodeContents(document.body),e.removeAllRanges(),e.addRange(t),n=!0}}(),e(!0)}}catch(e){r(),u(e)}}(!1)}))}}(),u.paste=(o=!1,document.addEventListener(\"paste\",(function(e){if(o){o=!1,e.preventDefault();var t=r;r=null,t(e.clipboardData.getData(i))}})),function(e){return new Promise((function(t,n){o=!0,r=t,i=e||\"text/plain\";try{document.execCommand(\"paste\")||(o=!1,n(new Error(\"Unable to paste. Pasting only works in Internet Explorer at the moment.\")))}catch(e){o=!1,n(new Error(e))}}))}),\"undefined\"==typeof ClipboardEvent&&void 0!==window.clipboardData&&void 0!==window.clipboardData.setData&&(\n/*! promise-polyfill 2.0.1 */\nfunction(r){function i(e,t){return function(){e.apply(t,arguments)}}function o(e){if(\"object\"!=n(this))throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!=typeof e)throw new TypeError(\"not a function\");this._state=null,this._value=null,this._deferreds=[],f(e,i(a,this),i(l,this))}function u(e){var t=this;return null===this._state?void this._deferreds.push(e):void d((function(){var n=t._state?e.onFulfilled:e.onRejected;if(null!==n){var r;try{r=n(t._value)}catch(t){return void e.reject(t)}e.resolve(r)}else(t._state?e.resolve:e.reject)(t._value)}))}function a(e){try{if(e===this)throw new TypeError(\"A promise cannot be resolved with itself.\");if(e&&(\"object\"==n(e)||\"function\"==typeof e)){var t=e.then;if(\"function\"==typeof t)return void f(i(t,e),i(a,this),i(l,this))}this._state=!0,this._value=e,s.call(this)}catch(e){l.call(this,e)}}function l(e){this._state=!1,this._value=e,s.call(this)}function s(){for(var e=0,t=this._deferreds.length;t>e;e++)u.call(this,this._deferreds[e]);this._deferreds=null}function c(e,t,n,r){this.onFulfilled=\"function\"==typeof e?e:null,this.onRejected=\"function\"==typeof t?t:null,this.resolve=n,this.reject=r}function f(e,t,n){var r=!1;try{e((function(e){r||(r=!0,t(e))}),(function(e){r||(r=!0,n(e))}))}catch(e){if(r)return;r=!0,n(e)}}var d=o.immediateFn||\"function\"==typeof t&&t||function(e){setTimeout(e,1)},p=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)};o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){var n=this;return new o((function(r,i){u.call(n,new c(e,t,r,i))}))},o.all=function(){var e=Array.prototype.slice.call(1===arguments.length&&p(arguments[0])?arguments[0]:arguments);return new o((function(t,r){function i(u,a){try{if(a&&(\"object\"==n(a)||\"function\"==typeof a)){var l=a.then;if(\"function\"==typeof l)return void l.call(a,(function(e){i(u,e)}),r)}e[u]=a,0==--o&&t(e)}catch(e){r(e)}}if(0===e.length)return t([]);for(var o=e.length,u=0;u<e.length;u++)i(u,e[u])}))},o.resolve=function(e){return e&&\"object\"==n(e)&&e.constructor===o?e:new o((function(t){t(e)}))},o.reject=function(e){return new o((function(t,n){n(e)}))},o.race=function(e){return new o((function(t,n){for(var r=0,i=e.length;i>r;r++)e[r].then(t,n)}))},e.exports?e.exports=o:r.Promise||(r.Promise=o)}(this),u.copy=function(e){return new Promise((function(t,n){if(\"string\"!=typeof e&&!(\"text/plain\"in e))throw new Error(\"You must provide a text/plain type.\");var r=\"string\"==typeof e?e:e[\"text/plain\"];window.clipboardData.setData(\"Text\",r)?t():n(new Error(\"Copying was rejected.\"))}))},u.paste=function(){return new Promise((function(e,t){var n=window.clipboardData.getData(\"Text\");n?e(n):t(new Error(\"Pasting was rejected.\"))}))}),u}()}).call(this,n(13).setImmediate)},function(e,t,n){\"use strict\";e.exports=n(15)},function(e,t,n){\"use strict\";n.r(t),t.default=\":root {\\n  /**\\n   * IMPORTANT: When new theme variables are added below– also add them to SettingsContext updateThemeVariables()\\n   */\\n\\n  /* Light theme */\\n  --light-color-attribute-name: #ef6632;\\n  --light-color-attribute-name-not-editable: #23272f;\\n  --light-color-attribute-name-inverted: rgba(255, 255, 255, 0.7);\\n  --light-color-attribute-value: #1a1aa6;\\n  --light-color-attribute-value-inverted: #ffffff;\\n  --light-color-attribute-editable-value: #1a1aa6;\\n  --light-color-background: #ffffff;\\n  --light-color-background-hover: rgba(0, 136, 250, 0.1);\\n  --light-color-background-inactive: #e5e5e5;\\n  --light-color-background-invalid: #fff0f0;\\n  --light-color-background-selected: #0088fa;\\n  --light-color-button-background: #ffffff;\\n  --light-color-button-background-focus: #ededed;\\n  --light-color-button: #5f6673;\\n  --light-color-button-disabled: #cfd1d5;\\n  --light-color-button-active: #0088fa;\\n  --light-color-button-focus: #23272f;\\n  --light-color-button-hover: #23272f;\\n  --light-color-border: #eeeeee;\\n  --light-color-commit-did-not-render-fill: #cfd1d5;\\n  --light-color-commit-did-not-render-fill-text: #000000;\\n  --light-color-commit-did-not-render-pattern: #cfd1d5;\\n  --light-color-commit-did-not-render-pattern-text: #333333;\\n  --light-color-commit-gradient-0: #37afa9;\\n  --light-color-commit-gradient-1: #63b19e;\\n  --light-color-commit-gradient-2: #80b393;\\n  --light-color-commit-gradient-3: #97b488;\\n  --light-color-commit-gradient-4: #abb67d;\\n  --light-color-commit-gradient-5: #beb771;\\n  --light-color-commit-gradient-6: #cfb965;\\n  --light-color-commit-gradient-7: #dfba57;\\n  --light-color-commit-gradient-8: #efbb49;\\n  --light-color-commit-gradient-9: #febc38;\\n  --light-color-commit-gradient-text: #000000;\\n  --light-color-component-name: #6a51b2;\\n  --light-color-component-name-inverted: #ffffff;\\n  --light-color-component-badge-background: rgba(0, 0, 0, 0.1);\\n  --light-color-component-badge-background-inverted: rgba(255, 255, 255, 0.25);\\n  --light-color-component-badge-count: #777d88;\\n  --light-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7);\\n  --light-color-context-background: rgba(0,0,0,.9);\\n  --light-color-context-background-hover: rgba(255, 255, 255, 0.1);\\n  --light-color-context-background-selected: #178fb9;\\n  --light-color-context-border: #3d424a;\\n  --light-color-context-text: #ffffff;\\n  --light-color-context-text-selected: #ffffff;\\n  --light-color-dim: #777d88;\\n  --light-color-dimmer: #cfd1d5;\\n  --light-color-dimmest: #eff0f1;\\n  --light-color-error-background: hsl(0, 100%, 97%);\\n  --light-color-error-border: hsl(0, 100%, 92%);\\n  --light-color-error-text: #ff0000;\\n  --light-color-expand-collapse-toggle: #777d88;\\n  --light-color-link: #0000ff;\\n  --light-color-modal-background: rgba(255, 255, 255, 0.75);\\n  --light-color-record-active: #fc3a4b;\\n  --light-color-record-hover: #3578e5;\\n  --light-color-record-inactive: #0088fa;\\n  --light-color-scroll-thumb: #c2c2c2;\\n  --light-color-scroll-track: #fafafa;\\n  --light-color-search-match: yellow;\\n  --light-color-search-match-current: #f7923b;\\n  --light-color-selected-tree-highlight-active: rgba(0, 136, 250, 0.1);\\n  --light-color-selected-tree-highlight-inactive: rgba(0, 0, 0, 0.05);\\n  --light-color-shadow: rgba(0, 0, 0, 0.25);\\n  --light-color-tab-selected-border: #0088fa;\\n  --light-color-text: #000000;\\n  --light-color-text-invalid: #ff0000;\\n  --light-color-text-selected: #ffffff;\\n  --light-color-toggle-background-invalid: #fc3a4b;\\n  --light-color-toggle-background-on: #0088fa;\\n  --light-color-toggle-background-off: #cfd1d5;\\n  --light-color-toggle-text: #ffffff;\\n  --light-color-tooltip-background: rgba(0, 0, 0, 0.9);\\n  --light-color-tooltip-text: #ffffff;\\n\\n  /* Dark theme */\\n  --dark-color-attribute-name: #9d87d2;\\n  --dark-color-attribute-name-not-editable: #ededed;\\n  --dark-color-attribute-name-inverted: #282828;\\n  --dark-color-attribute-value: #cedae0;\\n  --dark-color-attribute-value-inverted: #ffffff;\\n  --dark-color-attribute-editable-value: yellow;\\n  --dark-color-background: #282c34;\\n  --dark-color-background-hover: rgba(255, 255, 255, 0.1);\\n  --dark-color-background-inactive: #3d424a;\\n  --dark-color-background-invalid: #5c0000;\\n  --dark-color-background-selected: #178fb9;\\n  --dark-color-button-background: #282c34;\\n  --dark-color-button-background-focus: #3d424a;\\n  --dark-color-button: #afb3b9;\\n  --dark-color-button-active: #61dafb;\\n  --dark-color-button-disabled: #4f5766;\\n  --dark-color-button-focus: #a2e9fc;\\n  --dark-color-button-hover: #ededed;\\n  --dark-color-border: #3d424a;\\n  --dark-color-commit-did-not-render-fill: #777d88;\\n  --dark-color-commit-did-not-render-fill-text: #000000;\\n  --dark-color-commit-did-not-render-pattern: #666c77;\\n  --dark-color-commit-did-not-render-pattern-text: #ffffff;\\n  --dark-color-commit-gradient-0: #37afa9;\\n  --dark-color-commit-gradient-1: #63b19e;\\n  --dark-color-commit-gradient-2: #80b393;\\n  --dark-color-commit-gradient-3: #97b488;\\n  --dark-color-commit-gradient-4: #abb67d;\\n  --dark-color-commit-gradient-5: #beb771;\\n  --dark-color-commit-gradient-6: #cfb965;\\n  --dark-color-commit-gradient-7: #dfba57;\\n  --dark-color-commit-gradient-8: #efbb49;\\n  --dark-color-commit-gradient-9: #febc38;\\n  --dark-color-commit-gradient-text: #000000;\\n  --dark-color-component-name: #61dafb;\\n  --dark-color-component-name-inverted: #282828;\\n  --dark-color-component-badge-background: rgba(255, 255, 255, 0.25);\\n  --dark-color-component-badge-background-inverted: rgba(0, 0, 0, 0.25);\\n  --dark-color-component-badge-count: #8f949d;\\n  --dark-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7);\\n  --dark-color-context-background: rgba(255,255,255,.9);\\n  --dark-color-context-background-hover: rgba(0, 136, 250, 0.1);\\n  --dark-color-context-background-selected: #0088fa;\\n  --dark-color-context-border: #eeeeee;\\n  --dark-color-context-text: #000000;\\n  --dark-color-context-text-selected: #ffffff;\\n  --dark-color-dim: #8f949d;\\n  --dark-color-dimmer: #777d88;\\n  --dark-color-dimmest: #4f5766;\\n  --dark-color-error-background: #200;\\n  --dark-color-error-border: #900;\\n  --dark-color-error-text: #f55;\\n  --dark-color-expand-collapse-toggle: #8f949d;\\n  --dark-color-link: #61dafb;\\n  --dark-color-modal-background: rgba(0, 0, 0, 0.75);\\n  --dark-color-record-active: #fc3a4b;\\n  --dark-color-record-hover: #a2e9fc;\\n  --dark-color-record-inactive: #61dafb;\\n  --dark-color-scroll-thumb: #afb3b9;\\n  --dark-color-scroll-track: #313640;\\n  --dark-color-search-match: yellow;\\n  --dark-color-search-match-current: #f7923b;\\n  --dark-color-selected-tree-highlight-active: rgba(23, 143, 185, 0.15);\\n  --dark-color-selected-tree-highlight-inactive: rgba(255, 255, 255, 0.05);\\n  --dark-color-shadow: rgba(0, 0, 0, 0.5);\\n  --dark-color-tab-selected-border: #178fb9;\\n  --dark-color-text: #ffffff;\\n  --dark-color-text-invalid: #ff8080;\\n  --dark-color-text-selected: #ffffff;\\n  --dark-color-toggle-background-invalid: #fc3a4b;\\n  --dark-color-toggle-background-on: #178fb9;\\n  --dark-color-toggle-background-off: #777d88;\\n  --dark-color-toggle-text: #ffffff;\\n  --dark-color-tooltip-background: rgba(255, 255, 255, 0.9);\\n  --dark-color-tooltip-text: #000000;\\n\\n  /* Font smoothing */\\n  --light-font-smoothing: auto;\\n  --dark-font-smoothing: antialiased;\\n  --font-smoothing: auto;\\n\\n  /* Compact density */\\n  --compact-font-size-monospace-small: 9px;\\n  --compact-font-size-monospace-normal: 11px;\\n  --compact-font-size-monospace-large: 15px;\\n  --compact-font-size-sans-small: 10px;\\n  --compact-font-size-sans-normal: 12px;\\n  --compact-font-size-sans-large: 14px;\\n  --compact-line-height-data: 18px;\\n  --compact-root-font-size: 16px;\\n\\n  /* Comfortable density */\\n  --comfortable-font-size-monospace-small: 10px;\\n  --comfortable-font-size-monospace-normal: 13px;\\n  --comfortable-font-size-monospace-large: 17px;\\n  --comfortable-font-size-sans-small: 12px;\\n  --comfortable-font-size-sans-normal: 14px;\\n  --comfortable-font-size-sans-large: 16px;\\n  --comfortable-line-height-data: 22px;\\n  --comfortable-root-font-size: 20px;\\n\\n  /* GitHub.com system fonts */\\n  --font-family-monospace: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo,\\n    Courier, monospace;\\n  --font-family-sans: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica,\\n    Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;\\n\\n  /* Constant values shared between JS and CSS */\\n  --interaction-commit-size: 10px;\\n  --interaction-label-width: 200px;\\n}\\n\"},function(e,t,n){\"use strict\";function r(e){var t=this;if(t instanceof r||(t=new r),t.tail=null,t.head=null,t.length=0,e&&\"function\"==typeof e.forEach)e.forEach((function(e){t.push(e)}));else if(arguments.length>0)for(var n=0,i=arguments.length;n<i;n++)t.push(arguments[n]);return t}function i(e,t,n){var r=t===e.head?new a(n,null,t,e):new a(n,t,t.next,e);return null===r.next&&(e.tail=r),null===r.prev&&(e.head=r),e.length++,r}function o(e,t){e.tail=new a(t,e.tail,null,e),e.head||(e.head=e.tail),e.length++}function u(e,t){e.head=new a(t,null,e.head,e),e.tail||(e.tail=e.head),e.length++}function a(e,t,n,r){if(!(this instanceof a))return new a(e,t,n,r);this.list=r,this.value=e,t?(t.next=this,this.prev=t):this.prev=null,n?(n.prev=this,this.next=n):this.next=null}e.exports=r,r.Node=a,r.create=r,r.prototype.removeNode=function(e){if(e.list!==this)throw new Error(\"removing node which does not belong to this list\");var t=e.next,n=e.prev;return t&&(t.prev=n),n&&(n.next=t),e===this.head&&(this.head=t),e===this.tail&&(this.tail=n),e.list.length--,e.next=null,e.prev=null,e.list=null,t},r.prototype.unshiftNode=function(e){if(e!==this.head){e.list&&e.list.removeNode(e);var t=this.head;e.list=this,e.next=t,t&&(t.prev=e),this.head=e,this.tail||(this.tail=e),this.length++}},r.prototype.pushNode=function(e){if(e!==this.tail){e.list&&e.list.removeNode(e);var t=this.tail;e.list=this,e.prev=t,t&&(t.next=e),this.tail=e,this.head||(this.head=e),this.length++}},r.prototype.push=function(){for(var e=0,t=arguments.length;e<t;e++)o(this,arguments[e]);return this.length},r.prototype.unshift=function(){for(var e=0,t=arguments.length;e<t;e++)u(this,arguments[e]);return this.length},r.prototype.pop=function(){if(this.tail){var e=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,e}},r.prototype.shift=function(){if(this.head){var e=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,e}},r.prototype.forEach=function(e,t){t=t||this;for(var n=this.head,r=0;null!==n;r++)e.call(t,n.value,r,this),n=n.next},r.prototype.forEachReverse=function(e,t){t=t||this;for(var n=this.tail,r=this.length-1;null!==n;r--)e.call(t,n.value,r,this),n=n.prev},r.prototype.get=function(e){for(var t=0,n=this.head;null!==n&&t<e;t++)n=n.next;if(t===e&&null!==n)return n.value},r.prototype.getReverse=function(e){for(var t=0,n=this.tail;null!==n&&t<e;t++)n=n.prev;if(t===e&&null!==n)return n.value},r.prototype.map=function(e,t){t=t||this;for(var n=new r,i=this.head;null!==i;)n.push(e.call(t,i.value,this)),i=i.next;return n},r.prototype.mapReverse=function(e,t){t=t||this;for(var n=new r,i=this.tail;null!==i;)n.push(e.call(t,i.value,this)),i=i.prev;return n},r.prototype.reduce=function(e,t){var n,r=this.head;if(arguments.length>1)n=t;else{if(!this.head)throw new TypeError(\"Reduce of empty list with no initial value\");r=this.head.next,n=this.head.value}for(var i=0;null!==r;i++)n=e(n,r.value,i),r=r.next;return n},r.prototype.reduceReverse=function(e,t){var n,r=this.tail;if(arguments.length>1)n=t;else{if(!this.tail)throw new TypeError(\"Reduce of empty list with no initial value\");r=this.tail.prev,n=this.tail.value}for(var i=this.length-1;null!==r;i--)n=e(n,r.value,i),r=r.prev;return n},r.prototype.toArray=function(){for(var e=new Array(this.length),t=0,n=this.head;null!==n;t++)e[t]=n.value,n=n.next;return e},r.prototype.toArrayReverse=function(){for(var e=new Array(this.length),t=0,n=this.tail;null!==n;t++)e[t]=n.value,n=n.prev;return e},r.prototype.slice=function(e,t){(t=t||this.length)<0&&(t+=this.length),(e=e||0)<0&&(e+=this.length);var n=new r;if(t<e||t<0)return n;e<0&&(e=0),t>this.length&&(t=this.length);for(var i=0,o=this.head;null!==o&&i<e;i++)o=o.next;for(;null!==o&&i<t;i++,o=o.next)n.push(o.value);return n},r.prototype.sliceReverse=function(e,t){(t=t||this.length)<0&&(t+=this.length),(e=e||0)<0&&(e+=this.length);var n=new r;if(t<e||t<0)return n;e<0&&(e=0),t>this.length&&(t=this.length);for(var i=this.length,o=this.tail;null!==o&&i>t;i--)o=o.prev;for(;null!==o&&i>e;i--,o=o.prev)n.push(o.value);return n},r.prototype.splice=function(e,t){e>this.length&&(e=this.length-1),e<0&&(e=this.length+e);for(var n=0,r=this.head;null!==r&&n<e;n++)r=r.next;var o=[];for(n=0;r&&n<t;n++)o.push(r.value),r=this.removeNode(r);for(null===r&&(r=this.tail),r!==this.head&&r!==this.tail&&(r=r.prev),n=2;n<arguments.length;n++)r=i(this,r,arguments[n]);return o},r.prototype.reverse=function(){for(var e=this.head,t=this.tail,n=e;null!==n;n=n.prev){var r=n.prev;n.prev=n.next,n.next=r}return this.head=t,this.tail=e,this};try{n(11)(r)}catch(e){}},function(e,t,n){\"use strict\";e.exports=function(e){e.prototype[Symbol.iterator]=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=this.head;case 1:if(!t){e.next=7;break}return e.next=4,t.value;case 4:t=t.next,e.next=1;break;case 7:case\"end\":return e.stop()}}),e,this)}))}},function(e,t,n){\"use strict\";\n/** @license React v0.0.0-experimental-51a3aa6af\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */function r(e){return(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})(e)}var i=60103,o=60106,u=60107,a=60108,l=60114,s=60109,c=60110,f=60112,d=60113,p=60120,h=60115,v=60116,m=60121,g=60122,y=60117,_=60129,b=60131;if(\"function\"==typeof Symbol&&Symbol.for){var w=Symbol.for;i=w(\"react.element\"),o=w(\"react.portal\"),u=w(\"react.fragment\"),a=w(\"react.strict_mode\"),l=w(\"react.profiler\"),s=w(\"react.provider\"),c=w(\"react.context\"),f=w(\"react.forward_ref\"),d=w(\"react.suspense\"),p=w(\"react.suspense_list\"),h=w(\"react.memo\"),v=w(\"react.lazy\"),m=w(\"react.block\"),g=w(\"react.server.block\"),y=w(\"react.fundamental\"),_=w(\"react.debug_trace_mode\"),b=w(\"react.legacy_hidden\")}function E(e){if(\"object\"===r(e)&&null!==e){var t=e.$$typeof;switch(t){case i:switch(e=e.type){case u:case l:case a:case d:case p:return e;default:switch(e=e&&e.$$typeof){case c:case f:case v:case h:case s:return e;default:return t}}case o:return t}}}var D=s,S=i,C=f,k=u,T=v,x=h,A=o,O=l,P=a,I=d;t.ContextConsumer=c,t.ContextProvider=D,t.Element=S,t.ForwardRef=C,t.Fragment=k,t.Lazy=T,t.Memo=x,t.Portal=A,t.Profiler=O,t.StrictMode=P,t.Suspense=I,t.isAsyncMode=function(){return!1},t.isConcurrentMode=function(){return!1},t.isContextConsumer=function(e){return E(e)===c},t.isContextProvider=function(e){return E(e)===s},t.isElement=function(e){return\"object\"===r(e)&&null!==e&&e.$$typeof===i},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===u},t.isLazy=function(e){return E(e)===v},t.isMemo=function(e){return E(e)===h},t.isPortal=function(e){return E(e)===o},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===a},t.isSuspense=function(e){return E(e)===d},t.isValidElementType=function(e){return\"string\"==typeof e||\"function\"==typeof e||e===u||e===l||e===_||e===a||e===d||e===p||e===b||\"object\"===r(e)&&null!==e&&(e.$$typeof===v||e.$$typeof===h||e.$$typeof===s||e.$$typeof===c||e.$$typeof===f||e.$$typeof===y||e.$$typeof===m||e[0]===g)},t.typeOf=E},function(e,t,n){(function(e){var r=void 0!==e&&e||\"undefined\"!=typeof self&&self||window,i=Function.prototype.apply;function o(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new o(i.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new o(i.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},o.prototype.unref=o.prototype.ref=function(){},o.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(14),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(this,n(4))},function(e,t,n){(function(e,t){!function(e,n){\"use strict\";if(!e.setImmediate){var r,i,o,u,a,l=1,s={},c=!1,f=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d: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}}()?(u=\"setImmediate$\"+Math.random()+\"$\",a=function(t){t.source===e&&\"string\"==typeof t.data&&0===t.data.indexOf(u)&&h(+t.data.slice(u.length))},e.addEventListener?e.addEventListener(\"message\",a,!1):e.attachEvent(\"onmessage\",a),r=function(t){e.postMessage(u+t,\"*\")}):e.MessageChannel?((o=new MessageChannel).port1.onmessage=function(e){h(e.data)},r=function(e){o.port2.postMessage(e)}):f&&\"onreadystatechange\"in f.createElement(\"script\")?(i=f.documentElement,r=function(e){var t=f.createElement(\"script\");t.onreadystatechange=function(){h(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):r=function(e){setTimeout(h,0,e)},d.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 i={callback:e,args:t};return s[l]=i,r(l),l++},d.clearImmediate=p}function p(e){delete s[e]}function h(e){if(c)setTimeout(h,0,e);else{var t=s[e];if(t){c=!0;try{!function(e){var t=e.callback,n=e.args;switch(n.length){case 0:t();break;case 1:t(n[0]);break;case 2:t(n[0],n[1]);break;case 3:t(n[0],n[1],n[2]);break;default:t.apply(void 0,n)}}(t)}finally{p(e),c=!1}}}}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,n(4),n(5))},function(e,t,n){\"use strict\";\n/** @license React v0.0.0-experimental-51a3aa6af\n * react-debug-tools.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */function r(e){return(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})(e)}var i=n(1),o=n(16),u=n(18).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,a=60128;if(\"function\"==typeof Symbol&&Symbol.for){var l=Symbol.for;a=l(\"react.opaque.id\")}var s=[],c=null,f=null;function d(){if(null===c){var e=new Map;try{v.useContext({_currentValue:null}),v.useState(null),v.useReducer((function(e){return e}),null),v.useRef(null),v.useLayoutEffect((function(){})),v.useEffect((function(){})),v.useImperativeHandle(void 0,(function(){return null})),v.useDebugValue(null),v.useCallback((function(){})),v.useMemo((function(){return null}))}finally{var t=s;s=[]}for(var n=0;n<t.length;n++){var r=t[n];e.set(r.primitive,o.parse(r.stackError))}c=e}return c}var p=null;function h(){var e=p;return null!==e&&(p=e.next),e}var v={readContext:function(e){return e._currentValue},useCallback:function(e){var t=h();return s.push({primitive:\"Callback\",stackError:Error(),value:null!==t?t.memoizedState[0]:e}),e},useContext:function(e){return s.push({primitive:\"Context\",stackError:Error(),value:e._currentValue}),e._currentValue},useEffect:function(e){h(),s.push({primitive:\"Effect\",stackError:Error(),value:e})},useImperativeHandle:function(e){h();var t=void 0;null!==e&&\"object\"===r(e)&&(t=e.current),s.push({primitive:\"ImperativeHandle\",stackError:Error(),value:t})},useDebugValue:function(e,t){s.push({primitive:\"DebugValue\",stackError:Error(),value:\"function\"==typeof t?t(e):e})},useLayoutEffect:function(e){h(),s.push({primitive:\"LayoutEffect\",stackError:Error(),value:e})},useMemo:function(e){var t=h();return e=null!==t?t.memoizedState[0]:e(),s.push({primitive:\"Memo\",stackError:Error(),value:e}),e},useReducer:function(e,t,n){return t=null!==(e=h())?e.memoizedState:void 0!==n?n(t):t,s.push({primitive:\"Reducer\",stackError:Error(),value:t}),[t,function(){}]},useRef:function(e){var t=h();return e=null!==t?t.memoizedState:{current:e},s.push({primitive:\"Ref\",stackError:Error(),value:e.current}),e},useState:function(e){var t=h();return e=null!==t?t.memoizedState:\"function\"==typeof e?e():e,s.push({primitive:\"State\",stackError:Error(),value:e}),[e,function(){}]},useTransition:function(){return h(),h(),s.push({primitive:\"Transition\",stackError:Error(),value:void 0}),[function(){},!1]},useMutableSource:function(e,t){return h(),h(),h(),h(),e=t(e._source),s.push({primitive:\"MutableSource\",stackError:Error(),value:e}),e},useDeferredValue:function(e){return h(),h(),s.push({primitive:\"DeferredValue\",stackError:Error(),value:e}),e},useOpaqueIdentifier:function(){var e=h();return f&&0===f.mode&&h(),(e=null===e?void 0:e.memoizedState)&&e.$$typeof===a&&(e=void 0),s.push({primitive:\"OpaqueIdentifier\",stackError:Error(),value:e}),e}},m=0;function g(e,t,n){var r=t[n].source,i=0;e:for(;i<e.length;i++)if(e[i].source===r){for(var o=n+1,u=i+1;o<t.length&&u<e.length;o++,u++)if(e[u].source!==t[o].source)continue e;return i}return-1}function y(e,t){return!(!e||(t=\"use\"+t,e.length<t.length||e.lastIndexOf(t)!==e.length-t.length))}function _(e){if(!e)return\"\";var t=e.lastIndexOf(\".\");return-1===t&&(t=0),\"use\"===e.substr(t,3)&&(t+=3),e.substr(t)}function b(e,t){for(var n=[],r=null,i=n,u=0,a=[],l=0;l<t.length;l++){var s=t[l],c=e,f=o.parse(s.stackError);e:{var p=f,h=g(p,c,m);if(-1!==h)c=h;else{for(var v=0;v<c.length&&5>v;v++)if(-1!==(h=g(p,c,v))){m=v,c=h;break e}c=-1}}e:{if(p=f,void 0!==(h=d().get(s.primitive)))for(v=0;v<h.length&&v<p.length;v++)if(h[v].source!==p[v].source){v<p.length-1&&y(p[v].functionName,s.primitive)&&v++,v<p.length-1&&y(p[v].functionName,s.primitive)&&v++,p=v;break e}p=-1}if(null!==(f=-1===c||-1===p||2>c-p?null:f.slice(p,c-1))){if(c=0,null!==r){for(;c<f.length&&c<r.length&&f[f.length-c-1].source===r[r.length-c-1].source;)c++;for(r=r.length-1;r>c;r--)i=a.pop()}for(r=f.length-c-1;1<=r;r--)c=[],i.push({id:null,isStateEditable:!1,name:_(f[r-1].functionName),value:void 0,subHooks:c}),a.push(i),i=c;r=f}c=\"Context\"===(f=s.primitive)||\"DebugValue\"===f?null:u++,i.push({id:c,isStateEditable:\"Reducer\"===f||\"State\"===f,name:f,value:s.value,subHooks:[]})}return function e(t,n){for(var r=[],i=0;i<t.length;i++){var o=t[i];\"DebugValue\"===o.name&&0===o.subHooks.length?(t.splice(i,1),i--,r.push(o)):e(o.subHooks,o)}null!==n&&(1===r.length?n.value=r[0].value:1<r.length&&(n.value=r.map((function(e){return e.value}))))}(n,null),n}function w(e,t,n){null==n&&(n=u.ReactCurrentDispatcher);var r=n.current;n.current=v;try{var i=Error();e(t)}finally{e=s,s=[],n.current=r}return b(n=o.parse(i),e)}t.inspectHooks=w,t.inspectHooksOfFiber=function(e,t){if(null==t&&(t=u.ReactCurrentDispatcher),f=e,0!==e.tag&&15!==e.tag&&11!==e.tag&&22!==e.tag)throw Error(\"Unknown Fiber. Needs to be a function component to inspect hooks.\");d();var n=e.type,r=e.memoizedProps;if(n!==e.elementType&&n&&n.defaultProps){r=i({},r);var a=n.defaultProps;for(l in a)void 0===r[l]&&(r[l]=a[l])}p=e.memoizedState;var l=new Map;try{for(a=e;a;){if(10===a.tag){var c=a.type._context;l.has(c)||(l.set(c,c._currentValue),c._currentValue=a.memoizedProps.value)}a=a.return}if(11===e.tag){var h=n.render;n=r;var m=e.ref,g=(e=t).current;e.current=v;try{var y=Error();h(n,m)}finally{var _=s;s=[],e.current=g}return b(o.parse(y),_)}return w(n,r,t)}finally{p=null,function(e){e.forEach((function(e,t){return t._currentValue=e}))}(l)}}},function(e,t,n){var r,i,o;!function(u,a){\"use strict\";i=[n(17)],void 0===(o=\"function\"==typeof(r=function(e){var t=/(^|@)\\S+:\\d+/,n=/^\\s*at .*(\\S+:\\d+|\\(native\\))/m,r=/^(eval@)?(\\[native code])?$/;return{parse:function(e){if(void 0!==e.stacktrace||void 0!==e[\"opera#sourceloc\"])return this.parseOpera(e);if(e.stack&&e.stack.match(n))return this.parseV8OrIE(e);if(e.stack)return this.parseFFOrSafari(e);throw new Error(\"Cannot parse given Error object\")},extractLocation:function(e){if(-1===e.indexOf(\":\"))return[e];var t=/(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(e.replace(/[()]/g,\"\"));return[t[1],t[2]||void 0,t[3]||void 0]},parseV8OrIE:function(t){return t.stack.split(\"\\n\").filter((function(e){return!!e.match(n)}),this).map((function(t){t.indexOf(\"(eval \")>-1&&(t=t.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^()]*)|(\\),.*$)/g,\"\"));var n=t.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\"),r=n.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/),i=(n=r?n.replace(r[0],\"\"):n).split(/\\s+/).slice(1),o=this.extractLocation(r?r[1]:i.pop()),u=i.join(\" \")||void 0,a=[\"eval\",\"<anonymous>\"].indexOf(o[0])>-1?void 0:o[0];return new e({functionName:u,fileName:a,lineNumber:o[1],columnNumber:o[2],source:t})}),this)},parseFFOrSafari:function(t){return t.stack.split(\"\\n\").filter((function(e){return!e.match(r)}),this).map((function(t){if(t.indexOf(\" > eval\")>-1&&(t=t.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g,\":$1\")),-1===t.indexOf(\"@\")&&-1===t.indexOf(\":\"))return new e({functionName:t});var n=/((.*\".+\"[^@]*)?[^@]*)(?:@)/,r=t.match(n),i=r&&r[1]?r[1]:void 0,o=this.extractLocation(t.replace(n,\"\"));return new e({functionName:i,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})}),this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf(\"\\n\")>-1&&e.message.split(\"\\n\").length>e.stacktrace.split(\"\\n\").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\\d+).*script (?:in )?(\\S+)/i,r=t.message.split(\"\\n\"),i=[],o=2,u=r.length;o<u;o+=2){var a=n.exec(r[o]);a&&i.push(new e({fileName:a[2],lineNumber:a[1],source:r[o]}))}return i},parseOpera10:function(t){for(var n=/Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i,r=t.stacktrace.split(\"\\n\"),i=[],o=0,u=r.length;o<u;o+=2){var a=n.exec(r[o]);a&&i.push(new e({functionName:a[3]||void 0,fileName:a[2],lineNumber:a[1],source:r[o]}))}return i},parseOpera11:function(n){return n.stack.split(\"\\n\").filter((function(e){return!!e.match(t)&&!e.match(/^Error created at/)}),this).map((function(t){var n,r=t.split(\"@\"),i=this.extractLocation(r.pop()),o=r.shift()||\"\",u=o.replace(/<anonymous function(: (\\w+))?>/,\"$2\").replace(/\\([^)]*\\)/g,\"\")||void 0;o.match(/\\(([^)]*)\\)/)&&(n=o.replace(/^[^(]+\\(([^)]*)\\)$/,\"$1\"));var a=void 0===n||\"[arguments not available]\"===n?void 0:n.split(\",\");return new e({functionName:u,args:a,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:t})}),this)}}})?r.apply(t,i):r)||(e.exports=o)}()},function(e,t,n){var r,i,o;!function(n,u){\"use strict\";i=[],void 0===(o=\"function\"==typeof(r=function(){function e(e){return e.charAt(0).toUpperCase()+e.substring(1)}function t(e){return function(){return this[e]}}var n=[\"isConstructor\",\"isEval\",\"isNative\",\"isToplevel\"],r=[\"columnNumber\",\"lineNumber\"],i=[\"fileName\",\"functionName\",\"source\"],o=n.concat(r,i,[\"args\"]);function u(t){if(t)for(var n=0;n<o.length;n++)void 0!==t[o[n]]&&this[\"set\"+e(o[n])](t[o[n]])}u.prototype={getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getEvalOrigin:function(){return this.evalOrigin},setEvalOrigin:function(e){if(e instanceof u)this.evalOrigin=e;else{if(!(e instanceof Object))throw new TypeError(\"Eval Origin must be an Object or StackFrame\");this.evalOrigin=new u(e)}},toString:function(){var e=this.getFileName()||\"\",t=this.getLineNumber()||\"\",n=this.getColumnNumber()||\"\",r=this.getFunctionName()||\"\";return this.getIsEval()?e?\"[eval] (\"+e+\":\"+t+\":\"+n+\")\":\"[eval]:\"+t+\":\"+n:r?r+\" (\"+e+\":\"+t+\":\"+n+\")\":e+\":\"+t+\":\"+n}},u.fromString=function(e){var t=e.indexOf(\"(\"),n=e.lastIndexOf(\")\"),r=e.substring(0,t),i=e.substring(t+1,n).split(\",\"),o=e.substring(n+1);if(0===o.indexOf(\"@\"))var a=/@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(o,\"\"),l=a[1],s=a[2],c=a[3];return new u({functionName:r,args:i||void 0,fileName:l,lineNumber:s||void 0,columnNumber:c||void 0})};for(var a=0;a<n.length;a++)u.prototype[\"get\"+e(n[a])]=t(n[a]),u.prototype[\"set\"+e(n[a])]=function(e){return function(t){this[e]=Boolean(t)}}(n[a]);for(var l=0;l<r.length;l++)u.prototype[\"get\"+e(r[l])]=t(r[l]),u.prototype[\"set\"+e(r[l])]=function(e){return function(t){if(n=t,isNaN(parseFloat(n))||!isFinite(n))throw new TypeError(e+\" must be a Number\");var n;this[e]=Number(t)}}(r[l]);for(var s=0;s<i.length;s++)u.prototype[\"get\"+e(i[s])]=t(i[s]),u.prototype[\"set\"+e(i[s])]=function(e){return function(t){this[e]=String(t)}}(i[s]);return u})?r.apply(t,i):r)||(e.exports=o)}()},function(e,t,n){\"use strict\";e.exports=n(19)},function(e,t,n){\"use strict\";\n/** @license React v0.0.0-experimental-51a3aa6af\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */function r(e){return(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})(e)}var i=n(1),o=60103,u=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var a=60109,l=60110,s=60112;t.Suspense=60113,t.unstable_SuspenseList=60120;var c=60115,f=60116,d=60121;if(t.unstable_DebugTracingMode=60129,t.unstable_LegacyHidden=60131,\"function\"==typeof Symbol&&Symbol.for){var p=Symbol.for;o=p(\"react.element\"),u=p(\"react.portal\"),t.Fragment=p(\"react.fragment\"),t.StrictMode=p(\"react.strict_mode\"),t.Profiler=p(\"react.profiler\"),a=p(\"react.provider\"),l=p(\"react.context\"),s=p(\"react.forward_ref\"),t.Suspense=p(\"react.suspense\"),t.unstable_SuspenseList=p(\"react.suspense_list\"),c=p(\"react.memo\"),f=p(\"react.lazy\"),d=p(\"react.block\"),t.unstable_DebugTracingMode=p(\"react.debug_trace_mode\"),t.unstable_LegacyHidden=p(\"react.legacy_hidden\")}var h=\"function\"==typeof Symbol&&Symbol.iterator;function v(e){for(var t=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,n=1;n<arguments.length;n++)t+=\"&args[]=\"+encodeURIComponent(arguments[n]);return\"Minified React error #\"+e+\"; visit \"+t+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g={};function y(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function _(){}function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if(\"object\"!==r(e)&&\"function\"!=typeof e&&null!=e)throw Error(v(85));this.updater.enqueueSetState(this,e,t,\"setState\")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")},_.prototype=y.prototype;var w=b.prototype=new _;w.constructor=b,i(w,y.prototype),w.isPureReactComponent=!0;var E={current:null},D=Object.prototype.hasOwnProperty,S={key:!0,ref:!0,__self:!0,__source:!0};function C(e,t,n){var r,i={},u=null,a=null;if(null!=t)for(r in void 0!==t.ref&&(a=t.ref),void 0!==t.key&&(u=\"\"+t.key),t)D.call(t,r)&&!S.hasOwnProperty(r)&&(i[r]=t[r]);var l=arguments.length-2;if(1===l)i.children=n;else if(1<l){for(var s=Array(l),c=0;c<l;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in l=e.defaultProps)void 0===i[r]&&(i[r]=l[r]);return{$$typeof:o,type:e,key:u,ref:a,props:i,_owner:E.current}}function k(e){return\"object\"===r(e)&&null!==e&&e.$$typeof===o}var T=/\\/+/g;function x(e,t){return\"object\"===r(e)&&null!==e&&null!=e.key?function(e){var t={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+e.replace(/[=:]/g,(function(e){return t[e]}))}(\"\"+e.key):t.toString(36)}function A(e,t,n,i,a){var l=r(e);\"undefined\"!==l&&\"boolean\"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case\"string\":case\"number\":s=!0;break;case\"object\":switch(e.$$typeof){case o:case u:s=!0}}if(s)return a=a(s=e),e=\"\"===i?\".\"+x(s,0):i,Array.isArray(a)?(n=\"\",null!=e&&(n=e.replace(T,\"$&/\")+\"/\"),A(a,t,n,\"\",(function(e){return e}))):null!=a&&(k(a)&&(a=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(a,n+(!a.key||s&&s.key===a.key?\"\":(\"\"+a.key).replace(T,\"$&/\")+\"/\")+e)),t.push(a)),1;if(s=0,i=\"\"===i?\".\":i+\":\",Array.isArray(e))for(var c=0;c<e.length;c++){var f=i+x(l=e[c],c);s+=A(l,t,n,f,a)}else if(\"function\"==typeof(f=function(e){return null===e||\"object\"!==r(e)?null:\"function\"==typeof(e=h&&e[h]||e[\"@@iterator\"])?e:null}(e)))for(e=f.call(e),c=0;!(l=e.next()).done;)s+=A(l=l.value,t,n,f=i+x(l,c++),a);else if(\"object\"===l)throw t=\"\"+e,Error(v(31,\"[object Object]\"===t?\"object with keys {\"+Object.keys(e).join(\", \")+\"}\":t));return s}function O(e,t,n){if(null==e)return e;var r=[],i=0;return A(e,r,\"\",\"\",(function(e){return t.call(n,e,i++)})),r}function P(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}function I(e){return{$$typeof:d,_data:e.load.apply(null,e.args),_render:e.render}}var N={current:null};function M(){var e=N.current;if(null===e)throw Error(v(321));return e}var R={transition:0},F={ReactCurrentDispatcher:N,ReactCurrentBatchConfig:R,ReactCurrentOwner:E,IsSomeRendererActing:{current:!1},assign:i};t.Children={map:O,forEach:function(e,t,n){O(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return O(e,(function(){t++})),t},toArray:function(e){return O(e,(function(e){return e}))||[]},only:function(e){if(!k(e))throw Error(v(143));return e}},t.Component=y,t.PureComponent=b,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=F,t.cloneElement=function(e,t,n){if(null==e)throw Error(v(267,e));var r=i({},e.props),u=e.key,a=e.ref,l=e._owner;if(null!=t){if(void 0!==t.ref&&(a=t.ref,l=E.current),void 0!==t.key&&(u=\"\"+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(c in t)D.call(t,c)&&!S.hasOwnProperty(c)&&(r[c]=void 0===t[c]&&void 0!==s?s[c]:t[c])}var c=arguments.length-2;if(1===c)r.children=n;else if(1<c){s=Array(c);for(var f=0;f<c;f++)s[f]=arguments[f+2];r.children=s}return{$$typeof:o,type:e.type,key:u,ref:a,props:r,_owner:l}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:a,_context:e},e.Consumer=e},t.createElement=C,t.createFactory=function(e){var t=C.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=k,t.lazy=function(e){return{$$typeof:f,_payload:{_status:-1,_result:e},_init:P}},t.memo=function(e,t){return{$$typeof:c,type:e,compare:void 0===t?null:t}},t.unstable_block=function(e,t){return void 0===t?function(){return{$$typeof:d,_data:void 0,_render:e}}:function(){return{$$typeof:f,_payload:{load:t,args:arguments,render:e},_init:I}}},t.unstable_createMutableSource=function(e,t){return{_getVersion:t,_source:e,_workInProgressVersionPrimary:null,_workInProgressVersionSecondary:null}},t.unstable_startTransition=function(e){var t=R.transition;R.transition=1;try{e()}finally{R.transition=t}},t.unstable_useDeferredValue=function(e){return M().useDeferredValue(e)},t.unstable_useMutableSource=function(e,t,n){return M().useMutableSource(e,t,n)},t.unstable_useOpaqueIdentifier=function(){return M().useOpaqueIdentifier()},t.unstable_useTransition=function(){return M().useTransition()},t.useCallback=function(e,t){return M().useCallback(e,t)},t.useContext=function(e,t){return M().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return M().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return M().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return M().useLayoutEffect(e,t)},t.useMemo=function(e,t){return M().useMemo(e,t)},t.useReducer=function(e,t,n){return M().useReducer(e,t,n)},t.useRef=function(e){return M().useRef(e)},t.useState=function(e){return M().useState(e)},t.version=\"17.0.0-alpha.0-experimental-51a3aa6af\"},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)}}n.r(t),n.d(t,\"connectToDevTools\",(function(){return Kt}));var i=function(){function e(){var t,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),t=this,n=\"listenersMap\",r=new Map,n in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}var t,n;return t=e,(n=[{key:\"addListener\",value:function(e,t){var n=this.listenersMap.get(e);void 0===n?this.listenersMap.set(e,[t]):n.indexOf(t)<0&&n.push(t)}},{key:\"emit\",value:function(e){var t=this.listenersMap.get(e);if(void 0!==t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];if(1===t.length){var o=t[0];o.apply(null,r)}else{for(var u=!1,a=null,l=Array.from(t),s=0;s<l.length;s++){var c=l[s];try{c.apply(null,r)}catch(e){null===a&&(u=!0,a=e)}}if(u)throw a}}}},{key:\"removeAllListeners\",value:function(){this.listenersMap.clear()}},{key:\"removeListener\",value:function(e,t){var n=this.listenersMap.get(e);if(void 0!==n){var r=n.indexOf(t);r>=0&&n.splice(r,1)}}}])&&r(t.prototype,n),e}(),o=n(2),u=n.n(o);try{var a=n(9).default,l=function(e){var t=new RegExp(\"\".concat(e,\": ([0-9]+)\")),n=a.match(t);return parseInt(n[1],10)};l(\"comfortable-line-height-data\"),l(\"compact-line-height-data\")}catch(e){}function s(e){try{return sessionStorage.getItem(e)}catch(e){return null}}function c(e){try{sessionStorage.removeItem(e)}catch(e){}}function f(e,t){try{return sessionStorage.setItem(e,t)}catch(e){}}var d=function(e,t){return e===t},p=n(1),h=n.n(p);function v(e){return e.ownerDocument?e.ownerDocument.defaultView:null}function m(e){var t=v(e);return t?t.frameElement:null}function g(e){var t=b(e);return y([e.getBoundingClientRect(),{top:t.borderTop,left:t.borderLeft,bottom:t.borderBottom,right:t.borderRight,width:0,height:0}])}function y(e){return e.reduce((function(e,t){return null==e?t:{top:e.top+t.top,left:e.left+t.left,width:e.width,height:e.height,bottom:e.bottom+t.bottom,right:e.right+t.right}}))}function _(e,t){var n=m(e);if(n&&n!==t){for(var r=[e.getBoundingClientRect()],i=n,o=!1;i;){var u=g(i);if(r.push(u),i=m(i),o)break;i&&v(i)===t&&(o=!0)}return y(r)}return e.getBoundingClientRect()}function b(e){var t=window.getComputedStyle(e);return{borderLeft:parseInt(t.borderLeftWidth,10),borderRight:parseInt(t.borderRightWidth,10),borderTop:parseInt(t.borderTopWidth,10),borderBottom:parseInt(t.borderBottomWidth,10),marginLeft:parseInt(t.marginLeft,10),marginRight:parseInt(t.marginRight,10),marginTop:parseInt(t.marginTop,10),marginBottom:parseInt(t.marginBottom,10),paddingLeft:parseInt(t.paddingLeft,10),paddingRight:parseInt(t.paddingRight,10),paddingTop:parseInt(t.paddingTop,10),paddingBottom:parseInt(t.paddingBottom,10)}}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function E(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function D(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 S(e,t,n){return t&&D(e.prototype,t),n&&D(e,n),e}var C=function(){function e(t,n){E(this,e),this.node=t.createElement(\"div\"),this.border=t.createElement(\"div\"),this.padding=t.createElement(\"div\"),this.content=t.createElement(\"div\"),this.border.style.borderColor=A.border,this.padding.style.borderColor=A.padding,this.content.style.backgroundColor=A.background,h()(this.node.style,{borderColor:A.margin,pointerEvents:\"none\",position:\"fixed\"}),this.node.style.zIndex=\"10000000\",this.node.appendChild(this.border),this.border.appendChild(this.padding),this.padding.appendChild(this.content),n.appendChild(this.node)}return S(e,[{key:\"remove\",value:function(){this.node.parentNode&&this.node.parentNode.removeChild(this.node)}},{key:\"update\",value:function(e,t){x(t,\"margin\",this.node),x(t,\"border\",this.border),x(t,\"padding\",this.padding),h()(this.content.style,{height:e.height-t.borderTop-t.borderBottom-t.paddingTop-t.paddingBottom+\"px\",width:e.width-t.borderLeft-t.borderRight-t.paddingLeft-t.paddingRight+\"px\"}),h()(this.node.style,{top:e.top-t.marginTop+\"px\",left:e.left-t.marginLeft+\"px\"})}}]),e}(),k=function(){function e(t,n){E(this,e),this.tip=t.createElement(\"div\"),h()(this.tip.style,{display:\"flex\",flexFlow:\"row nowrap\",backgroundColor:\"#333740\",borderRadius:\"2px\",fontFamily:'\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, Courier, monospace',fontWeight:\"bold\",padding:\"3px 5px\",pointerEvents:\"none\",position:\"fixed\",fontSize:\"12px\",whiteSpace:\"nowrap\"}),this.nameSpan=t.createElement(\"span\"),this.tip.appendChild(this.nameSpan),h()(this.nameSpan.style,{color:\"#ee78e6\",borderRight:\"1px solid #aaaaaa\",paddingRight:\"0.5rem\",marginRight:\"0.5rem\"}),this.dimSpan=t.createElement(\"span\"),this.tip.appendChild(this.dimSpan),h()(this.dimSpan.style,{color:\"#d7d7d7\"}),this.tip.style.zIndex=\"10000000\",n.appendChild(this.tip)}return S(e,[{key:\"remove\",value:function(){this.tip.parentNode&&this.tip.parentNode.removeChild(this.tip)}},{key:\"updateText\",value:function(e,t,n){this.nameSpan.textContent=e,this.dimSpan.textContent=Math.round(t)+\"px × \"+Math.round(n)+\"px\"}},{key:\"updatePosition\",value:function(e,t){var n=this.tip.getBoundingClientRect(),r=function(e,t,n){var r,i=Math.max(n.height,20),o=Math.max(n.width,60);r=e.top+e.height+i<=t.top+t.height?e.top+e.height<t.top+0?t.top+5:e.top+e.height+5:e.top-i<=t.top+t.height?e.top-i-5<t.top+5?t.top+5:e.top-i-5:t.top+t.height-i-5;var u=e.left+5;return e.left<t.left&&(u=t.left+5),e.left+o>t.left+t.width&&(u=t.left+t.width-o-5),{style:{top:r+=\"px\",left:u+=\"px\"}}}(e,t,{width:n.width,height:n.height});h()(this.tip.style,r.style)}}]),e}(),T=function(){function e(){E(this,e);var t=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.window=t;var n=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.tipBoundsWindow=n;var r=t.document;this.container=r.createElement(\"div\"),this.container.style.zIndex=\"10000000\",this.tip=new k(r,this.container),this.rects=[],r.body.appendChild(this.container)}return S(e,[{key:\"remove\",value:function(){this.tip.remove(),this.rects.forEach((function(e){e.remove()})),this.rects.length=0,this.container.parentNode&&this.container.parentNode.removeChild(this.container)}},{key:\"inspect\",value:function(e,t){for(var n=this,r=e.filter((function(e){return e.nodeType===Node.ELEMENT_NODE}));this.rects.length>r.length;)this.rects.pop().remove();if(0!==r.length){for(;this.rects.length<r.length;)this.rects.push(new C(this.window.document,this.container));var i={top:Number.POSITIVE_INFINITY,right:Number.NEGATIVE_INFINITY,bottom:Number.NEGATIVE_INFINITY,left:Number.POSITIVE_INFINITY};if(r.forEach((function(e,t){var r=_(e,n.window),o=b(e);i.top=Math.min(i.top,r.top-o.marginTop),i.right=Math.max(i.right,r.left+r.width+o.marginRight),i.bottom=Math.max(i.bottom,r.top+r.height+o.marginBottom),i.left=Math.min(i.left,r.left-o.marginLeft),n.rects[t].update(r,o)})),!t){t=r[0].nodeName.toLowerCase();var o=r[0],u=o.ownerDocument.defaultView.__REACT_DEVTOOLS_GLOBAL_HOOK__;if(null!=u&&null!=u.rendererInterfaces){var a,l=null,s=function(e,t){var n;if(\"undefined\"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return w(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)?w(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}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,u=!0,a=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return u=e.done,e},e:function(e){a=!0,o=e},f:function(){try{u||null==n.return||n.return()}finally{if(a)throw o}}}}(u.rendererInterfaces.values());try{for(s.s();!(a=s.n()).done;){var c=a.value,f=c.getFiberIDForNative(o,!0);if(null!==f){l=c.getDisplayNameForFiberID(f,!0);break}}}catch(e){s.e(e)}finally{s.f()}l&&(t+=\" (in \"+l+\")\")}}this.tip.updateText(t,i.right-i.left,i.bottom-i.top);var d=_(this.tipBoundsWindow.document.documentElement,this.window);this.tip.updatePosition({top:i.top,left:i.left,height:i.bottom-i.top,width:i.right-i.left},{top:d.top+this.tipBoundsWindow.scrollY,left:d.left+this.tipBoundsWindow.scrollX,height:this.tipBoundsWindow.innerHeight,width:this.tipBoundsWindow.innerWidth})}}}]),e}();function x(e,t,n){h()(n.style,{borderTopWidth:e[t+\"Top\"]+\"px\",borderLeftWidth:e[t+\"Left\"]+\"px\",borderRightWidth:e[t+\"Right\"]+\"px\",borderBottomWidth:e[t+\"Bottom\"]+\"px\",borderStyle:\"solid\"})}var A={background:\"rgba(120, 170, 210, 0.7)\",padding:\"rgba(77, 200, 0, 0.3)\",margin:\"rgba(255, 155, 0, 0.3)\",border:\"rgba(255, 200, 50, 0.3)\"},O=null,P=null;function I(){O=null,null!==P&&(P.remove(),P=null)}function N(e,t,n){null!=window.document&&(null!==O&&clearTimeout(O),null!=e&&(null===P&&(P=new T),P.inspect(e,t),n&&(O=setTimeout(I,2e3))))}var M=new Set,R=[\"#37afa9\",\"#63b19e\",\"#80b393\",\"#97b488\",\"#abb67d\",\"#beb771\",\"#cfb965\",\"#dfba57\",\"#efbb49\",\"#febc38\"],F=null;function L(e){return(L=\"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})(e)}var B=\"object\"===(\"undefined\"==typeof performance?\"undefined\":L(performance))&&\"function\"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()},j=new Map,U=null,z=!1,W=null;function H(e){z&&(e.forEach((function(e){var t=j.get(e),n=B(),r=null!=t?t.lastMeasuredAt:0,i=null!=t?t.rect:null;(null===i||r+250<n)&&(r=n,i=function(e){return e&&\"function\"==typeof e.getBoundingClientRect?_(e,window.__REACT_DEVTOOLS_TARGET_WINDOW__||window):null}(e)),j.set(e,{count:null!=t?t.count+1:1,expirationTime:null!=t?Math.min(n+3e3,t.expirationTime+250):n+250,lastMeasuredAt:r,rect:i})})),null!==W&&(clearTimeout(W),W=null),null===U&&(U=requestAnimationFrame(V)))}function V(){U=null,W=null;var e=B(),t=Number.MAX_VALUE;j.forEach((function(n,r){n.expirationTime<e?j.delete(r):t=Math.min(t,n.expirationTime)})),function(e){null===F&&function(){(F=window.document.createElement(\"canvas\")).style.cssText=\"\\n    xx-background-color: red;\\n    xx-opacity: 0.5;\\n    bottom: 0;\\n    left: 0;\\n    pointer-events: none;\\n    position: fixed;\\n    right: 0;\\n    top: 0;\\n    z-index: 1000000000;\\n  \";var e=window.document.documentElement;e.insertBefore(F,e.firstChild)}();var t=F;t.width=window.innerWidth,t.height=window.innerHeight;var n=t.getContext(\"2d\");n.clearRect(0,0,t.width,t.height),e.forEach((function(e){var t=e.count,r=e.rect;if(null!==r){var i=Math.min(R.length-1,t-1);!function(e,t,n){var r=t.height,i=t.left,o=t.top,u=t.width;e.lineWidth=1,e.strokeStyle=\"#f0f0f0\",e.strokeRect(i-1,o-1,u+2,r+2),e.lineWidth=1,e.strokeStyle=\"#f0f0f0\",e.strokeRect(i+1,o+1,u-1,r-1),e.strokeStyle=n,e.setLineDash([0]),e.lineWidth=1,e.strokeRect(i,o,u-1,r-1),e.setLineDash([0])}(n,r,R[i])}}))}(j),t!==Number.MAX_VALUE&&(W=setTimeout(V,t-e))}var q=n(3),G=n(6),$=n.n(G),Y=n(0),K=60120;if(\"function\"==typeof Symbol&&Symbol.for){var X=Symbol.for;X(\"react.element\"),X(\"react.portal\"),X(\"react.fragment\"),X(\"react.strict_mode\"),X(\"react.profiler\"),X(\"react.provider\"),X(\"react.context\"),X(\"react.forward_ref\"),X(\"react.suspense\"),K=X(\"react.suspense_list\"),X(\"react.memo\"),X(\"react.lazy\"),X(\"react.block\"),X(\"react.server.block\"),X(\"react.fundamental\"),X(\"react.scope\"),X(\"react.opaque.id\"),X(\"react.debug_trace_mode\"),X(\"react.offscreen\"),X(\"react.legacy_hidden\")}function Q(e){return(Q=\"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})(e)}\"function\"==typeof Symbol&&Symbol.iterator;var J={inspectable:Symbol(\"inspectable\"),inspected:Symbol(\"inspected\"),name:Symbol(\"name\"),preview_long:Symbol(\"preview_long\"),preview_short:Symbol(\"preview_short\"),readonly:Symbol(\"readonly\"),size:Symbol(\"size\"),type:Symbol(\"type\"),unserializable:Symbol(\"unserializable\")};function Z(e,t,n,r,i){r.push(i);var o={inspectable:t,type:e,preview_long:_e(n,!0),preview_short:_e(n,!1),name:n.constructor&&\"Object\"!==n.constructor.name?n.constructor.name:\"\"};return\"array\"===e||\"typed_array\"===e?o.size=n.length:\"object\"===e&&(o.size=Object.keys(n).length),\"iterator\"!==e&&\"typed_array\"!==e||(o.readonly=!0),o}function ee(e,t,n,r,i){var o,u=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,a=me(e);switch(a){case\"html_element\":return t.push(r),{inspectable:!1,preview_short:_e(e,!1),preview_long:_e(e,!0),name:e.tagName,type:a};case\"function\":return t.push(r),{inspectable:!1,preview_short:_e(e,!1),preview_long:_e(e,!0),name:\"function\"!=typeof e.name&&e.name?e.name:\"function\",type:a};case\"string\":return e.length<=500?e:e.slice(0,500)+\"...\";case\"bigint\":case\"symbol\":return t.push(r),{inspectable:!1,preview_short:_e(e,!1),preview_long:_e(e,!0),name:e.toString(),type:a};case\"react_element\":return t.push(r),{inspectable:!1,preview_short:_e(e,!1),preview_long:_e(e,!0),name:ge(e)||\"Unknown\",type:a};case\"array_buffer\":case\"data_view\":return t.push(r),{inspectable:!1,preview_short:_e(e,!1),preview_long:_e(e,!0),name:\"data_view\"===a?\"DataView\":\"ArrayBuffer\",size:e.byteLength,type:a};case\"array\":return o=i(r),u>=2&&!o?Z(a,!0,e,t,r):e.map((function(e,a){return ee(e,t,n,r.concat([a]),i,o?1:u+1)}));case\"html_all_collection\":case\"typed_array\":case\"iterator\":if(o=i(r),u>=2&&!o)return Z(a,!0,e,t,r);var l={unserializable:!0,type:a,readonly:!0,size:\"typed_array\"===a?e.length:void 0,preview_short:_e(e,!1),preview_long:_e(e,!0),name:e.constructor&&\"Object\"!==e.constructor.name?e.constructor.name:\"\"};return Q(e[Symbol.iterator])&&Array.from(e).forEach((function(e,a){return l[a]=ee(e,t,n,r.concat([a]),i,o?1:u+1)})),n.push(r),l;case\"opaque_iterator\":return t.push(r),{inspectable:!1,preview_short:_e(e,!1),preview_long:_e(e,!0),name:e[Symbol.toStringTag],type:a};case\"date\":case\"regexp\":return t.push(r),{inspectable:!1,preview_short:_e(e,!1),preview_long:_e(e,!0),name:e.toString(),type:a};case\"object\":if(o=i(r),u>=2&&!o)return Z(a,!0,e,t,r);var s={};return ae(e).forEach((function(a){var l=a.toString();s[l]=ee(e[a],t,n,r.concat([l]),i,o?1:u+1)})),s;case\"infinity\":case\"nan\":case\"undefined\":return t.push(r),{type:a};default:return e}}function te(e){return(te=\"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})(e)}function ne(e){return function(e){if(Array.isArray(e))return re(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(e){if(\"string\"==typeof e)return re(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)?re(e,t):void 0}}(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 re(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var ie=new WeakMap,oe=new $.a({max:1e3});function ue(e,t){return e.toString()>t.toString()?1:t.toString()>e.toString()?-1:0}function ae(e){for(var t=[],n=e,r=function(){var e=[].concat(ne(Object.keys(n)),ne(Object.getOwnPropertySymbols(n))),r=Object.getOwnPropertyDescriptors(n);e.forEach((function(e){r[e].enumerable&&t.push(e)})),n=Object.getPrototypeOf(n)};null!=n;)r();return t}function le(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"Anonymous\",n=ie.get(e);if(null!=n)return n;var r=t;return\"string\"==typeof e.displayName?r=e.displayName:\"string\"==typeof e.name&&\"\"!==e.name&&(r=e.name),ie.set(e,r),r}var se=0;function ce(){return++se}function fe(e){var t=oe.get(e);if(void 0!==t)return t;for(var n=new Array(e.length),r=0;r<e.length;r++)n[r]=e.codePointAt(r);return oe.set(e,n),n}function de(e,t){return t.reduce((function(e,t){if(e){if(hasOwnProperty.call(e,t))return e[t];if(\"function\"==typeof e[Symbol.iterator])return Array.from(e)[t]}return null}),e)}function pe(e,t){var n=t.length,r=t[n-1];if(null!=e){var i=de(e,t.slice(0,n-1));i&&(Array.isArray(i)?i.splice(r,1):delete i[r])}}function he(e,t,n){var r=t.length;if(null!=e){var i=de(e,t.slice(0,r-1));if(i){var o=t[r-1];i[n[r-1]]=i[o],Array.isArray(i)?i.splice(o,1):delete i[o]}}}function ve(e,t,n){var r=t.length,i=t[r-1];if(null!=e){var o=de(e,t.slice(0,r-1));o&&(o[i]=n)}}function me(e){if(null===e)return\"null\";if(void 0===e)return\"undefined\";if(Object(Y.isElement)(e))return\"react_element\";if(\"undefined\"!=typeof HTMLElement&&e instanceof HTMLElement)return\"html_element\";switch(te(e)){case\"bigint\":return\"bigint\";case\"boolean\":return\"boolean\";case\"function\":return\"function\";case\"number\":return Number.isNaN(e)?\"nan\":Number.isFinite(e)?\"number\":\"infinity\";case\"object\":if(Array.isArray(e))return\"array\";if(ArrayBuffer.isView(e))return hasOwnProperty.call(e.constructor,\"BYTES_PER_ELEMENT\")?\"typed_array\":\"data_view\";if(e.constructor&&\"ArrayBuffer\"===e.constructor.name)return\"array_buffer\";if(\"function\"==typeof e[Symbol.iterator])return e[Symbol.iterator]()===e?\"opaque_iterator\":\"iterator\";if(e.constructor&&\"RegExp\"===e.constructor.name)return\"regexp\";var t=Object.prototype.toString.call(e);return\"[object Date]\"===t?\"date\":\"[object HTMLAllCollection]\"===t?\"html_all_collection\":\"object\";case\"string\":return\"string\";case\"symbol\":return\"symbol\";case\"undefined\":return\"[object HTMLAllCollection]\"===Object.prototype.toString.call(e)?\"html_all_collection\":\"undefined\";default:return\"unknown\"}}function ge(e){switch(Object(Y.typeOf)(e)){case Y.ContextConsumer:return\"ContextConsumer\";case Y.ContextProvider:return\"ContextProvider\";case Y.ForwardRef:return\"ForwardRef\";case Y.Fragment:return\"Fragment\";case Y.Lazy:return\"Lazy\";case Y.Memo:return\"Memo\";case Y.Portal:return\"Portal\";case Y.Profiler:return\"Profiler\";case Y.StrictMode:return\"StrictMode\";case Y.Suspense:return\"Suspense\";case K:return\"SuspenseList\";default:var t=e.type;return\"string\"==typeof t?t:\"function\"==typeof t?le(t,\"Anonymous\"):null!=t?\"NotImplementedInDevtools\":\"Element\"}}function ye(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50;return e.length>t?e.substr(0,t)+\"…\":e}function _e(e,t){if(null!=e&&hasOwnProperty.call(e,J.type))return t?e[J.preview_long]:e[J.preview_short];switch(me(e)){case\"html_element\":return\"<\".concat(ye(e.tagName.toLowerCase()),\" />\");case\"function\":return ye(\"ƒ \".concat(\"function\"==typeof e.name?\"\":e.name,\"() {}\"));case\"string\":return'\"'.concat(e,'\"');case\"bigint\":return ye(e.toString()+\"n\");case\"regexp\":case\"symbol\":return ye(e.toString());case\"react_element\":return\"<\".concat(ye(ge(e)||\"Unknown\"),\" />\");case\"array_buffer\":return\"ArrayBuffer(\".concat(e.byteLength,\")\");case\"data_view\":return\"DataView(\".concat(e.buffer.byteLength,\")\");case\"array\":if(t){for(var n=\"\",r=0;r<e.length&&(r>0&&(n+=\", \"),!((n+=_e(e[r],!1)).length>50));r++);return\"[\".concat(ye(n),\"]\")}var i=hasOwnProperty.call(e,J.size)?e[J.size]:e.length;return\"Array(\".concat(i,\")\");case\"typed_array\":var o=\"\".concat(e.constructor.name,\"(\").concat(e.length,\")\");if(t){for(var u=\"\",a=0;a<e.length&&(a>0&&(u+=\", \"),!((u+=e[a]).length>50));a++);return\"\".concat(o,\" [\").concat(ye(u),\"]\")}return o;case\"iterator\":var l=e.constructor.name;if(t){for(var s=Array.from(e),c=\"\",f=0;f<s.length;f++){var d=s[f];if(f>0&&(c+=\", \"),Array.isArray(d)){var p=_e(d[0],!0),h=_e(d[1],!1);c+=\"\".concat(p,\" => \").concat(h)}else c+=_e(d,!1);if(c.length>50)break}return\"\".concat(l,\"(\").concat(e.size,\") {\").concat(ye(c),\"}\")}return\"\".concat(l,\"(\").concat(e.size,\")\");case\"opaque_iterator\":return e[Symbol.toStringTag];case\"date\":return e.toString();case\"object\":if(t){for(var v=ae(e).sort(ue),m=\"\",g=0;g<v.length;g++){var y=v[g];if(g>0&&(m+=\", \"),(m+=\"\".concat(y.toString(),\": \").concat(_e(e[y],!1))).length>50)break}return\"{\".concat(ye(m),\"}\")}return\"{…}\";case\"boolean\":case\"number\":case\"infinity\":case\"nan\":case\"null\":case\"undefined\":return e;default:try{return ye(\"\"+e)}catch(e){return\"unserializable\"}}}var be=n(7);function we(e){return(we=\"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})(e)}function Ee(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function De(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ee(Object(n),!0).forEach((function(t){Se(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ee(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Se(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ce(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(null!==e){var r=[],i=[],o=ee(e,r,i,n,t);return{data:o,cleaned:r,unserializable:i}}return null}function ke(e){var t,n,r=(t=e,n=new Set,JSON.stringify(t,(function(e,t){if(\"object\"===we(t)&&null!==t){if(n.has(t))return;n.add(t)}return\"bigint\"==typeof t?t.toString()+\"n\":t}))),i=void 0===r?\"undefined\":r,o=window.__REACT_DEVTOOLS_GLOBAL_HOOK__.clipboardCopyText;\"function\"==typeof o?o(i).catch((function(e){})):Object(be.copy)(i)}function Te(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=t[n],i=Array.isArray(e)?e.slice():De({},e);return n+1===t.length?Array.isArray(i)?i.splice(r,1):delete i[r]:i[r]=Te(e[r],t,n+1),i}function xe(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,i=t[r],o=Array.isArray(e)?e.slice():De({},e);if(r+1===t.length){var u=n[r];o[u]=o[i],Array.isArray(o)?o.splice(i,1):delete o[i]}else o[i]=xe(e[i],t,n,r+1);return o}function Ae(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;if(r>=t.length)return n;var i=t[r],o=Array.isArray(e)?e.slice():De({},e);return o[i]=Ae(e[i],t,n,r+1),o}var Oe=n(8);function Pe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ie(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Pe(Object(n),!0).forEach((function(t){Ne(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pe(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Me(e){return function(e){if(Array.isArray(e))return Be(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||Le(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 Re(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==a.return||a.return()}finally{if(i)throw o}}return n}}(e,t)||Le(e,t)||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.\")}()}function Fe(e,t){var n;if(\"undefined\"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=Le(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}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,u=!0,a=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return u=e.done,e},e:function(e){a=!0,o=e},f:function(){try{u||null==n.return||n.return()}finally{if(a)throw o}}}}function Le(e,t){if(e){if(\"string\"==typeof e)return Be(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)?Be(e,t):void 0}}function Be(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function je(e){return(je=\"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})(e)}function Ue(e){return void 0!==e.flags?e.flags:e.effectTag}var ze,We=\"object\"===(\"undefined\"==typeof performance?\"undefined\":je(performance))&&\"function\"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()};function He(e){var t;function n(e){var t=\"object\"===je(e)&&null!==e?e.$$typeof:e;return\"symbol\"===je(t)?t.toString():t}var r=t=Object(q.gte)(e,\"17.0.0-alpha\")?{Block:22,ClassComponent:1,ContextConsumer:9,ContextProvider:10,CoroutineComponent:-1,CoroutineHandlerPhase:-1,DehydratedSuspenseComponent:18,ForwardRef:11,Fragment:7,FunctionComponent:0,HostComponent:5,HostPortal:4,HostRoot:3,HostText:6,IncompleteClassComponent:17,IndeterminateComponent:2,LazyComponent:16,MemoComponent:14,Mode:8,OffscreenComponent:23,Profiler:12,SimpleMemoComponent:15,SuspenseComponent:13,SuspenseListComponent:19,YieldComponent:-1}:Object(q.gte)(e,\"16.6.0-beta.0\")?{Block:22,ClassComponent:1,ContextConsumer:9,ContextProvider:10,CoroutineComponent:-1,CoroutineHandlerPhase:-1,DehydratedSuspenseComponent:18,ForwardRef:11,Fragment:7,FunctionComponent:0,HostComponent:5,HostPortal:4,HostRoot:3,HostText:6,IncompleteClassComponent:17,IndeterminateComponent:2,LazyComponent:16,MemoComponent:14,Mode:8,OffscreenComponent:-1,Profiler:12,SimpleMemoComponent:15,SuspenseComponent:13,SuspenseListComponent:19,YieldComponent:-1}:Object(q.gte)(e,\"16.4.3-alpha\")?{Block:-1,ClassComponent:2,ContextConsumer:11,ContextProvider:12,CoroutineComponent:-1,CoroutineHandlerPhase:-1,DehydratedSuspenseComponent:-1,ForwardRef:13,Fragment:9,FunctionComponent:0,HostComponent:7,HostPortal:6,HostRoot:5,HostText:8,IncompleteClassComponent:-1,IndeterminateComponent:4,LazyComponent:-1,MemoComponent:-1,Mode:10,OffscreenComponent:-1,Profiler:15,SimpleMemoComponent:-1,SuspenseComponent:16,SuspenseListComponent:-1,YieldComponent:-1}:{Block:-1,ClassComponent:2,ContextConsumer:12,ContextProvider:13,CoroutineComponent:7,CoroutineHandlerPhase:8,DehydratedSuspenseComponent:-1,ForwardRef:14,Fragment:10,FunctionComponent:1,HostComponent:5,HostPortal:4,HostRoot:3,HostText:6,IncompleteClassComponent:-1,IndeterminateComponent:0,LazyComponent:-1,MemoComponent:-1,Mode:11,OffscreenComponent:-1,Profiler:15,SimpleMemoComponent:-1,SuspenseComponent:16,SuspenseListComponent:-1,YieldComponent:9},i=r.ClassComponent,o=r.IncompleteClassComponent,u=r.FunctionComponent,a=r.IndeterminateComponent,l=r.ForwardRef,s=r.HostRoot,c=r.HostComponent,f=r.HostPortal,d=r.HostText,p=r.Fragment,h=r.MemoComponent,v=r.SimpleMemoComponent,m=r.SuspenseComponent,g=r.SuspenseListComponent;return{getDisplayNameForFiber:function(e){var t=e.type,r=e.tag,y=t;\"object\"===je(t)&&null!==t&&(y=function e(t){switch(n(t)){case 60115:case\"Symbol(react.memo)\":return e(t.type);case 60112:case\"Symbol(react.forward_ref)\":return t.render;default:return t}}(t));var _=null;switch(r){case i:case o:return le(y);case u:case a:return le(y);case l:return t&&t.displayName||le(y,\"Anonymous\");case s:return null;case c:return t;case f:case d:case p:return null;case h:case v:return le(y,\"Anonymous\");case m:return\"Suspense\";case g:return\"SuspenseList\";default:switch(n(t)){case 60111:case\"Symbol(react.concurrent_mode)\":case\"Symbol(react.async_mode)\":return null;case 60109:case\"Symbol(react.provider)\":return _=e.type._context||e.type.context,\"\".concat(_.displayName||\"Context\",\".Provider\");case 60110:case\"Symbol(react.context)\":return _=e.type._context||e.type,\"\".concat(_.displayName||\"Context\",\".Consumer\");case 60108:case\"Symbol(react.strict_mode)\":return null;case 60114:case\"Symbol(react.profiler)\":return\"Profiler(\".concat(e.memoizedProps.id,\")\");case 60119:case\"Symbol(react.scope)\":return\"Scope\";default:return null}}},getTypeSymbol:n,ReactPriorityLevels:{ImmediatePriority:99,UserBlockingPriority:98,NormalPriority:97,LowPriority:96,IdlePriority:95,NoPriority:90},ReactTypeOfWork:t,ReactTypeOfSideEffect:{NoFlags:0,PerformedWork:1,Placement:2}}}function Ve(e,t,n,r){var i=He(n.version),o=i.getDisplayNameForFiber,u=i.getTypeSymbol,a=i.ReactPriorityLevels,l=i.ReactTypeOfWork,c=i.ReactTypeOfSideEffect,f=c.NoFlags,d=c.PerformedWork,p=c.Placement,h=l.FunctionComponent,v=l.ClassComponent,m=l.ContextConsumer,g=l.DehydratedSuspenseComponent,y=l.Fragment,_=l.ForwardRef,b=l.HostRoot,w=l.HostPortal,E=l.HostComponent,D=l.HostText,S=l.IncompleteClassComponent,C=l.IndeterminateComponent,k=l.MemoComponent,T=l.OffscreenComponent,x=l.SimpleMemoComponent,A=l.SuspenseComponent,O=l.SuspenseListComponent,P=a.ImmediatePriority,I=a.UserBlockingPriority,N=a.NormalPriority,M=a.LowPriority,R=a.IdlePriority,F=a.NoPriority,L=n.overrideHookState,B=n.overrideHookStateDeletePath,j=n.overrideHookStateRenamePath,U=n.overrideProps,z=n.overridePropsDeletePath,W=n.overridePropsRenamePath,H=n.setSuspenseHandler,V=n.scheduleUpdate,q=\"function\"==typeof H&&\"function\"==typeof V;lt(n);var G=!1!==window.__REACT_DEVTOOLS_APPEND_COMPONENT_STACK__,$=!0===window.__REACT_DEVTOOLS_BREAK_ON_CONSOLE_ERRORS__;(G||$)&&ct({appendComponentStack:G,breakOnConsoleErrors:$});var Y=new Set,K=new Set,X=new Set,Q=!1,J=new Set;function Z(e){X.clear(),Y.clear(),K.clear(),e.forEach((function(e){if(e.isEnabled)switch(e.type){case 2:e.isValid&&\"\"!==e.value&&Y.add(new RegExp(e.value,\"i\"));break;case 1:X.add(e.value);break;case 3:e.isValid&&\"\"!==e.value&&K.add(new RegExp(e.value,\"i\"));break;case 4:Y.add(new RegExp(\"\\\\(\"));break;default:console.warn('Invalid component filter type \"'.concat(e.type,'\"'))}}))}function ee(e){var t=e._debugSource,n=e.tag,r=e.type;switch(n){case g:return!0;case w:case D:case y:case T:return!0;case b:return!1;default:switch(u(r)){case 60111:case\"Symbol(react.concurrent_mode)\":case\"Symbol(react.async_mode)\":case 60108:case\"Symbol(react.strict_mode)\":return!0}}var i=te(e);if(X.has(i))return!0;if(Y.size>0){var a=o(e);if(null!=a){var l,s=Fe(Y);try{for(s.s();!(l=s.n()).done;)if(l.value.test(a))return!0}catch(e){s.e(e)}finally{s.f()}}}if(null!=t&&K.size>0){var c,f=t.fileName,d=Fe(K);try{for(d.s();!(c=d.n()).done;)if(c.value.test(f))return!0}catch(e){d.e(e)}finally{d.f()}}return!1}function te(e){var t=e.type;switch(e.tag){case v:case S:return 1;case h:case C:return 5;case _:return 6;case b:return 11;case E:return 7;case w:case D:case y:return 9;case k:case x:return 8;case A:return 12;case O:return 13;default:switch(u(t)){case 60111:case\"Symbol(react.concurrent_mode)\":case\"Symbol(react.async_mode)\":return 9;case 60109:case\"Symbol(react.provider)\":return 2;case 60110:case\"Symbol(react.context)\":return 2;case 60108:case\"Symbol(react.strict_mode)\":return 9;case 60114:case\"Symbol(react.profiler)\":return 10;default:return 9}}}function ne(e){if(oe.has(e))return e;var t=e.alternate;return null!=t&&oe.has(t)?t:(oe.add(e),e)}null!=window.__REACT_DEVTOOLS_COMPONENT_FILTERS__?Z(window.__REACT_DEVTOOLS_COMPONENT_FILTERS__):Z([{type:1,value:7,isEnabled:!0}]);var re=new Map,ie=new Map,oe=new Set,ue=new Map,ae=new Map,le=-1;function se(e){if(!re.has(e)){var t=ce();re.set(e,t),ie.set(t,e)}return re.get(e)}function me(e){switch(te(e)){case 1:if(null!==dt){var t=se(ne(e)),n=ye(e);null!==n&&dt.set(t,n)}}}var ge={};function ye(e){switch(te(e)){case 1:var t=e.stateNode,n=ge,r=ge;return null!=t&&(t.constructor&&null!=t.constructor.contextType?r=t.context:(n=t.context)&&0===Object.keys(n).length&&(n=ge)),[n,r];default:return null}}function _e(e){switch(te(e)){case 1:if(null!==dt){var t=se(ne(e)),n=dt.has(t)?dt.get(t):null,r=ye(e);if(null==n||null==r)return null;var i=Re(n,2),o=i[0],u=i[1],a=Re(r,2),l=a[0],s=a[1];if(l!==ge)return we(o,l);if(s!==ge)return u!==s}}return null}function be(e,t){if(null==e||null==t)return!1;if(t.hasOwnProperty(\"baseState\")&&t.hasOwnProperty(\"memoizedState\")&&t.hasOwnProperty(\"next\")&&t.hasOwnProperty(\"queue\"))for(;null!==t;){if(t.memoizedState!==e.memoizedState)return!0;t=t.next,e=e.next}return!1}function we(e,t){if(null==e||null==t)return null;if(t.hasOwnProperty(\"baseState\")&&t.hasOwnProperty(\"memoizedState\")&&t.hasOwnProperty(\"next\")&&t.hasOwnProperty(\"queue\"))return null;var n,r=[],i=Fe(new Set([].concat(Me(Object.keys(e)),Me(Object.keys(t)))));try{for(i.s();!(n=i.n()).done;){var o=n.value;e[o]!==t[o]&&r.push(o)}}catch(e){i.e(e)}finally{i.f()}return r}function Ee(e,t){switch(t.tag){case v:case h:case m:case k:case x:return(Ue(t)&d)===d;default:return e.memoizedProps!==t.memoizedProps||e.memoizedState!==t.memoizedState||e.ref!==t.ref}}var De=[],Se=[],Pe=[],Ne=[],Le=new Map,Be=0,je=null;function ze(e){De.push(e)}function Ve(n){if(0!==De.length||0!==Se.length||0!==Pe.length||null!==je||vt){var r=Se.length+Pe.length+(null===je?0:1),i=new Array(3+Be+(r>0?2+r:0)+De.length),o=0;if(i[o++]=t,i[o++]=le,i[o++]=Be,Le.forEach((function(e,t){i[o++]=t.length;for(var n=fe(t),r=0;r<n.length;r++)i[o+r]=n[r];o+=t.length})),r>0){i[o++]=2,i[o++]=r;for(var u=Se.length-1;u>=0;u--)i[o++]=Se[u];for(var a=0;a<Pe.length;a++)i[o+a]=Pe[a];o+=Pe.length,null!==je&&(i[o]=je,o++)}for(var l=0;l<De.length;l++)i[o+l]=De[l];o+=De.length,null!==Ne?Ne.push(i):e.emit(\"operations\",i),De.length=0,Se.length=0,Pe.length=0,je=null,Le.clear(),Be=0}}function qe(e){if(null===e)return 0;var t=Le.get(e);if(void 0!==t)return t;var n=Le.size+1;return Le.set(e,n),Be+=e.length+1,n}function Ge(e,t){null!==St&&(e!==St&&e!==St.alternate||Tt(null));var n=e.tag===b,r=ne(e);if(re.has(r)){var i=se(r);n?je=i:ee(e)||(t?Pe.push(i):Se.push(i)),re.delete(r),ie.delete(i),oe.delete(r),e.hasOwnProperty(\"treeBaseDuration\")&&(ae.delete(i),ue.delete(i))}else oe.delete(r)}function $e(e,t,n,r){var i=function(e){if(null===Dt||!kt)return!1;var t=e.return,n=null!==t?t.alternate:null;if(St===t||St===n&&null!==n){var r=It(e),i=Dt[Ct+1];if(void 0===i)throw new Error(\"Expected to see a frame at the next depth.\");if(r.index===i.index&&r.key===i.key&&r.displayName===i.displayName)return St=e,Ct++,kt=Ct!==Dt.length-1,!1}return kt=!1,!0}(e),u=!ee(e);if(u&&function(e,t){var n=e.tag===b,r=se(ne(e)),i=e.hasOwnProperty(\"_debugOwner\"),u=e.hasOwnProperty(\"treeBaseDuration\");if(n)ze(1),ze(r),ze(11),ze(u?1:0),ze(i?1:0),vt&&null!==ft&&ft.set(r,Pt(e));else{var a=e.key,l=o(e),s=te(e),c=e._debugOwner,f=null!=c?se(ne(c)):0,d=t?se(ne(t)):0,p=qe(l),h=qe(null===a?null:\"\"+a);ze(1),ze(r),ze(s),ze(d),ze(f),ze(p),ze(h)}u&&(ae.set(r,le),Ke(e))}(e,t),Q&&r&&7===te(e)&&(J.add(e.stateNode),r=!1),e.tag===l.SuspenseComponent)if(null!==e.memoizedState){var a=e.child,s=a?a.sibling:null,c=s?s.child:null;null!==c&&$e(c,u?e:t,!0,r)}else{var f=null;-1===T?f=e.child:null!==e.child&&(f=e.child.child),null!==f&&$e(f,u?e:t,!0,r)}else null!==e.child&&$e(e.child,u?e:t,!0,r);!function(e){kt=e}(i),n&&null!==e.sibling&&$e(e.sibling,t,!0,r)}function Ye(e){var t=e.tag===l.SuspenseComponent&&null!==e.memoizedState,n=e.child;if(t){var r=e.child,i=r?r.sibling:null;n=i?i.child:null}for(;null!==n;)null!==n.return&&(Ye(n),Ge(n,!0)),n=n.sibling}function Ke(e){var t=se(ne(e)),n=e.actualDuration,r=e.treeBaseDuration;if(ue.set(t,r||0),vt){var i=e.alternate;if(null==i||r!==i.treeBaseDuration){var o=Math.floor(1e3*(r||0));ze(4),ze(t),ze(o)}if((null==i||Ee(i,e))&&null!=n){for(var u=n,a=e.child;null!==a;)u-=a.actualDuration||0,a=a.sibling;var l=st;if(l.durations.push(t,n,u),l.maxActualDuration=Math.max(l.maxActualDuration,n),gt){var s=function(e,t){switch(te(t)){case 1:case 5:case 8:case 6:return null===e?{context:null,didHooksChange:!1,isFirstMount:!0,props:null,state:null}:{context:_e(t),didHooksChange:be(e.memoizedState,t.memoizedState),isFirstMount:!1,props:we(e.memoizedProps,t.memoizedProps),state:we(e.memoizedState,t.memoizedState)};default:return null}}(i,e);null!==s&&null!==l.changeDescriptions&&l.changeDescriptions.set(t,s),me(e)}}}}function Xe(e,t){if(ee(e)){var n=e.child;if(e.tag===A&&null!==e.memoizedState){var r=e.child,i=r?r.sibling:null,o=i?i.child:null;null!==o&&(n=o)}for(;null!==n;)Xe(n,t),n=n.sibling}else t.push(se(ne(e)))}function Qe(e){var t=[],n=et(e);if(!n)return t;for(var r=n;;){if(r.tag===E||r.tag===D)t.push(r);else if(r.child){r.child.return=r,r=r.child;continue}if(r===n)return t;for(;!r.sibling;){if(!r.return||r.return===n)return t;r=r.return}r.sibling.return=r.return,r=r.sibling}return t}function Je(e){try{var t=et(e);if(null===t)return null;if(t.tag===A&&null!==t.memoizedState){var n=t.child&&t.child.sibling;null!=n&&(t=n)}return Qe(e).map((function(e){return e.stateNode})).filter(Boolean)}catch(e){return null}}function Ze(e){var t=e;if(e.alternate)for(;t.return;)t=t.return;else{if((Ue(t)&p)!==f)return 1;for(;t.return;)if((Ue(t=t.return)&p)!==f)return 1}return t.tag===b?2:3}function et(e){var t=ie.get(e);if(null==t)return console.warn('Could not find Fiber with id \"'.concat(e,'\"')),null;var n=t.alternate;if(!n){var r=Ze(t);if(3===r)throw Error(\"Unable to find node on an unmounted component.\");return 1===r?null:t}for(var i=t,o=n;;){var u=i.return;if(null===u)break;var a=u.alternate;if(null===a){var l=u.return;if(null!==l){i=o=l;continue}break}if(u.child===a.child){for(var s=u.child;s;){if(s===i){if(2!==Ze(u))throw Error(\"Unable to find node on an unmounted component.\");return t}if(s===o){if(2!==Ze(u))throw Error(\"Unable to find node on an unmounted component.\");return n}s=s.sibling}throw Error(\"Unable to find node on an unmounted component.\")}if(i.return!==o.return)i=u,o=a;else{for(var c=!1,f=u.child;f;){if(f===i){c=!0,i=u,o=a;break}if(f===o){c=!0,o=u,i=a;break}f=f.sibling}if(!c){for(f=a.child;f;){if(f===i){c=!0,i=a,o=u;break}if(f===o){c=!0,o=a,i=u;break}f=f.sibling}if(!c)throw Error(\"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\")}}if(i.alternate!==o)throw Error(\"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\")}if(i.tag!==b)throw Error(\"Unable to find node on an unmounted component.\");return i.stateNode.current===i?t:n}function tt(e){var t=et(e);if(null==t)return null;var r=t._debugOwner,i=t._debugSource,a=t.stateNode,l=t.key,s=t.memoizedProps,c=t.memoizedState,f=t.dependencies,d=t.tag,p=t.type,m=te(t),g=!(d!==h&&d!==x&&d!==_||!c&&!f),y=u(p),b=!1,w=null;if(d===v||d===h||d===S||d===C||d===k||d===_||d===x)b=!0,a&&null!=a.context&&(1===m&&!p.contextTypes&&!p.contextType||(w=a.context));else if(60110===y||\"Symbol(react.context)\"===y){var E=p._context||p;w=E._currentValue||null;for(var D=t.return;null!==D;){var T=D.type,O=u(T);if((60109===O||\"Symbol(react.provider)\"===O)&&(T._context||T.context)===E){w=D.memoizedProps.value;break}D=D.return}}var P=!1;null!==w&&(P=!!p.contextTypes,w={value:w});var I=null;if(r){I=[];for(var N=r;null!==N;)I.push({displayName:o(N)||\"Anonymous\",id:se(ne(N)),type:te(N)}),N=N._debugOwner||null}var M=d===A&&null!==c,R=null;if(g){var F={};for(var H in console)try{F[H]=console[H],console[H]=function(){}}catch(e){}try{R=Object(Oe.inspectHooksOfFiber)(t,n.currentDispatcherRef)}finally{for(var V in F)try{console[V]=F[V]}catch(e){}}}for(var G=null,$=t;null!==$.return;)$=$.return;var Y=$.stateNode;return null!=Y&&null!==Y._debugRootType&&(G=Y._debugRootType),{id:e,canEditHooks:\"function\"==typeof L,canEditFunctionProps:\"function\"==typeof U,canEditHooksAndDeletePaths:\"function\"==typeof B,canEditHooksAndRenamePaths:\"function\"==typeof j,canEditFunctionPropsDeletePaths:\"function\"==typeof z,canEditFunctionPropsRenamePaths:\"function\"==typeof W,canToggleSuspense:q&&(!M||wt.has(e)),canViewSource:b,hasLegacyContext:P,key:null!=l?l:null,displayName:o(t),type:m,context:w,hooks:R,props:s,state:g?null:c,owners:I,source:i||null,rootType:G,rendererPackageName:n.rendererPackageName,rendererVersion:n.version}}var nt=null,rt=!1,it={};function ot(e){return null!==nt&&nt.id===e&&!rt}function ut(e){var t=it;e.forEach((function(e){t[e]||(t[e]={}),t=t[e]}))}function at(e,t){return function(n){switch(t){case\"hooks\":if(1===n.length)return!0;if(\"subHooks\"===n[n.length-1]||\"subHooks\"===n[n.length-2])return!0}var r=null===e?it:it[e];if(!r)return!1;for(var i=0;i<n.length;i++)if(!(r=r[n[i]]))return!1;return!0}}var st=null,ft=null,dt=null,pt=null,ht=null,vt=!1,mt=0,gt=!1,yt=null;function _t(n){vt||(gt=n,ft=new Map,pt=new Map(ue),ht=new Map(ae),dt=new Map,e.getFiberRoots(t).forEach((function(e){var t=se(ne(e.current));ft.set(t,Pt(e.current)),n&&function e(t){me(t);for(var n=t.child;null!==n;)e(n),n=n.sibling}(e.current)})),vt=!0,mt=We(),yt=new Map)}function bt(){return!1}\"true\"===s(\"React::DevTools::reloadAndProfile\")&&_t(\"true\"===s(\"React::DevTools::recordChangeDescriptions\"));var wt=new Set;function Et(e){var t=se(ne(e));return wt.has(t)}var Dt=null,St=null,Ct=-1,kt=!1;function Tt(e){null===e&&(St=null,Ct=-1,kt=!1),Dt=e}var xt=new Map,At=new Map;function Ot(e,t){var n=Pt(t),r=At.get(n)||0;At.set(n,r+1);var i=\"\".concat(n,\":\").concat(r);xt.set(e,i)}function Pt(e){for(var t=null,n=null,r=e.child,i=0;i<3&&null!==r;i++){var u=o(r);if(null!==u&&(\"function\"==typeof r.type?t=u:null===n&&(n=u)),null!==t)break;r=r.child}return t||n||\"Anonymous\"}function It(e){var t=e.key,n=o(e),r=e.index;switch(e.tag){case b:var i=se(ne(e)),u=xt.get(i);if(void 0===u)throw new Error(\"Expected mounted root to have known pseudo key.\");n=u;break;case E:n=e.type}return{displayName:n,key:t,index:r}}var Nt=function(e){if(null==e)return\"Unknown\";switch(e){case P:return\"Immediate\";case I:return\"User-Blocking\";case N:return\"Normal\";case M:return\"Low\";case R:return\"Idle\";case F:default:return\"Unknown\"}};return{cleanup:function(){},copyElementPath:function(e,t){ot(e)&&ke(de(nt,t))},deletePath:function(e,t,n,r){var i=et(t);if(null!==i){var o=i.stateNode;switch(e){case\"context\":switch(r=r.slice(1),i.tag){case v:0===r.length||pe(o.context,r),o.forceUpdate()}break;case\"hooks\":\"function\"==typeof B&&B(i,n,r);break;case\"props\":null===o?\"function\"==typeof z&&z(i,r):(i.pendingProps=Te(o.props,r),o.forceUpdate());break;case\"state\":pe(o.state,r),o.forceUpdate()}}},findNativeNodesForFiberID:Je,flushInitialOperations:function(){var n=Ne;Ne=null,null!==n&&n.length>0?n.forEach((function(t){e.emit(\"operations\",t)})):(null!==Dt&&(kt=!0),e.getFiberRoots(t).forEach((function(e){Ot(le=se(ne(e.current)),e.current),vt&&null!=e.memoizedInteractions&&(st={changeDescriptions:gt?new Map:null,durations:[],commitTime:We()-mt,interactions:Array.from(e.memoizedInteractions).map((function(e){return Ie(Ie({},e),{},{timestamp:e.timestamp-mt})})),maxActualDuration:0,priorityLevel:null}),$e(e.current,null,!1,!1),Ve(),le=-1})))},getBestMatchForTrackedPath:function(){if(null===Dt)return null;if(null===St)return null;for(var e=St;null!==e&&ee(e);)e=e.return;return null===e?null:{id:se(ne(e)),isFullMatch:Ct===Dt.length-1}},getDisplayNameForFiberID:function(e){var t=ie.get(e);return null!=t?o(t):null},getFiberIDForNative:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=n.findFiberByHostInstance(e);if(null!=r){if(t)for(;null!==r&&ee(r);)r=r.return;return se(ne(r))}return null},getInstanceAndStyle:function(e){var t=null,n=null,r=et(e);return null!==r&&(t=r.stateNode,null!==r.memoizedProps&&(n=r.memoizedProps.style)),{instance:t,style:n}},getOwnersList:function(e){var t=et(e);if(null==t)return null;var n=t._debugOwner,r=[{displayName:o(t)||\"Anonymous\",id:e,type:te(t)}];if(n)for(var i=n;null!==i;)r.unshift({displayName:o(i)||\"Anonymous\",id:se(ne(i)),type:te(i)}),i=i._debugOwner||null;return r},getPathForElement:function(e){var t=ie.get(e);if(null==t)return null;for(var n=[];null!==t;)n.push(It(t)),t=t.return;return n.reverse(),n},getProfilingData:function(){var e=[];if(null===yt)throw Error(\"getProfilingData() called before any profiling data was recorded\");return yt.forEach((function(t,n){var r=[],i=[],o=new Map,u=new Map,a=null!==ft&&ft.get(n)||\"Unknown\";null!=pt&&pt.forEach((function(e,t){null!=ht&&ht.get(t)===n&&i.push([t,e])})),t.forEach((function(e,t){var n=e.changeDescriptions,i=e.durations,a=e.interactions,l=e.maxActualDuration,s=e.priorityLevel,c=e.commitTime,f=[];a.forEach((function(e){o.has(e.id)||o.set(e.id,e),f.push(e.id);var n=u.get(e.id);null!=n?n.push(t):u.set(e.id,[t])}));for(var d=[],p=[],h=0;h<i.length;h+=3){var v=i[h];d.push([v,i[h+1]]),p.push([v,i[h+2]])}r.push({changeDescriptions:null!==n?Array.from(n.entries()):null,duration:l,fiberActualDurations:d,fiberSelfDurations:p,interactionIDs:f,priorityLevel:s,timestamp:c})})),e.push({commitData:r,displayName:a,initialTreeBaseDurations:i,interactionCommits:Array.from(u.entries()),interactions:Array.from(o.entries()),rootID:n})})),{dataForRoots:e,rendererID:t}},handleCommitFiberRoot:function(t,n){var r=t.current,i=r.alternate;le=se(ne(r)),null!==Dt&&(kt=!0),Q&&J.clear();var o=null!=t.memoizedInteractions;if(vt&&o&&(st={changeDescriptions:gt?new Map:null,durations:[],commitTime:We()-mt,interactions:Array.from(t.memoizedInteractions).map((function(e){return Ie(Ie({},e),{},{timestamp:e.timestamp-mt})})),maxActualDuration:0,priorityLevel:null==n?null:Nt(n)}),i){var u=null!=i.memoizedState&&null!=i.memoizedState.element,a=null!=r.memoizedState&&null!=r.memoizedState.element;!u&&a?(Ot(le,r),$e(r,null,!1,!1)):u&&a?function e(t,n,r,i){if(Q){var o=te(t);i?7===o&&(J.add(t.stateNode),i=!1):5!==o&&1!==o&&2!==o||(i=Ee(n,t))}null!==nt&&nt.id===se(ne(t))&&Ee(n,t)&&(rt=!0);var u=!ee(t),a=t.tag===A,l=!1,s=a&&null!==n.memoizedState,c=a&&null!==t.memoizedState;if(s&&c){var f=t.child,d=f?f.sibling:null,p=n.child,h=p?p.sibling:null;null!=d&&null!=h&&e(d,h,t,i)&&(l=!0)}else if(s&&!c){var v=t.child;null!==v&&$e(v,u?t:r,!0,i),l=!0}else if(!s&&c){Ye(n);var m=t.child,g=m?m.sibling:null;null!=g&&($e(g,u?t:r,!0,i),l=!0)}else if(t.child!==n.child){for(var y=t.child,_=n.child;y;){if(y.alternate){var b=y.alternate;e(y,b,u?t:r,i)&&(l=!0),b!==_&&(l=!0)}else $e(y,u?t:r,!1,i),l=!0;y=y.sibling,l||null===_||(_=_.sibling)}null!==_&&(l=!0)}else Q&&i&&Qe(se(ne(t))).forEach((function(e){J.add(e.stateNode)}));if(u&&t.hasOwnProperty(\"treeBaseDuration\")&&Ke(t),l){if(u){var w=t.child;if(c){var E=t.child;w=E?E.sibling:null}return null!=w&&function(e,t){for(var n=[],r=t;null!==r;)Xe(r,n),r=r.sibling;var i=n.length;if(!(i<2)){ze(3),ze(se(ne(e))),ze(i);for(var o=0;o<n.length;o++)ze(n[o])}}(t,w),!1}return!0}return!1}(r,i,null,!1):u&&!a&&(function(e){var t=xt.get(e);if(void 0===t)throw new Error(\"Expected root pseudo key to be known.\");var n=t.substring(0,t.lastIndexOf(\":\")),r=At.get(n);if(void 0===r)throw new Error(\"Expected counter to be known.\");r>1?At.set(n,r-1):At.delete(n),xt.delete(e)}(le),Ge(r,!1))}else Ot(le,r),$e(r,null,!1,!1);if(vt&&o){var l=yt.get(le);null!=l?l.push(st):yt.set(le,[st])}Ve(),Q&&e.emit(\"traceUpdates\",J),le=-1},handleCommitFiberUnmount:function(e){Ge(e,!1)},inspectElement:function(e,t){if(ot(e)){if(null!=t){ut(t);var n=null;return\"hooks\"===t[0]&&(n=\"hooks\"),{id:e,type:\"hydrated-path\",path:t,value:Ce(de(nt,t),at(null,n),t)}}return{id:e,type:\"no-change\"}}if(rt=!1,null!==nt&&nt.id===e||(it={}),null===(nt=tt(e)))return{id:e,type:\"not-found\"};null!=t&&ut(t),function(e){var t=e.hooks,n=e.id,i=e.props,o=ie.get(n);if(null!=o){var u=o.elementType,a=o.stateNode,l=o.tag,s=o.type;switch(l){case v:case S:case C:r.$r=a;break;case h:r.$r={hooks:t,props:i,type:s};break;case _:r.$r={props:i,type:s.render};break;case k:case x:r.$r={props:i,type:null!=u&&null!=u.type?u.type:s};break;default:r.$r=null}}else console.warn('Could not find Fiber with id \"'.concat(n,'\"'))}(nt);var i=Ie({},nt);return i.context=Ce(i.context,at(\"context\",null)),i.hooks=Ce(i.hooks,at(\"hooks\",\"hooks\")),i.props=Ce(i.props,at(\"props\",null)),i.state=Ce(i.state,at(\"state\",null)),{id:e,type:\"full-data\",value:i}},logElementToConsole:function(e){var t=ot(e)?nt:tt(e);if(null!==t){var n=\"function\"==typeof console.groupCollapsed;n&&console.groupCollapsed(\"[Click to expand] %c<\".concat(t.displayName||\"Component\",\" />\"),\"color: var(--dom-tag-name-color); font-weight: normal;\"),null!==t.props&&console.log(\"Props:\",t.props),null!==t.state&&console.log(\"State:\",t.state),null!==t.hooks&&console.log(\"Hooks:\",t.hooks);var r=Je(e);null!==r&&console.log(\"Nodes:\",r),null!==t.source&&console.log(\"Location:\",t.source),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log(\"Right-click any value to save it as a global variable for further inspection.\"),n&&console.groupEnd()}else console.warn('Could not find Fiber with id \"'.concat(e,'\"'))},prepareViewAttributeSource:function(e,t){ot(e)&&(window.$attribute=de(nt,t))},prepareViewElementSource:function(e){var t=ie.get(e);if(null!=t){var n=t.elementType,i=t.tag,o=t.type;switch(i){case v:case S:case C:case h:r.$type=o;break;case _:r.$type=o.render;break;case k:case x:r.$type=null!=n&&null!=n.type?n.type:o;break;default:r.$type=null}}else console.warn('Could not find Fiber with id \"'.concat(e,'\"'))},overrideSuspense:function(e,t){if(\"function\"!=typeof H||\"function\"!=typeof V)throw new Error(\"Expected overrideSuspense() to not get called for earlier React versions.\");t?(wt.add(e),1===wt.size&&H(Et)):(wt.delete(e),0===wt.size&&H(bt));var n=ie.get(e);null!=n&&V(n)},overrideValueAtPath:function(e,t,n,r,i){var o=et(t);if(null!==o){var u=o.stateNode;switch(e){case\"context\":switch(r=r.slice(1),o.tag){case v:0===r.length?u.context=i:ve(u.context,r,i),u.forceUpdate()}break;case\"hooks\":\"function\"==typeof L&&L(o,n,r,i);break;case\"props\":switch(o.tag){case v:o.pendingProps=Ae(u.props,r,i),u.forceUpdate();break;default:\"function\"==typeof U&&U(o,r,i)}break;case\"state\":switch(o.tag){case v:ve(u.state,r,i),u.forceUpdate()}}}},renamePath:function(e,t,n,r,i){var o=et(t);if(null!==o){var u=o.stateNode;switch(e){case\"context\":switch(r=r.slice(1),i=i.slice(1),o.tag){case v:0===r.length||he(u.context,r,i),u.forceUpdate()}break;case\"hooks\":\"function\"==typeof j&&j(o,n,r,i);break;case\"props\":null===u?\"function\"==typeof W&&W(o,r,i):(o.pendingProps=xe(u.props,r,i),u.forceUpdate());break;case\"state\":he(u.state,r,i),u.forceUpdate()}}},renderer:n,setTraceUpdatesEnabled:function(e){Q=e},setTrackedPath:Tt,startProfiling:_t,stopProfiling:function(){vt=!1,gt=!1},storeAsGlobal:function(e,t,n){if(ot(e)){var r=de(nt,t),i=\"$reactTemp\".concat(n);window[i]=r,console.log(i),console.log(r)}},updateComponentFilters:function(n){if(vt)throw Error(\"Cannot modify filter preferences while profiling\");e.getFiberRoots(t).forEach((function(e){le=se(ne(e.current)),Ye(e.current),Ge(e.current,!1),le=-1})),Z(n),At.clear(),e.getFiberRoots(t).forEach((function(e){Ot(le=se(ne(e.current)),e.current),$e(e.current,null,!1,!1),Ve(),le=-1}))}}}function qe(e){return(qe=\"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})(e)}function Ge(e,t,n){if(void 0===ze)try{throw Error()}catch(e){var r=e.stack.trim().match(/\\n( *(at )?)/);ze=r&&r[1]||\"\"}return\"\\n\"+ze+e}var $e=!1;function Ye(e,t,n){if(!e||$e)return\"\";var r,i=Error.prepareStackTrace;Error.prepareStackTrace=void 0,$e=!0;var o=n.current;n.current=null;try{if(t){var u=function(){throw Error()};if(Object.defineProperty(u.prototype,\"props\",{set:function(){throw Error()}}),\"object\"===(\"undefined\"==typeof Reflect?\"undefined\":qe(Reflect))&&Reflect.construct){try{Reflect.construct(u,[])}catch(e){r=e}Reflect.construct(e,[],u)}else{try{u.call()}catch(e){r=e}e.call(u.prototype)}}else{try{throw Error()}catch(e){r=e}e()}}catch(e){if(e&&r&&\"string\"==typeof e.stack){for(var a=e.stack.split(\"\\n\"),l=r.stack.split(\"\\n\"),s=a.length-1,c=l.length-1;s>=1&&c>=0&&a[s]!==l[c];)c--;for(;s>=1&&c>=0;s--,c--)if(a[s]!==l[c]){if(1!==s||1!==c)do{if(s--,--c<0||a[s]!==l[c])return\"\\n\"+a[s].replace(\" at new \",\" at \")}while(s>=1&&c>=0);break}}}finally{$e=!1,Error.prepareStackTrace=i,n.current=o}var f=e?e.displayName||e.name:\"\";return f?Ge(f):\"\"}function Ke(e,t,n,r){return Ye(e,!1,r)}function Xe(e,t,n){var r=e.HostComponent,i=e.LazyComponent,o=e.SuspenseComponent,u=e.SuspenseListComponent,a=e.FunctionComponent,l=e.IndeterminateComponent,s=e.SimpleMemoComponent,c=e.ForwardRef,f=e.Block,d=e.ClassComponent;switch(t.tag){case r:return Ge(t.type);case i:return Ge(\"Lazy\");case o:return Ge(\"Suspense\");case u:return Ge(\"SuspenseList\");case a:case l:case s:return Ke(t.type,0,0,n);case c:return Ke(t.type.render,0,0,n);case f:return Ke(t.type._render,0,0,n);case d:return function(e,t,n,r){return Ye(e,!0,r)}(t.type,0,0,n);default:return\"\"}}function Qe(e,t,n){try{var r=\"\",i=t;do{r+=Xe(e,i,n),i=i.return}while(i);return r}catch(e){return\"\\nError generating stack: \"+e.message+\"\\n\"+e.stack}}function Je(e,t){var n;if(\"undefined\"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return Ze(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)?Ze(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}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,u=!0,a=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return u=e.done,e},e:function(e){a=!0,o=e},f:function(){try{u||null==n.return||n.return()}finally{if(a)throw o}}}}function Ze(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var et=[\"error\",\"trace\",\"warn\"],tt=/\\s{4}(in|at)\\s{1}/,nt=/:\\d+:\\d+(\\n|$)/,rt=new Map,it=console,ot={};for(var ut in console)ot[ut]=console[ut];var at=null;function lt(e){var t=e.currentDispatcherRef,n=e.getCurrentFiber,r=e.findFiberByHostInstance,i=e.version;if(\"function\"==typeof r&&null!=t&&\"function\"==typeof n){var o=He(i).ReactTypeOfWork;rt.set(e,{currentDispatcherRef:t,getCurrentFiber:n,workTagMap:o})}}var st={appendComponentStack:!1,breakOnConsoleErrors:!1};function ct(e){var t=e.appendComponentStack,n=e.breakOnConsoleErrors;if(st.appendComponentStack=t,st.breakOnConsoleErrors=n,null===at){var r={};at=function(){for(var e in r)try{it[e]=r[e]}catch(e){}},et.forEach((function(e){try{var t=r[e]=it[e],n=function(){for(var e=st.appendComponentStack,n=(st.breakOnConsoleErrors,arguments.length),r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];if(e)try{var o=r.length>0?r[r.length-1]:null,u=null!==o&&(tt.test(o)||nt.test(o));if(!u){var a,l=Je(rt.values());try{for(l.s();!(a=l.n()).done;){var s=a.value,c=s.currentDispatcherRef,f=s.getCurrentFiber,d=s.workTagMap,p=f();if(null!=p){var h=Qe(d,p,c);\"\"!==h&&r.push(h);break}}}catch(e){l.e(e)}finally{l.f()}}}catch(e){}t.apply(void 0,r)};n.__REACT_DEVTOOLS_ORIGINAL_METHOD__=t,it[e]=n}catch(e){}}))}}function ft(e){return(ft=\"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})(e)}function dt(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 pt(e,t){return(pt=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function ht(e,t){return!t||\"object\"!==ft(t)&&\"function\"!=typeof t?vt(e):t}function vt(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function mt(e){return(mt=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function gt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yt=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&&pt(e,t)}(i,e);var t,n,r=function(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,r=mt(e);if(t){var i=mt(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return ht(this,n)}}(i);function i(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,i),gt(vt(t=r.call(this)),\"_isProfiling\",!1),gt(vt(t),\"_recordChangeDescriptions\",!1),gt(vt(t),\"_rendererInterfaces\",{}),gt(vt(t),\"_persistedSelection\",null),gt(vt(t),\"_persistedSelectionMatch\",null),gt(vt(t),\"_traceUpdatesEnabled\",!1),gt(vt(t),\"copyElementPath\",(function(e){var n=e.id,r=e.path,i=e.rendererID,o=t._rendererInterfaces[i];null==o?console.warn('Invalid renderer id \"'.concat(i,'\" for element \"').concat(n,'\"')):o.copyElementPath(n,r)})),gt(vt(t),\"deletePath\",(function(e){var n=e.hookID,r=e.id,i=e.path,o=e.rendererID,u=e.type,a=t._rendererInterfaces[o];null==a?console.warn('Invalid renderer id \"'.concat(o,'\" for element \"').concat(r,'\"')):a.deletePath(u,r,n,i)})),gt(vt(t),\"getProfilingData\",(function(e){var n=e.rendererID,r=t._rendererInterfaces[n];null==r&&console.warn('Invalid renderer id \"'.concat(n,'\"')),t._bridge.send(\"profilingData\",r.getProfilingData())})),gt(vt(t),\"getProfilingStatus\",(function(){t._bridge.send(\"profilingStatus\",t._isProfiling)})),gt(vt(t),\"getOwnersList\",(function(e){var n=e.id,r=e.rendererID,i=t._rendererInterfaces[r];if(null==i)console.warn('Invalid renderer id \"'.concat(r,'\" for element \"').concat(n,'\"'));else{var o=i.getOwnersList(n);t._bridge.send(\"ownersList\",{id:n,owners:o})}})),gt(vt(t),\"inspectElement\",(function(e){var n=e.id,r=e.path,i=e.rendererID,o=t._rendererInterfaces[i];null==o?console.warn('Invalid renderer id \"'.concat(i,'\" for element \"').concat(n,'\"')):(t._bridge.send(\"inspectedElement\",o.inspectElement(n,r)),null!==t._persistedSelectionMatch&&t._persistedSelectionMatch.id===n||(t._persistedSelection=null,t._persistedSelectionMatch=null,o.setTrackedPath(null),t._throttledPersistSelection(i,n)))})),gt(vt(t),\"logElementToConsole\",(function(e){var n=e.id,r=e.rendererID,i=t._rendererInterfaces[r];null==i?console.warn('Invalid renderer id \"'.concat(r,'\" for element \"').concat(n,'\"')):i.logElementToConsole(n)})),gt(vt(t),\"overrideSuspense\",(function(e){var n=e.id,r=e.rendererID,i=e.forceFallback,o=t._rendererInterfaces[r];null==o?console.warn('Invalid renderer id \"'.concat(r,'\" for element \"').concat(n,'\"')):o.overrideSuspense(n,i)})),gt(vt(t),\"overrideValueAtPath\",(function(e){var n=e.hookID,r=e.id,i=e.path,o=e.rendererID,u=e.type,a=e.value,l=t._rendererInterfaces[o];null==l?console.warn('Invalid renderer id \"'.concat(o,'\" for element \"').concat(r,'\"')):l.overrideValueAtPath(u,r,n,i,a)})),gt(vt(t),\"overrideContext\",(function(e){var n=e.id,r=e.path,i=e.rendererID,o=e.wasForwarded,u=e.value;o||t.overrideValueAtPath({id:n,path:r,rendererID:i,type:\"context\",value:u})})),gt(vt(t),\"overrideHookState\",(function(e){var n=e.id,r=(e.hookID,e.path),i=e.rendererID,o=e.wasForwarded,u=e.value;o||t.overrideValueAtPath({id:n,path:r,rendererID:i,type:\"hooks\",value:u})})),gt(vt(t),\"overrideProps\",(function(e){var n=e.id,r=e.path,i=e.rendererID,o=e.wasForwarded,u=e.value;o||t.overrideValueAtPath({id:n,path:r,rendererID:i,type:\"props\",value:u})})),gt(vt(t),\"overrideState\",(function(e){var n=e.id,r=e.path,i=e.rendererID,o=e.wasForwarded,u=e.value;o||t.overrideValueAtPath({id:n,path:r,rendererID:i,type:\"state\",value:u})})),gt(vt(t),\"reloadAndProfile\",(function(e){f(\"React::DevTools::reloadAndProfile\",\"true\"),f(\"React::DevTools::recordChangeDescriptions\",e?\"true\":\"false\"),t._bridge.send(\"reloadAppForProfiling\")})),gt(vt(t),\"renamePath\",(function(e){var n=e.hookID,r=e.id,i=e.newPath,o=e.oldPath,u=e.rendererID,a=e.type,l=t._rendererInterfaces[u];null==l?console.warn('Invalid renderer id \"'.concat(u,'\" for element \"').concat(r,'\"')):l.renamePath(a,r,n,o,i)})),gt(vt(t),\"setTraceUpdatesEnabled\",(function(e){for(var n in t._traceUpdatesEnabled=e,function(e){(z=e)||(j.clear(),null!==U&&(cancelAnimationFrame(U),U=null),null!==W&&(clearTimeout(W),W=null),null!==F&&(null!=F.parentNode&&F.parentNode.removeChild(F),F=null))}(e),t._rendererInterfaces)t._rendererInterfaces[n].setTraceUpdatesEnabled(e)})),gt(vt(t),\"syncSelectionFromNativeElementsPanel\",(function(){var e=window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$0;null!=e&&t.selectNode(e)})),gt(vt(t),\"shutdown\",(function(){t.emit(\"shutdown\")})),gt(vt(t),\"startProfiling\",(function(e){for(var n in t._recordChangeDescriptions=e,t._isProfiling=!0,t._rendererInterfaces)t._rendererInterfaces[n].startProfiling(e);t._bridge.send(\"profilingStatus\",t._isProfiling)})),gt(vt(t),\"stopProfiling\",(function(){for(var e in t._isProfiling=!1,t._recordChangeDescriptions=!1,t._rendererInterfaces)t._rendererInterfaces[e].stopProfiling();t._bridge.send(\"profilingStatus\",t._isProfiling)})),gt(vt(t),\"storeAsGlobal\",(function(e){var n=e.count,r=e.id,i=e.path,o=e.rendererID,u=t._rendererInterfaces[o];null==u?console.warn('Invalid renderer id \"'.concat(o,'\" for element \"').concat(r,'\"')):u.storeAsGlobal(r,i,n)})),gt(vt(t),\"updateConsolePatchSettings\",(function(e){var t=e.appendComponentStack,n=e.breakOnConsoleErrors;t||n?ct({appendComponentStack:t,breakOnConsoleErrors:n}):null!==at&&(at(),at=null)})),gt(vt(t),\"updateComponentFilters\",(function(e){for(var n in t._rendererInterfaces)t._rendererInterfaces[n].updateComponentFilters(e)})),gt(vt(t),\"viewAttributeSource\",(function(e){var n=e.id,r=e.path,i=e.rendererID,o=t._rendererInterfaces[i];null==o?console.warn('Invalid renderer id \"'.concat(i,'\" for element \"').concat(n,'\"')):o.prepareViewAttributeSource(n,r)})),gt(vt(t),\"viewElementSource\",(function(e){var n=e.id,r=e.rendererID,i=t._rendererInterfaces[r];null==i?console.warn('Invalid renderer id \"'.concat(r,'\" for element \"').concat(n,'\"')):i.prepareViewElementSource(n)})),gt(vt(t),\"onTraceUpdates\",(function(e){t.emit(\"traceUpdates\",e)})),gt(vt(t),\"onHookOperations\",(function(e){if(t._bridge.send(\"operations\",e),null!==t._persistedSelection){var n=e[0];if(t._persistedSelection.rendererID===n){var r=t._rendererInterfaces[n];if(null==r)console.warn('Invalid renderer id \"'.concat(n,'\"'));else{var i=t._persistedSelectionMatch,o=r.getBestMatchForTrackedPath();t._persistedSelectionMatch=o;var u=null!==i?i.id:null,a=null!==o?o.id:null;u!==a&&null!==a&&t._bridge.send(\"selectFiber\",a),null!==o&&o.isFullMatch&&(t._persistedSelection=null,t._persistedSelectionMatch=null,r.setTrackedPath(null))}}}})),gt(vt(t),\"_throttledPersistSelection\",u()((function(e,n){var r=t._rendererInterfaces[e],i=null!=r?r.getPathForElement(n):null;null!==i?f(\"React::DevTools::lastSelection\",JSON.stringify({rendererID:e,path:i})):c(\"React::DevTools::lastSelection\")}),1e3)),\"true\"===s(\"React::DevTools::reloadAndProfile\")&&(t._recordChangeDescriptions=\"true\"===s(\"React::DevTools::recordChangeDescriptions\"),t._isProfiling=!0,c(\"React::DevTools::recordChangeDescriptions\"),c(\"React::DevTools::reloadAndProfile\"));var n=s(\"React::DevTools::lastSelection\");null!=n&&(t._persistedSelection=JSON.parse(n)),t._bridge=e,e.addListener(\"copyElementPath\",t.copyElementPath),e.addListener(\"deletePath\",t.deletePath),e.addListener(\"getProfilingData\",t.getProfilingData),e.addListener(\"getProfilingStatus\",t.getProfilingStatus),e.addListener(\"getOwnersList\",t.getOwnersList),e.addListener(\"inspectElement\",t.inspectElement),e.addListener(\"logElementToConsole\",t.logElementToConsole),e.addListener(\"overrideSuspense\",t.overrideSuspense),e.addListener(\"overrideValueAtPath\",t.overrideValueAtPath),e.addListener(\"reloadAndProfile\",t.reloadAndProfile),e.addListener(\"renamePath\",t.renamePath),e.addListener(\"setTraceUpdatesEnabled\",t.setTraceUpdatesEnabled),e.addListener(\"startProfiling\",t.startProfiling),e.addListener(\"stopProfiling\",t.stopProfiling),e.addListener(\"storeAsGlobal\",t.storeAsGlobal),e.addListener(\"syncSelectionFromNativeElementsPanel\",t.syncSelectionFromNativeElementsPanel),e.addListener(\"shutdown\",t.shutdown),e.addListener(\"updateConsolePatchSettings\",t.updateConsolePatchSettings),e.addListener(\"updateComponentFilters\",t.updateComponentFilters),e.addListener(\"viewAttributeSource\",t.viewAttributeSource),e.addListener(\"viewElementSource\",t.viewElementSource),e.addListener(\"overrideContext\",t.overrideContext),e.addListener(\"overrideHookState\",t.overrideHookState),e.addListener(\"overrideProps\",t.overrideProps),e.addListener(\"overrideState\",t.overrideState),t._isProfiling&&e.send(\"profilingStatus\",!0);var o=!1;try{localStorage.getItem(\"test\"),o=!0}catch(e){}return e.send(\"isBackendStorageAPISupported\",o),function(e,t){function n(e){e&&\"function\"==typeof e.addEventListener&&(e.addEventListener(\"click\",o,!0),e.addEventListener(\"mousedown\",a,!0),e.addEventListener(\"mouseover\",a,!0),e.addEventListener(\"mouseup\",a,!0),e.addEventListener(\"pointerdown\",l,!0),e.addEventListener(\"pointerover\",s,!0),e.addEventListener(\"pointerup\",c,!0))}function r(){I(),i(window),M.forEach((function(e){try{i(e.contentWindow)}catch(e){}})),M=new Set}function i(e){e&&\"function\"==typeof e.removeEventListener&&(e.removeEventListener(\"click\",o,!0),e.removeEventListener(\"mousedown\",a,!0),e.removeEventListener(\"mouseover\",a,!0),e.removeEventListener(\"mouseup\",a,!0),e.removeEventListener(\"pointerdown\",l,!0),e.removeEventListener(\"pointerover\",s,!0),e.removeEventListener(\"pointerup\",c,!0))}function o(t){t.preventDefault(),t.stopPropagation(),r(),e.send(\"stopInspectingNative\",!0)}function a(e){e.preventDefault(),e.stopPropagation()}function l(e){e.preventDefault(),e.stopPropagation(),f(e.target)}function s(e){e.preventDefault(),e.stopPropagation();var t=e.target;if(\"IFRAME\"===t.tagName){var r=t;try{M.has(r)||(n(r.contentWindow),M.add(r))}catch(e){}}N([t],null,!1),f(t)}function c(e){e.preventDefault(),e.stopPropagation()}e.addListener(\"clearNativeElementHighlight\",(function(){I()})),e.addListener(\"highlightNativeElement\",(function(n){var r=n.displayName,i=n.hideAfterTimeout,o=n.id,u=n.openNativeElementsPanel,a=n.rendererID,l=n.scrollIntoView,s=t.rendererInterfaces[a];null==s&&console.warn('Invalid renderer id \"'.concat(a,'\" for element \"').concat(o,'\"'));var c=null;if(null!=s&&(c=s.findNativeNodesForFiberID(o)),null!=c&&null!=c[0]){var f=c[0];l&&\"function\"==typeof f.scrollIntoView&&f.scrollIntoView({block:\"nearest\",inline:\"nearest\"}),N(c,r,i),u&&(window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$0=f,e.send(\"syncSelectionToNativeElementsPanel\"))}else I()})),e.addListener(\"shutdown\",r),e.addListener(\"startInspectingNative\",(function(){n(window)})),e.addListener(\"stopInspectingNative\",r);var f=u()(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d,n=void 0,r=[],i=void 0,o=!1,u=function(e,n){return t(e,r[n])},a=function(){for(var t=arguments.length,a=Array(t),l=0;l<t;l++)a[l]=arguments[l];return o&&n===this&&a.length===r.length&&a.every(u)?i:(o=!0,n=this,r=a,i=e.apply(this,a))};return a}((function(n){var r=t.getIDForNode(n);null!==r&&e.send(\"selectFiber\",r)})),200,{leading:!1})}(e,vt(t)),vt(t).addListener(\"traceUpdates\",H),t}return t=i,(n=[{key:\"getInstanceAndStyle\",value:function(e){var t=e.id,n=e.rendererID,r=this._rendererInterfaces[n];return null==r?(console.warn('Invalid renderer id \"'.concat(n,'\"')),null):r.getInstanceAndStyle(t)}},{key:\"getIDForNode\",value:function(e){for(var t in this._rendererInterfaces){var n=this._rendererInterfaces[t];try{var r=n.getFiberIDForNative(e,!0);if(null!==r)return r}catch(e){}}return null}},{key:\"selectNode\",value:function(e){var t=this.getIDForNode(e);null!==t&&this._bridge.send(\"selectFiber\",t)}},{key:\"setRendererInterface\",value:function(e,t){this._rendererInterfaces[e]=t,this._isProfiling&&t.startProfiling(this._recordChangeDescriptions),t.setTraceUpdatesEnabled(this._traceUpdatesEnabled);var n=this._persistedSelection;null!==n&&n.rendererID===e&&t.setTrackedPath(n.path)}},{key:\"onUnsupportedRenderer\",value:function(e){this._bridge.send(\"unsupportedRendererVersion\",e)}},{key:\"rendererInterfaces\",get:function(){return this._rendererInterfaces}}])&&dt(t.prototype,n),i}(i);function _t(e){return(_t=\"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})(e)}function bt(e){return function(e){if(Array.isArray(e))return wt(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(e){if(\"string\"==typeof e)return wt(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)?wt(e,t):void 0}}(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 wt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Et(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 Dt(e,t){return(Dt=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function St(e,t){return!t||\"object\"!==_t(t)&&\"function\"!=typeof t?Ct(e):t}function Ct(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function kt(e){return(kt=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function Tt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var xt=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&&Dt(e,t)}(i,e);var t,n,r=function(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,r=kt(e);if(t){var i=kt(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return St(this,n)}}(i);function i(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,i),Tt(Ct(t=r.call(this)),\"_isShutdown\",!1),Tt(Ct(t),\"_messageQueue\",[]),Tt(Ct(t),\"_timeoutID\",null),Tt(Ct(t),\"_wallUnlisten\",null),Tt(Ct(t),\"_flush\",(function(){if(null!==t._timeoutID&&(clearTimeout(t._timeoutID),t._timeoutID=null),t._messageQueue.length){for(var e=0;e<t._messageQueue.length;e+=2){var n;(n=t._wall).send.apply(n,[t._messageQueue[e]].concat(bt(t._messageQueue[e+1])))}t._messageQueue.length=0,t._timeoutID=setTimeout(t._flush,100)}})),Tt(Ct(t),\"overrideValueAtPath\",(function(e){var n=e.id,r=e.path,i=e.rendererID,o=e.type,u=e.value;switch(o){case\"context\":t.send(\"overrideContext\",{id:n,path:r,rendererID:i,wasForwarded:!0,value:u});break;case\"hooks\":t.send(\"overrideHookState\",{id:n,path:r,rendererID:i,wasForwarded:!0,value:u});break;case\"props\":t.send(\"overrideProps\",{id:n,path:r,rendererID:i,wasForwarded:!0,value:u});break;case\"state\":t.send(\"overrideState\",{id:n,path:r,rendererID:i,wasForwarded:!0,value:u})}})),t._wall=e,t._wallUnlisten=e.listen((function(e){Ct(t).emit(e.event,e.payload)}))||null,t.addListener(\"overrideValueAtPath\",t.overrideValueAtPath),t}return t=i,(n=[{key:\"send\",value:function(e){if(this._isShutdown)console.warn('Cannot send message \"'.concat(e,'\" through a Bridge that has been shutdown.'));else{for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];this._messageQueue.push(e,n),this._timeoutID||(this._timeoutID=setTimeout(this._flush,0))}}},{key:\"shutdown\",value:function(){if(this._isShutdown)console.warn(\"Bridge was already shutdown.\");else{this.send(\"shutdown\"),this._isShutdown=!0,this.addListener=function(){},this.emit=function(){},this.removeAllListeners();var e=this._wallUnlisten;e&&e();do{this._flush()}while(this._messageQueue.length);null!==this._timeoutID&&(clearTimeout(this._timeoutID),this._timeoutID=null)}}},{key:\"wall\",get:function(){return this._wall}}])&&Et(t.prototype,n),i}(i);function At(e,t,n){var r=e[t];return e[t]=function(e){return n.call(this,r,arguments)},r}function Ot(e,t){for(var n in t)e[n]=t[n]}function Pt(e){\"function\"==typeof e.forceUpdate?e.forceUpdate():null!=e.updater&&\"function\"==typeof e.updater.enqueueForceUpdate&&e.updater.enqueueForceUpdate(this,(function(){}),\"forceUpdate\")}function It(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Nt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?It(Object(n),!0).forEach((function(t){Mt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):It(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Mt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Rt(e){return(Rt=\"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})(e)}function Ft(e){var t=null,n=null;if(null!=e._currentElement){e._currentElement.key&&(n=\"\"+e._currentElement.key);var r=e._currentElement.type;\"string\"==typeof r?t=r:\"function\"==typeof r&&(t=le(r))}return{displayName:t,key:n}}function Lt(e){if(null!=e._currentElement){var t=e._currentElement.type;if(\"function\"==typeof t)return null!==e.getPublicInstance()?1:5;if(\"string\"==typeof t)return 7}return 9}function Bt(e){var t=[];if(\"object\"!==Rt(e));else if(null===e._currentElement||!1===e._currentElement);else if(e._renderedComponent){var n=e._renderedComponent;9!==Lt(n)&&t.push(n)}else if(e._renderedChildren){var r=e._renderedChildren;for(var i in r){var o=r[i];9!==Lt(o)&&t.push(o)}}return t}function jt(e,t){var n=!1,r={bottom:0,left:0,right:0,top:0},i=t[e];if(null!=i){for(var o=0,u=Object.keys(r);o<u.length;o++)r[u[o]]=i;n=!0}var a=t[e+\"Horizontal\"];if(null!=a)r.left=a,r.right=a,n=!0;else{var l=t[e+\"Left\"];null!=l&&(r.left=l,n=!0);var s=t[e+\"Right\"];null!=s&&(r.right=s,n=!0);var c=t[e+\"End\"];null!=c&&(r.right=c,n=!0);var f=t[e+\"Start\"];null!=f&&(r.left=f,n=!0)}var d=t[e+\"Vertical\"];if(null!=d)r.bottom=d,r.top=d,n=!0;else{var p=t[e+\"Bottom\"];null!=p&&(r.bottom=p,n=!0);var h=t[e+\"Top\"];null!=h&&(r.top=h,n=!0)}return n?r:null}function Ut(e){return(Ut=\"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})(e)}function zt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Wt(e,t,n,r){e.addListener(\"NativeStyleEditor_measure\",(function(r){var i=r.id,o=r.rendererID;qt(t,e,n,i,o)})),e.addListener(\"NativeStyleEditor_renameAttribute\",(function(r){var i=r.id,o=r.rendererID,u=r.oldName,a=r.newName,l=r.value;!function(e,t,n,r,i,o){var u,a=e.getInstanceAndStyle({id:t,rendererID:n});if(a&&a.style){var l,s=a.instance,c=a.style,f=i?(zt(u={},r,void 0),zt(u,i,o),u):zt({},r,void 0);if(null!==s&&\"function\"==typeof s.setNativeProps){var d=Vt.get(t);d?Object.assign(d,f):Vt.set(t,f),s.setNativeProps({style:f})}else if(Array.isArray(c)){var p=c.length-1;\"object\"!==Ut(c[p])||Array.isArray(c[p])?e.overrideValueAtPath({type:\"props\",id:t,rendererID:n,path:[\"style\"],value:c.concat([f])}):(delete(l=Gt(c[p]))[r],i?l[i]=o:l[r]=void 0,e.overrideValueAtPath({type:\"props\",id:t,rendererID:n,path:[\"style\",p],value:l}))}else\"object\"===Ut(c)?(delete(l=Gt(c))[r],i?l[i]=o:l[r]=void 0,e.overrideValueAtPath({type:\"props\",id:t,rendererID:n,path:[\"style\"],value:l})):e.overrideValueAtPath({type:\"props\",id:t,rendererID:n,path:[\"style\"],value:[c,f]});e.emit(\"hideNativeHighlight\")}}(t,i,o,u,a,l),setTimeout((function(){return qt(t,e,n,i,o)}))})),e.addListener(\"NativeStyleEditor_setValue\",(function(r){var i=r.id,o=r.rendererID,u=r.name,a=r.value;!function(e,t,n,r,i){var o=e.getInstanceAndStyle({id:t,rendererID:n});if(o&&o.style){var u=o.instance,a=o.style,l=zt({},r,i);if(null!==u&&\"function\"==typeof u.setNativeProps){var s=Vt.get(t);s?Object.assign(s,l):Vt.set(t,l),u.setNativeProps({style:l})}else if(Array.isArray(a)){var c=a.length-1;\"object\"!==Ut(a[c])||Array.isArray(a[c])?e.overrideValueAtPath({type:\"props\",id:t,rendererID:n,path:[\"style\"],value:a.concat([l])}):e.overrideValueAtPath({type:\"props\",id:t,rendererID:n,path:[\"style\",c,r],value:i})}else e.overrideValueAtPath({type:\"props\",id:t,rendererID:n,path:[\"style\"],value:[a,l]});e.emit(\"hideNativeHighlight\")}}(t,i,o,u,a),setTimeout((function(){return qt(t,e,n,i,o)}))})),e.send(\"isNativeStyleEditorSupported\",{isSupported:!0,validAttributes:r})}var Ht={top:0,left:0,right:0,bottom:0},Vt=new Map;function qt(e,t,n,r,i){var o=e.getInstanceAndStyle({id:r,rendererID:i});if(o&&o.style){var u=o.instance,a=n(o.style),l=Vt.get(r);null!=l&&(a=Object.assign({},a,l)),u&&\"function\"==typeof u.measure?u.measure((function(e,n,i,o,u,l){if(\"number\"==typeof e){var s=null!=a&&jt(\"margin\",a)||Ht,c=null!=a&&jt(\"padding\",a)||Ht;t.send(\"NativeStyleEditor_styleAndLayout\",{id:r,layout:{x:e,y:n,width:i,height:o,left:u,top:l,margin:s,padding:c},style:a||null})}else t.send(\"NativeStyleEditor_styleAndLayout\",{id:r,layout:null,style:a||null})})):t.send(\"NativeStyleEditor_styleAndLayout\",{id:r,layout:null,style:a||null})}else t.send(\"NativeStyleEditor_styleAndLayout\",{id:r,layout:null,style:null})}function Gt(e){var t={};for(var n in e)t[n]=e[n];return t}!function(e){if(e.hasOwnProperty(\"__REACT_DEVTOOLS_GLOBAL_HOOK__\"))return null;var t=0,n=!1,r={},i=new Map,o={},u=new Map,a={rendererInterfaces:i,listeners:o,renderers:u,emit:function(e,t){o[e]&&o[e].map((function(e){return e(t)}))},getFiberRoots:function(e){var t=r;return t[e]||(t[e]=new Set),t[e]},inject:function(r){var i=++t;u.set(i,r);var o=n?\"deadcode\":function(e){try{if(\"string\"==typeof e.version)return e.bundleType>0?\"development\":\"production\";var t=Function.prototype.toString;if(e.Mount&&e.Mount._renderNewRootComponent){var n=t.call(e.Mount._renderNewRootComponent);return 0!==n.indexOf(\"function\")?\"production\":-1!==n.indexOf(\"storedMeasure\")?\"development\":-1!==n.indexOf(\"should be a pure function\")?-1!==n.indexOf(\"NODE_ENV\")||-1!==n.indexOf(\"development\")||-1!==n.indexOf(\"true\")?\"development\":-1!==n.indexOf(\"nextElement\")||-1!==n.indexOf(\"nextComponent\")?\"unminified\":\"development\":-1!==n.indexOf(\"nextElement\")||-1!==n.indexOf(\"nextComponent\")?\"unminified\":\"outdated\"}}catch(e){}return\"production\"}(r);try{var l=!1!==window.__REACT_DEVTOOLS_APPEND_COMPONENT_STACK__,s=!0===window.__REACT_DEVTOOLS_BREAK_ON_CONSOLE_ERRORS__;(l||s)&&(lt(r),ct({appendComponentStack:l,breakOnConsoleErrors:s}))}catch(e){}var c=e.__REACT_DEVTOOLS_ATTACH__;if(\"function\"==typeof c){var f=c(a,i,r,e);a.rendererInterfaces.set(i,f)}return a.emit(\"renderer\",{id:i,renderer:r,reactBuildType:o}),i},on:function(e,t){o[e]||(o[e]=[]),o[e].push(t)},off:function(e,t){if(o[e]){var n=o[e].indexOf(t);-1!==n&&o[e].splice(n,1),o[e].length||delete o[e]}},sub:function(e,t){return a.on(e,t),function(){return a.off(e,t)}},supportsFiber:!0,checkDCE:function(e){try{Function.prototype.toString.call(e).indexOf(\"^_^\")>-1&&(n=!0,setTimeout((function(){throw new Error(\"React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build\")})))}catch(e){}},onCommitFiberUnmount:function(e,t){var n=i.get(e);null!=n&&n.handleCommitFiberUnmount(t)},onCommitFiberRoot:function(e,t,n){var r=a.getFiberRoots(e),o=t.current,u=r.has(t),l=null==o.memoizedState||null==o.memoizedState.element;u||l?u&&l&&r.delete(t):r.add(t);var s=i.get(e);null!=s&&s.handleCommitFiberRoot(t,n)}};Object.defineProperty(e,\"__REACT_DEVTOOLS_GLOBAL_HOOK__\",{configurable:!1,enumerable:!1,get:function(){return a}})}(window);var $t=window.__REACT_DEVTOOLS_GLOBAL_HOOK__,Yt=[{type:1,value:7,isEnabled:!0}];function Kt(e){if(null!=$t){var t=e||{},n=t.host,r=void 0===n?\"localhost\":n,i=t.nativeStyleEditorValidAttributes,o=t.useHttps,u=void 0!==o&&o,a=t.port,l=void 0===a?8097:a,s=t.websocket,c=t.resolveRNStyle,f=void 0===c?null:c,d=t.isAppActive,p=u?\"wss\":\"ws\",h=null;if((void 0===d?function(){return!0}:d)()){var v=null,m=[],g=p+\"://\"+r+\":\"+l,y=s||new window.WebSocket(g);y.onclose=function(){null!==v&&v.emit(\"shutdown\"),_()},y.onerror=function(){_()},y.onmessage=function(e){var t;try{if(\"string\"!=typeof e.data)throw Error();t=JSON.parse(e.data)}catch(t){return void console.error(\"[React DevTools] Failed to parse JSON: \"+e.data)}m.forEach((function(e){try{e(t)}catch(e){throw console.log(\"[React DevTools] Error calling listener\",t),console.log(\"error:\",e),e}}))},y.onopen=function(){(v=new xt({listen:function(e){return m.push(e),function(){var t=m.indexOf(e);t>=0&&m.splice(t,1)}},send:function(e,t,n){y.readyState===y.OPEN?y.send(JSON.stringify({event:e,payload:t})):(null!==v&&v.shutdown(),_())}})).addListener(\"inspectElement\",(function(t){var n=t.id,r=t.rendererID,i=e.rendererInterfaces[r];if(null!=i){var o=i.findNativeNodesForFiberID(n);null!=o&&null!=o[0]&&e.emit(\"showNativeHighlight\",o[0])}})),v.addListener(\"updateComponentFilters\",(function(e){Yt=e})),null==window.__REACT_DEVTOOLS_COMPONENT_FILTERS__&&v.send(\"overrideComponentFilters\",Yt);var e=new yt(v);if(e.addListener(\"shutdown\",(function(){$t.emit(\"shutdown\")})),function(e,t,n){if(null==e)return function(){};var r=[e.sub(\"renderer-attached\",(function(e){var n=e.id,r=(e.renderer,e.rendererInterface);t.setRendererInterface(n,r),r.flushInitialOperations()})),e.sub(\"unsupported-renderer-version\",(function(e){t.onUnsupportedRenderer(e)})),e.sub(\"operations\",t.onHookOperations),e.sub(\"traceUpdates\",t.onTraceUpdates)],i=function(t,r){var i=e.rendererInterfaces.get(t);null==i&&(\"function\"==typeof r.findFiberByHostInstance?i=Ve(e,t,r,n):r.ComponentTree&&(i=function(e,t,n,r){var i,o=new Map,u=new WeakMap,a=new WeakMap,l=null;function s(e){if(\"object\"!==Rt(e)||null===e)throw new Error(\"Invalid internal instance: \"+e);if(!u.has(e)){var t=ce();u.set(e,t),o.set(t,e)}return u.get(e)}function c(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}n.ComponentTree?(l=function(e,t){var r=n.ComponentTree.getClosestInstanceFromNode(e);return u.get(r)||null},i=function(e){var t=o.get(e);return n.ComponentTree.getNodeFromInstance(t)}):n.Mount.getID&&n.Mount.getNode&&(l=function(e,t){return null},i=function(e){return null});var f=[],d=null;function p(e,t,n){if(0===n){var r=null!=e._currentElement&&null!=e._currentElement._owner;E(1),E(t),E(11),E(0),E(r?1:0)}else{var i=Lt(e),o=Ft(e),u=o.displayName,a=o.key,l=null!=e._currentElement&&null!=e._currentElement._owner?s(e._currentElement._owner):0,c=D(u),f=D(a);E(1),E(t),E(i),E(n),E(l),E(c),E(f)}}function h(e,t,n){E(3),E(t);var r=n.map(s);E(r.length);for(var i=0;i<r.length;i++)E(r[i])}function v(e,t,n){var r=o.get(e);null!=r&&(a.set(r,n),p(r,e,t),Bt(r).forEach((function(t){return v(s(t),e,n)})))}n.Reconciler&&(d=function(e,t){var n={};for(var r in t)n[r]=At(e,r,t[r]);return n}(n.Reconciler,{mountComponent:function(e,t){var n=t[0],r=t[3];if(9===Lt(n))return e.apply(this,t);if(void 0===r._topLevelWrapper)return e.apply(this,t);var i=s(n);p(n,i,f.length>0?f[f.length-1]:0),f.push(i),a.set(n,s(r._topLevelWrapper));try{var o=e.apply(this,t);return f.pop(),o}catch(e){throw f=[],e}finally{if(0===f.length){var u=a.get(n);if(void 0===u)throw new Error(\"Expected to find root ID.\");w(u)}}},performUpdateIfNecessary:function(e,t){var n=t[0];if(9===Lt(n))return e.apply(this,t);var r=s(n);f.push(r);var i=Bt(n);try{var o=e.apply(this,t),u=Bt(n);return c(i,u)||h(0,r,u),f.pop(),o}catch(e){throw f=[],e}finally{if(0===f.length){var l=a.get(n);if(void 0===l)throw new Error(\"Expected to find root ID.\");w(l)}}},receiveComponent:function(e,t){var n=t[0];if(9===Lt(n))return e.apply(this,t);var r=s(n);f.push(r);var i=Bt(n);try{var o=e.apply(this,t),u=Bt(n);return c(i,u)||h(0,r,u),f.pop(),o}catch(e){throw f=[],e}finally{if(0===f.length){var l=a.get(n);if(void 0===l)throw new Error(\"Expected to find root ID.\");w(l)}}},unmountComponent:function(e,t){var n=t[0];if(9===Lt(n))return e.apply(this,t);var r=s(n);f.push(r);try{var i=e.apply(this,t);return f.pop(),function(e,t){y.push(t),o.delete(t)}(0,r),i}catch(e){throw f=[],e}finally{if(0===f.length){var u=a.get(n);if(void 0===u)throw new Error(\"Expected to find root ID.\");w(u)}}}}));var m=[],g=new Map,y=[],_=0,b=null;function w(n){if(0!==m.length||0!==y.length||null!==b){var r=y.length+(null===b?0:1),i=new Array(3+_+(r>0?2+r:0)+m.length),o=0;if(i[o++]=t,i[o++]=n,i[o++]=_,g.forEach((function(e,t){i[o++]=t.length;for(var n=fe(t),r=0;r<n.length;r++)i[o+r]=n[r];o+=t.length})),r>0){i[o++]=2,i[o++]=r;for(var u=0;u<y.length;u++)i[o++]=y[u];null!==b&&(i[o]=b,o++)}for(var a=0;a<m.length;a++)i[o+a]=m[a];o+=m.length,e.emit(\"operations\",i),m.length=0,y=[],b=null,g.clear(),_=0}}function E(e){m.push(e)}function D(e){if(null===e)return 0;var t=g.get(e);if(void 0!==t)return t;var n=g.size+1;return g.set(e,n),_+=e.length+1,n}var S=null,C={};function k(e){return function(t){var n=C[e];if(!n)return!1;for(var r=0;r<t.length;r++)if(!(n=n[t[r]]))return!1;return!0}}function T(e){var t=o.get(e);if(null==t)return null;var n=Ft(t),r=n.displayName,i=n.key,u=Lt(t),a=null,l=null,c=null,f=null,d=null,p=t._currentElement;if(null!==p){c=p.props,d=null!=p._source?p._source:null;var h=p._owner;if(h)for(l=[];null!=h;)l.push({displayName:Ft(h).displayName||\"Unknown\",id:s(h),type:Lt(h)}),h._currentElement&&(h=h._currentElement._owner)}var v=t._instance;return null!=v&&(a=v.context||null,f=v.state||null),{id:e,canEditHooks:!1,canEditFunctionProps:!1,canEditHooksAndDeletePaths:!1,canEditHooksAndRenamePaths:!1,canEditFunctionPropsDeletePaths:!1,canEditFunctionPropsRenamePaths:!1,canToggleSuspense:!1,canViewSource:1===u||5===u,hasLegacyContext:!0,displayName:r,type:u,key:null!=i?i:null,context:a,hooks:null,props:c,state:f,owners:l,source:d,rootType:null,rendererPackageName:null,rendererVersion:null}}return{cleanup:function(){null!==d&&(n.Component?Ot(n.Component.Mixin,d):Ot(n.Reconciler,d)),d=null},copyElementPath:function(e,t){var n=T(e);null!==n&&ke(de(n,t))},deletePath:function(e,t,n,r){var i=o.get(t);if(null!=i){var u=i._instance;if(null!=u)switch(e){case\"context\":pe(u.context,r),Pt(u);break;case\"hooks\":throw new Error(\"Hooks not supported by this renderer\");case\"props\":var a=i._currentElement;i._currentElement=Nt(Nt({},a),{},{props:Te(a.props,r)}),Pt(u);break;case\"state\":pe(u.state,r),Pt(u)}}},flushInitialOperations:function(){var e=n.Mount._instancesByReactRootID||n.Mount._instancesByContainerID;for(var t in e){var r=s(e[t]);v(r,0,r),w(r)}},getBestMatchForTrackedPath:function(){return null},getDisplayNameForFiberID:function(e){var t=o.get(e);return t?Ft(t).displayName:null},getFiberIDForNative:l,getInstanceAndStyle:function(e){var t=null,n=null,r=o.get(e);if(null!=r){t=r._instance||null;var i=r._currentElement;null!=i&&null!=i.props&&(n=i.props.style||null)}return{instance:t,style:n}},findNativeNodesForFiberID:function(e){var t=i(e);return null==t?null:[t]},getOwnersList:function(e){return null},getPathForElement:function(e){return null},getProfilingData:function(){throw new Error(\"getProfilingData not supported by this renderer\")},handleCommitFiberRoot:function(){throw new Error(\"handleCommitFiberRoot not supported by this renderer\")},handleCommitFiberUnmount:function(){throw new Error(\"handleCommitFiberUnmount not supported by this renderer\")},inspectElement:function(e,t){S!==e&&(S=e,C={});var n=T(e);return null===n?{id:e,type:\"not-found\"}:(null!=t&&function(e){var t=C;e.forEach((function(e){t[e]||(t[e]={}),t=t[e]}))}(t),function(e){var t=o.get(e);if(null!=t)switch(Lt(t)){case 1:r.$r=t._instance;break;case 5:var n=t._currentElement;if(null==n)return void console.warn('Could not find element with id \"'.concat(e,'\"'));r.$r={props:n.props,type:n.type};break;default:r.$r=null}else console.warn('Could not find instance with id \"'.concat(e,'\"'))}(e),n.context=Ce(n.context,k(\"context\")),n.props=Ce(n.props,k(\"props\")),n.state=Ce(n.state,k(\"state\")),{id:e,type:\"full-data\",value:n})},logElementToConsole:function(e){var t=T(e);if(null!==t){var n=\"function\"==typeof console.groupCollapsed;n&&console.groupCollapsed(\"[Click to expand] %c<\".concat(t.displayName||\"Component\",\" />\"),\"color: var(--dom-tag-name-color); font-weight: normal;\"),null!==t.props&&console.log(\"Props:\",t.props),null!==t.state&&console.log(\"State:\",t.state),null!==t.context&&console.log(\"Context:\",t.context);var r=i(e);null!==r&&console.log(\"Node:\",r),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log(\"Right-click any value to save it as a global variable for further inspection.\"),n&&console.groupEnd()}else console.warn('Could not find element with id \"'.concat(e,'\"'))},overrideSuspense:function(){throw new Error(\"overrideSuspense not supported by this renderer\")},overrideValueAtPath:function(e,t,n,r,i){var u=o.get(t);if(null!=u){var a=u._instance;if(null!=a)switch(e){case\"context\":ve(a.context,r,i),Pt(a);break;case\"hooks\":throw new Error(\"Hooks not supported by this renderer\");case\"props\":var l=u._currentElement;u._currentElement=Nt(Nt({},l),{},{props:Ae(l.props,r,i)}),Pt(a);break;case\"state\":ve(a.state,r,i),Pt(a)}}},renamePath:function(e,t,n,r,i){var u=o.get(t);if(null!=u){var a=u._instance;if(null!=a)switch(e){case\"context\":he(a.context,r,i),Pt(a);break;case\"hooks\":throw new Error(\"Hooks not supported by this renderer\");case\"props\":var l=u._currentElement;u._currentElement=Nt(Nt({},l),{},{props:xe(l.props,r,i)}),Pt(a);break;case\"state\":he(a.state,r,i),Pt(a)}}},prepareViewAttributeSource:function(e,t){var n=T(e);null!==n&&(window.$attribute=de(n,t))},prepareViewElementSource:function(e){var t=o.get(e);if(null!=t){var n=t._currentElement;null!=n?r.$type=n.type:console.warn('Could not find element with id \"'.concat(e,'\"'))}else console.warn('Could not find instance with id \"'.concat(e,'\"'))},renderer:n,setTraceUpdatesEnabled:function(e){},setTrackedPath:function(e){},startProfiling:function(){},stopProfiling:function(){},storeAsGlobal:function(e,t,n){var r=T(e);if(null!==r){var i=de(r,t),o=\"$reactTemp\".concat(n);window[o]=i,console.log(o),console.log(i)}},updateComponentFilters:function(e){}}}(e,t,r,n)),null!=i&&e.rendererInterfaces.set(t,i)),null!=i?e.emit(\"renderer-attached\",{id:t,renderer:r,rendererInterface:i}):e.emit(\"unsupported-renderer-version\",t)};e.renderers.forEach((function(e,t){i(t,e)})),r.push(e.sub(\"renderer\",(function(e){var t=e.id,n=e.renderer;i(t,n)}))),e.emit(\"react-devtools\",t),e.reactDevtoolsAgent=t;var o=function(){r.forEach((function(e){return e()})),e.rendererInterfaces.forEach((function(e){e.cleanup()})),e.reactDevtoolsAgent=null};t.addListener(\"shutdown\",o),r.push((function(){t.removeListener(\"shutdown\",o)}))}($t,e,window),null!=f||null!=$t.resolveRNStyle)Wt(v,e,f||$t.resolveRNStyle,i||$t.nativeStyleEditorValidAttributes||null);else{var t,n,r=function(){null!==v&&Wt(v,e,t,n)};$t.hasOwnProperty(\"resolveRNStyle\")||Object.defineProperty($t,\"resolveRNStyle\",{enumerable:!1,get:function(){return t},set:function(e){t=e,r()}}),$t.hasOwnProperty(\"nativeStyleEditorValidAttributes\")||Object.defineProperty($t,\"nativeStyleEditorValidAttributes\",{enumerable:!1,get:function(){return n},set:function(e){n=e,r()}})}}}else _()}function _(){null===h&&(h=setTimeout((function(){return Kt(e)}),2e3))}}}])},6099:(e,t,n)=>{\"use strict\";\n/** @license React v16.13.1\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */var r=n(9381),i=\"function\"==typeof Symbol&&Symbol.for,o=i?Symbol.for(\"react.element\"):60103,u=i?Symbol.for(\"react.portal\"):60106,a=i?Symbol.for(\"react.fragment\"):60107,l=i?Symbol.for(\"react.strict_mode\"):60108,s=i?Symbol.for(\"react.profiler\"):60114,c=i?Symbol.for(\"react.provider\"):60109,f=i?Symbol.for(\"react.context\"):60110,d=i?Symbol.for(\"react.forward_ref\"):60112,p=i?Symbol.for(\"react.suspense\"):60113,h=i?Symbol.for(\"react.memo\"):60115,v=i?Symbol.for(\"react.lazy\"):60116,m=\"function\"==typeof Symbol&&Symbol.iterator;function g(e){for(var t=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,n=1;n<arguments.length;n++)t+=\"&args[]=\"+encodeURIComponent(arguments[n]);return\"Minified React error #\"+e+\"; visit \"+t+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_={};function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||y}function w(){}function E(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||y}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if(\"object\"!=typeof e&&\"function\"!=typeof e&&null!=e)throw Error(g(85));this.updater.enqueueSetState(this,e,t,\"setState\")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")},w.prototype=b.prototype;var D=E.prototype=new w;D.constructor=E,r(D,b.prototype),D.isPureReactComponent=!0;var S={current:null},C=Object.prototype.hasOwnProperty,k={key:!0,ref:!0,__self:!0,__source:!0};function T(e,t,n){var r,i={},u=null,a=null;if(null!=t)for(r in void 0!==t.ref&&(a=t.ref),void 0!==t.key&&(u=\"\"+t.key),t)C.call(t,r)&&!k.hasOwnProperty(r)&&(i[r]=t[r]);var l=arguments.length-2;if(1===l)i.children=n;else if(1<l){for(var s=Array(l),c=0;c<l;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in l=e.defaultProps)void 0===i[r]&&(i[r]=l[r]);return{$$typeof:o,type:e,key:u,ref:a,props:i,_owner:S.current}}function x(e){return\"object\"==typeof e&&null!==e&&e.$$typeof===o}var A=/\\/+/g,O=[];function P(e,t,n,r){if(O.length){var i=O.pop();return i.result=e,i.keyPrefix=t,i.func=n,i.context=r,i.count=0,i}return{result:e,keyPrefix:t,func:n,context:r,count:0}}function I(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>O.length&&O.push(e)}function N(e,t,n){return null==e?0:function e(t,n,r,i){var a=typeof t;\"undefined\"!==a&&\"boolean\"!==a||(t=null);var l=!1;if(null===t)l=!0;else switch(a){case\"string\":case\"number\":l=!0;break;case\"object\":switch(t.$$typeof){case o:case u:l=!0}}if(l)return r(i,t,\"\"===n?\".\"+M(t,0):n),1;if(l=0,n=\"\"===n?\".\":n+\":\",Array.isArray(t))for(var s=0;s<t.length;s++){var c=n+M(a=t[s],s);l+=e(a,c,r,i)}else if(null===t||\"object\"!=typeof t?c=null:c=\"function\"==typeof(c=m&&t[m]||t[\"@@iterator\"])?c:null,\"function\"==typeof c)for(t=c.call(t),s=0;!(a=t.next()).done;)l+=e(a=a.value,c=n+M(a,s++),r,i);else if(\"object\"===a)throw r=\"\"+t,Error(g(31,\"[object Object]\"===r?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":r,\"\"));return l}(e,\"\",t,n)}function M(e,t){return\"object\"==typeof e&&null!==e&&null!=e.key?function(e){var t={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+e).replace(/[=:]/g,(function(e){return t[e]}))}(e.key):t.toString(36)}function R(e,t){e.func.call(e.context,t,e.count++)}function F(e,t,n){var r=e.result,i=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?L(e,r,n,(function(e){return e})):null!=e&&(x(e)&&(e=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,i+(!e.key||t&&t.key===e.key?\"\":(\"\"+e.key).replace(A,\"$&/\")+\"/\")+n)),r.push(e))}function L(e,t,n,r,i){var o=\"\";null!=n&&(o=(\"\"+n).replace(A,\"$&/\")+\"/\"),N(e,F,t=P(t,o,r,i)),I(t)}var B={current:null};function j(){var e=B.current;if(null===e)throw Error(g(321));return e}var U={ReactCurrentDispatcher:B,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:S,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:function(e,t,n){if(null==e)return e;var r=[];return L(e,r,null,t,n),r},forEach:function(e,t,n){if(null==e)return e;N(e,R,t=P(null,null,t,n)),I(t)},count:function(e){return N(e,(function(){return null}),null)},toArray:function(e){var t=[];return L(e,t,null,(function(e){return e})),t},only:function(e){if(!x(e))throw Error(g(143));return e}},t.Component=b,t.Fragment=a,t.Profiler=s,t.PureComponent=E,t.StrictMode=l,t.Suspense=p,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=U,t.cloneElement=function(e,t,n){if(null==e)throw Error(g(267,e));var i=r({},e.props),u=e.key,a=e.ref,l=e._owner;if(null!=t){if(void 0!==t.ref&&(a=t.ref,l=S.current),void 0!==t.key&&(u=\"\"+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(c in t)C.call(t,c)&&!k.hasOwnProperty(c)&&(i[c]=void 0===t[c]&&void 0!==s?s[c]:t[c])}var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){s=Array(c);for(var f=0;f<c;f++)s[f]=arguments[f+2];i.children=s}return{$$typeof:o,type:e.type,key:u,ref:a,props:i,_owner:l}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:f,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:c,_context:e},e.Consumer=e},t.createElement=T,t.createFactory=function(e){var t=T.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:d,render:e}},t.isValidElement=x,t.lazy=function(e){return{$$typeof:v,_ctor:e,_status:-1,_result:null}},t.memo=function(e,t){return{$$typeof:h,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return j().useCallback(e,t)},t.useContext=function(e,t){return j().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return j().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return j().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return j().useLayoutEffect(e,t)},t.useMemo=function(e,t){return j().useMemo(e,t)},t.useReducer=function(e,t,n){return j().useReducer(e,t,n)},t.useRef=function(e){return j().useRef(e)},t.useState=function(e){return j().useState(e)},t.version=\"16.13.1\"},7382:(e,t,n)=>{\"use strict\";e.exports=n(6099)},3390:(e,t,n)=>{\"use strict\";const r=n(834),i=n(6458);e.exports=r(()=>{i(()=>{process.stderr.write(\"\u001b[?25h\")},{alwaysLast:!0})})},706:(e,t)=>{\"use strict\";\n/** @license React v0.18.0\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */var n,r,i,o,u;if(Object.defineProperty(t,\"__esModule\",{value:!0}),\"undefined\"==typeof window||\"function\"!=typeof MessageChannel){var a=null,l=null,s=function(){if(null!==a)try{var e=t.unstable_now();a(!0,e),a=null}catch(e){throw setTimeout(s,0),e}},c=Date.now();t.unstable_now=function(){return Date.now()-c},n=function(e){null!==a?setTimeout(n,0,e):(a=e,setTimeout(s,0))},r=function(e,t){l=setTimeout(e,t)},i=function(){clearTimeout(l)},o=function(){return!1},u=t.unstable_forceFrameRate=function(){}}else{var f=window.performance,d=window.Date,p=window.setTimeout,h=window.clearTimeout;if(\"undefined\"!=typeof console){var v=window.cancelAnimationFrame;\"function\"!=typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"),\"function\"!=typeof v&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\")}if(\"object\"==typeof f&&\"function\"==typeof f.now)t.unstable_now=function(){return f.now()};else{var m=d.now();t.unstable_now=function(){return d.now()-m}}var g=!1,y=null,_=-1,b=5,w=0;o=function(){return t.unstable_now()>=w},u=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported\"):b=0<e?Math.floor(1e3/e):5};var E=new MessageChannel,D=E.port2;E.port1.onmessage=function(){if(null!==y){var e=t.unstable_now();w=e+b;try{y(!0,e)?D.postMessage(null):(g=!1,y=null)}catch(e){throw D.postMessage(null),e}}else g=!1},n=function(e){y=e,g||(g=!0,D.postMessage(null))},r=function(e,n){_=p((function(){e(t.unstable_now())}),n)},i=function(){h(_),_=-1}}function S(e,t){var n=e.length;e.push(t);e:for(;;){var r=Math.floor((n-1)/2),i=e[r];if(!(void 0!==i&&0<T(i,t)))break e;e[r]=t,e[n]=i,n=r}}function C(e){return void 0===(e=e[0])?null:e}function k(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,i=e.length;r<i;){var o=2*(r+1)-1,u=e[o],a=o+1,l=e[a];if(void 0!==u&&0>T(u,n))void 0!==l&&0>T(l,u)?(e[r]=l,e[a]=n,r=a):(e[r]=u,e[o]=n,r=o);else{if(!(void 0!==l&&0>T(l,n)))break e;e[r]=l,e[a]=n,r=a}}}return t}return null}function T(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var x=[],A=[],O=1,P=null,I=3,N=!1,M=!1,R=!1;function F(e){for(var t=C(A);null!==t;){if(null===t.callback)k(A);else{if(!(t.startTime<=e))break;k(A),t.sortIndex=t.expirationTime,S(x,t)}t=C(A)}}function L(e){if(R=!1,F(e),!M)if(null!==C(x))M=!0,n(B);else{var t=C(A);null!==t&&r(L,t.startTime-e)}}function B(e,n){M=!1,R&&(R=!1,i()),N=!0;var u=I;try{for(F(n),P=C(x);null!==P&&(!(P.expirationTime>n)||e&&!o());){var a=P.callback;if(null!==a){P.callback=null,I=P.priorityLevel;var l=a(P.expirationTime<=n);n=t.unstable_now(),\"function\"==typeof l?P.callback=l:P===C(x)&&k(x),F(n)}else k(x);P=C(x)}if(null!==P)var s=!0;else{var c=C(A);null!==c&&r(L,c.startTime-n),s=!1}return s}finally{P=null,I=u,N=!1}}function j(e){switch(e){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var U=u;t.unstable_ImmediatePriority=1,t.unstable_UserBlockingPriority=2,t.unstable_NormalPriority=3,t.unstable_IdlePriority=5,t.unstable_LowPriority=4,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_scheduleCallback=function(e,o,u){var a=t.unstable_now();if(\"object\"==typeof u&&null!==u){var l=u.delay;l=\"number\"==typeof l&&0<l?a+l:a,u=\"number\"==typeof u.timeout?u.timeout:j(e)}else u=j(e),l=a;return e={id:O++,callback:o,priorityLevel:e,startTime:l,expirationTime:u=l+u,sortIndex:-1},l>a?(e.sortIndex=l,S(A,e),null===C(x)&&e===C(A)&&(R?i():R=!0,r(L,l-a))):(e.sortIndex=u,S(x,e),M||N||(M=!0,n(B))),e},t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_shouldYield=function(){var e=t.unstable_now();F(e);var n=C(x);return n!==P&&null!==P&&null!==n&&null!==n.callback&&n.startTime<=e&&n.expirationTime<P.expirationTime||o()},t.unstable_requestPaint=U,t.unstable_continueExecution=function(){M||N||(M=!0,n(B))},t.unstable_pauseExecution=function(){},t.unstable_getFirstCallbackNode=function(){return C(x)},t.unstable_Profiling=null},7181:(e,t,n)=>{\"use strict\";e.exports=n(706)},6458:(e,t,n)=>{var r,i=n(2357),o=n(8082),u=n(8614);function a(){c&&(c=!1,o.forEach((function(e){try{process.removeListener(e,s[e])}catch(e){}})),process.emit=h,process.reallyExit=d,r.count-=1)}function l(e,t,n){r.emitted[e]||(r.emitted[e]=!0,r.emit(e,t,n))}\"function\"!=typeof u&&(u=u.EventEmitter),process.__signal_exit_emitter__?r=process.__signal_exit_emitter__:((r=process.__signal_exit_emitter__=new u).count=0,r.emitted={}),r.infinite||(r.setMaxListeners(1/0),r.infinite=!0),e.exports=function(e,t){i.equal(typeof e,\"function\",\"a callback must be provided for exit handler\"),!1===c&&f();var n=\"exit\";t&&t.alwaysLast&&(n=\"afterexit\");return r.on(n,e),function(){r.removeListener(n,e),0===r.listeners(\"exit\").length&&0===r.listeners(\"afterexit\").length&&a()}},e.exports.unload=a;var s={};o.forEach((function(e){s[e]=function(){process.listeners(e).length===r.count&&(a(),l(\"exit\",null,e),l(\"afterexit\",null,e),process.kill(process.pid,e))}})),e.exports.signals=function(){return o},e.exports.load=f;var c=!1;function f(){c||(c=!0,r.count+=1,o=o.filter((function(e){try{return process.on(e,s[e]),!0}catch(e){return!1}})),process.emit=v,process.reallyExit=p)}var d=process.reallyExit;function p(e){process.exitCode=e||0,l(\"exit\",process.exitCode,null),l(\"afterexit\",process.exitCode,null),d.call(process,process.exitCode)}var h=process.emit;function v(e,t){if(\"exit\"===e){void 0!==t&&(process.exitCode=t);var n=h.apply(this,arguments);return l(\"exit\",process.exitCode,null),l(\"afterexit\",process.exitCode,null),n}return h.apply(this,arguments)}},8082:e=>{e.exports=[\"SIGABRT\",\"SIGALRM\",\"SIGHUP\",\"SIGINT\",\"SIGTERM\"],\"win32\"!==process.platform&&e.exports.push(\"SIGVTALRM\",\"SIGXCPU\",\"SIGXFSZ\",\"SIGUSR2\",\"SIGTRAP\",\"SIGSYS\",\"SIGQUIT\",\"SIGIOT\"),\"linux\"===process.platform&&e.exports.push(\"SIGIO\",\"SIGPOLL\",\"SIGPWR\",\"SIGSTKFLT\",\"SIGUNUSED\")},1566:(e,t,n)=>{\"use strict\";const r=n(7347),i=n(409),o=n(8483),u=[\"\u001b\",\"\"],a=e=>`${u[0]}[${e}m`,l=(e,t,n)=>{let r=[];e=[...e];for(let n of e){const i=n;n.match(\";\")&&(n=n.split(\";\")[0][0]+\"0\");const u=o.codes.get(parseInt(n,10));if(u){const n=e.indexOf(u.toString());n>=0?e.splice(n,1):r.push(a(t?u:i))}else{if(t){r.push(a(0));break}r.push(a(i))}}if(t&&(r=r.filter((e,t)=>r.indexOf(e)===t),void 0!==n)){const e=a(o.codes.get(parseInt(n,10)));r=r.reduce((t,n)=>n===e?[n,...t]:[...t,n],[])}return r.join(\"\")};e.exports=(e,t,n)=>{const o=[...e.normalize()],a=[];n=\"number\"==typeof n?n:o.length;let s,c=!1,f=0,d=\"\";for(const[p,h]of o.entries()){let o=!1;if(u.includes(h)){const t=/\\d[^m]*/.exec(e.slice(p,p+18));s=t&&t.length>0?t[0]:void 0,f<n&&(c=!0,void 0!==s&&a.push(s))}else c&&\"m\"===h&&(c=!1,o=!0);if(c||o||++f,!i({exact:!0}).test(h)&&r(h.codePointAt())&&++f,f>t&&f<=n)d+=h;else if(f!==t||c||void 0===s){if(f>=n){d+=l(a,!0,s);break}}else d=l(a)}return d}},9796:(e,t,n)=>{\"use strict\";const r=n(8759),i=[].concat(n(2282).builtinModules,\"bootstrap_node\",\"node\").map(e=>new RegExp(`(?:\\\\(${e}\\\\.js:\\\\d+:\\\\d+\\\\)$|^\\\\s*at ${e}\\\\.js:\\\\d+:\\\\d+$)`));i.push(/\\(internal\\/[^:]+:\\d+:\\d+\\)$/,/\\s*at internal\\/[^:]+:\\d+:\\d+$/,/\\/\\.node-spawn-wrap-\\w+-\\w+\\/node:\\d+:\\d+\\)?$/);class o{constructor(e){\"internals\"in(e={ignoredPackages:[],...e})==!1&&(e.internals=o.nodeInternals()),\"cwd\"in e==!1&&(e.cwd=process.cwd()),this._cwd=e.cwd.replace(/\\\\/g,\"/\"),this._internals=[].concat(e.internals,function(e){if(0===e.length)return[];const t=e.map(e=>r(e));return new RegExp(`[/\\\\\\\\]node_modules[/\\\\\\\\](?:${t.join(\"|\")})[/\\\\\\\\][^:]+:\\\\d+:\\\\d+`)}(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...i]}clean(e,t=0){t=\" \".repeat(t),Array.isArray(e)||(e=e.split(\"\\n\")),!/^\\s*at /.test(e[0])&&/^\\s*at /.test(e[1])&&(e=e.slice(1));let n=!1,r=null;const i=[];return e.forEach(e=>{if(e=e.replace(/\\\\/g,\"/\"),this._internals.some(t=>t.test(e)))return;const t=/^\\s*at /.test(e);n?e=e.trimEnd().replace(/^(\\s+)at /,\"$1\"):(e=e.trim(),t&&(e=e.slice(3))),(e=e.replace(this._cwd+\"/\",\"\"))&&(t?(r&&(i.push(r),r=null),i.push(e)):(n=!0,r=e))}),i.map(e=>`${t}${e}\\n`).join(\"\")}captureString(e,t=this.captureString){\"function\"==typeof e&&(t=e,e=1/0);const{stackTraceLimit:n}=Error;e&&(Error.stackTraceLimit=e);const r={};Error.captureStackTrace(r,t);const{stack:i}=r;return Error.stackTraceLimit=n,this.clean(i)}capture(e,t=this.capture){\"function\"==typeof e&&(t=e,e=1/0);const{prepareStackTrace:n,stackTraceLimit:r}=Error;Error.prepareStackTrace=(e,t)=>this._wrapCallSite?t.map(this._wrapCallSite):t,e&&(Error.stackTraceLimit=e);const i={};Error.captureStackTrace(i,t);const{stack:o}=i;return Object.assign(Error,{prepareStackTrace:n,stackTraceLimit:r}),o}at(e=this.at){const[t]=this.capture(1,e);if(!t)return{};const n={line:t.getLineNumber(),column:t.getColumnNumber()};let r;u(n,t.getFileName(),this._cwd),t.isConstructor()&&(n.constructor=!0),t.isEval()&&(n.evalOrigin=t.getEvalOrigin()),t.isNative()&&(n.native=!0);try{r=t.getTypeName()}catch(e){}r&&\"Object\"!==r&&\"[object Object]\"!==r&&(n.type=r);const i=t.getFunctionName();i&&(n.function=i);const o=t.getMethodName();return o&&i!==o&&(n.method=o),n}parseLine(e){const t=e&&e.match(a);if(!t)return null;const n=\"new\"===t[1];let r=t[2];const i=t[3],o=t[4],s=Number(t[5]),c=Number(t[6]);let f=t[7];const d=t[8],p=t[9],h=\"native\"===t[10],v=\")\"===t[11];let m;const g={};if(d&&(g.line=Number(d)),p&&(g.column=Number(p)),v&&f){let e=0;for(let t=f.length-1;t>0;t--)if(\")\"===f.charAt(t))e++;else if(\"(\"===f.charAt(t)&&\" \"===f.charAt(t-1)&&(e--,-1===e&&\" \"===f.charAt(t-1))){const e=f.slice(0,t-1),n=f.slice(t+1);f=n,r+=\" (\"+e;break}}if(r){const e=r.match(l);e&&(r=e[1],m=e[2])}return u(g,f,this._cwd),n&&(g.constructor=!0),i&&(g.evalOrigin=i,g.evalLine=s,g.evalColumn=c,g.evalFile=o&&o.replace(/\\\\/g,\"/\")),h&&(g.native=!0),r&&(g.function=r),m&&r!==m&&(g.method=m),g}}function u(e,t,n){t&&((t=t.replace(/\\\\/g,\"/\")).startsWith(n+\"/\")&&(t=t.slice(n.length+1)),e.file=t)}const a=new RegExp(\"^(?:\\\\s*at )?(?:(new) )?(?:(.*?) \\\\()?(?:eval at ([^ ]+) \\\\((.+?):(\\\\d+):(\\\\d+)\\\\), )?(?:(.+?):(\\\\d+):(\\\\d+)|(native))(\\\\)?)$\"),l=/^(.*?) \\[as (.*?)\\]$/;e.exports=o},3262:(e,t,n)=>{\"use strict\";const r=n(7402),i=n(5640),o=e=>r(e).replace(i(),\" \").length;e.exports=o,e.exports.default=o},5043:(e,t,n)=>{\"use strict\";const r=n(7915),i=n(7347),o=n(1013),u=e=>{if(\"string\"!=typeof(e=e.replace(o(),\"  \"))||0===e.length)return 0;e=r(e);let t=0;for(let n=0;n<e.length;n++){const r=e.codePointAt(n);r<=31||r>=127&&r<=159||(r>=768&&r<=879||(r>65535&&n++,t+=i(r)?2:1))}return t};e.exports=u,e.exports.default=u},7402:(e,t,n)=>{\"use strict\";const r=n(5378),i=e=>\"string\"==typeof e?e.replace(r(),\"\"):e;e.exports=i,e.exports.default=i},7915:(e,t,n)=>{\"use strict\";const r=n(1337);e.exports=e=>\"string\"==typeof e?e.replace(r(),\"\"):e},9428:(e,t,n)=>{\"use strict\";const r=n(2087),i=n(3867),o=n(2918),{env:u}=process;let a;function l(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function s(e,t){if(0===a)return 0;if(o(\"color=16m\")||o(\"color=full\")||o(\"color=truecolor\"))return 3;if(o(\"color=256\"))return 2;if(e&&!t&&void 0===a)return 0;const n=a||0;if(\"dumb\"===u.TERM)return n;if(\"win32\"===process.platform){const e=r.release().split(\".\");return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if(\"CI\"in u)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\"].some(e=>e in u)||\"codeship\"===u.CI_NAME?1:n;if(\"TEAMCITY_VERSION\"in u)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(u.TEAMCITY_VERSION)?1:0;if(\"GITHUB_ACTIONS\"in u)return 1;if(\"truecolor\"===u.COLORTERM)return 3;if(\"TERM_PROGRAM\"in u){const e=parseInt((u.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(u.TERM_PROGRAM){case\"iTerm.app\":return e>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(u.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(u.TERM)||\"COLORTERM\"in u?1:n}o(\"no-color\")||o(\"no-colors\")||o(\"color=false\")||o(\"color=never\")?a=0:(o(\"color\")||o(\"colors\")||o(\"color=true\")||o(\"color=always\"))&&(a=1),\"FORCE_COLOR\"in u&&(a=\"true\"===u.FORCE_COLOR?1:\"false\"===u.FORCE_COLOR?0:0===u.FORCE_COLOR.length?1:Math.min(parseInt(u.FORCE_COLOR,10),3)),e.exports={supportsColor:function(e){return l(s(e,e&&e.isTTY))},stdout:l(s(!0,i.isatty(1))),stderr:l(s(!0,i.isatty(2)))}},8949:(e,t,n)=>{\"use strict\";const r=n(5043),i=e=>{let t=0;for(const n of e.split(\"\\n\"))t=Math.max(t,r(n));return t};e.exports=i,e.exports.default=i},4332:(e,t,n)=>{\"use strict\";const r=n(5043),i=n(7915),o=n(8483),u=new Set([\"\u001b\",\"\"]),a=e=>`${u.values().next().value}[${e}m`,l=(e,t,n)=>{const o=[...t];let a=!1,l=r(i(e[e.length-1]));for(const[t,i]of o.entries()){const s=r(i);if(l+s<=n?e[e.length-1]+=i:(e.push(i),l=0),u.has(i))a=!0;else if(a&&\"m\"===i){a=!1;continue}a||(l+=s,l===n&&t<o.length-1&&(e.push(\"\"),l=0))}!l&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},s=e=>{const t=e.split(\" \");let n=t.length;for(;n>0&&!(r(t[n-1])>0);)n--;return n===t.length?e:t.slice(0,n).join(\" \")+t.slice(n).join(\"\")},c=(e,t,n={})=>{if(!1!==n.trim&&\"\"===e.trim())return\"\";let i,c=\"\",f=\"\";const d=(e=>e.split(\" \").map(e=>r(e)))(e);let p=[\"\"];for(const[i,o]of e.split(\" \").entries()){!1!==n.trim&&(p[p.length-1]=p[p.length-1].trimLeft());let e=r(p[p.length-1]);if(0!==i&&(e>=t&&(!1===n.wordWrap||!1===n.trim)&&(p.push(\"\"),e=0),(e>0||!1===n.trim)&&(p[p.length-1]+=\" \",e++)),n.hard&&d[i]>t){const n=t-e,r=1+Math.floor((d[i]-n-1)/t);Math.floor((d[i]-1)/t)<r&&p.push(\"\"),l(p,o,t)}else{if(e+d[i]>t&&e>0&&d[i]>0){if(!1===n.wordWrap&&e<t){l(p,o,t);continue}p.push(\"\")}e+d[i]>t&&!1===n.wordWrap?l(p,o,t):p[p.length-1]+=o}}!1!==n.trim&&(p=p.map(s)),c=p.join(\"\\n\");for(const[e,t]of[...c].entries()){if(f+=t,u.has(t)){const t=parseFloat(/\\d[^m]*/.exec(c.slice(e,e+4)));i=39===t?null:t}const n=o.codes.get(Number(i));i&&n&&(\"\\n\"===c[e+1]?f+=a(n):\"\\n\"===t&&(f+=a(i)))}return f};e.exports=(e,t,n)=>String(e).normalize().replace(/\\r\\n/g,\"\\n\").split(\"\\n\").map(e=>c(e,t,n)).join(\"\\n\")},3354:function(module,exports){var __WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__,wrapper;wrapper=function(Module,cb){var Module;\"function\"==typeof Module&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(e,t){return function(){e&&e.apply(this,arguments);try{Module.ccall(\"nbind_init\")}catch(e){return void t(e)}t(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb),Module||(Module=(void 0!==Module?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1,nodeFS,nodePath;if(Module.ENVIRONMENT)if(\"WEB\"===Module.ENVIRONMENT)ENVIRONMENT_IS_WEB=!0;else if(\"WORKER\"===Module.ENVIRONMENT)ENVIRONMENT_IS_WORKER=!0;else if(\"NODE\"===Module.ENVIRONMENT)ENVIRONMENT_IS_NODE=!0;else{if(\"SHELL\"!==Module.ENVIRONMENT)throw new Error(\"The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.\");ENVIRONMENT_IS_SHELL=!0}else ENVIRONMENT_IS_WEB=\"object\"==typeof window,ENVIRONMENT_IS_WORKER=\"function\"==typeof importScripts,ENVIRONMENT_IS_NODE=\"object\"==typeof process&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE)Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn),Module.read=function(e,t){nodeFS||(nodeFS={}(\"\")),nodePath||(nodePath={}(\"\")),e=nodePath.normalize(e);var n=nodeFS.readFileSync(e);return t?n:n.toString()},Module.readBinary=function(e){var t=Module.read(e,!0);return t.buffer||(t=new Uint8Array(t)),assert(t.buffer),t},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\\\/g,\"/\"):Module.thisProgram=\"unknown-program\"),Module.arguments=process.argv.slice(2),module.exports=Module,Module.inspect=function(){return\"[Emscripten Module object]\"};else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),\"undefined\"!=typeof printErr&&(Module.printErr=printErr),\"undefined\"!=typeof read?Module.read=read:Module.read=function(){throw\"no read() available\"},Module.readBinary=function(e){if(\"function\"==typeof readbuffer)return new Uint8Array(readbuffer(e));var t=read(e,\"binary\");return assert(\"object\"==typeof t),t},\"undefined\"!=typeof scriptArgs?Module.arguments=scriptArgs:void 0!==arguments&&(Module.arguments=arguments),\"function\"==typeof quit&&(Module.quit=function(e,t){quit(e)});else{if(!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER)throw\"Unknown runtime environment. Where are we?\";if(Module.read=function(e){var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.send(null),t.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.responseType=\"arraybuffer\",t.send(null),new Uint8Array(t.response)}),Module.readAsync=function(e,t,n){var r=new XMLHttpRequest;r.open(\"GET\",e,!0),r.responseType=\"arraybuffer\",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):n()},r.onerror=n,r.send(null)},void 0!==arguments&&(Module.arguments=arguments),\"undefined\"!=typeof console)Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&\"undefined\"!=typeof dump?function(e){dump(e)}:function(e){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),void 0===Module.setWindowTitle&&(Module.setWindowTitle=function(e){document.title=e})}function globalEval(e){eval.call(null,e)}for(var key in!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram=\"./this.program\"),Module.quit||(Module.quit=function(e,t){throw t}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[],moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(e){return tempRet0=e,e},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(e){STACKTOP=e},getNativeTypeSize:function(e){switch(e){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:if(\"*\"===e[e.length-1])return Runtime.QUANTUM_SIZE;if(\"i\"===e[0]){var t=parseInt(e.substr(1));return assert(t%8==0),t/8}return 0}},getNativeFieldSize:function(e){return Math.max(Runtime.getNativeTypeSize(e),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(e,t){return\"double\"===t||\"i64\"===t?7&e&&(assert(4==(7&e)),e+=4):assert(0==(3&e)),e},getAlignSize:function(e,t,n){return n||\"i64\"!=e&&\"double\"!=e?e?Math.min(t||(e?Runtime.getNativeFieldSize(e):0),Runtime.QUANTUM_SIZE):Math.min(t,8):8},dynCall:function(e,t,n){return n&&n.length?Module[\"dynCall_\"+e].apply(null,[t].concat(n)):Module[\"dynCall_\"+e].call(null,t)},functionPointers:[],addFunction:function(e){for(var t=0;t<Runtime.functionPointers.length;t++)if(!Runtime.functionPointers[t])return Runtime.functionPointers[t]=e,2*(1+t);throw\"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.\"},removeFunction:function(e){Runtime.functionPointers[(e-2)/2]=null},warnOnce:function(e){Runtime.warnOnce.shown||(Runtime.warnOnce.shown={}),Runtime.warnOnce.shown[e]||(Runtime.warnOnce.shown[e]=1,Module.printErr(e))},funcWrappers:{},getFuncWrapper:function(e,t){if(e){assert(t),Runtime.funcWrappers[t]||(Runtime.funcWrappers[t]={});var n=Runtime.funcWrappers[t];return n[e]||(1===t.length?n[e]=function(){return Runtime.dynCall(t,e)}:2===t.length?n[e]=function(n){return Runtime.dynCall(t,e,[n])}:n[e]=function(){return Runtime.dynCall(t,e,Array.prototype.slice.call(arguments))}),n[e]}},getCompilerSetting:function(e){throw\"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work\"},stackAlloc:function(e){var t=STACKTOP;return STACKTOP=15+(STACKTOP=STACKTOP+e|0)&-16,t},staticAlloc:function(e){var t=STATICTOP;return STATICTOP=15+(STATICTOP=STATICTOP+e|0)&-16,t},dynamicAlloc:function(e){var t=HEAP32[DYNAMICTOP_PTR>>2],n=-16&(t+e+15|0);return HEAP32[DYNAMICTOP_PTR>>2]=n,n>=TOTAL_MEMORY&&!enlargeMemory()?(HEAP32[DYNAMICTOP_PTR>>2]=t,0):t},alignMemory:function(e,t){return e=Math.ceil(e/(t||16))*(t||16)},makeBigInt:function(e,t,n){return n?+(e>>>0)+4294967296*+(t>>>0):+(e>>>0)+4294967296*+(0|t)},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0,cwrap,ccall;function assert(e,t){e||abort(\"Assertion failed: \"+t)}function getCFunc(ident){var func=Module[\"_\"+ident];if(!func)try{func=eval(\"_\"+ident)}catch(e){}return assert(func,\"Cannot call unknown function \"+ident+\" (perhaps LLVM optimizations or closure removed it?)\"),func}function setValue(e,t,n,r){switch(\"*\"===(n=n||\"i8\").charAt(n.length-1)&&(n=\"i32\"),n){case\"i1\":case\"i8\":HEAP8[e>>0]=t;break;case\"i16\":HEAP16[e>>1]=t;break;case\"i32\":HEAP32[e>>2]=t;break;case\"i64\":tempI64=[t>>>0,(tempDouble=t,+Math_abs(tempDouble)>=1?tempDouble>0?(0|Math_min(+Math_floor(tempDouble/4294967296),4294967295))>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case\"float\":HEAPF32[e>>2]=t;break;case\"double\":HEAPF64[e>>3]=t;break;default:abort(\"invalid type for setValue: \"+n)}}function getValue(e,t,n){switch(\"*\"===(t=t||\"i8\").charAt(t.length-1)&&(t=\"i32\"),t){case\"i1\":case\"i8\":return HEAP8[e>>0];case\"i16\":return HEAP16[e>>1];case\"i32\":case\"i64\":return HEAP32[e>>2];case\"float\":return HEAPF32[e>>2];case\"double\":return HEAPF64[e>>3];default:abort(\"invalid type for setValue: \"+t)}return null}!function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(e){var t=Runtime.stackAlloc(e.length);return writeArrayToMemory(e,t),t},stringToC:function(e){var t=0;if(null!=e&&0!==e){var n=1+(e.length<<2);stringToUTF8(e,t=Runtime.stackAlloc(n),n)}return t}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,t,n,r,i){var o=getCFunc(e),u=[],a=0;if(r)for(var l=0;l<r.length;l++){var s=toC[n[l]];s?(0===a&&(a=Runtime.stackSave()),u[l]=s(r[l])):u[l]=r[l]}var c=o.apply(null,u);if(\"string\"===t&&(c=Pointer_stringify(c)),0!==a){if(i&&i.async)return void EmterpreterAsync.asyncFinalizers.push((function(){Runtime.stackRestore(a)}));Runtime.stackRestore(a)}return c};var sourceRegex=/^function\\s*[a-zA-Z$_0-9]*\\s*\\(([^)]*)\\)\\s*{\\s*([^*]*?)[\\s;]*(?:return\\s*(.*?)[;\\s]*)?}$/;function parseJSFunc(e){var t=e.toString().match(sourceRegex).slice(1);return{arguments:t[0],body:t[1],returnValue:t[2]}}var JSsource=null;function ensureJSsource(){if(!JSsource)for(var e in JSsource={},JSfuncs)JSfuncs.hasOwnProperty(e)&&(JSsource[e]=parseJSFunc(JSfuncs[e]))}cwrap=function cwrap(ident,returnType,argTypes){argTypes=argTypes||[];var cfunc=getCFunc(ident),numericArgs=argTypes.every((function(e){return\"number\"===e})),numericRet=\"string\"!==returnType;if(numericRet&&numericArgs)return cfunc;var argNames=argTypes.map((function(e,t){return\"$\"+t})),funcstr=\"(function(\"+argNames.join(\",\")+\") {\",nargs=argTypes.length;if(!numericArgs){ensureJSsource(),funcstr+=\"var stack = \"+JSsource.stackSave.body+\";\";for(var i=0;i<nargs;i++){var arg=argNames[i],type=argTypes[i];if(\"number\"!==type){var convertCode=JSsource[type+\"ToC\"];funcstr+=\"var \"+convertCode.arguments+\" = \"+arg+\";\",funcstr+=convertCode.body+\";\",funcstr+=arg+\"=(\"+convertCode.returnValue+\");\"}}}var cfuncname=parseJSFunc((function(){return cfunc})).returnValue;if(funcstr+=\"var ret = \"+cfuncname+\"(\"+argNames.join(\",\")+\");\",!numericRet){var strgfy=parseJSFunc((function(){return Pointer_stringify})).returnValue;funcstr+=\"ret = \"+strgfy+\"(ret);\"}return numericArgs||(ensureJSsource(),funcstr+=JSsource.stackRestore.body.replace(\"()\",\"(stack)\")+\";\"),funcstr+=\"return ret})\",eval(funcstr)}}(),Module.ccall=ccall,Module.cwrap=cwrap,Module.setValue=setValue,Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;function allocate(e,t,n,r){var i,o;\"number\"==typeof e?(i=!0,o=e):(i=!1,o=e.length);var u,a=\"string\"==typeof t?t:null;if(u=n==ALLOC_NONE?r:[\"function\"==typeof _malloc?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][void 0===n?ALLOC_STATIC:n](Math.max(o,a?1:t.length)),i){var l;for(r=u,assert(0==(3&u)),l=u+(-4&o);r<l;r+=4)HEAP32[r>>2]=0;for(l=u+o;r<l;)HEAP8[r++>>0]=0;return u}if(\"i8\"===a)return e.subarray||e.slice?HEAPU8.set(e,u):HEAPU8.set(new Uint8Array(e),u),u;for(var s,c,f,d=0;d<o;){var p=e[d];\"function\"==typeof p&&(p=Runtime.getFunctionIndex(p)),0!==(s=a||t[d])?(\"i64\"==s&&(s=\"i32\"),setValue(u+d,p,s),f!==s&&(c=Runtime.getNativeTypeSize(s),f=s),d+=c):d++}return u}function getMemory(e){return staticSealed?runtimeInitialized?_malloc(e):Runtime.dynamicAlloc(e):Runtime.staticAlloc(e)}function Pointer_stringify(e,t){if(0===t||!e)return\"\";for(var n,r=0,i=0;r|=n=HEAPU8[e+i>>0],(0!=n||t)&&(i++,!t||i!=t););t||(t=i);var o=\"\";if(r<128){for(var u;t>0;)u=String.fromCharCode.apply(String,HEAPU8.subarray(e,e+Math.min(t,1024))),o=o?o+u:u,e+=1024,t-=1024;return o}return Module.UTF8ToString(e)}function AsciiToString(e){for(var t=\"\";;){var n=HEAP8[e++>>0];if(!n)return t;t+=String.fromCharCode(n)}}function stringToAscii(e,t){return writeAsciiToMemory(e,t,!1)}Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE,Module.allocate=allocate,Module.getMemory=getMemory,Module.Pointer_stringify=Pointer_stringify,Module.AsciiToString=AsciiToString,Module.stringToAscii=stringToAscii;var UTF8Decoder=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;function UTF8ArrayToString(e,t){for(var n=t;e[n];)++n;if(n-t>16&&e.subarray&&UTF8Decoder)return UTF8Decoder.decode(e.subarray(t,n));for(var r,i,o,u,a,l=\"\";;){if(!(r=e[t++]))return l;if(128&r)if(i=63&e[t++],192!=(224&r))if(o=63&e[t++],224==(240&r)?r=(15&r)<<12|i<<6|o:(u=63&e[t++],240==(248&r)?r=(7&r)<<18|i<<12|o<<6|u:(a=63&e[t++],r=248==(252&r)?(3&r)<<24|i<<18|o<<12|u<<6|a:(1&r)<<30|i<<24|o<<18|u<<12|a<<6|63&e[t++])),r<65536)l+=String.fromCharCode(r);else{var s=r-65536;l+=String.fromCharCode(55296|s>>10,56320|1023&s)}else l+=String.fromCharCode((31&r)<<6|i);else l+=String.fromCharCode(r)}}function UTF8ToString(e){return UTF8ArrayToString(HEAPU8,e)}function stringToUTF8Array(e,t,n,r){if(!(r>0))return 0;for(var i=n,o=n+r-1,u=0;u<e.length;++u){var a=e.charCodeAt(u);if(a>=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&e.charCodeAt(++u)),a<=127){if(n>=o)break;t[n++]=a}else if(a<=2047){if(n+1>=o)break;t[n++]=192|a>>6,t[n++]=128|63&a}else if(a<=65535){if(n+2>=o)break;t[n++]=224|a>>12,t[n++]=128|a>>6&63,t[n++]=128|63&a}else if(a<=2097151){if(n+3>=o)break;t[n++]=240|a>>18,t[n++]=128|a>>12&63,t[n++]=128|a>>6&63,t[n++]=128|63&a}else if(a<=67108863){if(n+4>=o)break;t[n++]=248|a>>24,t[n++]=128|a>>18&63,t[n++]=128|a>>12&63,t[n++]=128|a>>6&63,t[n++]=128|63&a}else{if(n+5>=o)break;t[n++]=252|a>>30,t[n++]=128|a>>24&63,t[n++]=128|a>>18&63,t[n++]=128|a>>12&63,t[n++]=128|a>>6&63,t[n++]=128|63&a}}return t[n]=0,n-i}function stringToUTF8(e,t,n){return stringToUTF8Array(e,HEAPU8,t,n)}function lengthBytesUTF8(e){for(var t=0,n=0;n<e.length;++n){var r=e.charCodeAt(n);r>=55296&&r<=57343&&(r=65536+((1023&r)<<10)|1023&e.charCodeAt(++n)),r<=127?++t:t+=r<=2047?2:r<=65535?3:r<=2097151?4:r<=67108863?5:6}return t}Module.UTF8ArrayToString=UTF8ArrayToString,Module.UTF8ToString=UTF8ToString,Module.stringToUTF8Array=stringToUTF8Array,Module.stringToUTF8=stringToUTF8,Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-16le\"):void 0,HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64,STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;function demangle(e){var t=Module.___cxa_demangle||Module.__cxa_demangle;if(t){try{var n=e.substr(1),r=lengthBytesUTF8(n)+1,i=_malloc(r);stringToUTF8(n,i,r);var o=_malloc(4),u=t(i,0,0,o);if(0===getValue(o,\"i32\")&&u)return Pointer_stringify(u)}catch(e){}finally{i&&_free(i),o&&_free(o),u&&_free(u)}return e}return Runtime.warnOnce(\"warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling\"),e}function demangleAll(e){return e.replace(/__Z[\\w\\d_]+/g,(function(e){var t=demangle(e);return e===t?e:e+\" [\"+t+\"]\"}))}function jsStackTrace(){var e=new Error;if(!e.stack){try{throw new Error(0)}catch(t){e=t}if(!e.stack)return\"(no stack trace available)\"}return e.stack.toString()}function stackTrace(){var e=jsStackTrace();return Module.extraStackTrace&&(e+=\"\\n\"+Module.extraStackTrace()),demangleAll(e)}function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}function abortOnCannotGrowMemory(){abort(\"Cannot enlarge memory arrays. Either (1) compile with  -s TOTAL_MEMORY=X  with X higher than the current value \"+TOTAL_MEMORY+\", (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 \")}function enlargeMemory(){abortOnCannotGrowMemory()}Module.stackTrace=stackTrace,STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;function getTotalMemory(){return TOTAL_MEMORY}if(TOTAL_MEMORY<TOTAL_STACK&&Module.printErr(\"TOTAL_MEMORY should be larger than TOTAL_STACK, was \"+TOTAL_MEMORY+\"! (TOTAL_STACK=\"+TOTAL_STACK+\")\"),buffer=Module.buffer?Module.buffer:new ArrayBuffer(TOTAL_MEMORY),updateGlobalBufferViews(),HEAP32[0]=1668509029,HEAP16[1]=25459,115!==HEAPU8[2]||99!==HEAPU8[3])throw\"Runtime error: expected the system to be little-endian!\";function callRuntimeCallbacks(e){for(;e.length>0;){var t=e.shift();if(\"function\"!=typeof t){var n=t.func;\"number\"==typeof n?void 0===t.arg?Module.dynCall_v(n):Module.dynCall_vi(n,t.arg):n(void 0===t.arg?null:t.arg)}else t()}}Module.HEAP=HEAP,Module.buffer=buffer,Module.HEAP8=HEAP8,Module.HEAP16=HEAP16,Module.HEAP32=HEAP32,Module.HEAPU8=HEAPU8,Module.HEAPU16=HEAPU16,Module.HEAPU32=HEAPU32,Module.HEAPF32=HEAPF32,Module.HEAPF64=HEAPF64;var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(\"function\"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(\"function\"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(e){__ATPRERUN__.unshift(e)}function addOnInit(e){__ATINIT__.unshift(e)}function addOnPreMain(e){__ATMAIN__.unshift(e)}function addOnExit(e){__ATEXIT__.unshift(e)}function addOnPostRun(e){__ATPOSTRUN__.unshift(e)}function intArrayFromString(e,t,n){var r=n>0?n:lengthBytesUTF8(e)+1,i=new Array(r),o=stringToUTF8Array(e,i,0,i.length);return t&&(i.length=o),i}function intArrayToString(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];r>255&&(r&=255),t.push(String.fromCharCode(r))}return t.join(\"\")}function writeStringToMemory(e,t,n){var r,i;Runtime.warnOnce(\"writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!\"),n&&(i=t+lengthBytesUTF8(e),r=HEAP8[i]),stringToUTF8(e,t,1/0),n&&(HEAP8[i]=r)}function writeArrayToMemory(e,t){HEAP8.set(e,t)}function writeAsciiToMemory(e,t,n){for(var r=0;r<e.length;++r)HEAP8[t++>>0]=e.charCodeAt(r);n||(HEAP8[t>>0]=0)}if(Module.addOnPreRun=addOnPreRun,Module.addOnInit=addOnInit,Module.addOnPreMain=addOnPreMain,Module.addOnExit=addOnExit,Module.addOnPostRun=addOnPostRun,Module.intArrayFromString=intArrayFromString,Module.intArrayToString=intArrayToString,Module.writeStringToMemory=writeStringToMemory,Module.writeArrayToMemory=writeArrayToMemory,Module.writeAsciiToMemory=writeAsciiToMemory,Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(e,t){var n=65535&e,r=65535&t;return n*r+((e>>>16)*r+n*(t>>>16)<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(e){return froundBuffer[0]=e,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(e){e>>>=0;for(var t=0;t<32;t++)if(e&1<<31-t)return t;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(e){return e<0?Math.ceil(e):Math.floor(e)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(e){return e}function addRunDependency(e){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}function removeRunDependency(e){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),0==runDependencies&&(null!==runDependencyWatcher&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var t=dependenciesFulfilled;dependenciesFulfilled=null,t()}}Module.addRunDependency=addRunDependency,Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(e,t,n,r,i,o,u,a){return _nbind.callbackSignatureList[e].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(e,t,n,r,i,o,u,a){return ASM_CONSTS[e](t,n,r,i,o,u,a)}function _emscripten_asm_const_iiiii(e,t,n,r,i){return ASM_CONSTS[e](t,n,r,i)}function _emscripten_asm_const_iiidddddd(e,t,n,r,i,o,u,a,l){return ASM_CONSTS[e](t,n,r,i,o,u,a,l)}function _emscripten_asm_const_iiididi(e,t,n,r,i,o,u){return ASM_CONSTS[e](t,n,r,i,o,u)}function _emscripten_asm_const_iiii(e,t,n,r){return ASM_CONSTS[e](t,n,r)}function _emscripten_asm_const_iiiid(e,t,n,r,i){return ASM_CONSTS[e](t,n,r,i)}function _emscripten_asm_const_iiiiii(e,t,n,r,i,o){return ASM_CONSTS[e](t,n,r,i,o)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],\"i8\",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;function _atexit(e,t){__ATEXIT__.unshift({func:e,arg:t})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr(\"missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj\"),abort(-1)}function __decorate(e,t,n,r){var i,o=arguments.length,u=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)u=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(u=(o<3?i(u):o>3?i(t,n,u):i(t,n))||u);return o>3&&u&&Object.defineProperty(t,n,u),u}function _defineHidden(e){return function(t,n){Object.defineProperty(t,n,{configurable:!1,enumerable:!1,value:e,writable:!0})}}STATICTOP+=16;var _nbind={};function __nbind_free_external(e){_nbind.externalList[e].dereference(e)}function __nbind_reference_external(e){_nbind.externalList[e].reference()}function _llvm_stackrestore(e){var t=_llvm_stacksave,n=t.LLVM_SAVEDSTACKS[e];t.LLVM_SAVEDSTACKS.splice(e,1),Runtime.stackRestore(n)}function __nbind_register_pool(e,t,n,r){_nbind.Pool.pageSize=e,_nbind.Pool.usedPtr=t/4,_nbind.Pool.rootPtr=n,_nbind.Pool.pagePtr=r/4,HEAP32[t/4]=16909060,1==HEAP8[t]&&(_nbind.bigEndian=!0),HEAP32[t/4]=0,_nbind.makeTypeKindTbl=((i={})[1024]=_nbind.PrimitiveType,i[64]=_nbind.Int64Type,i[2048]=_nbind.BindClass,i[3072]=_nbind.BindClassPtr,i[4096]=_nbind.SharedClassPtr,i[5120]=_nbind.ArrayType,i[6144]=_nbind.ArrayType,i[7168]=_nbind.CStringType,i[9216]=_nbind.CallbackType,i[10240]=_nbind.BindType,i),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,\"cbFunction &\":_nbind.CallbackType,\"const cbFunction &\":_nbind.CallbackType,\"const std::string &\":_nbind.StringType,\"std::string\":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var i,o=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:\"\"});o.proto=Module,_nbind.BindClass.list.push(o)}function _emscripten_set_main_loop_timing(e,t){if(Browser.mainLoop.timingMode=e,Browser.mainLoop.timingValue=t,!Browser.mainLoop.func)return 1;if(0==e)Browser.mainLoop.scheduler=function(){var e=0|Math.max(0,Browser.mainLoop.tickStartTime+t-_emscripten_get_now());setTimeout(Browser.mainLoop.runner,e)},Browser.mainLoop.method=\"timeout\";else if(1==e)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method=\"rAF\";else if(2==e){if(!window.setImmediate){var n=[];window.addEventListener(\"message\",(function(e){e.source===window&&\"setimmediate\"===e.data&&(e.stopPropagation(),n.shift()())}),!0),window.setImmediate=function(e){n.push(e),ENVIRONMENT_IS_WORKER?(void 0===Module.setImmediates&&(Module.setImmediates=[]),Module.setImmediates.push(e),window.postMessage({target:\"setimmediate\"})):window.postMessage(\"setimmediate\",\"*\")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method=\"immediate\"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(e,t,n,r,i){var o;Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,\"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.\"),Browser.mainLoop.func=e,Browser.mainLoop.arg=r,o=void 0!==r?function(){Module.dynCall_vi(e,r)}:function(){Module.dynCall_v(e)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT)if(Browser.mainLoop.queue.length>0){var e=Date.now(),t=Browser.mainLoop.queue.shift();if(t.func(t.arg),Browser.mainLoop.remainingBlockers){var n=Browser.mainLoop.remainingBlockers,r=n%1==0?n-1:Math.floor(n);t.counted?Browser.mainLoop.remainingBlockers=r:(r+=.5,Browser.mainLoop.remainingBlockers=(8*n+r)/9)}if(console.log('main loop blocker \"'+t.name+'\" took '+(Date.now()-e)+\" ms\"),Browser.mainLoop.updateStatus(),u<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0)}else u<Browser.mainLoop.currentlyRunningMainloop||(Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0,1==Browser.mainLoop.timingMode&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0?Browser.mainLoop.scheduler():(0==Browser.mainLoop.timingMode&&(Browser.mainLoop.tickStartTime=_emscripten_get_now()),\"timeout\"===Browser.mainLoop.method&&Module.ctx&&(Module.printErr(\"Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!\"),Browser.mainLoop.method=\"\"),Browser.mainLoop.runIter(o),u<Browser.mainLoop.currentlyRunningMainloop||(\"object\"==typeof SDL&&SDL.audio&&SDL.audio.queueNewAudioData&&SDL.audio.queueNewAudioData(),Browser.mainLoop.scheduler())))},i||(t&&t>0?_emscripten_set_main_loop_timing(0,1e3/t):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),n)throw\"SimulateInfiniteLoop\"}var Browser={mainLoop:{scheduler:null,method:\"\",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var e=Browser.mainLoop.timingMode,t=Browser.mainLoop.timingValue,n=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(n,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(e,t),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var e=Module.statusMessage||\"Please wait...\",t=Browser.mainLoop.remainingBlockers,n=Browser.mainLoop.expectedBlockers;t?t<n?Module.setStatus(e+\" (\"+(n-t)+\"/\"+n+\")\"):Module.setStatus(e):Module.setStatus(\"\")}},runIter:function(e){if(!ABORT){if(Module.preMainLoop&&!1===Module.preMainLoop())return;try{e()}catch(e){if(e instanceof ExitStatus)return;throw e&&\"object\"==typeof e&&e.stack&&Module.printErr(\"exception thrown: \"+[e,e.stack]),e}Module.postMainLoop&&Module.postMainLoop()}}},isFullscreen:!1,pointerLock:!1,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(Module.preloadPlugins||(Module.preloadPlugins=[]),!Browser.initted){Browser.initted=!0;try{new Blob,Browser.hasBlobConstructor=!0}catch(e){Browser.hasBlobConstructor=!1,console.log(\"warning: no blob constructor, cannot create blobs with mimetypes\")}Browser.BlobBuilder=\"undefined\"!=typeof MozBlobBuilder?MozBlobBuilder:\"undefined\"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:Browser.hasBlobConstructor?null:console.log(\"warning: no BlobBuilder\"),Browser.URLObject=\"undefined\"!=typeof window?window.URL?window.URL:window.webkitURL:void 0,Module.noImageDecoding||void 0!==Browser.URLObject||(console.log(\"warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.\"),Module.noImageDecoding=!0);var e={canHandle:function(e){return!Module.noImageDecoding&&/\\.(jpg|jpeg|png|bmp)$/i.test(e)},handle:function(e,t,n,r){var i=null;if(Browser.hasBlobConstructor)try{(i=new Blob([e],{type:Browser.getMimetype(t)})).size!==e.length&&(i=new Blob([new Uint8Array(e).buffer],{type:Browser.getMimetype(t)}))}catch(e){Runtime.warnOnce(\"Blob constructor present but fails: \"+e+\"; falling back to blob builder\")}if(!i){var o=new Browser.BlobBuilder;o.append(new Uint8Array(e).buffer),i=o.getBlob()}var u=Browser.URLObject.createObjectURL(i),a=new Image;a.onload=function(){assert(a.complete,\"Image \"+t+\" could not be decoded\");var r=document.createElement(\"canvas\");r.width=a.width,r.height=a.height,r.getContext(\"2d\").drawImage(a,0,0),Module.preloadedImages[t]=r,Browser.URLObject.revokeObjectURL(u),n&&n(e)},a.onerror=function(e){console.log(\"Image \"+u+\" could not be decoded\"),r&&r()},a.src=u}};Module.preloadPlugins.push(e);var t={canHandle:function(e){return!Module.noAudioDecoding&&e.substr(-4)in{\".ogg\":1,\".wav\":1,\".mp3\":1}},handle:function(e,t,n,r){var i=!1;function o(r){i||(i=!0,Module.preloadedAudios[t]=r,n&&n(e))}function u(){i||(i=!0,Module.preloadedAudios[t]=new Audio,r&&r())}if(!Browser.hasBlobConstructor)return u();try{var a=new Blob([e],{type:Browser.getMimetype(t)})}catch(e){return u()}var l=Browser.URLObject.createObjectURL(a),s=new Audio;s.addEventListener(\"canplaythrough\",(function(){o(s)}),!1),s.onerror=function(n){i||(console.log(\"warning: browser could not fully decode audio \"+t+\", trying slower base64 approach\"),s.src=\"data:audio/x-\"+t.substr(-3)+\";base64,\"+function(e){for(var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",n=\"\",r=0,i=0,o=0;o<e.length;o++)for(r=r<<8|e[o],i+=8;i>=6;){var u=r>>i-6&63;i-=6,n+=t[u]}return 2==i?(n+=t[(3&r)<<4],n+=\"==\"):4==i&&(n+=t[(15&r)<<2],n+=\"=\"),n}(e),o(s))},s.src=l,Browser.safeSetTimeout((function(){o(s)}),1e4)}};Module.preloadPlugins.push(t);var n=Module.canvas;n&&(n.requestPointerLock=n.requestPointerLock||n.mozRequestPointerLock||n.webkitRequestPointerLock||n.msRequestPointerLock||function(){},n.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},n.exitPointerLock=n.exitPointerLock.bind(document),document.addEventListener(\"pointerlockchange\",r,!1),document.addEventListener(\"mozpointerlockchange\",r,!1),document.addEventListener(\"webkitpointerlockchange\",r,!1),document.addEventListener(\"mspointerlockchange\",r,!1),Module.elementPointerLock&&n.addEventListener(\"click\",(function(e){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),e.preventDefault())}),!1))}function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}},createContext:function(e,t,n,r){if(t&&Module.ctx&&e==Module.canvas)return Module.ctx;var i,o;if(t){var u={antialias:!1,alpha:!1};if(r)for(var a in r)u[a]=r[a];(o=GL.createContext(e,u))&&(i=GL.getContext(o).GLctx)}else i=e.getContext(\"2d\");return i?(n&&(t||assert(\"undefined\"==typeof GLctx,\"cannot set in module if GLctx is used, but we are a non-GL context that would replace it\"),Module.ctx=i,t&&GL.makeContextCurrent(o),Module.useWebGL=t,Browser.moduleContextCreatedCallbacks.forEach((function(e){e()})),Browser.init()),i):null},destroyContext:function(e,t,n){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(e,t,n){Browser.lockPointer=e,Browser.resizeCanvas=t,Browser.vrDevice=n,void 0===Browser.lockPointer&&(Browser.lockPointer=!0),void 0===Browser.resizeCanvas&&(Browser.resizeCanvas=!1),void 0===Browser.vrDevice&&(Browser.vrDevice=null);var r=Module.canvas;function i(){Browser.isFullscreen=!1;var e=r.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===e?(r.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},r.exitFullscreen=r.exitFullscreen.bind(document),Browser.lockPointer&&r.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(e.parentNode.insertBefore(r,e),e.parentNode.removeChild(e),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(r)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener(\"fullscreenchange\",i,!1),document.addEventListener(\"mozfullscreenchange\",i,!1),document.addEventListener(\"webkitfullscreenchange\",i,!1),document.addEventListener(\"MSFullscreenChange\",i,!1));var o=document.createElement(\"div\");r.parentNode.insertBefore(o,r),o.appendChild(r),o.requestFullscreen=o.requestFullscreen||o.mozRequestFullScreen||o.msRequestFullscreen||(o.webkitRequestFullscreen?function(){o.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(o.webkitRequestFullScreen?function(){o.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),n?o.requestFullscreen({vrDisplay:n}):o.requestFullscreen()},requestFullScreen:function(e,t,n){return Module.printErr(\"Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.\"),Browser.requestFullScreen=function(e,t,n){return Browser.requestFullscreen(e,t,n)},Browser.requestFullscreen(e,t,n)},nextRAF:0,fakeRequestAnimationFrame:function(e){var t=Date.now();if(0===Browser.nextRAF)Browser.nextRAF=t+1e3/60;else for(;t+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var n=Math.max(Browser.nextRAF-t,0);setTimeout(e,n)},requestAnimationFrame:function(e){\"undefined\"==typeof window?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(e){return function(){if(!ABORT)return e.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var e=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],e.forEach((function(e){e()}))}},safeRequestAnimationFrame:function(e){return Browser.requestAnimationFrame((function(){ABORT||(Browser.allowAsyncCallbacks?e():Browser.queuedAsyncCallbacks.push(e))}))},safeSetTimeout:function(e,t){return Module.noExitRuntime=!0,setTimeout((function(){ABORT||(Browser.allowAsyncCallbacks?e():Browser.queuedAsyncCallbacks.push(e))}),t)},safeSetInterval:function(e,t){return Module.noExitRuntime=!0,setInterval((function(){ABORT||Browser.allowAsyncCallbacks&&e()}),t)},getMimetype:function(e){return{jpg:\"image/jpeg\",jpeg:\"image/jpeg\",png:\"image/png\",bmp:\"image/bmp\",ogg:\"audio/ogg\",wav:\"audio/wav\",mp3:\"audio/mpeg\"}[e.substr(e.lastIndexOf(\".\")+1)]},getUserMedia:function(e){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(e)},getMovementX:function(e){return e.movementX||e.mozMovementX||e.webkitMovementX||0},getMovementY:function(e){return e.movementY||e.mozMovementY||e.webkitMovementY||0},getMouseWheelDelta:function(e){var t=0;switch(e.type){case\"DOMMouseScroll\":t=e.detail;break;case\"mousewheel\":t=e.wheelDelta;break;case\"wheel\":t=e.deltaY;break;default:throw\"unrecognized mouse wheel event: \"+e.type}return t},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(e){if(Browser.pointerLock)\"mousemove\"!=e.type&&\"mozMovementX\"in e?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(e),Browser.mouseMovementY=Browser.getMovementY(e)),\"undefined\"!=typeof SDL?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var t=Module.canvas.getBoundingClientRect(),n=Module.canvas.width,r=Module.canvas.height,i=void 0!==window.scrollX?window.scrollX:window.pageXOffset,o=void 0!==window.scrollY?window.scrollY:window.pageYOffset;if(\"touchstart\"===e.type||\"touchend\"===e.type||\"touchmove\"===e.type){var u=e.touch;if(void 0===u)return;var a=u.pageX-(i+t.left),l=u.pageY-(o+t.top),s={x:a*=n/t.width,y:l*=r/t.height};if(\"touchstart\"===e.type)Browser.lastTouches[u.identifier]=s,Browser.touches[u.identifier]=s;else if(\"touchend\"===e.type||\"touchmove\"===e.type){var c=Browser.touches[u.identifier];c||(c=s),Browser.lastTouches[u.identifier]=c,Browser.touches[u.identifier]=s}return}var f=e.pageX-(i+t.left),d=e.pageY-(o+t.top);f*=n/t.width,d*=r/t.height,Browser.mouseMovementX=f-Browser.mouseX,Browser.mouseMovementY=d-Browser.mouseY,Browser.mouseX=f,Browser.mouseY=d}},asyncLoad:function(e,t,n,r){var i=r?\"\":getUniqueRunDependency(\"al \"+e);Module.readAsync(e,(function(n){assert(n,'Loading data file \"'+e+'\" failed (no arrayBuffer).'),t(new Uint8Array(n)),i&&removeRunDependency(i)}),(function(t){if(!n)throw'Loading data file \"'+e+'\" failed.';n()})),i&&addRunDependency(i)},resizeListeners:[],updateResizeListeners:function(){var e=Module.canvas;Browser.resizeListeners.forEach((function(t){t(e.width,e.height)}))},setCanvasSize:function(e,t,n){var r=Module.canvas;Browser.updateCanvasDimensions(r,e,t),n||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(\"undefined\"!=typeof SDL){var e=HEAPU32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2];e|=8388608,HEAP32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2]=e}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(\"undefined\"!=typeof SDL){var e=HEAPU32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2];e&=-8388609,HEAP32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2]=e}Browser.updateResizeListeners()},updateCanvasDimensions:function(e,t,n){t&&n?(e.widthNative=t,e.heightNative=n):(t=e.widthNative,n=e.heightNative);var r=t,i=n;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(r/i<Module.forcedAspectRatio?r=Math.round(i*Module.forcedAspectRatio):i=Math.round(r/Module.forcedAspectRatio)),(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===e.parentNode&&\"undefined\"!=typeof screen){var o=Math.min(screen.width/r,screen.height/i);r=Math.round(r*o),i=Math.round(i*o)}Browser.resizeCanvas?(e.width!=r&&(e.width=r),e.height!=i&&(e.height=i),void 0!==e.style&&(e.style.removeProperty(\"width\"),e.style.removeProperty(\"height\"))):(e.width!=t&&(e.width=t),e.height!=n&&(e.height=n),void 0!==e.style&&(r!=t||i!=n?(e.style.setProperty(\"width\",r+\"px\",\"important\"),e.style.setProperty(\"height\",i+\"px\",\"important\")):(e.style.removeProperty(\"width\"),e.style.removeProperty(\"height\"))))},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var e=Browser.nextWgetRequestHandle;return Browser.nextWgetRequestHandle++,e}},SYSCALLS={varargs:0,get:function(e){return SYSCALLS.varargs+=4,HEAP32[SYSCALLS.varargs-4>>2]},getStr:function(){return Pointer_stringify(SYSCALLS.get())},get64:function(){var e=SYSCALLS.get(),t=SYSCALLS.get();return assert(e>=0?0===t:-1===t),e},getZero:function(){assert(0===SYSCALLS.get())}};function ___syscall6(e,t){SYSCALLS.varargs=t;try{var n=SYSCALLS.getStreamFromFD();return FS.close(n),0}catch(e){return\"undefined\"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function ___syscall54(e,t){SYSCALLS.varargs=t;try{return 0}catch(e){return\"undefined\"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function _typeModule(e){var t=[[0,1,\"X\"],[1,1,\"const X\"],[128,1,\"X *\"],[256,1,\"X &\"],[384,1,\"X &&\"],[512,1,\"std::shared_ptr<X>\"],[640,1,\"std::unique_ptr<X>\"],[5120,1,\"std::vector<X>\"],[6144,2,\"std::array<X, Y>\"],[9216,-1,\"std::function<X (Y)>\"]];function n(e,t,n,r,i,o){if(1==t){var u=896&r;128!=u&&256!=u&&384!=u||(e=\"X const\")}return(o?n.replace(\"X\",e).replace(\"Y\",i):e.replace(\"X\",n).replace(\"Y\",i)).replace(/([*&]) (?=[*&])/g,\"$1\")}function r(e,t){var n=t.flags,r=896&n,i=15360&n;return t.name||1024!=i||(1==t.ptrSize?t.name=(16&n?\"\":(8&n?\"un\":\"\")+\"signed \")+\"char\":t.name=(8&n?\"u\":\"\")+(32&n?\"float\":\"int\")+8*t.ptrSize+\"_t\"),8!=t.ptrSize||32&n||(i=64),2048==i&&(512==r||640==r?i=4096:r&&(i=3072)),e(i,t)}var i={Type:function(){function e(e){this.id=e.id,this.name=e.name,this.flags=e.flags,this.spec=e}return e.prototype.toString=function(){return this.name},e}(),getComplexType:function e(i,o,u,a,l,s,c,f){void 0===s&&(s=\"X\"),void 0===f&&(f=1);var d=u(i);if(d)return d;var p,h=a(i),v=h.placeholderFlag,m=t[v];c&&m&&(s=n(c[2],c[0],s,m[0],\"?\",!0)),0==v&&(p=\"Unbound\"),v>=10&&(p=\"Corrupt\"),f>20&&(p=\"Deeply nested\"),p&&function(e,t,n,r,i){throw new Error(e+\" type \"+n.replace(\"X\",t+\"?\")+(r?\" with flag \"+r:\"\")+\" in \"+i)}(p,i,s,v,l||\"?\");var g,y=e(h.paramList[0],o,u,a,l,s,m,f+1),_={flags:m[0],id:i,name:\"\",paramList:[y]},b=[],w=\"?\";switch(h.placeholderFlag){case 1:g=y.spec;break;case 2:if(1024==(15360&y.flags)&&1==y.spec.ptrSize){_.flags=7168;break}case 3:case 6:case 5:g=y.spec,y.flags;break;case 8:w=\"\"+h.paramList[1],_.paramList.push(h.paramList[1]);break;case 9:for(var E=0,D=h.paramList[1];E<D.length;E++){var S=e(D[E],o,u,a,l,s,m,f+1);b.push(S.name),_.paramList.push(S)}w=b.join(\", \")}if(_.name=n(m[2],m[0],y.name,y.flags,w),g){for(var C=0,k=Object.keys(g);C<k.length;C++){var T=k[C];_[T]=_[T]||g[T]}_.flags|=g.flags}return r(o,_)},makeType:r,structureList:t};return e.output=i,e.output||i}function __nbind_register_type(e,t){var n={flags:10240,id:e,name:_nbind.readAsciiString(t)};_nbind.makeType(_nbind.constructType,n)}function __nbind_register_callback_signature(e,t){var n=_nbind.readTypeIdList(e,t),r=_nbind.callbackSignatureList.length;return _nbind.callbackSignatureList[r]=_nbind.makeJSCaller(n),r}function __extends(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r}function __nbind_register_class(e,t,n,r,i,o,u){var a=_nbind.readAsciiString(u),l=_nbind.readPolicyList(t),s=HEAPU32.subarray(e/4,e/4+2),c={flags:2048|(l.Value?2:0),id:s[0],name:a},f=_nbind.makeType(_nbind.constructType,c);f.ptrType=_nbind.getComplexType(s[1],_nbind.constructType,_nbind.getType,_nbind.queryType),f.destroy=_nbind.makeMethodCaller(f.ptrType,{boundID:c.id,flags:0,name:\"destroy\",num:0,ptr:o,title:f.name+\".free\",typeList:[\"void\",\"uint32_t\",\"uint32_t\"]}),i&&(f.superIdList=Array.prototype.slice.call(HEAPU32.subarray(n/4,n/4+i)),f.upcastList=Array.prototype.slice.call(HEAPU32.subarray(r/4,r/4+i))),Module[f.name]=f.makeBound(l),_nbind.BindClass.list.push(f)}function _removeAccessorPrefix(e){return e.replace(/^[Gg]et_?([A-Z]?([A-Z]?))/,(function(e,t,n){return n?t:t.toLowerCase()}))}function __nbind_register_function(e,t,n,r,i,o,u,a,l,s){var c,f=_nbind.getType(e),d=_nbind.readPolicyList(t),p=_nbind.readTypeIdList(n,r);if(5==u)c=[{direct:i,name:\"__nbindConstructor\",ptr:0,title:f.name+\" constructor\",typeList:[\"uint32_t\"].concat(p.slice(1))},{direct:o,name:\"__nbindValueConstructor\",ptr:0,title:f.name+\" value constructor\",typeList:[\"void\",\"uint32_t\"].concat(p.slice(1))}];else{var h=_nbind.readAsciiString(a),v=(f.name&&f.name+\".\")+h;3!=u&&4!=u||(h=_removeAccessorPrefix(h)),c=[{boundID:e,direct:o,name:h,ptr:i,title:v,typeList:p}]}for(var m=0,g=c;m<g.length;m++){var y=g[m];y.signatureType=u,y.policyTbl=d,y.num=l,y.flags=s,f.addMethod(y)}}function _nbind_value(e,t){_nbind.typeNameTbl[e]||_nbind.throwError(\"Unknown value type \"+e),Module.NBind.bind_value(e,t),_defineHidden(_nbind.typeNameTbl[e].proto.prototype.__nbindValueConstructor)(t.prototype,\"__nbindValueConstructor\")}function __nbind_get_value_object(e,t){var n=_nbind.popValue(e);if(!n.fromJS)throw new Error(\"Object \"+n+\" has no fromJS function\");n.fromJS((function(){n.__nbindValueConstructor.apply(this,Array.prototype.concat.apply([t],arguments))}))}function _emscripten_memcpy_big(e,t,n){return HEAPU8.set(HEAPU8.subarray(t,t+n),e),e}function __nbind_register_primitive(e,t,n){var r={flags:1024|n,id:e,ptrSize:t};_nbind.makeType(_nbind.constructType,r)}Module._nbind_value=_nbind_value;var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],\"i8\",ALLOC_STATIC);function ___setErrNo(e){return Module.___errno_location&&(HEAP32[Module.___errno_location()>>2]=e),e}function _llvm_stacksave(){var e=_llvm_stacksave;return e.LLVM_SAVEDSTACKS||(e.LLVM_SAVEDSTACKS=[]),e.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),e.LLVM_SAVEDSTACKS.length-1}function ___syscall140(e,t){SYSCALLS.varargs=t;try{var n=SYSCALLS.getStreamFromFD(),r=(SYSCALLS.get(),SYSCALLS.get()),i=SYSCALLS.get(),o=SYSCALLS.get(),u=r;return FS.llseek(n,u,o),HEAP32[i>>2]=n.position,n.getdents&&0===u&&0===o&&(n.getdents=null),0}catch(e){return\"undefined\"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function ___syscall146(e,t){SYSCALLS.varargs=t;try{var n=SYSCALLS.get(),r=SYSCALLS.get(),i=SYSCALLS.get(),o=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(e,t){var n=___syscall146.buffers[e];assert(n),0===t||10===t?((1===e?Module.print:Module.printErr)(UTF8ArrayToString(n,0)),n.length=0):n.push(t)});for(var u=0;u<i;u++){for(var a=HEAP32[r+8*u>>2],l=HEAP32[r+(8*u+4)>>2],s=0;s<l;s++)___syscall146.printChar(n,HEAPU8[a+s]);o+=l}return o}catch(e){return\"undefined\"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function __nbind_finish(){for(var e=0,t=_nbind.BindClass.list;e<t.length;e++)t[e].finish()}var ___dso_handle=STATICTOP;function invoke_viiiii(e,t,n,r,i,o){try{Module.dynCall_viiiii(e,t,n,r,i,o)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_vif(e,t,n){try{Module.dynCall_vif(e,t,n)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_vid(e,t,n){try{Module.dynCall_vid(e,t,n)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_fiff(e,t,n,r){try{return Module.dynCall_fiff(e,t,n,r)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_vi(e,t){try{Module.dynCall_vi(e,t)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_vii(e,t,n){try{Module.dynCall_vii(e,t,n)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_ii(e,t){try{return Module.dynCall_ii(e,t)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_viddi(e,t,n,r,i){try{Module.dynCall_viddi(e,t,n,r,i)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_vidd(e,t,n,r){try{Module.dynCall_vidd(e,t,n,r)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_iiii(e,t,n,r){try{return Module.dynCall_iiii(e,t,n,r)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_diii(e,t,n,r){try{return Module.dynCall_diii(e,t,n,r)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_di(e,t){try{return Module.dynCall_di(e,t)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_iid(e,t,n){try{return Module.dynCall_iid(e,t,n)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_iii(e,t,n){try{return Module.dynCall_iii(e,t,n)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_viiddi(e,t,n,r,i,o){try{Module.dynCall_viiddi(e,t,n,r,i,o)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_viiiiii(e,t,n,r,i,o,u){try{Module.dynCall_viiiiii(e,t,n,r,i,o,u)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_dii(e,t,n){try{return Module.dynCall_dii(e,t,n)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_i(e){try{return Module.dynCall_i(e)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_iiiiii(e,t,n,r,i,o){try{return Module.dynCall_iiiiii(e,t,n,r,i,o)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_viiid(e,t,n,r,i){try{Module.dynCall_viiid(e,t,n,r,i)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_viififi(e,t,n,r,i,o,u){try{Module.dynCall_viififi(e,t,n,r,i,o,u)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_viii(e,t,n,r){try{Module.dynCall_viii(e,t,n,r)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_v(e){try{Module.dynCall_v(e)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_viid(e,t,n,r){try{Module.dynCall_viid(e,t,n,r)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_idd(e,t,n){try{return Module.dynCall_idd(e,t,n)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}function invoke_viiii(e,t,n,r,i){try{Module.dynCall_viiii(e,t,n,r,i)}catch(e){if(\"number\"!=typeof e&&\"longjmp\"!==e)throw e;Module.setThrew(1,0)}}STATICTOP+=16,function(_nbind){var typeIdTbl={};_nbind.typeNameTbl={};var Pool=function(){function e(){}return e.lalloc=function(t){t=t+7&-8;var n=HEAPU32[e.usedPtr];return t>e.pageSize/2||t>e.pageSize-n?_nbind.typeNameTbl.NBind.proto.lalloc(t):(HEAPU32[e.usedPtr]=n+t,e.rootPtr+n)},e.lreset=function(t,n){HEAPU32[e.pagePtr]?_nbind.typeNameTbl.NBind.proto.lreset(t,n):HEAPU32[e.usedPtr]=t},e}();function constructType(e,t){var n=new(10240==e?_nbind.makeTypeNameTbl[t.name]||_nbind.BindType:_nbind.makeTypeKindTbl[e])(t);return typeIdTbl[t.id]=n,_nbind.typeNameTbl[t.name]=n,n}function getType(e){return typeIdTbl[e]}function queryType(e){var t=HEAPU8[e],n=_nbind.structureList[t][1];e/=4,n<0&&(++e,n=HEAPU32[e]+1);var r=Array.prototype.slice.call(HEAPU32.subarray(e+1,e+1+n));return 9==t&&(r=[r[0],r.slice(1)]),{paramList:r,placeholderFlag:t}}function getTypes(e,t){return e.map((function(e){return\"number\"==typeof e?_nbind.getComplexType(e,constructType,getType,queryType,t):_nbind.typeNameTbl[e]}))}function readTypeIdList(e,t){return Array.prototype.slice.call(HEAPU32,e/4,e/4+t)}function readAsciiString(e){for(var t=e;HEAPU8[t++];);return String.fromCharCode.apply(\"\",HEAPU8.subarray(e,t-1))}function readPolicyList(e){var t={};if(e)for(;;){var n=HEAPU32[e/4];if(!n)break;t[readAsciiString(n)]=!0,e+=4}return t}function getDynCall(e,t){var n={float32_t:\"d\",float64_t:\"d\",int64_t:\"d\",uint64_t:\"d\",void:\"v\"},r=e.map((function(e){return n[e.name]||\"i\"})).join(\"\"),i=Module[\"dynCall_\"+r];if(!i)throw new Error(\"dynCall_\"+r+\" not found for \"+t+\"(\"+e.map((function(e){return e.name})).join(\", \")+\")\");return i}function addMethod(e,t,n,r){var i=e[t];e.hasOwnProperty(t)&&i?((i.arity||0===i.arity)&&(i=_nbind.makeOverloader(i,i.arity),e[t]=i),i.addMethod(n,r)):(n.arity=r,e[t]=n)}function throwError(e){throw new Error(e)}_nbind.Pool=Pool,_nbind.constructType=constructType,_nbind.getType=getType,_nbind.queryType=queryType,_nbind.getTypes=getTypes,_nbind.readTypeIdList=readTypeIdList,_nbind.readAsciiString=readAsciiString,_nbind.readPolicyList=readPolicyList,_nbind.getDynCall=getDynCall,_nbind.addMethod=addMethod,_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.heap=HEAPU32,t.ptrSize=4,t}return __extends(t,e),t.prototype.needsWireRead=function(e){return!!this.wireRead||!!this.makeWireRead},t.prototype.needsWireWrite=function(e){return!!this.wireWrite||!!this.makeWireWrite},t}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(e){function t(t){var n=e.call(this,t)||this,r=32&t.flags?{32:HEAPF32,64:HEAPF64}:8&t.flags?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return n.heap=r[8*t.ptrSize],n.ptrSize=t.ptrSize,n}return __extends(t,e),t.prototype.needsWireWrite=function(e){return!!e&&!!e.Strict},t.prototype.makeWireWrite=function(e,t){return t&&t.Strict&&function(e){if(\"number\"==typeof e)return e;throw new Error(\"Type mismatch\")}},t}(BindType);function pushCString(e,t){if(null==e){if(t&&t.Nullable)return 0;throw new Error(\"Type mismatch\")}if(t&&t.Strict){if(\"string\"!=typeof e)throw new Error(\"Type mismatch\")}else e=e.toString();var n=Module.lengthBytesUTF8(e)+1,r=_nbind.Pool.lalloc(n);return Module.stringToUTF8Array(e,HEAPU8,r,n),r}function popCString(e){return 0===e?null:Module.Pointer_stringify(e)}_nbind.PrimitiveType=PrimitiveType,_nbind.pushCString=pushCString,_nbind.popCString=popCString;var CStringType=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.wireRead=popCString,t.wireWrite=pushCString,t.readResources=[_nbind.resources.pool],t.writeResources=[_nbind.resources.pool],t}return __extends(t,e),t.prototype.makeWireWrite=function(e,t){return function(e){return pushCString(e,t)}},t}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.wireRead=function(e){return!!e},t}return __extends(t,e),t.prototype.needsWireWrite=function(e){return!!e&&!!e.Strict},t.prototype.makeWireRead=function(e){return\"!!(\"+e+\")\"},t.prototype.makeWireWrite=function(e,t){return t&&t.Strict&&function(e){if(\"boolean\"==typeof e)return e;throw new Error(\"Type mismatch\")}||e},t}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function e(){}return e.prototype.persist=function(){this.__nbindState|=1},e}();function makeBound(e,t){var n=function(e){function n(t,r,i,o){var u=e.call(this)||this;if(!(u instanceof n))return new(Function.prototype.bind.apply(n,Array.prototype.concat.apply([null],arguments)));var a=r,l=i,s=o;if(t!==_nbind.ptrMarker){var c=u.__nbindConstructor.apply(u,arguments);a=4608,s=HEAPU32[c/4],l=HEAPU32[c/4+1]}var f={configurable:!0,enumerable:!1,value:null,writable:!1},d={__nbindFlags:a,__nbindPtr:l};s&&(d.__nbindShared=s,_nbind.mark(u));for(var p=0,h=Object.keys(d);p<h.length;p++){var v=h[p];f.value=d[v],Object.defineProperty(u,v,f)}return _defineHidden(0)(u,\"__nbindState\"),u}return __extends(n,e),n.prototype.free=function(){t.destroy.call(this,this.__nbindShared,this.__nbindFlags),this.__nbindState|=2,disableMember(this,\"__nbindShared\"),disableMember(this,\"__nbindPtr\")},n}(Wrapper);return __decorate([_defineHidden()],n.prototype,\"__nbindConstructor\",void 0),__decorate([_defineHidden()],n.prototype,\"__nbindValueConstructor\",void 0),__decorate([_defineHidden(e)],n.prototype,\"__nbindPolicies\",void 0),n}function disableMember(e,t){function n(){throw new Error(\"Accessing deleted object\")}Object.defineProperty(e,t,{configurable:!1,enumerable:!1,get:n,set:n})}_nbind.Wrapper=Wrapper,_nbind.makeBound=makeBound,_nbind.ptrMarker={};var BindClass=function(e){function t(t){var n=e.call(this,t)||this;return n.wireRead=function(e){return _nbind.popValue(e,n.ptrType)},n.wireWrite=function(e){return pushPointer(e,n.ptrType,!0)},n.pendingSuperCount=0,n.ready=!1,n.methodTbl={},t.paramList?(n.classType=t.paramList[0].classType,n.proto=n.classType.proto):n.classType=n,n}return __extends(t,e),t.prototype.makeBound=function(e){var t=_nbind.makeBound(e,this);return this.proto=t,this.ptrType.proto=t,t},t.prototype.addMethod=function(e){var t=this.methodTbl[e.name]||[];t.push(e),this.methodTbl[e.name]=t},t.prototype.registerMethods=function(e,t){for(var n,r=0,i=Object.keys(e.methodTbl);r<i.length;r++)for(var o=i[r],u=0,a=e.methodTbl[o];u<a.length;u++){var l=a[u],s=void 0,c=void 0;if(s=this.proto.prototype,!t||1==l.signatureType)switch(l.signatureType){case 1:s=this.proto;case 5:c=_nbind.makeCaller(l),_nbind.addMethod(s,l.name,c,l.typeList.length-1);break;case 4:n=_nbind.makeMethodCaller(e.ptrType,l);break;case 3:Object.defineProperty(s,l.name,{configurable:!0,enumerable:!1,get:_nbind.makeMethodCaller(e.ptrType,l),set:n});break;case 2:c=_nbind.makeMethodCaller(e.ptrType,l),_nbind.addMethod(s,l.name,c,l.typeList.length-1)}}},t.prototype.registerSuperMethods=function(e,t,n){if(!n[e.name]){n[e.name]=!0;for(var r,i=0,o=0,u=e.superIdList||[];o<u.length;o++){var a=u[o],l=_nbind.getType(a);r=i++<t||t<0?-1:0,this.registerSuperMethods(l,r,n)}this.registerMethods(e,t<0)}},t.prototype.finish=function(){if(this.ready)return this;this.ready=!0,this.superList=(this.superIdList||[]).map((function(e){return _nbind.getType(e).finish()}));var e=this.proto;if(this.superList.length){var t=function(){this.constructor=e};t.prototype=this.superList[0].proto.prototype,e.prototype=new t}return e!=Module&&(e.prototype.__nbindType=this),this.registerSuperMethods(this,1,{}),this},t.prototype.upcastStep=function(e,t){if(e==this)return t;for(var n=0;n<this.superList.length;++n){var r=this.superList[n].upcastStep(e,_nbind.callUpcast(this.upcastList[n],t));if(r)return r}return 0},t}(_nbind.BindType);function popPointer(e,t){return e?new t.proto(_nbind.ptrMarker,t.flags,e):null}function pushPointer(e,t,n){if(!(e instanceof _nbind.Wrapper)){if(n)return _nbind.pushValue(e);throw new Error(\"Type mismatch\")}var r=e.__nbindPtr,i=e.__nbindType.classType,o=t.classType;if(e instanceof t.proto)for(;i!=o;)r=_nbind.callUpcast(i.upcastList[0],r),i=i.superList[0];else if(!(r=i.upcastStep(o,r)))throw new Error(\"Type mismatch\");return r}function pushMutablePointer(e,t){var n=pushPointer(e,t);if(1&e.__nbindFlags)throw new Error(\"Passing a const value as a non-const argument\");return n}BindClass.list=[],_nbind.BindClass=BindClass,_nbind.popPointer=popPointer,_nbind.pushPointer=pushPointer;var BindClassPtr=function(e){function t(t){var n=e.call(this,t)||this;n.classType=t.paramList[0].classType,n.proto=n.classType.proto;var r=1&t.flags,i=256==(896&n.flags)&&2&t.flags,o=r?pushPointer:pushMutablePointer,u=i?_nbind.popValue:popPointer;return n.makeWireWrite=function(e,t){return t.Nullable?function(e){return e?o(e,n):0}:function(e){return o(e,n)}},n.wireRead=function(e){return u(e,n)},n.wireWrite=function(e){return o(e,n)},n}return __extends(t,e),t}(_nbind.BindType);function popShared(e,t){var n=HEAPU32[e/4],r=HEAPU32[e/4+1];return r?new t.proto(_nbind.ptrMarker,t.flags,r,n):null}function pushShared(e,t){if(!(e instanceof t.proto))throw new Error(\"Type mismatch\");return e.__nbindShared}function pushMutableShared(e,t){if(!(e instanceof t.proto))throw new Error(\"Type mismatch\");if(1&e.__nbindFlags)throw new Error(\"Passing a const value as a non-const argument\");return e.__nbindShared}_nbind.BindClassPtr=BindClassPtr,_nbind.popShared=popShared;var SharedClassPtr=function(e){function t(t){var n=e.call(this,t)||this;n.readResources=[_nbind.resources.pool],n.classType=t.paramList[0].classType,n.proto=n.classType.proto;var r=1&t.flags?pushShared:pushMutableShared;return n.wireRead=function(e){return popShared(e,n)},n.wireWrite=function(e){return r(e,n)},n}return __extends(t,e),t}(_nbind.BindType);_nbind.SharedClassPtr=SharedClassPtr,_nbind.externalList=[0];var firstFreeExternal=0,External=function(){function e(e){this.refCount=1,this.data=e}return e.prototype.register=function(){var e=firstFreeExternal;return e?firstFreeExternal=_nbind.externalList[e]:e=_nbind.externalList.length,_nbind.externalList[e]=this,e},e.prototype.reference=function(){++this.refCount},e.prototype.dereference=function(e){0==--this.refCount&&(this.free&&this.free(),_nbind.externalList[e]=firstFreeExternal,firstFreeExternal=e)},e}();function popExternal(e){var t=_nbind.externalList[e];return t.dereference(e),t.data}function pushExternal(e){var t=new External(e);return t.reference(),t.register()}_nbind.External=External;var ExternalType=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.wireRead=popExternal,t.wireWrite=pushExternal,t}return __extends(t,e),t}(_nbind.BindType);_nbind.ExternalType=ExternalType,_nbind.callbackSignatureList=[];var CallbackType=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.wireWrite=function(e){return\"function\"!=typeof e&&_nbind.throwError(\"Type mismatch\"),new _nbind.External(e).register()},t}return __extends(t,e),t}(_nbind.BindType);_nbind.CallbackType=CallbackType,_nbind.valueList=[0];var firstFreeValue=0;function pushValue(e){var t=firstFreeValue;return t?firstFreeValue=_nbind.valueList[t]:t=_nbind.valueList.length,_nbind.valueList[t]=e,2*t+1}function popValue(e,t){if(e||_nbind.throwError(\"Value type JavaScript class is missing or not registered\"),1&e){e>>=1;var n=_nbind.valueList[e];return _nbind.valueList[e]=firstFreeValue,firstFreeValue=e,n}if(t)return _nbind.popShared(e,t);throw new Error(\"Invalid value slot \"+e)}_nbind.pushValue=pushValue,_nbind.popValue=popValue;var valueBase=0x10000000000000000;function push64(e){return\"number\"==typeof e?e:4096*pushValue(e)+valueBase}function pop64(e){return e<valueBase?e:popValue((e-valueBase)/4096)}var CreateValueType=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),t.prototype.makeWireWrite=function(e){return\"(_nbind.pushValue(new \"+e+\"))\"},t}(_nbind.BindType);_nbind.CreateValueType=CreateValueType;var Int64Type=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.wireWrite=push64,t.wireRead=pop64,t}return __extends(t,e),t}(_nbind.BindType);function pushArray(e,t){if(!e)return 0;var n=e.length;if((t.size||0===t.size)&&n<t.size)throw new Error(\"Type mismatch\");var r=t.memberType.ptrSize,i=_nbind.Pool.lalloc(4+n*r);HEAPU32[i/4]=n;var o=t.memberType.heap,u=(i+4)/r,a=t.memberType.wireWrite,l=0;if(a)for(;l<n;)o[u++]=a(e[l++]);else for(;l<n;)o[u++]=e[l++];return i}function popArray(e,t){if(0===e)return null;var n=HEAPU32[e/4],r=new Array(n),i=t.memberType.heap;e=(e+4)/t.memberType.ptrSize;var o=t.memberType.wireRead,u=0;if(o)for(;u<n;)r[u++]=o(i[e++]);else for(;u<n;)r[u++]=i[e++];return r}_nbind.Int64Type=Int64Type,_nbind.pushArray=pushArray,_nbind.popArray=popArray;var ArrayType=function(e){function t(t){var n=e.call(this,t)||this;return n.wireRead=function(e){return popArray(e,n)},n.wireWrite=function(e){return pushArray(e,n)},n.readResources=[_nbind.resources.pool],n.writeResources=[_nbind.resources.pool],n.memberType=t.paramList[0],t.paramList[1]&&(n.size=t.paramList[1]),n}return __extends(t,e),t}(_nbind.BindType);function pushString(e,t){if(null==e){if(!t||!t.Nullable)throw new Error(\"Type mismatch\");e=\"\"}if(t&&t.Strict){if(\"string\"!=typeof e)throw new Error(\"Type mismatch\")}else e=e.toString();var n=Module.lengthBytesUTF8(e),r=_nbind.Pool.lalloc(4+n+1);return HEAPU32[r/4]=n,Module.stringToUTF8Array(e,HEAPU8,r+4,n+1),r}function popString(e){if(0===e)return null;var t=HEAPU32[e/4];return Module.Pointer_stringify(e+4,t)}_nbind.ArrayType=ArrayType,_nbind.pushString=pushString,_nbind.popString=popString;var StringType=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.wireRead=popString,t.wireWrite=pushString,t.readResources=[_nbind.resources.pool],t.writeResources=[_nbind.resources.pool],t}return __extends(t,e),t.prototype.makeWireWrite=function(e,t){return function(e){return pushString(e,t)}},t}(_nbind.BindType);function makeArgList(e){return Array.apply(null,Array(e)).map((function(e,t){return\"a\"+(t+1)}))}function anyNeedsWireWrite(e,t){return e.reduce((function(e,n){return e||n.needsWireWrite(t)}),!1)}function anyNeedsWireRead(e,t){return e.reduce((function(e,n){return e||!!n.needsWireRead(t)}),!1)}function makeWireRead(e,t,n,r){var i=e.length;return n.makeWireRead?n.makeWireRead(r,e,i):n.wireRead?(e[i]=n.wireRead,\"(convertParamList[\"+i+\"](\"+r+\"))\"):r}function makeWireWrite(e,t,n,r){var i,o=e.length;return(i=n.makeWireWrite?n.makeWireWrite(r,t,e,o):n.wireWrite)?\"string\"==typeof i?i:(e[o]=i,\"(convertParamList[\"+o+\"](\"+r+\"))\"):r}function buildCallerFunction(dynCall,ptrType,ptr,num,policyTbl,needsWireWrite,prefix,returnType,argTypeList,mask,err){var argList=makeArgList(argTypeList.length),convertParamList=[],callExpression=makeWireRead(convertParamList,policyTbl,returnType,\"dynCall(\"+[prefix].concat(argList.map((function(e,t){return makeWireWrite(convertParamList,policyTbl,argTypeList[t],e)}))).join(\",\")+\")\"),resourceSet=_nbind.listResources([returnType],argTypeList),sourceCode=\"function(\"+argList.join(\",\")+\"){\"+(mask?\"this.__nbindFlags&mask&&err();\":\"\")+resourceSet.makeOpen()+\"var r=\"+callExpression+\";\"+resourceSet.makeClose()+\"return r;}\";return eval(\"(\"+sourceCode+\")\")}function buildJSCallerFunction(returnType,argTypeList){var argList=makeArgList(argTypeList.length),convertParamList=[],callExpression=makeWireWrite(convertParamList,null,returnType,\"_nbind.externalList[num].data(\"+argList.map((function(e,t){return makeWireRead(convertParamList,null,argTypeList[t],e)})).join(\",\")+\")\"),resourceSet=_nbind.listResources(argTypeList,[returnType]);resourceSet.remove(_nbind.resources.pool);var sourceCode=\"function(\"+[\"dummy\",\"num\"].concat(argList).join(\",\")+\"){\"+resourceSet.makeOpen()+\"var r=\"+callExpression+\";\"+resourceSet.makeClose()+\"return r;}\";return eval(\"(\"+sourceCode+\")\")}function makeJSCaller(e){var t=e.length-1,n=_nbind.getTypes(e,\"callback\"),r=n[0],i=n.slice(1),o=anyNeedsWireRead(i,null);if(!r.needsWireWrite(null)&&!o)switch(t){case 0:return function(e,t){return _nbind.externalList[t].data()};case 1:return function(e,t,n){return _nbind.externalList[t].data(n)};case 2:return function(e,t,n,r){return _nbind.externalList[t].data(n,r)};case 3:return function(e,t,n,r,i){return _nbind.externalList[t].data(n,r,i)}}return buildJSCallerFunction(r,i)}function makeMethodCaller(e,t){var n=t.typeList.length-1,r=t.typeList.slice(0);r.splice(1,0,\"uint32_t\",t.boundID);var i=_nbind.getTypes(r,t.title),o=i[0],u=i.slice(3),a=o.needsWireRead(t.policyTbl),l=anyNeedsWireWrite(u,t.policyTbl),s=t.ptr,c=t.num,f=_nbind.getDynCall(i,t.title),d=1&~t.flags;function p(){throw new Error(\"Calling a non-const method on a const object\")}if(!a&&!l)switch(n){case 0:return function(){return this.__nbindFlags&d?p():f(s,c,_nbind.pushPointer(this,e))};case 1:return function(t){return this.__nbindFlags&d?p():f(s,c,_nbind.pushPointer(this,e),t)};case 2:return function(t,n){return this.__nbindFlags&d?p():f(s,c,_nbind.pushPointer(this,e),t,n)};case 3:return function(t,n,r){return this.__nbindFlags&d?p():f(s,c,_nbind.pushPointer(this,e),t,n,r)}}return buildCallerFunction(f,e,s,c,t.policyTbl,l,\"ptr,num,pushPointer(this,ptrType)\",o,u,d,p)}function makeCaller(e){var t,n=e.typeList.length-1,r=_nbind.getTypes(e.typeList,e.title),i=r[0],o=r.slice(1),u=i.needsWireRead(e.policyTbl),a=anyNeedsWireWrite(o,e.policyTbl),l=e.direct,s=e.ptr;if(e.direct&&!u&&!a){var c=_nbind.getDynCall(r,e.title);switch(n){case 0:return function(){return c(l)};case 1:return function(e){return c(l,e)};case 2:return function(e,t){return c(l,e,t)};case 3:return function(e,t,n){return c(l,e,t,n)}}s=0}if(s){var f=e.typeList.slice(0);f.splice(1,0,\"uint32_t\"),r=_nbind.getTypes(f,e.title),t=\"ptr,num\"}else s=l,t=\"ptr\";return buildCallerFunction(_nbind.getDynCall(r,e.title),null,s,e.num,e.policyTbl,a,t,i,o)}function makeOverloader(e,t){var n=[];function r(){return n[arguments.length].apply(this,arguments)}return r.addMethod=function(e,t){n[t]=e},r.addMethod(e,t),r}_nbind.StringType=StringType,_nbind.buildJSCallerFunction=buildJSCallerFunction,_nbind.makeJSCaller=makeJSCaller,_nbind.makeMethodCaller=makeMethodCaller,_nbind.makeCaller=makeCaller,_nbind.makeOverloader=makeOverloader;var Resource=function(){function e(e,t){var n=this;this.makeOpen=function(){return Object.keys(n.openTbl).join(\"\")},this.makeClose=function(){return Object.keys(n.closeTbl).join(\"\")},this.openTbl={},this.closeTbl={},e&&(this.openTbl[e]=!0),t&&(this.closeTbl[t]=!0)}return e.prototype.add=function(e){for(var t=0,n=Object.keys(e.openTbl);t<n.length;t++){var r=n[t];this.openTbl[r]=!0}for(var i=0,o=Object.keys(e.closeTbl);i<o.length;i++)r=o[i],this.closeTbl[r]=!0},e.prototype.remove=function(e){for(var t=0,n=Object.keys(e.openTbl);t<n.length;t++){var r=n[t];delete this.openTbl[r]}for(var i=0,o=Object.keys(e.closeTbl);i<o.length;i++)r=o[i],delete this.closeTbl[r]},e}();function listResources(e,t){for(var n=new Resource,r=0,i=e;r<i.length;r++)for(var o=0,u=i[r].readResources||[];o<u.length;o++){var a=u[o];n.add(a)}for(var l=0,s=t;l<s.length;l++)for(var c=0,f=s[l].writeResources||[];c<f.length;c++)a=f[c],n.add(a);return n}_nbind.Resource=Resource,_nbind.listResources=listResources,_nbind.resources={pool:new Resource(\"var used=HEAPU32[_nbind.Pool.usedPtr],page=HEAPU32[_nbind.Pool.pagePtr];\",\"_nbind.Pool.lreset(used,page);\")};var ExternalBuffer=function(e){function t(t,n){var r=e.call(this,t)||this;return r.ptr=n,r}return __extends(t,e),t.prototype.free=function(){_free(this.ptr)},t}(_nbind.External);function getBuffer(e){return e instanceof ArrayBuffer?new Uint8Array(e):e instanceof DataView?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e}function pushBuffer(e,t){if(null==e&&t&&t.Nullable&&(e=[]),\"object\"!=typeof e)throw new Error(\"Type mismatch\");var n=e,r=n.byteLength||n.length;if(!r&&0!==r&&0!==n.byteLength)throw new Error(\"Type mismatch\");var i=_nbind.Pool.lalloc(8),o=_malloc(r),u=i/4;return HEAPU32[u++]=r,HEAPU32[u++]=o,HEAPU32[u++]=new ExternalBuffer(e,o).register(),HEAPU8.set(getBuffer(e),o),i}var BufferType=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.wireWrite=pushBuffer,t.readResources=[_nbind.resources.pool],t.writeResources=[_nbind.resources.pool],t}return __extends(t,e),t.prototype.makeWireWrite=function(e,t){return function(e){return pushBuffer(e,t)}},t}(_nbind.BindType);function commitBuffer(e,t,n){var r=_nbind.externalList[e].data,i=Buffer;if(\"function\"!=typeof Buffer&&(i=function(){}),r instanceof Array);else{var o=HEAPU8.subarray(t,t+n);r instanceof i?(\"function\"==typeof Buffer.from&&Buffer.from.length>=3?Buffer.from(o):new Buffer(o)).copy(r):getBuffer(r).set(o)}}_nbind.BufferType=BufferType,_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var e=0,t=dirtyList;e<t.length;e++){var n=t[e];3&n.__nbindState||n.free()}dirtyList=[],gcTimer=0}function toggleLightGC(e){_nbind.mark=e?function(e){dirtyList.push(e),gcTimer||(gcTimer=setTimeout(sweep,0))}:function(e){}}_nbind.mark=function(e){},_nbind.toggleLightGC=toggleLightGC}(_nbind),Module.requestFullScreen=function(e,t,n){Module.printErr(\"Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.\"),Module.requestFullScreen=Module.requestFullscreen,Browser.requestFullScreen(e,t,n)},Module.requestFullscreen=function(e,t,n){Browser.requestFullscreen(e,t,n)},Module.requestAnimationFrame=function(e){Browser.requestAnimationFrame(e)},Module.setCanvasSize=function(e,t,n){Browser.setCanvasSize(e,t,n)},Module.pauseMainLoop=function(){Browser.mainLoop.pause()},Module.resumeMainLoop=function(){Browser.mainLoop.resume()},Module.getUserMedia=function(){Browser.getUserMedia()},Module.createContext=function(e,t,n,r){return Browser.createContext(e,t,n,r)},_emscripten_get_now=ENVIRONMENT_IS_NODE?function(){var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:\"undefined\"!=typeof dateNow?dateNow:\"object\"==typeof self&&self.performance&&\"function\"==typeof self.performance.now?function(){return self.performance.now()}:\"object\"==typeof performance&&\"function\"==typeof performance.now?function(){return performance.now()}:Date.now,__ATEXIT__.push((function(){var e=Module._fflush;e&&e(0);var t=___syscall146.printChar;if(t){var n=___syscall146.buffers;n[1].length&&t(1,10),n[2].length&&t(2,10)}})),DYNAMICTOP_PTR=allocate(1,\"i32\",ALLOC_STATIC),STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP),STACK_MAX=STACK_BASE+TOTAL_STACK,DYNAMIC_BASE=Runtime.alignMemory(STACK_MAX),HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE,staticSealed=!0,Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(e,t,n){\"use asm\";var r=new e.Int8Array(n);var i=new e.Int16Array(n);var o=new e.Int32Array(n);var u=new e.Uint8Array(n);var a=new e.Uint16Array(n);var l=new e.Uint32Array(n);var s=new e.Float32Array(n);var c=new e.Float64Array(n);var f=t.DYNAMICTOP_PTR|0;var d=t.tempDoublePtr|0;var p=t.ABORT|0;var h=t.STACKTOP|0;var v=t.STACK_MAX|0;var m=t.cttz_i8|0;var g=t.___dso_handle|0;var y=0;var _=0;var b=0;var w=0;var E=e.NaN,D=e.Infinity;var S=0,C=0,k=0,T=0,x=0.0;var A=0;var O=e.Math.floor;var P=e.Math.abs;var I=e.Math.sqrt;var N=e.Math.pow;var M=e.Math.cos;var R=e.Math.sin;var F=e.Math.tan;var L=e.Math.acos;var B=e.Math.asin;var j=e.Math.atan;var U=e.Math.atan2;var z=e.Math.exp;var W=e.Math.log;var H=e.Math.ceil;var V=e.Math.imul;var q=e.Math.min;var G=e.Math.max;var $=e.Math.clz32;var Y=e.Math.fround;var K=t.abort;var X=t.assert;var Q=t.enlargeMemory;var J=t.getTotalMemory;var Z=t.abortOnCannotGrowMemory;var ee=t.invoke_viiiii;var te=t.invoke_vif;var ne=t.invoke_vid;var re=t.invoke_fiff;var ie=t.invoke_vi;var oe=t.invoke_vii;var ue=t.invoke_ii;var ae=t.invoke_viddi;var le=t.invoke_vidd;var se=t.invoke_iiii;var ce=t.invoke_diii;var fe=t.invoke_di;var de=t.invoke_iid;var pe=t.invoke_iii;var he=t.invoke_viiddi;var ve=t.invoke_viiiiii;var me=t.invoke_dii;var ge=t.invoke_i;var ye=t.invoke_iiiiii;var _e=t.invoke_viiid;var be=t.invoke_viififi;var we=t.invoke_viii;var Ee=t.invoke_v;var De=t.invoke_viid;var Se=t.invoke_idd;var Ce=t.invoke_viiii;var ke=t._emscripten_asm_const_iiiii;var Te=t._emscripten_asm_const_iiidddddd;var xe=t._emscripten_asm_const_iiiid;var Ae=t.__nbind_reference_external;var Oe=t._emscripten_asm_const_iiiiiiii;var Pe=t._removeAccessorPrefix;var Ie=t._typeModule;var Ne=t.__nbind_register_pool;var Me=t.__decorate;var Re=t._llvm_stackrestore;var Fe=t.___cxa_atexit;var Le=t.__extends;var Be=t.__nbind_get_value_object;var je=t.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj;var Ue=t._emscripten_set_main_loop_timing;var ze=t.__nbind_register_primitive;var We=t.__nbind_register_type;var He=t._emscripten_memcpy_big;var Ve=t.__nbind_register_function;var qe=t.___setErrNo;var Ge=t.__nbind_register_class;var $e=t.__nbind_finish;var Ye=t._abort;var Ke=t._nbind_value;var Xe=t._llvm_stacksave;var Qe=t.___syscall54;var Je=t._defineHidden;var Ze=t._emscripten_set_main_loop;var et=t._emscripten_get_now;var tt=t.__nbind_register_callback_signature;var nt=t._emscripten_asm_const_iiiiii;var rt=t.__nbind_free_external;var it=t._emscripten_asm_const_iiii;var ot=t._emscripten_asm_const_iiididi;var ut=t.___syscall6;var at=t._atexit;var lt=t.___syscall140;var st=t.___syscall146;var ct=Y(0);const ft=Y(0);function dt(e){e=e|0;var t=0;t=h;h=h+e|0;h=h+15&-16;return t|0}function pt(){return h|0}function ht(e){e=e|0;h=e}function vt(e,t){e=e|0;t=t|0;h=e;v=t}function mt(e,t){e=e|0;t=t|0;if(!y){y=e;_=t}}function gt(e){e=e|0;A=e}function yt(){return A|0}function _t(){var e=0,t=0;ix(8104,8,400)|0;ix(8504,408,540)|0;e=9044;t=e+44|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));r[9088]=0;r[9089]=1;o[2273]=0;o[2274]=948;o[2275]=948;Fe(17,8104,g|0)|0;return}function bt(e){e=e|0;qt(e+948|0);return}function wt(e){e=Y(e);return((Ii(e)|0)&2147483647)>>>0>2139095040|0}function Et(e,t,n){e=e|0;t=t|0;n=n|0;e:do{if(!(o[e+(t<<3)+4>>2]|0)){if((t|2|0)==3?o[e+60>>2]|0:0){e=e+56|0;break}switch(t|0){case 0:case 2:case 4:case 5:{if(o[e+52>>2]|0){e=e+48|0;break e}break}default:{}}if(!(o[e+68>>2]|0)){e=(t|1|0)==5?948:n;break}else{e=e+64|0;break}}else e=e+(t<<3)|0}while(0);return e|0}function Dt(e){e=e|0;var t=0;t=qk(1e3)|0;St(e,(t|0)!=0,2456);o[2276]=(o[2276]|0)+1;ix(t|0,8104,1e3)|0;if(r[e+2>>0]|0){o[t+4>>2]=2;o[t+12>>2]=4}o[t+976>>2]=e;return t|0}function St(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0;i=h;h=h+16|0;r=i;if(!t){o[r>>2]=n;Lr(e,5,3197,r)}h=i;return}function Ct(){return Dt(956)|0}function kt(e){e=e|0;var t=0;t=$T(1e3)|0;Tt(t,e);St(o[e+976>>2]|0,1,2456);o[2276]=(o[2276]|0)+1;o[t+944>>2]=0;return t|0}function Tt(e,t){e=e|0;t=t|0;var n=0;ix(e|0,t|0,948)|0;Ur(e+948|0,t+948|0);n=e+960|0;e=t+960|0;t=n+40|0;do{o[n>>2]=o[e>>2];n=n+4|0;e=e+4|0}while((n|0)<(t|0));return}function xt(e){e=e|0;var t=0,n=0,r=0,i=0;t=e+944|0;n=o[t>>2]|0;if(n|0){At(n+948|0,e)|0;o[t>>2]=0}n=Ot(e)|0;if(n|0){t=0;do{o[(Pt(e,t)|0)+944>>2]=0;t=t+1|0}while((t|0)!=(n|0))}n=e+948|0;r=o[n>>2]|0;i=e+952|0;t=o[i>>2]|0;if((t|0)!=(r|0))o[i>>2]=t+(~((t+-4-r|0)>>>2)<<2);It(n);Gk(e);o[2276]=(o[2276]|0)+-1;return}function At(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0;r=o[e>>2]|0;l=e+4|0;n=o[l>>2]|0;u=n;e:do{if((r|0)==(n|0)){i=r;a=4}else{e=r;while(1){if((o[e>>2]|0)==(t|0)){i=e;a=4;break e}e=e+4|0;if((e|0)==(n|0)){e=0;break}}}}while(0);if((a|0)==4)if((i|0)!=(n|0)){r=i+4|0;e=u-r|0;t=e>>2;if(t){sx(i|0,r|0,e|0)|0;n=o[l>>2]|0}e=i+(t<<2)|0;if((n|0)==(e|0))e=1;else{o[l>>2]=n+(~((n+-4-e|0)>>>2)<<2);e=1}}else e=0;return e|0}function Ot(e){e=e|0;return(o[e+952>>2]|0)-(o[e+948>>2]|0)>>2|0}function Pt(e,t){e=e|0;t=t|0;var n=0;n=o[e+948>>2]|0;if((o[e+952>>2]|0)-n>>2>>>0>t>>>0)e=o[n+(t<<2)>>2]|0;else e=0;return e|0}function It(e){e=e|0;var t=0,n=0,r=0,i=0;r=h;h=h+32|0;t=r;i=o[e>>2]|0;n=(o[e+4>>2]|0)-i|0;if(((o[e+8>>2]|0)-i|0)>>>0>n>>>0){i=n>>2;Ni(t,i,i,e+8|0);Mi(e,t);Ri(t)}h=r;return}function Nt(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0;c=Ot(e)|0;do{if(c|0){if((o[(Pt(e,0)|0)+944>>2]|0)==(e|0)){if(!(At(e+948|0,t)|0))break;ix(t+400|0,8504,540)|0;o[t+944>>2]=0;Vt(e);break}a=o[(o[e+976>>2]|0)+12>>2]|0;l=e+948|0;s=(a|0)==0;n=0;u=0;do{r=o[(o[l>>2]|0)+(u<<2)>>2]|0;if((r|0)==(t|0))Vt(e);else{i=kt(r)|0;o[(o[l>>2]|0)+(n<<2)>>2]=i;o[i+944>>2]=e;if(!s)RA[a&15](r,i,e,n);n=n+1|0}u=u+1|0}while((u|0)!=(c|0));if(n>>>0<c>>>0){s=e+948|0;l=e+952|0;a=n;n=o[l>>2]|0;do{u=(o[s>>2]|0)+(a<<2)|0;r=u+4|0;i=n-r|0;t=i>>2;if(!t)i=n;else{sx(u|0,r|0,i|0)|0;n=o[l>>2]|0;i=n}r=u+(t<<2)|0;if((i|0)!=(r|0)){n=i+(~((i+-4-r|0)>>>2)<<2)|0;o[l>>2]=n}a=a+1|0}while((a|0)!=(c|0))}}}while(0);return}function Mt(e){e=e|0;var t=0,n=0,i=0,u=0;Rt(e,(Ot(e)|0)==0,2491);Rt(e,(o[e+944>>2]|0)==0,2545);t=e+948|0;n=o[t>>2]|0;i=e+952|0;u=o[i>>2]|0;if((u|0)!=(n|0))o[i>>2]=u+(~((u+-4-n|0)>>>2)<<2);It(t);t=e+976|0;n=o[t>>2]|0;ix(e|0,8104,1e3)|0;if(r[n+2>>0]|0){o[e+4>>2]=2;o[e+12>>2]=4}o[t>>2]=n;return}function Rt(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0;i=h;h=h+16|0;r=i;if(!t){o[r>>2]=n;Cr(e,5,3197,r)}h=i;return}function Ft(){return o[2276]|0}function Lt(){var e=0;e=qk(20)|0;Bt((e|0)!=0,2592);o[2277]=(o[2277]|0)+1;o[e>>2]=o[239];o[e+4>>2]=o[240];o[e+8>>2]=o[241];o[e+12>>2]=o[242];o[e+16>>2]=o[243];return e|0}function Bt(e,t){e=e|0;t=t|0;var n=0,r=0;r=h;h=h+16|0;n=r;if(!e){o[n>>2]=t;Cr(0,5,3197,n)}h=r;return}function jt(e){e=e|0;Gk(e);o[2277]=(o[2277]|0)+-1;return}function Ut(e,t){e=e|0;t=t|0;var n=0;if(!t){n=0;t=0}else{Rt(e,(Ot(e)|0)==0,2629);n=1}o[e+964>>2]=t;o[e+988>>2]=n;return}function zt(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;u=r+8|0;i=r+4|0;a=r;o[i>>2]=t;Rt(e,(o[t+944>>2]|0)==0,2709);Rt(e,(o[e+964>>2]|0)==0,2763);Wt(e);t=e+948|0;o[a>>2]=(o[t>>2]|0)+(n<<2);o[u>>2]=o[a>>2];Ht(t,u,i)|0;o[(o[i>>2]|0)+944>>2]=e;Vt(e);h=r;return}function Wt(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0;n=Ot(e)|0;if(n|0?(o[(Pt(e,0)|0)+944>>2]|0)!=(e|0):0){r=o[(o[e+976>>2]|0)+12>>2]|0;i=e+948|0;u=(r|0)==0;t=0;do{a=o[(o[i>>2]|0)+(t<<2)>>2]|0;l=kt(a)|0;o[(o[i>>2]|0)+(t<<2)>>2]=l;o[l+944>>2]=e;if(!u)RA[r&15](a,l,e,t);t=t+1|0}while((t|0)!=(n|0))}return}function Ht(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0,_=0;y=h;h=h+64|0;d=y+52|0;l=y+48|0;p=y+28|0;v=y+24|0;m=y+20|0;g=y;r=o[e>>2]|0;u=r;t=r+((o[t>>2]|0)-u>>2<<2)|0;r=e+4|0;i=o[r>>2]|0;a=e+8|0;do{if(i>>>0<(o[a>>2]|0)>>>0){if((t|0)==(i|0)){o[t>>2]=o[n>>2];o[r>>2]=(o[r>>2]|0)+4;break}Fi(e,t,i,t+4|0);if(t>>>0<=n>>>0)n=(o[r>>2]|0)>>>0>n>>>0?n+4|0:n;o[t>>2]=o[n>>2]}else{r=(i-u>>2)+1|0;i=Hr(e)|0;if(i>>>0<r>>>0)UT(e);f=o[e>>2]|0;c=(o[a>>2]|0)-f|0;u=c>>1;Ni(g,c>>2>>>0<i>>>1>>>0?u>>>0<r>>>0?r:u:i,t-f>>2,e+8|0);f=g+8|0;r=o[f>>2]|0;u=g+12|0;c=o[u>>2]|0;a=c;s=r;do{if((r|0)==(c|0)){c=g+4|0;r=o[c>>2]|0;_=o[g>>2]|0;i=_;if(r>>>0<=_>>>0){r=a-i>>1;r=(r|0)==0?1:r;Ni(p,r,r>>>2,o[g+16>>2]|0);o[v>>2]=o[c>>2];o[m>>2]=o[f>>2];o[l>>2]=o[v>>2];o[d>>2]=o[m>>2];Bi(p,l,d);r=o[g>>2]|0;o[g>>2]=o[p>>2];o[p>>2]=r;r=p+4|0;_=o[c>>2]|0;o[c>>2]=o[r>>2];o[r>>2]=_;r=p+8|0;_=o[f>>2]|0;o[f>>2]=o[r>>2];o[r>>2]=_;r=p+12|0;_=o[u>>2]|0;o[u>>2]=o[r>>2];o[r>>2]=_;Ri(p);r=o[f>>2]|0;break}u=r;a=((u-i>>2)+1|0)/-2|0;l=r+(a<<2)|0;i=s-u|0;u=i>>2;if(u){sx(l|0,r|0,i|0)|0;r=o[c>>2]|0}_=l+(u<<2)|0;o[f>>2]=_;o[c>>2]=r+(a<<2);r=_}}while(0);o[r>>2]=o[n>>2];o[f>>2]=(o[f>>2]|0)+4;t=Li(e,g,t)|0;Ri(g)}}while(0);h=y;return t|0}function Vt(e){e=e|0;var t=0;do{t=e+984|0;if(r[t>>0]|0)break;r[t>>0]=1;s[e+504>>2]=Y(E);e=o[e+944>>2]|0}while((e|0)!=0);return}function qt(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-4-r|0)>>>2)<<2);KT(n)}return}function Gt(e){e=e|0;return o[e+944>>2]|0}function $t(e){e=e|0;Rt(e,(o[e+964>>2]|0)!=0,2832);Vt(e);return}function Yt(e){e=e|0;return(r[e+984>>0]|0)!=0|0}function Kt(e,t){e=e|0;t=t|0;if(iT(e,t,400)|0){ix(e|0,t|0,400)|0;Vt(e)}return}function Xt(e){e=e|0;var t=ft;t=Y(s[e+44>>2]);e=wt(t)|0;return Y(e?Y(0.0):t)}function Qt(e){e=e|0;var t=ft;t=Y(s[e+48>>2]);if(wt(t)|0)t=r[(o[e+976>>2]|0)+2>>0]|0?Y(1.0):Y(0.0);return Y(t)}function Jt(e,t){e=e|0;t=t|0;o[e+980>>2]=t;return}function Zt(e){e=e|0;return o[e+980>>2]|0}function en(e,t){e=e|0;t=t|0;var n=0;n=e+4|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function tn(e){e=e|0;return o[e+4>>2]|0}function nn(e,t){e=e|0;t=t|0;var n=0;n=e+8|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function rn(e){e=e|0;return o[e+8>>2]|0}function on(e,t){e=e|0;t=t|0;var n=0;n=e+12|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function un(e){e=e|0;return o[e+12>>2]|0}function an(e,t){e=e|0;t=t|0;var n=0;n=e+16|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function ln(e){e=e|0;return o[e+16>>2]|0}function sn(e,t){e=e|0;t=t|0;var n=0;n=e+20|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function cn(e){e=e|0;return o[e+20>>2]|0}function fn(e,t){e=e|0;t=t|0;var n=0;n=e+24|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function dn(e){e=e|0;return o[e+24>>2]|0}function pn(e,t){e=e|0;t=t|0;var n=0;n=e+28|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function hn(e){e=e|0;return o[e+28>>2]|0}function vn(e,t){e=e|0;t=t|0;var n=0;n=e+32|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function mn(e){e=e|0;return o[e+32>>2]|0}function gn(e,t){e=e|0;t=t|0;var n=0;n=e+36|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function yn(e){e=e|0;return o[e+36>>2]|0}function _n(e,t){e=e|0;t=Y(t);var n=0;n=e+40|0;if(Y(s[n>>2])!=t){s[n>>2]=t;Vt(e)}return}function bn(e,t){e=e|0;t=Y(t);var n=0;n=e+44|0;if(Y(s[n>>2])!=t){s[n>>2]=t;Vt(e)}return}function wn(e,t){e=e|0;t=Y(t);var n=0;n=e+48|0;if(Y(s[n>>2])!=t){s[n>>2]=t;Vt(e)}return}function En(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+52|0;i=e+56|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Dn(e,t){e=e|0;t=Y(t);var n=0,r=0;r=e+52|0;n=e+56|0;if(!(!(Y(s[r>>2])!=t)?(o[n>>2]|0)==2:0)){s[r>>2]=t;r=wt(t)|0;o[n>>2]=r?3:2;Vt(e)}return}function Sn(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+52|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function Cn(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=(u^1)&1;i=e+132+(t<<3)|0;t=e+132+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function kn(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=u?0:2;i=e+132+(t<<3)|0;t=e+132+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function Tn(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=t+132+(n<<3)|0;t=o[r+4>>2]|0;n=e;o[n>>2]=o[r>>2];o[n+4>>2]=t;return}function xn(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=(u^1)&1;i=e+60+(t<<3)|0;t=e+60+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function An(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=u?0:2;i=e+60+(t<<3)|0;t=e+60+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function On(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=t+60+(n<<3)|0;t=o[r+4>>2]|0;n=e;o[n>>2]=o[r>>2];o[n+4>>2]=t;return}function Pn(e,t){e=e|0;t=t|0;var n=0;n=e+60+(t<<3)+4|0;if((o[n>>2]|0)!=3){s[e+60+(t<<3)>>2]=Y(E);o[n>>2]=3;Vt(e)}return}function In(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=(u^1)&1;i=e+204+(t<<3)|0;t=e+204+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function Nn(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=u?0:2;i=e+204+(t<<3)|0;t=e+204+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function Mn(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=t+204+(n<<3)|0;t=o[r+4>>2]|0;n=e;o[n>>2]=o[r>>2];o[n+4>>2]=t;return}function Rn(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=(u^1)&1;i=e+276+(t<<3)|0;t=e+276+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function Fn(e,t){e=e|0;t=t|0;return Y(s[e+276+(t<<3)>>2])}function Ln(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+348|0;i=e+352|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Bn(e,t){e=e|0;t=Y(t);var n=0,r=0;r=e+348|0;n=e+352|0;if(!(!(Y(s[r>>2])!=t)?(o[n>>2]|0)==2:0)){s[r>>2]=t;r=wt(t)|0;o[n>>2]=r?3:2;Vt(e)}return}function jn(e){e=e|0;var t=0;t=e+352|0;if((o[t>>2]|0)!=3){s[e+348>>2]=Y(E);o[t>>2]=3;Vt(e)}return}function Un(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+348|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function zn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+356|0;i=e+360|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Wn(e,t){e=e|0;t=Y(t);var n=0,r=0;r=e+356|0;n=e+360|0;if(!(!(Y(s[r>>2])!=t)?(o[n>>2]|0)==2:0)){s[r>>2]=t;r=wt(t)|0;o[n>>2]=r?3:2;Vt(e)}return}function Hn(e){e=e|0;var t=0;t=e+360|0;if((o[t>>2]|0)!=3){s[e+356>>2]=Y(E);o[t>>2]=3;Vt(e)}return}function Vn(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+356|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function qn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+364|0;i=e+368|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Gn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=u?0:2;r=e+364|0;i=e+368|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function $n(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+364|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function Yn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+372|0;i=e+376|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Kn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=u?0:2;r=e+372|0;i=e+376|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Xn(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+372|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function Qn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+380|0;i=e+384|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Jn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=u?0:2;r=e+380|0;i=e+384|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Zn(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+380|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function er(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+388|0;i=e+392|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function tr(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=u?0:2;r=e+388|0;i=e+392|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function nr(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+388|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function rr(e,t){e=e|0;t=Y(t);var n=0;n=e+396|0;if(Y(s[n>>2])!=t){s[n>>2]=t;Vt(e)}return}function ir(e){e=e|0;return Y(s[e+396>>2])}function or(e){e=e|0;return Y(s[e+400>>2])}function ur(e){e=e|0;return Y(s[e+404>>2])}function ar(e){e=e|0;return Y(s[e+408>>2])}function lr(e){e=e|0;return Y(s[e+412>>2])}function sr(e){e=e|0;return Y(s[e+416>>2])}function cr(e){e=e|0;return Y(s[e+420>>2])}function fr(e,t){e=e|0;t=t|0;Rt(e,(t|0)<6,2918);switch(t|0){case 0:{t=(o[e+496>>2]|0)==2?5:4;break}case 2:{t=(o[e+496>>2]|0)==2?4:5;break}default:{}}return Y(s[e+424+(t<<2)>>2])}function dr(e,t){e=e|0;t=t|0;Rt(e,(t|0)<6,2918);switch(t|0){case 0:{t=(o[e+496>>2]|0)==2?5:4;break}case 2:{t=(o[e+496>>2]|0)==2?4:5;break}default:{}}return Y(s[e+448+(t<<2)>>2])}function pr(e,t){e=e|0;t=t|0;Rt(e,(t|0)<6,2918);switch(t|0){case 0:{t=(o[e+496>>2]|0)==2?5:4;break}case 2:{t=(o[e+496>>2]|0)==2?4:5;break}default:{}}return Y(s[e+472+(t<<2)>>2])}function hr(e,t){e=e|0;t=t|0;var n=0,r=ft;n=o[e+4>>2]|0;if((n|0)==(o[t+4>>2]|0)){if(!n)e=1;else{r=Y(s[e>>2]);e=Y(P(Y(r-Y(s[t>>2]))))<Y(.0000999999974)}}else e=0;return e|0}function vr(e,t){e=Y(e);t=Y(t);var n=0;if(wt(e)|0)n=wt(t)|0;else n=Y(P(Y(e-t)))<Y(.0000999999974);return n|0}function mr(e,t){e=e|0;t=t|0;gr(e,t);return}function gr(e,t){e=e|0;t=t|0;var n=0,i=0;n=h;h=h+16|0;i=n+4|0;o[i>>2]=0;o[i+4>>2]=0;o[i+8>>2]=0;je(i|0,e|0,t|0,0);Cr(e,3,(r[i+11>>0]|0)<0?o[i>>2]|0:i,n);XT(i);h=n;return}function yr(e,t,n,r){e=Y(e);t=Y(t);n=n|0;r=r|0;var i=ft;e=Y(e*t);i=Y(LT(e,Y(1.0)));do{if(!(vr(i,Y(0.0))|0)){e=Y(e-i);if(vr(i,Y(1.0))|0){e=Y(e+Y(1.0));break}if(n){e=Y(e+Y(1.0));break}if(!r){if(i>Y(.5))i=Y(1.0);else{r=vr(i,Y(.5))|0;i=r?Y(1.0):Y(0.0)}e=Y(e+i)}}else e=Y(e-i)}while(0);return Y(e/t)}function _r(e,t,n,r,i,o,u,a,l,c,f,d,p){e=e|0;t=Y(t);n=n|0;r=Y(r);i=i|0;o=Y(o);u=u|0;a=Y(a);l=Y(l);c=Y(c);f=Y(f);d=Y(d);p=p|0;var h=0,v=ft,m=ft,g=ft,y=ft,_=ft,b=ft;if(l<Y(0.0)|c<Y(0.0))p=0;else{if((p|0)!=0?(v=Y(s[p+4>>2]),v!=Y(0.0)):0){g=Y(yr(t,v,0,0));y=Y(yr(r,v,0,0));m=Y(yr(o,v,0,0));v=Y(yr(a,v,0,0))}else{m=o;g=t;v=a;y=r}if((i|0)==(e|0))h=vr(m,g)|0;else h=0;if((u|0)==(n|0))p=vr(v,y)|0;else p=0;if((!h?(_=Y(t-f),!(br(e,_,l)|0)):0)?!(wr(e,_,i,l)|0):0)h=Er(e,_,i,o,l)|0;else h=1;if((!p?(b=Y(r-d),!(br(n,b,c)|0)):0)?!(wr(n,b,u,c)|0):0)p=Er(n,b,u,a,c)|0;else p=1;p=h&p}return p|0}function br(e,t,n){e=e|0;t=Y(t);n=Y(n);if((e|0)==1)e=vr(t,n)|0;else e=0;return e|0}function wr(e,t,n,r){e=e|0;t=Y(t);n=n|0;r=Y(r);if((e|0)==2&(n|0)==0){if(!(t>=r))e=vr(t,r)|0;else e=1}else e=0;return e|0}function Er(e,t,n,r,i){e=e|0;t=Y(t);n=n|0;r=Y(r);i=Y(i);if((e|0)==2&(n|0)==2&r>t){if(!(i<=t))e=vr(t,i)|0;else e=1}else e=0;return e|0}function Dr(e,t,n,i,u,a,l,f,d,p,v){e=e|0;t=Y(t);n=Y(n);i=i|0;u=u|0;a=a|0;l=Y(l);f=Y(f);d=d|0;p=p|0;v=v|0;var m=0,g=0,y=0,_=0,b=ft,w=ft,E=0,D=0,S=0,C=0,k=0,T=0,x=0,A=0,O=0,P=0,I=0,N=ft,M=ft,R=ft,F=0.0,L=0.0;I=h;h=h+160|0;A=I+152|0;x=I+120|0;T=I+104|0;S=I+72|0;_=I+56|0;k=I+8|0;D=I;C=(o[2279]|0)+1|0;o[2279]=C;O=e+984|0;if((r[O>>0]|0)!=0?(o[e+512>>2]|0)!=(o[2278]|0):0)E=4;else if((o[e+516>>2]|0)==(i|0))P=0;else E=4;if((E|0)==4){o[e+520>>2]=0;o[e+924>>2]=-1;o[e+928>>2]=-1;s[e+932>>2]=Y(-1.0);s[e+936>>2]=Y(-1.0);P=1}e:do{if(!(o[e+964>>2]|0)){if(d){m=e+916|0;if(!(vr(Y(s[m>>2]),t)|0)){E=21;break}if(!(vr(Y(s[e+920>>2]),n)|0)){E=21;break}if((o[e+924>>2]|0)!=(u|0)){E=21;break}m=(o[e+928>>2]|0)==(a|0)?m:0;E=22;break}y=o[e+520>>2]|0;if(!y)E=21;else{g=0;while(1){m=e+524+(g*24|0)|0;if(((vr(Y(s[m>>2]),t)|0?vr(Y(s[e+524+(g*24|0)+4>>2]),n)|0:0)?(o[e+524+(g*24|0)+8>>2]|0)==(u|0):0)?(o[e+524+(g*24|0)+12>>2]|0)==(a|0):0){E=22;break e}g=g+1|0;if(g>>>0>=y>>>0){E=21;break}}}}else{b=Y(Sr(e,2,l));w=Y(Sr(e,0,l));m=e+916|0;R=Y(s[m>>2]);M=Y(s[e+920>>2]);N=Y(s[e+932>>2]);if(!(_r(u,t,a,n,o[e+924>>2]|0,R,o[e+928>>2]|0,M,N,Y(s[e+936>>2]),b,w,v)|0)){y=o[e+520>>2]|0;if(!y)E=21;else{g=0;while(1){m=e+524+(g*24|0)|0;N=Y(s[m>>2]);M=Y(s[e+524+(g*24|0)+4>>2]);R=Y(s[e+524+(g*24|0)+16>>2]);if(_r(u,t,a,n,o[e+524+(g*24|0)+8>>2]|0,N,o[e+524+(g*24|0)+12>>2]|0,M,R,Y(s[e+524+(g*24|0)+20>>2]),b,w,v)|0){E=22;break e}g=g+1|0;if(g>>>0>=y>>>0){E=21;break}}}}else E=22}}while(0);do{if((E|0)==21){if(!(r[11697]|0)){m=0;E=31}else{m=0;E=28}}else if((E|0)==22){g=(r[11697]|0)!=0;if(!((m|0)!=0&(P^1)))if(g){E=28;break}else{E=31;break}_=m+16|0;o[e+908>>2]=o[_>>2];y=m+20|0;o[e+912>>2]=o[y>>2];if(!((r[11698]|0)==0|g^1)){o[D>>2]=kr(C)|0;o[D+4>>2]=C;Cr(e,4,2972,D);g=o[e+972>>2]|0;if(g|0)hA[g&127](e);u=Tr(u,d)|0;a=Tr(a,d)|0;L=+Y(s[_>>2]);F=+Y(s[y>>2]);o[k>>2]=u;o[k+4>>2]=a;c[k+8>>3]=+t;c[k+16>>3]=+n;c[k+24>>3]=L;c[k+32>>3]=F;o[k+40>>2]=p;Cr(e,4,2989,k)}}}while(0);if((E|0)==28){g=kr(C)|0;o[_>>2]=g;o[_+4>>2]=C;o[_+8>>2]=P?3047:11699;Cr(e,4,3038,_);g=o[e+972>>2]|0;if(g|0)hA[g&127](e);k=Tr(u,d)|0;E=Tr(a,d)|0;o[S>>2]=k;o[S+4>>2]=E;c[S+8>>3]=+t;c[S+16>>3]=+n;o[S+24>>2]=p;Cr(e,4,3049,S);E=31}if((E|0)==31){xr(e,t,n,i,u,a,l,f,d,v);if(r[11697]|0){g=o[2279]|0;k=kr(g)|0;o[T>>2]=k;o[T+4>>2]=g;o[T+8>>2]=P?3047:11699;Cr(e,4,3083,T);g=o[e+972>>2]|0;if(g|0)hA[g&127](e);k=Tr(u,d)|0;T=Tr(a,d)|0;F=+Y(s[e+908>>2]);L=+Y(s[e+912>>2]);o[x>>2]=k;o[x+4>>2]=T;c[x+8>>3]=F;c[x+16>>3]=L;o[x+24>>2]=p;Cr(e,4,3092,x)}o[e+516>>2]=i;if(!m){g=e+520|0;m=o[g>>2]|0;if((m|0)==16){if(r[11697]|0)Cr(e,4,3124,A);o[g>>2]=0;m=0}if(d)m=e+916|0;else{o[g>>2]=m+1;m=e+524+(m*24|0)|0}s[m>>2]=t;s[m+4>>2]=n;o[m+8>>2]=u;o[m+12>>2]=a;o[m+16>>2]=o[e+908>>2];o[m+20>>2]=o[e+912>>2];m=0}}if(d){o[e+416>>2]=o[e+908>>2];o[e+420>>2]=o[e+912>>2];r[e+985>>0]=1;r[O>>0]=0}o[2279]=(o[2279]|0)+-1;o[e+512>>2]=o[2278];h=I;return P|(m|0)==0|0}function Sr(e,t,n){e=e|0;t=t|0;n=Y(n);var r=ft;r=Y(Vr(e,t,n));return Y(r+Y(qr(e,t,n)))}function Cr(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=h;h=h+16|0;i=u;o[i>>2]=r;if(!e)r=0;else r=o[e+976>>2]|0;Br(r,e,t,n,i);h=u;return}function kr(e){e=e|0;return(e>>>0>60?3201:3201+(60-e)|0)|0}function Tr(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;i=h;h=h+32|0;n=i+12|0;r=i;o[n>>2]=o[254];o[n+4>>2]=o[255];o[n+8>>2]=o[256];o[r>>2]=o[257];o[r+4>>2]=o[258];o[r+8>>2]=o[259];if((e|0)>2)e=11699;else e=o[(t?r:n)+(e<<2)>>2]|0;h=i;return e|0}function xr(e,t,n,i,a,l,c,f,p,v){e=e|0;t=Y(t);n=Y(n);i=i|0;a=a|0;l=l|0;c=Y(c);f=Y(f);p=p|0;v=v|0;var m=0,g=0,y=0,_=0,b=ft,w=ft,E=ft,D=ft,S=ft,C=ft,k=ft,T=0,x=0,A=0,O=ft,P=ft,I=0,N=ft,M=0,R=0,F=0,L=0,B=0,j=0,U=0,z=0,W=0,H=0,V=0,q=0,G=0,$=0,K=0,X=0,Q=0,J=0,Z=ft,ee=ft,te=ft,ne=ft,re=ft,ie=0,oe=0,ue=0,ae=0,le=0,se=ft,ce=ft,fe=ft,de=ft,pe=ft,he=ft,ve=0,me=ft,ge=ft,ye=ft,_e=ft,be=ft,we=ft,Ee=0,De=0,Se=ft,Ce=ft,ke=0,Te=0,xe=0,Ae=0,Oe=ft,Pe=0,Ie=0,Ne=0,Me=0,Re=0,Fe=0,Le=0,Be=ft,je=0,Ue=0;Le=h;h=h+16|0;ie=Le+12|0;oe=Le+8|0;ue=Le+4|0;ae=Le;Rt(e,(a|0)==0|(wt(t)|0)^1,3326);Rt(e,(l|0)==0|(wt(n)|0)^1,3406);Ie=Yr(e,i)|0;o[e+496>>2]=Ie;Re=Kr(2,Ie)|0;Fe=Kr(0,Ie)|0;s[e+440>>2]=Y(Vr(e,Re,c));s[e+444>>2]=Y(qr(e,Re,c));s[e+428>>2]=Y(Vr(e,Fe,c));s[e+436>>2]=Y(qr(e,Fe,c));s[e+464>>2]=Y(Xr(e,Re));s[e+468>>2]=Y(Qr(e,Re));s[e+452>>2]=Y(Xr(e,Fe));s[e+460>>2]=Y(Qr(e,Fe));s[e+488>>2]=Y(Jr(e,Re,c));s[e+492>>2]=Y(Zr(e,Re,c));s[e+476>>2]=Y(Jr(e,Fe,c));s[e+484>>2]=Y(Zr(e,Fe,c));do{if(!(o[e+964>>2]|0)){Ne=e+948|0;Me=(o[e+952>>2]|0)-(o[Ne>>2]|0)>>2;if(!Me){ti(e,t,n,a,l,c,f);break}if(!p?ni(e,t,n,a,l,c,f)|0:0)break;Wt(e);X=e+508|0;r[X>>0]=0;Re=Kr(o[e+4>>2]|0,Ie)|0;Fe=ri(Re,Ie)|0;Pe=Gr(Re)|0;Q=o[e+8>>2]|0;Te=e+28|0;J=(o[Te>>2]|0)!=0;be=Pe?c:f;Se=Pe?f:c;Z=Y(ii(e,Re,c));ee=Y(oi(e,Re,c));b=Y(ii(e,Fe,c));we=Y(ui(e,Re,c));Ce=Y(ui(e,Fe,c));A=Pe?a:l;ke=Pe?l:a;Oe=Pe?we:Ce;S=Pe?Ce:we;_e=Y(Sr(e,2,c));D=Y(Sr(e,0,c));w=Y(Y(Nr(e+364|0,c))-Oe);E=Y(Y(Nr(e+380|0,c))-Oe);C=Y(Y(Nr(e+372|0,f))-S);k=Y(Y(Nr(e+388|0,f))-S);te=Pe?w:C;ne=Pe?E:k;_e=Y(t-_e);t=Y(_e-Oe);if(wt(t)|0)Oe=t;else Oe=Y(NT(Y(RT(t,E)),w));ge=Y(n-D);t=Y(ge-S);if(wt(t)|0)ye=t;else ye=Y(NT(Y(RT(t,k)),C));w=Pe?Oe:ye;me=Pe?ye:Oe;e:do{if((A|0)==1){i=0;g=0;while(1){m=Pt(e,g)|0;if(!i){if(Y(li(m))>Y(0.0)?Y(si(m))>Y(0.0):0)i=m;else i=0}else if(ai(m)|0){_=0;break e}g=g+1|0;if(g>>>0>=Me>>>0){_=i;break}}}else _=0}while(0);T=_+500|0;x=_+504|0;i=0;m=0;t=Y(0.0);y=0;do{g=o[(o[Ne>>2]|0)+(y<<2)>>2]|0;if((o[g+36>>2]|0)==1){ci(g);r[g+985>>0]=1;r[g+984>>0]=0}else{Pr(g);if(p)Mr(g,Yr(g,Ie)|0,w,me,Oe);do{if((o[g+24>>2]|0)!=1){if((g|0)==(_|0)){o[T>>2]=o[2278];s[x>>2]=Y(0.0);break}else{fi(e,g,Oe,a,ye,Oe,ye,l,Ie,v);break}}else{if(m|0)o[m+960>>2]=g;o[g+960>>2]=0;m=g;i=(i|0)==0?g:i}}while(0);he=Y(s[g+504>>2]);t=Y(t+Y(he+Y(Sr(g,Re,Oe))))}y=y+1|0}while((y|0)!=(Me|0));F=t>w;ve=J&((A|0)==2&F)?1:A;M=(ke|0)==1;B=M&(p^1);j=(ve|0)==1;U=(ve|0)==2;z=976+(Re<<2)|0;W=(ke|2|0)==2;$=M&(J^1);H=1040+(Fe<<2)|0;V=1040+(Re<<2)|0;q=976+(Fe<<2)|0;G=(ke|0)!=1;F=J&((A|0)!=0&F);R=e+976|0;M=M^1;t=w;I=0;L=0;he=Y(0.0);re=Y(0.0);while(1){e:do{if(I>>>0<Me>>>0){x=o[Ne>>2]|0;y=0;k=Y(0.0);C=Y(0.0);E=Y(0.0);w=Y(0.0);g=0;m=0;_=I;while(1){T=o[x+(_<<2)>>2]|0;if((o[T+36>>2]|0)!=1?(o[T+940>>2]=L,(o[T+24>>2]|0)!=1):0){D=Y(Sr(T,Re,Oe));K=o[z>>2]|0;n=Y(Nr(T+380+(K<<3)|0,be));S=Y(s[T+504>>2]);n=Y(RT(n,S));n=Y(NT(Y(Nr(T+364+(K<<3)|0,be)),n));if(J&(y|0)!=0&Y(D+Y(C+n))>t){l=y;D=k;A=_;break e}D=Y(D+n);n=Y(C+D);D=Y(k+D);if(ai(T)|0){E=Y(E+Y(li(T)));w=Y(w-Y(S*Y(si(T))))}if(m|0)o[m+960>>2]=T;o[T+960>>2]=0;y=y+1|0;m=T;g=(g|0)==0?T:g}else{D=k;n=C}_=_+1|0;if(_>>>0<Me>>>0){k=D;C=n}else{l=y;A=_;break}}}else{l=0;D=Y(0.0);E=Y(0.0);w=Y(0.0);g=0;A=I}}while(0);K=E>Y(0.0)&E<Y(1.0);O=K?Y(1.0):E;K=w>Y(0.0)&w<Y(1.0);k=K?Y(1.0):w;do{if(!j){if(!(D<te&((wt(te)|0)^1))){if(!(D>ne&((wt(ne)|0)^1))){if(!(r[(o[R>>2]|0)+3>>0]|0)){if(!(O==Y(0.0))?!(Y(li(e))==Y(0.0)):0){K=53;break}t=D;K=53}else K=51}else{t=ne;K=51}}else{t=te;K=51}}else K=51}while(0);if((K|0)==51){K=0;if(wt(t)|0)K=53;else{P=Y(t-D);N=t}}if((K|0)==53){K=0;if(D<Y(0.0)){P=Y(-D);N=t}else{P=Y(0.0);N=t}}if(!B?(le=(g|0)==0,!le):0){y=o[z>>2]|0;_=P<Y(0.0);S=Y(P/k);T=P>Y(0.0);C=Y(P/O);E=Y(0.0);D=Y(0.0);t=Y(0.0);m=g;do{n=Y(Nr(m+380+(y<<3)|0,be));w=Y(Nr(m+364+(y<<3)|0,be));w=Y(RT(n,Y(NT(w,Y(s[m+504>>2])))));if(_){n=Y(w*Y(si(m)));if(n!=Y(-0.0)?(Be=Y(w-Y(S*n)),se=Y(di(m,Re,Be,N,Oe)),Be!=se):0){E=Y(E-Y(se-w));t=Y(t+n)}}else if((T?(ce=Y(li(m)),ce!=Y(0.0)):0)?(Be=Y(w+Y(C*ce)),fe=Y(di(m,Re,Be,N,Oe)),Be!=fe):0){E=Y(E-Y(fe-w));D=Y(D-ce)}m=o[m+960>>2]|0}while((m|0)!=0);t=Y(k+t);w=Y(P+E);if(!le){S=Y(O+D);_=o[z>>2]|0;T=w<Y(0.0);x=t==Y(0.0);C=Y(w/t);y=w>Y(0.0);S=Y(w/S);t=Y(0.0);do{Be=Y(Nr(g+380+(_<<3)|0,be));E=Y(Nr(g+364+(_<<3)|0,be));E=Y(RT(Be,Y(NT(E,Y(s[g+504>>2])))));if(T){Be=Y(E*Y(si(g)));w=Y(-Be);if(Be!=Y(-0.0)){Be=Y(C*w);w=Y(di(g,Re,Y(E+(x?w:Be)),N,Oe))}else w=E}else if(y?(de=Y(li(g)),de!=Y(0.0)):0)w=Y(di(g,Re,Y(E+Y(S*de)),N,Oe));else w=E;t=Y(t-Y(w-E));D=Y(Sr(g,Re,Oe));n=Y(Sr(g,Fe,Oe));w=Y(w+D);s[oe>>2]=w;o[ae>>2]=1;E=Y(s[g+396>>2]);e:do{if(wt(E)|0){m=wt(me)|0;do{if(!m){if(F|(Ir(g,Fe,me)|0|M))break;if((pi(e,g)|0)!=4)break;if((o[(hi(g,Fe)|0)+4>>2]|0)==3)break;if((o[(vi(g,Fe)|0)+4>>2]|0)==3)break;s[ie>>2]=me;o[ue>>2]=1;break e}}while(0);if(Ir(g,Fe,me)|0){m=o[g+992+(o[q>>2]<<2)>>2]|0;Be=Y(n+Y(Nr(m,me)));s[ie>>2]=Be;m=G&(o[m+4>>2]|0)==2;o[ue>>2]=((wt(Be)|0|m)^1)&1;break}else{s[ie>>2]=me;o[ue>>2]=m?0:2;break}}else{Be=Y(w-D);O=Y(Be/E);Be=Y(E*Be);o[ue>>2]=1;s[ie>>2]=Y(n+(Pe?O:Be))}}while(0);mi(g,Re,N,Oe,ae,oe);mi(g,Fe,me,Oe,ue,ie);do{if(!(Ir(g,Fe,me)|0)?(pi(e,g)|0)==4:0){if((o[(hi(g,Fe)|0)+4>>2]|0)==3){m=0;break}m=(o[(vi(g,Fe)|0)+4>>2]|0)!=3}else m=0}while(0);Be=Y(s[oe>>2]);O=Y(s[ie>>2]);je=o[ae>>2]|0;Ue=o[ue>>2]|0;Dr(g,Pe?Be:O,Pe?O:Be,Ie,Pe?je:Ue,Pe?Ue:je,Oe,ye,p&(m^1),3488,v)|0;r[X>>0]=r[X>>0]|r[g+508>>0];g=o[g+960>>2]|0}while((g|0)!=0)}else t=Y(0.0)}else t=Y(0.0);t=Y(P+t);Ue=t<Y(0.0)&1;r[X>>0]=Ue|u[X>>0];if(U&t>Y(0.0)){m=o[z>>2]|0;if((o[e+364+(m<<3)+4>>2]|0)!=0?(pe=Y(Nr(e+364+(m<<3)|0,be)),pe>=Y(0.0)):0)w=Y(NT(Y(0.0),Y(pe-Y(N-t))));else w=Y(0.0)}else w=t;T=I>>>0<A>>>0;if(T){_=o[Ne>>2]|0;y=I;m=0;do{g=o[_+(y<<2)>>2]|0;if(!(o[g+24>>2]|0)){m=((o[(hi(g,Re)|0)+4>>2]|0)==3&1)+m|0;m=m+((o[(vi(g,Re)|0)+4>>2]|0)==3&1)|0}y=y+1|0}while((y|0)!=(A|0));if(m){D=Y(0.0);n=Y(0.0)}else K=101}else K=101;e:do{if((K|0)==101){K=0;switch(Q|0){case 1:{m=0;D=Y(w*Y(.5));n=Y(0.0);break e}case 2:{m=0;D=w;n=Y(0.0);break e}case 3:{if(l>>>0<=1){m=0;D=Y(0.0);n=Y(0.0);break e}n=Y((l+-1|0)>>>0);m=0;D=Y(0.0);n=Y(Y(NT(w,Y(0.0)))/n);break e}case 5:{n=Y(w/Y((l+1|0)>>>0));m=0;D=n;break e}case 4:{n=Y(w/Y(l>>>0));m=0;D=Y(n*Y(.5));break e}default:{m=0;D=Y(0.0);n=Y(0.0);break e}}}}while(0);t=Y(Z+D);if(T){E=Y(w/Y(m|0));y=o[Ne>>2]|0;g=I;w=Y(0.0);do{m=o[y+(g<<2)>>2]|0;e:do{if((o[m+36>>2]|0)!=1){switch(o[m+24>>2]|0){case 1:{if(gi(m,Re)|0){if(!p)break e;Be=Y(yi(m,Re,N));Be=Y(Be+Y(Xr(e,Re)));Be=Y(Be+Y(Vr(m,Re,Oe)));s[m+400+(o[V>>2]<<2)>>2]=Be;break e}break}case 0:{Ue=(o[(hi(m,Re)|0)+4>>2]|0)==3;Be=Y(E+t);t=Ue?Be:t;if(p){Ue=m+400+(o[V>>2]<<2)|0;s[Ue>>2]=Y(t+Y(s[Ue>>2]))}Ue=(o[(vi(m,Re)|0)+4>>2]|0)==3;Be=Y(E+t);t=Ue?Be:t;if(B){Be=Y(n+Y(Sr(m,Re,Oe)));w=me;t=Y(t+Y(Be+Y(s[m+504>>2])));break e}else{t=Y(t+Y(n+Y(_i(m,Re,Oe))));w=Y(NT(w,Y(_i(m,Fe,Oe))));break e}}default:{}}if(p){Be=Y(D+Y(Xr(e,Re)));Ue=m+400+(o[V>>2]<<2)|0;s[Ue>>2]=Y(Be+Y(s[Ue>>2]))}}}while(0);g=g+1|0}while((g|0)!=(A|0))}else w=Y(0.0);n=Y(ee+t);if(W)D=Y(Y(di(e,Fe,Y(Ce+w),Se,c))-Ce);else D=me;E=Y(Y(di(e,Fe,Y(Ce+($?me:w)),Se,c))-Ce);if(T&p){g=I;do{y=o[(o[Ne>>2]|0)+(g<<2)>>2]|0;do{if((o[y+36>>2]|0)!=1){if((o[y+24>>2]|0)==1){if(gi(y,Fe)|0){Be=Y(yi(y,Fe,me));Be=Y(Be+Y(Xr(e,Fe)));Be=Y(Be+Y(Vr(y,Fe,Oe)));m=o[H>>2]|0;s[y+400+(m<<2)>>2]=Be;if(!(wt(Be)|0))break}else m=o[H>>2]|0;Be=Y(Xr(e,Fe));s[y+400+(m<<2)>>2]=Y(Be+Y(Vr(y,Fe,Oe)));break}m=pi(e,y)|0;do{if((m|0)==4){if((o[(hi(y,Fe)|0)+4>>2]|0)==3){K=139;break}if((o[(vi(y,Fe)|0)+4>>2]|0)==3){K=139;break}if(Ir(y,Fe,me)|0){t=b;break}je=o[y+908+(o[z>>2]<<2)>>2]|0;o[ie>>2]=je;t=Y(s[y+396>>2]);Ue=wt(t)|0;w=(o[d>>2]=je,Y(s[d>>2]));if(Ue)t=E;else{P=Y(Sr(y,Fe,Oe));Be=Y(w/t);t=Y(t*w);t=Y(P+(Pe?Be:t))}s[oe>>2]=t;s[ie>>2]=Y(Y(Sr(y,Re,Oe))+w);o[ue>>2]=1;o[ae>>2]=1;mi(y,Re,N,Oe,ue,ie);mi(y,Fe,me,Oe,ae,oe);t=Y(s[ie>>2]);P=Y(s[oe>>2]);Be=Pe?t:P;t=Pe?P:t;Ue=((wt(Be)|0)^1)&1;Dr(y,Be,t,Ie,Ue,((wt(t)|0)^1)&1,Oe,ye,1,3493,v)|0;t=b}else K=139}while(0);e:do{if((K|0)==139){K=0;t=Y(D-Y(_i(y,Fe,Oe)));do{if((o[(hi(y,Fe)|0)+4>>2]|0)==3){if((o[(vi(y,Fe)|0)+4>>2]|0)!=3)break;t=Y(b+Y(NT(Y(0.0),Y(t*Y(.5)))));break e}}while(0);if((o[(vi(y,Fe)|0)+4>>2]|0)==3){t=b;break}if((o[(hi(y,Fe)|0)+4>>2]|0)==3){t=Y(b+Y(NT(Y(0.0),t)));break}switch(m|0){case 1:{t=b;break e}case 2:{t=Y(b+Y(t*Y(.5)));break e}default:{t=Y(b+t);break e}}}}while(0);Be=Y(he+t);Ue=y+400+(o[H>>2]<<2)|0;s[Ue>>2]=Y(Be+Y(s[Ue>>2]))}}while(0);g=g+1|0}while((g|0)!=(A|0))}he=Y(he+E);re=Y(NT(re,n));l=L+1|0;if(A>>>0>=Me>>>0)break;else{t=N;I=A;L=l}}do{if(p){m=l>>>0>1;if(!m?!(bi(e)|0):0)break;if(!(wt(me)|0)){t=Y(me-he);e:do{switch(o[e+12>>2]|0){case 3:{b=Y(b+t);C=Y(0.0);break}case 2:{b=Y(b+Y(t*Y(.5)));C=Y(0.0);break}case 4:{if(me>he)C=Y(t/Y(l>>>0));else C=Y(0.0);break}case 7:if(me>he){b=Y(b+Y(t/Y(l<<1>>>0)));C=Y(t/Y(l>>>0));C=m?C:Y(0.0);break e}else{b=Y(b+Y(t*Y(.5)));C=Y(0.0);break e}case 6:{C=Y(t/Y(L>>>0));C=me>he&m?C:Y(0.0);break}default:C=Y(0.0)}}while(0);if(l|0){T=1040+(Fe<<2)|0;x=976+(Fe<<2)|0;_=0;g=0;while(1){e:do{if(g>>>0<Me>>>0){w=Y(0.0);E=Y(0.0);t=Y(0.0);y=g;while(1){m=o[(o[Ne>>2]|0)+(y<<2)>>2]|0;do{if((o[m+36>>2]|0)!=1?(o[m+24>>2]|0)==0:0){if((o[m+940>>2]|0)!=(_|0))break e;if(wi(m,Fe)|0){Be=Y(s[m+908+(o[x>>2]<<2)>>2]);t=Y(NT(t,Y(Be+Y(Sr(m,Fe,Oe)))))}if((pi(e,m)|0)!=5)break;pe=Y(Ei(m));pe=Y(pe+Y(Vr(m,0,Oe)));Be=Y(s[m+912>>2]);Be=Y(Y(Be+Y(Sr(m,0,Oe)))-pe);pe=Y(NT(E,pe));Be=Y(NT(w,Be));w=Be;E=pe;t=Y(NT(t,Y(pe+Be)))}}while(0);m=y+1|0;if(m>>>0<Me>>>0)y=m;else{y=m;break}}}else{E=Y(0.0);t=Y(0.0);y=g}}while(0);S=Y(C+t);n=b;b=Y(b+S);if(g>>>0<y>>>0){D=Y(n+E);m=g;do{g=o[(o[Ne>>2]|0)+(m<<2)>>2]|0;e:do{if((o[g+36>>2]|0)!=1?(o[g+24>>2]|0)==0:0)switch(pi(e,g)|0){case 1:{Be=Y(n+Y(Vr(g,Fe,Oe)));s[g+400+(o[T>>2]<<2)>>2]=Be;break e}case 3:{Be=Y(Y(b-Y(qr(g,Fe,Oe)))-Y(s[g+908+(o[x>>2]<<2)>>2]));s[g+400+(o[T>>2]<<2)>>2]=Be;break e}case 2:{Be=Y(n+Y(Y(S-Y(s[g+908+(o[x>>2]<<2)>>2]))*Y(.5)));s[g+400+(o[T>>2]<<2)>>2]=Be;break e}case 4:{Be=Y(n+Y(Vr(g,Fe,Oe)));s[g+400+(o[T>>2]<<2)>>2]=Be;if(Ir(g,Fe,me)|0)break e;if(Pe){w=Y(s[g+908>>2]);t=Y(w+Y(Sr(g,Re,Oe)));E=S}else{E=Y(s[g+912>>2]);E=Y(E+Y(Sr(g,Fe,Oe)));t=S;w=Y(s[g+908>>2])}if(vr(t,w)|0?vr(E,Y(s[g+912>>2]))|0:0)break e;Dr(g,t,E,Ie,1,1,Oe,ye,1,3501,v)|0;break e}case 5:{s[g+404>>2]=Y(Y(D-Y(Ei(g)))+Y(yi(g,0,me)));break e}default:break e}}while(0);m=m+1|0}while((m|0)!=(y|0))}_=_+1|0;if((_|0)==(l|0))break;else g=y}}}}}while(0);s[e+908>>2]=Y(di(e,2,_e,c,c));s[e+912>>2]=Y(di(e,0,ge,f,c));if((ve|0)!=0?(Ee=o[e+32>>2]|0,De=(ve|0)==2,!(De&(Ee|0)!=2)):0){if(De&(Ee|0)==2){t=Y(we+N);t=Y(NT(Y(RT(t,Y(Di(e,Re,re,be)))),we));K=198}}else{t=Y(di(e,Re,re,be,c));K=198}if((K|0)==198)s[e+908+(o[976+(Re<<2)>>2]<<2)>>2]=t;if((ke|0)!=0?(xe=o[e+32>>2]|0,Ae=(ke|0)==2,!(Ae&(xe|0)!=2)):0){if(Ae&(xe|0)==2){t=Y(Ce+me);t=Y(NT(Y(RT(t,Y(Di(e,Fe,Y(Ce+he),Se)))),Ce));K=204}}else{t=Y(di(e,Fe,Y(Ce+he),Se,c));K=204}if((K|0)==204)s[e+908+(o[976+(Fe<<2)>>2]<<2)>>2]=t;if(p){if((o[Te>>2]|0)==2){g=976+(Fe<<2)|0;y=1040+(Fe<<2)|0;m=0;do{_=Pt(e,m)|0;if(!(o[_+24>>2]|0)){je=o[g>>2]|0;Be=Y(s[e+908+(je<<2)>>2]);Ue=_+400+(o[y>>2]<<2)|0;Be=Y(Be-Y(s[Ue>>2]));s[Ue>>2]=Y(Be-Y(s[_+908+(je<<2)>>2]))}m=m+1|0}while((m|0)!=(Me|0))}if(i|0){m=Pe?ve:a;do{Si(e,i,Oe,m,ye,Ie,v);i=o[i+960>>2]|0}while((i|0)!=0)}m=(Re|2|0)==3;g=(Fe|2|0)==3;if(m|g){i=0;do{y=o[(o[Ne>>2]|0)+(i<<2)>>2]|0;if((o[y+36>>2]|0)!=1){if(m)Ci(e,y,Re);if(g)Ci(e,y,Fe)}i=i+1|0}while((i|0)!=(Me|0))}}}else ei(e,t,n,a,l,c,f)}while(0);h=Le;return}function Ar(e,t){e=e|0;t=Y(t);var n=0;St(e,t>=Y(0.0),3147);n=t==Y(0.0);s[e+4>>2]=n?Y(0.0):t;return}function Or(e,t,n,i){e=e|0;t=Y(t);n=Y(n);i=i|0;var u=ft,a=ft,l=0,c=0,f=0;o[2278]=(o[2278]|0)+1;Pr(e);if(!(Ir(e,2,t)|0)){u=Y(Nr(e+380|0,t));if(!(u>=Y(0.0))){f=((wt(t)|0)^1)&1;u=t}else f=2}else{u=Y(Nr(o[e+992>>2]|0,t));f=1;u=Y(u+Y(Sr(e,2,t)))}if(!(Ir(e,0,n)|0)){a=Y(Nr(e+388|0,n));if(!(a>=Y(0.0))){c=((wt(n)|0)^1)&1;a=n}else c=2}else{a=Y(Nr(o[e+996>>2]|0,n));c=1;a=Y(a+Y(Sr(e,0,t)))}l=e+976|0;if(Dr(e,u,a,i,f,c,t,n,1,3189,o[l>>2]|0)|0?(Mr(e,o[e+496>>2]|0,t,n,t),Rr(e,Y(s[(o[l>>2]|0)+4>>2]),Y(0.0),Y(0.0)),r[11696]|0):0)mr(e,7);return}function Pr(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;a=l+24|0;u=l+16|0;r=l+8|0;i=l;n=0;do{t=e+380+(n<<3)|0;if(!((o[e+380+(n<<3)+4>>2]|0)!=0?(s=t,c=o[s+4>>2]|0,f=r,o[f>>2]=o[s>>2],o[f+4>>2]=c,f=e+364+(n<<3)|0,c=o[f+4>>2]|0,s=i,o[s>>2]=o[f>>2],o[s+4>>2]=c,o[u>>2]=o[r>>2],o[u+4>>2]=o[r+4>>2],o[a>>2]=o[i>>2],o[a+4>>2]=o[i+4>>2],hr(u,a)|0):0))t=e+348+(n<<3)|0;o[e+992+(n<<2)>>2]=t;n=n+1|0}while((n|0)!=2);h=l;return}function Ir(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0;e=o[e+992+(o[976+(t<<2)>>2]<<2)>>2]|0;switch(o[e+4>>2]|0){case 0:case 3:{e=0;break}case 1:{if(Y(s[e>>2])<Y(0.0))e=0;else r=5;break}case 2:{if(Y(s[e>>2])<Y(0.0))e=0;else e=(wt(n)|0)^1;break}default:r=5}if((r|0)==5)e=1;return e|0}function Nr(e,t){e=e|0;t=Y(t);switch(o[e+4>>2]|0){case 2:{t=Y(Y(Y(s[e>>2])*t)/Y(100.0));break}case 1:{t=Y(s[e>>2]);break}default:t=Y(E)}return Y(t)}function Mr(e,t,n,r,i){e=e|0;t=t|0;n=Y(n);r=Y(r);i=Y(i);var u=0,a=ft;t=o[e+944>>2]|0?t:1;u=Kr(o[e+4>>2]|0,t)|0;t=ri(u,t)|0;n=Y(Pi(e,u,n));r=Y(Pi(e,t,r));a=Y(n+Y(Vr(e,u,i)));s[e+400+(o[1040+(u<<2)>>2]<<2)>>2]=a;n=Y(n+Y(qr(e,u,i)));s[e+400+(o[1e3+(u<<2)>>2]<<2)>>2]=n;n=Y(r+Y(Vr(e,t,i)));s[e+400+(o[1040+(t<<2)>>2]<<2)>>2]=n;i=Y(r+Y(qr(e,t,i)));s[e+400+(o[1e3+(t<<2)>>2]<<2)>>2]=i;return}function Rr(e,t,n,r){e=e|0;t=Y(t);n=Y(n);r=Y(r);var i=0,u=0,a=ft,l=ft,c=0,f=0,d=ft,p=0,h=ft,v=ft,m=ft,g=ft;if(!(t==Y(0.0))){i=e+400|0;g=Y(s[i>>2]);u=e+404|0;m=Y(s[u>>2]);p=e+416|0;v=Y(s[p>>2]);f=e+420|0;a=Y(s[f>>2]);h=Y(g+n);d=Y(m+r);r=Y(h+v);l=Y(d+a);c=(o[e+988>>2]|0)==1;s[i>>2]=Y(yr(g,t,0,c));s[u>>2]=Y(yr(m,t,0,c));n=Y(LT(Y(v*t),Y(1.0)));if(vr(n,Y(0.0))|0)u=0;else u=(vr(n,Y(1.0))|0)^1;n=Y(LT(Y(a*t),Y(1.0)));if(vr(n,Y(0.0))|0)i=0;else i=(vr(n,Y(1.0))|0)^1;g=Y(yr(r,t,c&u,c&(u^1)));s[p>>2]=Y(g-Y(yr(h,t,0,c)));g=Y(yr(l,t,c&i,c&(i^1)));s[f>>2]=Y(g-Y(yr(d,t,0,c)));u=(o[e+952>>2]|0)-(o[e+948>>2]|0)>>2;if(u|0){i=0;do{Rr(Pt(e,i)|0,t,h,d);i=i+1|0}while((i|0)!=(u|0))}}return}function Fr(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;switch(n|0){case 5:case 0:{e=oT(o[489]|0,r,i)|0;break}default:e=jT(r,i)|0}return e|0}function Lr(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;i=h;h=h+16|0;u=i;o[u>>2]=r;Br(e,0,t,n,u);h=i;return}function Br(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;e=e|0?e:956;xA[o[e+8>>2]&1](e,t,n,r,i)|0;if((n|0)==5)Ye();else return}function jr(e,t,n){e=e|0;t=t|0;n=n|0;r[e+t>>0]=n&1;return}function Ur(e,t){e=e|0;t=t|0;var n=0,r=0;o[e>>2]=0;o[e+4>>2]=0;o[e+8>>2]=0;n=t+4|0;r=(o[n>>2]|0)-(o[t>>2]|0)>>2;if(r|0){zr(e,r);Wr(e,o[t>>2]|0,o[n>>2]|0,r)}return}function zr(e,t){e=e|0;t=t|0;var n=0;if((Hr(e)|0)>>>0<t>>>0)UT(e);if(t>>>0>1073741823)Ye();else{n=$T(t<<2)|0;o[e+4>>2]=n;o[e>>2]=n;o[e+8>>2]=n+(t<<2);return}}function Wr(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;r=e+4|0;e=n-t|0;if((e|0)>0){ix(o[r>>2]|0,t|0,e|0)|0;o[r>>2]=(o[r>>2]|0)+(e>>>2<<2)}return}function Hr(e){e=e|0;return 1073741823}function Vr(e,t,n){e=e|0;t=t|0;n=Y(n);if(Gr(t)|0?(o[e+96>>2]|0)!=0:0)e=e+92|0;else e=Et(e+60|0,o[1040+(t<<2)>>2]|0,992)|0;return Y($r(e,n))}function qr(e,t,n){e=e|0;t=t|0;n=Y(n);if(Gr(t)|0?(o[e+104>>2]|0)!=0:0)e=e+100|0;else e=Et(e+60|0,o[1e3+(t<<2)>>2]|0,992)|0;return Y($r(e,n))}function Gr(e){e=e|0;return(e|1|0)==3|0}function $r(e,t){e=e|0;t=Y(t);if((o[e+4>>2]|0)==3)t=Y(0.0);else t=Y(Nr(e,t));return Y(t)}function Yr(e,t){e=e|0;t=t|0;e=o[e>>2]|0;return((e|0)==0?(t|0)>1?t:1:e)|0}function Kr(e,t){e=e|0;t=t|0;var n=0;e:do{if((t|0)==2){switch(e|0){case 2:{e=3;break e}case 3:break;default:{n=4;break e}}e=2}else n=4}while(0);return e|0}function Xr(e,t){e=e|0;t=t|0;var n=ft;if(!((Gr(t)|0?(o[e+312>>2]|0)!=0:0)?(n=Y(s[e+308>>2]),n>=Y(0.0)):0))n=Y(NT(Y(s[(Et(e+276|0,o[1040+(t<<2)>>2]|0,992)|0)>>2]),Y(0.0)));return Y(n)}function Qr(e,t){e=e|0;t=t|0;var n=ft;if(!((Gr(t)|0?(o[e+320>>2]|0)!=0:0)?(n=Y(s[e+316>>2]),n>=Y(0.0)):0))n=Y(NT(Y(s[(Et(e+276|0,o[1e3+(t<<2)>>2]|0,992)|0)>>2]),Y(0.0)));return Y(n)}function Jr(e,t,n){e=e|0;t=t|0;n=Y(n);var r=ft;if(!((Gr(t)|0?(o[e+240>>2]|0)!=0:0)?(r=Y(Nr(e+236|0,n)),r>=Y(0.0)):0))r=Y(NT(Y(Nr(Et(e+204|0,o[1040+(t<<2)>>2]|0,992)|0,n)),Y(0.0)));return Y(r)}function Zr(e,t,n){e=e|0;t=t|0;n=Y(n);var r=ft;if(!((Gr(t)|0?(o[e+248>>2]|0)!=0:0)?(r=Y(Nr(e+244|0,n)),r>=Y(0.0)):0))r=Y(NT(Y(Nr(Et(e+204|0,o[1e3+(t<<2)>>2]|0,992)|0,n)),Y(0.0)));return Y(r)}function ei(e,t,n,r,i,u,a){e=e|0;t=Y(t);n=Y(n);r=r|0;i=i|0;u=Y(u);a=Y(a);var l=ft,c=ft,f=ft,d=ft,p=ft,v=ft,m=0,g=0,y=0;y=h;h=h+16|0;m=y;g=e+964|0;Rt(e,(o[g>>2]|0)!=0,3519);l=Y(ui(e,2,t));c=Y(ui(e,0,t));f=Y(Sr(e,2,t));d=Y(Sr(e,0,t));if(wt(t)|0)p=t;else p=Y(NT(Y(0.0),Y(Y(t-f)-l)));if(wt(n)|0)v=n;else v=Y(NT(Y(0.0),Y(Y(n-d)-c)));if((r|0)==1&(i|0)==1){s[e+908>>2]=Y(di(e,2,Y(t-f),u,u));t=Y(di(e,0,Y(n-d),a,u))}else{OA[o[g>>2]&1](m,e,p,r,v,i);p=Y(l+Y(s[m>>2]));v=Y(t-f);s[e+908>>2]=Y(di(e,2,(r|2|0)==2?p:v,u,u));v=Y(c+Y(s[m+4>>2]));t=Y(n-d);t=Y(di(e,0,(i|2|0)==2?v:t,a,u))}s[e+912>>2]=t;h=y;return}function ti(e,t,n,r,i,o,u){e=e|0;t=Y(t);n=Y(n);r=r|0;i=i|0;o=Y(o);u=Y(u);var a=ft,l=ft,c=ft,f=ft;c=Y(ui(e,2,o));a=Y(ui(e,0,o));f=Y(Sr(e,2,o));l=Y(Sr(e,0,o));t=Y(t-f);s[e+908>>2]=Y(di(e,2,(r|2|0)==2?c:t,o,o));n=Y(n-l);s[e+912>>2]=Y(di(e,0,(i|2|0)==2?a:n,u,o));return}function ni(e,t,n,r,i,o,u){e=e|0;t=Y(t);n=Y(n);r=r|0;i=i|0;o=Y(o);u=Y(u);var a=0,l=ft,c=ft;a=(r|0)==2;if((!(t<=Y(0.0)&a)?!(n<=Y(0.0)&(i|0)==2):0)?!((r|0)==1&(i|0)==1):0)e=0;else{l=Y(Sr(e,0,o));c=Y(Sr(e,2,o));a=t<Y(0.0)&a|(wt(t)|0);t=Y(t-c);s[e+908>>2]=Y(di(e,2,a?Y(0.0):t,o,o));t=Y(n-l);a=n<Y(0.0)&(i|0)==2|(wt(n)|0);s[e+912>>2]=Y(di(e,0,a?Y(0.0):t,u,o));e=1}return e|0}function ri(e,t){e=e|0;t=t|0;if(ki(e)|0)e=Kr(2,t)|0;else e=0;return e|0}function ii(e,t,n){e=e|0;t=t|0;n=Y(n);n=Y(Jr(e,t,n));return Y(n+Y(Xr(e,t)))}function oi(e,t,n){e=e|0;t=t|0;n=Y(n);n=Y(Zr(e,t,n));return Y(n+Y(Qr(e,t)))}function ui(e,t,n){e=e|0;t=t|0;n=Y(n);var r=ft;r=Y(ii(e,t,n));return Y(r+Y(oi(e,t,n)))}function ai(e){e=e|0;if(!(o[e+24>>2]|0)){if(Y(li(e))!=Y(0.0))e=1;else e=Y(si(e))!=Y(0.0)}else e=0;return e|0}function li(e){e=e|0;var t=ft;if(o[e+944>>2]|0){t=Y(s[e+44>>2]);if(wt(t)|0){t=Y(s[e+40>>2]);e=t>Y(0.0)&((wt(t)|0)^1);return Y(e?t:Y(0.0))}}else t=Y(0.0);return Y(t)}function si(e){e=e|0;var t=ft,n=0,i=ft;do{if(o[e+944>>2]|0){t=Y(s[e+48>>2]);if(wt(t)|0){n=r[(o[e+976>>2]|0)+2>>0]|0;if(n<<24>>24==0?(i=Y(s[e+40>>2]),i<Y(0.0)&((wt(i)|0)^1)):0){t=Y(-i);break}t=n<<24>>24?Y(1.0):Y(0.0)}}else t=Y(0.0)}while(0);return Y(t)}function ci(e){e=e|0;var t=0,n=0;tx(e+400|0,0,540)|0;r[e+985>>0]=1;Wt(e);n=Ot(e)|0;if(n|0){t=e+948|0;e=0;do{ci(o[(o[t>>2]|0)+(e<<2)>>2]|0);e=e+1|0}while((e|0)!=(n|0))}return}function fi(e,t,n,r,i,u,a,l,c,f){e=e|0;t=t|0;n=Y(n);r=r|0;i=Y(i);u=Y(u);a=Y(a);l=l|0;c=c|0;f=f|0;var d=0,p=ft,v=0,m=0,g=ft,y=ft,_=0,b=ft,w=0,D=ft,S=0,C=0,k=0,T=0,x=0,A=0,O=0,P=0,I=0,N=0;I=h;h=h+16|0;k=I+12|0;T=I+8|0;x=I+4|0;A=I;P=Kr(o[e+4>>2]|0,c)|0;S=Gr(P)|0;p=Y(Nr(Ti(t)|0,S?u:a));C=Ir(t,2,u)|0;O=Ir(t,0,a)|0;do{if(!(wt(p)|0)?!(wt(S?n:i)|0):0){d=t+504|0;if(!(wt(Y(s[d>>2]))|0)){if(!(xi(o[t+976>>2]|0,0)|0))break;if((o[t+500>>2]|0)==(o[2278]|0))break}s[d>>2]=Y(NT(p,Y(ui(t,P,u))))}else v=7}while(0);do{if((v|0)==7){w=S^1;if(!(w|C^1)){a=Y(Nr(o[t+992>>2]|0,u));s[t+504>>2]=Y(NT(a,Y(ui(t,2,u))));break}if(!(S|O^1)){a=Y(Nr(o[t+996>>2]|0,a));s[t+504>>2]=Y(NT(a,Y(ui(t,0,u))));break}s[k>>2]=Y(E);s[T>>2]=Y(E);o[x>>2]=0;o[A>>2]=0;b=Y(Sr(t,2,u));D=Y(Sr(t,0,u));if(C){g=Y(b+Y(Nr(o[t+992>>2]|0,u)));s[k>>2]=g;o[x>>2]=1;m=1}else{m=0;g=Y(E)}if(O){p=Y(D+Y(Nr(o[t+996>>2]|0,a)));s[T>>2]=p;o[A>>2]=1;d=1}else{d=0;p=Y(E)}v=o[e+32>>2]|0;if(!(S&(v|0)==2)){if(wt(g)|0?!(wt(n)|0):0){s[k>>2]=n;o[x>>2]=2;m=2;g=n}}else v=2;if((!((v|0)==2&w)?wt(p)|0:0)?!(wt(i)|0):0){s[T>>2]=i;o[A>>2]=2;d=2;p=i}y=Y(s[t+396>>2]);_=wt(y)|0;do{if(!_){if((m|0)==1&w){s[T>>2]=Y(Y(g-b)/y);o[A>>2]=1;d=1;v=1;break}if(S&(d|0)==1){s[k>>2]=Y(y*Y(p-D));o[x>>2]=1;d=1;v=1}else v=m}else v=m}while(0);N=wt(n)|0;m=(pi(e,t)|0)!=4;if(!(S|C|((r|0)!=1|N)|(m|(v|0)==1))?(s[k>>2]=n,o[x>>2]=1,!_):0){s[T>>2]=Y(Y(n-b)/y);o[A>>2]=1;d=1}if(!(O|w|((l|0)!=1|(wt(i)|0))|(m|(d|0)==1))?(s[T>>2]=i,o[A>>2]=1,!_):0){s[k>>2]=Y(y*Y(i-D));o[x>>2]=1}mi(t,2,u,u,x,k);mi(t,0,a,u,A,T);n=Y(s[k>>2]);i=Y(s[T>>2]);Dr(t,n,i,c,o[x>>2]|0,o[A>>2]|0,u,a,0,3565,f)|0;a=Y(s[t+908+(o[976+(P<<2)>>2]<<2)>>2]);s[t+504>>2]=Y(NT(a,Y(ui(t,P,u))))}}while(0);o[t+500>>2]=o[2278];h=I;return}function di(e,t,n,r,i){e=e|0;t=t|0;n=Y(n);r=Y(r);i=Y(i);r=Y(Di(e,t,n,r));return Y(NT(r,Y(ui(e,t,i))))}function pi(e,t){e=e|0;t=t|0;t=t+20|0;t=o[((o[t>>2]|0)==0?e+16|0:t)>>2]|0;if((t|0)==5?ki(o[e+4>>2]|0)|0:0)t=1;return t|0}function hi(e,t){e=e|0;t=t|0;if(Gr(t)|0?(o[e+96>>2]|0)!=0:0)t=4;else t=o[1040+(t<<2)>>2]|0;return e+60+(t<<3)|0}function vi(e,t){e=e|0;t=t|0;if(Gr(t)|0?(o[e+104>>2]|0)!=0:0)t=5;else t=o[1e3+(t<<2)>>2]|0;return e+60+(t<<3)|0}function mi(e,t,n,r,i,u){e=e|0;t=t|0;n=Y(n);r=Y(r);i=i|0;u=u|0;n=Y(Nr(e+380+(o[976+(t<<2)>>2]<<3)|0,n));n=Y(n+Y(Sr(e,t,r)));switch(o[i>>2]|0){case 2:case 1:{i=wt(n)|0;r=Y(s[u>>2]);s[u>>2]=i|r<n?r:n;break}case 0:{if(!(wt(n)|0)){o[i>>2]=2;s[u>>2]=n}break}default:{}}return}function gi(e,t){e=e|0;t=t|0;e=e+132|0;if(Gr(t)|0?(o[(Et(e,4,948)|0)+4>>2]|0)!=0:0)e=1;else e=(o[(Et(e,o[1040+(t<<2)>>2]|0,948)|0)+4>>2]|0)!=0;return e|0}function yi(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0;e=e+132|0;if(Gr(t)|0?(r=Et(e,4,948)|0,(o[r+4>>2]|0)!=0):0)i=4;else{r=Et(e,o[1040+(t<<2)>>2]|0,948)|0;if(!(o[r+4>>2]|0))n=Y(0.0);else i=4}if((i|0)==4)n=Y(Nr(r,n));return Y(n)}function _i(e,t,n){e=e|0;t=t|0;n=Y(n);var r=ft;r=Y(s[e+908+(o[976+(t<<2)>>2]<<2)>>2]);r=Y(r+Y(Vr(e,t,n)));return Y(r+Y(qr(e,t,n)))}function bi(e){e=e|0;var t=0,n=0,r=0;e:do{if(!(ki(o[e+4>>2]|0)|0)){if((o[e+16>>2]|0)!=5){n=Ot(e)|0;if(!n)t=0;else{t=0;while(1){r=Pt(e,t)|0;if((o[r+24>>2]|0)==0?(o[r+20>>2]|0)==5:0){t=1;break e}t=t+1|0;if(t>>>0>=n>>>0){t=0;break}}}}else t=1}else t=0}while(0);return t|0}function wi(e,t){e=e|0;t=t|0;var n=ft;n=Y(s[e+908+(o[976+(t<<2)>>2]<<2)>>2]);return n>=Y(0.0)&((wt(n)|0)^1)|0}function Ei(e){e=e|0;var t=ft,n=0,r=0,i=0,u=0,a=0,l=0,c=ft;n=o[e+968>>2]|0;if(!n){u=Ot(e)|0;do{if(u|0){n=0;i=0;while(1){r=Pt(e,i)|0;if(o[r+940>>2]|0){a=8;break}if((o[r+24>>2]|0)!=1){l=(pi(e,r)|0)==5;if(l){n=r;break}else n=(n|0)==0?r:n}i=i+1|0;if(i>>>0>=u>>>0){a=8;break}}if((a|0)==8)if(!n)break;t=Y(Ei(n));return Y(t+Y(s[n+404>>2]))}}while(0);t=Y(s[e+912>>2])}else{c=Y(s[e+908>>2]);t=Y(s[e+912>>2]);t=Y(pA[n&0](e,c,t));Rt(e,(wt(t)|0)^1,3573)}return Y(t)}function Di(e,t,n,r){e=e|0;t=t|0;n=Y(n);r=Y(r);var i=ft,o=0;if(!(ki(t)|0)){if(Gr(t)|0){t=0;o=3}else{r=Y(E);i=Y(E)}}else{t=1;o=3}if((o|0)==3){i=Y(Nr(e+364+(t<<3)|0,r));r=Y(Nr(e+380+(t<<3)|0,r))}o=r<n&(r>=Y(0.0)&((wt(r)|0)^1));n=o?r:n;o=i>=Y(0.0)&((wt(i)|0)^1)&n<i;return Y(o?i:n)}function Si(e,t,n,r,i,u,a){e=e|0;t=t|0;n=Y(n);r=r|0;i=Y(i);u=u|0;a=a|0;var l=ft,c=ft,f=0,d=0,p=ft,h=ft,v=ft,m=0,g=0,y=0,_=0,b=ft,w=0;y=Kr(o[e+4>>2]|0,u)|0;m=ri(y,u)|0;g=Gr(y)|0;p=Y(Sr(t,2,n));h=Y(Sr(t,0,n));if(!(Ir(t,2,n)|0)){if(gi(t,2)|0?Ai(t,2)|0:0){l=Y(s[e+908>>2]);c=Y(Xr(e,2));c=Y(l-Y(c+Y(Qr(e,2))));l=Y(yi(t,2,n));l=Y(di(t,2,Y(c-Y(l+Y(Oi(t,2,n)))),n,n))}else l=Y(E)}else l=Y(p+Y(Nr(o[t+992>>2]|0,n)));if(!(Ir(t,0,i)|0)){if(gi(t,0)|0?Ai(t,0)|0:0){c=Y(s[e+912>>2]);b=Y(Xr(e,0));b=Y(c-Y(b+Y(Qr(e,0))));c=Y(yi(t,0,i));c=Y(di(t,0,Y(b-Y(c+Y(Oi(t,0,i)))),i,n))}else c=Y(E)}else c=Y(h+Y(Nr(o[t+996>>2]|0,i)));f=wt(l)|0;d=wt(c)|0;do{if(f^d?(v=Y(s[t+396>>2]),!(wt(v)|0)):0)if(f){l=Y(p+Y(Y(c-h)*v));break}else{b=Y(h+Y(Y(l-p)/v));c=d?b:c;break}}while(0);d=wt(l)|0;f=wt(c)|0;if(d|f){w=(d^1)&1;r=n>Y(0.0)&((r|0)!=0&d);l=g?l:r?n:l;Dr(t,l,c,u,g?w:r?2:w,d&(f^1)&1,l,c,0,3623,a)|0;l=Y(s[t+908>>2]);l=Y(l+Y(Sr(t,2,n)));c=Y(s[t+912>>2]);c=Y(c+Y(Sr(t,0,n)))}Dr(t,l,c,u,1,1,l,c,1,3635,a)|0;if(Ai(t,y)|0?!(gi(t,y)|0):0){w=o[976+(y<<2)>>2]|0;b=Y(s[e+908+(w<<2)>>2]);b=Y(b-Y(s[t+908+(w<<2)>>2]));b=Y(b-Y(Qr(e,y)));b=Y(b-Y(qr(t,y,n)));b=Y(b-Y(Oi(t,y,g?n:i)));s[t+400+(o[1040+(y<<2)>>2]<<2)>>2]=b}else _=21;do{if((_|0)==21){if(!(gi(t,y)|0)?(o[e+8>>2]|0)==1:0){w=o[976+(y<<2)>>2]|0;b=Y(s[e+908+(w<<2)>>2]);b=Y(Y(b-Y(s[t+908+(w<<2)>>2]))*Y(.5));s[t+400+(o[1040+(y<<2)>>2]<<2)>>2]=b;break}if(!(gi(t,y)|0)?(o[e+8>>2]|0)==2:0){w=o[976+(y<<2)>>2]|0;b=Y(s[e+908+(w<<2)>>2]);b=Y(b-Y(s[t+908+(w<<2)>>2]));s[t+400+(o[1040+(y<<2)>>2]<<2)>>2]=b}}}while(0);if(Ai(t,m)|0?!(gi(t,m)|0):0){w=o[976+(m<<2)>>2]|0;b=Y(s[e+908+(w<<2)>>2]);b=Y(b-Y(s[t+908+(w<<2)>>2]));b=Y(b-Y(Qr(e,m)));b=Y(b-Y(qr(t,m,n)));b=Y(b-Y(Oi(t,m,g?i:n)));s[t+400+(o[1040+(m<<2)>>2]<<2)>>2]=b}else _=30;do{if((_|0)==30?!(gi(t,m)|0):0){if((pi(e,t)|0)==2){w=o[976+(m<<2)>>2]|0;b=Y(s[e+908+(w<<2)>>2]);b=Y(Y(b-Y(s[t+908+(w<<2)>>2]))*Y(.5));s[t+400+(o[1040+(m<<2)>>2]<<2)>>2]=b;break}w=(pi(e,t)|0)==3;if(w^(o[e+28>>2]|0)==2){w=o[976+(m<<2)>>2]|0;b=Y(s[e+908+(w<<2)>>2]);b=Y(b-Y(s[t+908+(w<<2)>>2]));s[t+400+(o[1040+(m<<2)>>2]<<2)>>2]=b}}}while(0);return}function Ci(e,t,n){e=e|0;t=t|0;n=n|0;var r=ft,i=0;i=o[976+(n<<2)>>2]|0;r=Y(s[t+908+(i<<2)>>2]);r=Y(Y(s[e+908+(i<<2)>>2])-r);r=Y(r-Y(s[t+400+(o[1040+(n<<2)>>2]<<2)>>2]));s[t+400+(o[1e3+(n<<2)>>2]<<2)>>2]=r;return}function ki(e){e=e|0;return(e|1|0)==1|0}function Ti(e){e=e|0;var t=ft;switch(o[e+56>>2]|0){case 0:case 3:{t=Y(s[e+40>>2]);if(t>Y(0.0)&((wt(t)|0)^1))e=r[(o[e+976>>2]|0)+2>>0]|0?1056:992;else e=1056;break}default:e=e+52|0}return e|0}function xi(e,t){e=e|0;t=t|0;return(r[e+t>>0]|0)!=0|0}function Ai(e,t){e=e|0;t=t|0;e=e+132|0;if(Gr(t)|0?(o[(Et(e,5,948)|0)+4>>2]|0)!=0:0)e=1;else e=(o[(Et(e,o[1e3+(t<<2)>>2]|0,948)|0)+4>>2]|0)!=0;return e|0}function Oi(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0;e=e+132|0;if(Gr(t)|0?(r=Et(e,5,948)|0,(o[r+4>>2]|0)!=0):0)i=4;else{r=Et(e,o[1e3+(t<<2)>>2]|0,948)|0;if(!(o[r+4>>2]|0))n=Y(0.0);else i=4}if((i|0)==4)n=Y(Nr(r,n));return Y(n)}function Pi(e,t,n){e=e|0;t=t|0;n=Y(n);if(gi(e,t)|0)n=Y(yi(e,t,n));else n=Y(-Y(Oi(e,t,n)));return Y(n)}function Ii(e){e=Y(e);return(s[d>>2]=e,o[d>>2]|0)|0}function Ni(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>1073741823)Ye();else{i=$T(t<<2)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<2)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<2);return}function Mi(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>2)<<2)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Ri(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-4-t|0)>>>2)<<2);e=o[e>>2]|0;if(e|0)KT(e);return}function Fi(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;a=e+4|0;l=o[a>>2]|0;i=l-r|0;u=i>>2;e=t+(u<<2)|0;if(e>>>0<n>>>0){r=l;do{o[r>>2]=o[e>>2];e=e+4|0;r=(o[a>>2]|0)+4|0;o[a>>2]=r}while(e>>>0<n>>>0)}if(u|0)sx(l+(0-u<<2)|0,t|0,i|0)|0;return}function Li(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0;l=t+4|0;s=o[l>>2]|0;i=o[e>>2]|0;a=n;u=a-i|0;r=s+(0-(u>>2)<<2)|0;o[l>>2]=r;if((u|0)>0)ix(r|0,i|0,u|0)|0;i=e+4|0;u=t+8|0;r=(o[i>>2]|0)-a|0;if((r|0)>0){ix(o[u>>2]|0,n|0,r|0)|0;o[u>>2]=(o[u>>2]|0)+(r>>>2<<2)}a=o[e>>2]|0;o[e>>2]=o[l>>2];o[l>>2]=a;a=o[i>>2]|0;o[i>>2]=o[u>>2];o[u>>2]=a;a=e+8|0;n=t+12|0;e=o[a>>2]|0;o[a>>2]=o[n>>2];o[n>>2]=e;o[t>>2]=o[l>>2];return s|0}function Bi(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;a=o[t>>2]|0;u=o[n>>2]|0;if((a|0)!=(u|0)){i=e+8|0;n=((u+-4-a|0)>>>2)+1|0;e=a;r=o[i>>2]|0;do{o[r>>2]=o[e>>2];r=(o[i>>2]|0)+4|0;o[i>>2]=r;e=e+4|0}while((e|0)!=(u|0));o[t>>2]=a+(n<<2)}return}function ji(){_t();return}function Ui(){var e=0;e=$T(4)|0;zi(e);return e|0}function zi(e){e=e|0;o[e>>2]=Lt()|0;return}function Wi(e){e=e|0;if(e|0){Hi(e);KT(e)}return}function Hi(e){e=e|0;jt(o[e>>2]|0);return}function Vi(e,t,n){e=e|0;t=t|0;n=n|0;jr(o[e>>2]|0,t,n);return}function qi(e,t){e=e|0;t=Y(t);Ar(o[e>>2]|0,t);return}function Gi(e,t){e=e|0;t=t|0;return xi(o[e>>2]|0,t)|0}function $i(){var e=0;e=$T(8)|0;Yi(e,0);return e|0}function Yi(e,t){e=e|0;t=t|0;if(!t)t=Ct()|0;else t=Dt(o[t>>2]|0)|0;o[e>>2]=t;o[e+4>>2]=0;Jt(t,e);return}function Ki(e){e=e|0;var t=0;t=$T(8)|0;Yi(t,e);return t|0}function Xi(e){e=e|0;if(e|0){Qi(e);KT(e)}return}function Qi(e){e=e|0;var t=0;xt(o[e>>2]|0);t=e+4|0;e=o[t>>2]|0;o[t>>2]=0;if(e|0){Ji(e);KT(e)}return}function Ji(e){e=e|0;Zi(e);return}function Zi(e){e=e|0;e=o[e>>2]|0;if(e|0)rt(e|0);return}function eo(e){e=e|0;return Zt(e)|0}function to(e){e=e|0;var t=0,n=0;n=e+4|0;t=o[n>>2]|0;o[n>>2]=0;if(t|0){Ji(t);KT(t)}Mt(o[e>>2]|0);return}function no(e,t){e=e|0;t=t|0;Kt(o[e>>2]|0,o[t>>2]|0);return}function ro(e,t){e=e|0;t=t|0;fn(o[e>>2]|0,t);return}function io(e,t,n){e=e|0;t=t|0;n=+n;Cn(o[e>>2]|0,t,Y(n));return}function oo(e,t,n){e=e|0;t=t|0;n=+n;kn(o[e>>2]|0,t,Y(n));return}function uo(e,t){e=e|0;t=t|0;on(o[e>>2]|0,t);return}function ao(e,t){e=e|0;t=t|0;an(o[e>>2]|0,t);return}function lo(e,t){e=e|0;t=t|0;sn(o[e>>2]|0,t);return}function so(e,t){e=e|0;t=t|0;en(o[e>>2]|0,t);return}function co(e,t){e=e|0;t=t|0;pn(o[e>>2]|0,t);return}function fo(e,t){e=e|0;t=t|0;nn(o[e>>2]|0,t);return}function po(e,t,n){e=e|0;t=t|0;n=+n;xn(o[e>>2]|0,t,Y(n));return}function ho(e,t,n){e=e|0;t=t|0;n=+n;An(o[e>>2]|0,t,Y(n));return}function vo(e,t){e=e|0;t=t|0;Pn(o[e>>2]|0,t);return}function mo(e,t){e=e|0;t=t|0;vn(o[e>>2]|0,t);return}function go(e,t){e=e|0;t=t|0;gn(o[e>>2]|0,t);return}function yo(e,t){e=e|0;t=+t;_n(o[e>>2]|0,Y(t));return}function _o(e,t){e=e|0;t=+t;En(o[e>>2]|0,Y(t));return}function bo(e,t){e=e|0;t=+t;Dn(o[e>>2]|0,Y(t));return}function wo(e,t){e=e|0;t=+t;bn(o[e>>2]|0,Y(t));return}function Eo(e,t){e=e|0;t=+t;wn(o[e>>2]|0,Y(t));return}function Do(e,t){e=e|0;t=+t;Ln(o[e>>2]|0,Y(t));return}function So(e,t){e=e|0;t=+t;Bn(o[e>>2]|0,Y(t));return}function Co(e){e=e|0;jn(o[e>>2]|0);return}function ko(e,t){e=e|0;t=+t;zn(o[e>>2]|0,Y(t));return}function To(e,t){e=e|0;t=+t;Wn(o[e>>2]|0,Y(t));return}function xo(e){e=e|0;Hn(o[e>>2]|0);return}function Ao(e,t){e=e|0;t=+t;qn(o[e>>2]|0,Y(t));return}function Oo(e,t){e=e|0;t=+t;Gn(o[e>>2]|0,Y(t));return}function Po(e,t){e=e|0;t=+t;Yn(o[e>>2]|0,Y(t));return}function Io(e,t){e=e|0;t=+t;Kn(o[e>>2]|0,Y(t));return}function No(e,t){e=e|0;t=+t;Qn(o[e>>2]|0,Y(t));return}function Mo(e,t){e=e|0;t=+t;Jn(o[e>>2]|0,Y(t));return}function Ro(e,t){e=e|0;t=+t;er(o[e>>2]|0,Y(t));return}function Fo(e,t){e=e|0;t=+t;tr(o[e>>2]|0,Y(t));return}function Lo(e,t){e=e|0;t=+t;rr(o[e>>2]|0,Y(t));return}function Bo(e,t,n){e=e|0;t=t|0;n=+n;Rn(o[e>>2]|0,t,Y(n));return}function jo(e,t,n){e=e|0;t=t|0;n=+n;In(o[e>>2]|0,t,Y(n));return}function Uo(e,t,n){e=e|0;t=t|0;n=+n;Nn(o[e>>2]|0,t,Y(n));return}function zo(e){e=e|0;return dn(o[e>>2]|0)|0}function Wo(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0;r=h;h=h+16|0;i=r;Tn(i,o[t>>2]|0,n);Ho(e,i);h=r;return}function Ho(e,t){e=e|0;t=t|0;Vo(e,o[t+4>>2]|0,+Y(s[t>>2]));return}function Vo(e,t,n){e=e|0;t=t|0;n=+n;o[e>>2]=t;c[e+8>>3]=n;return}function qo(e){e=e|0;return un(o[e>>2]|0)|0}function Go(e){e=e|0;return ln(o[e>>2]|0)|0}function $o(e){e=e|0;return cn(o[e>>2]|0)|0}function Yo(e){e=e|0;return tn(o[e>>2]|0)|0}function Ko(e){e=e|0;return hn(o[e>>2]|0)|0}function Xo(e){e=e|0;return rn(o[e>>2]|0)|0}function Qo(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0;r=h;h=h+16|0;i=r;On(i,o[t>>2]|0,n);Ho(e,i);h=r;return}function Jo(e){e=e|0;return mn(o[e>>2]|0)|0}function Zo(e){e=e|0;return yn(o[e>>2]|0)|0}function eu(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;Sn(r,o[t>>2]|0);Ho(e,r);h=n;return}function tu(e){e=e|0;return+ +Y(Xt(o[e>>2]|0))}function nu(e){e=e|0;return+ +Y(Qt(o[e>>2]|0))}function ru(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;Un(r,o[t>>2]|0);Ho(e,r);h=n;return}function iu(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;Vn(r,o[t>>2]|0);Ho(e,r);h=n;return}function ou(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;$n(r,o[t>>2]|0);Ho(e,r);h=n;return}function uu(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;Xn(r,o[t>>2]|0);Ho(e,r);h=n;return}function au(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;Zn(r,o[t>>2]|0);Ho(e,r);h=n;return}function lu(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;nr(r,o[t>>2]|0);Ho(e,r);h=n;return}function su(e){e=e|0;return+ +Y(ir(o[e>>2]|0))}function cu(e,t){e=e|0;t=t|0;return+ +Y(Fn(o[e>>2]|0,t))}function fu(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0;r=h;h=h+16|0;i=r;Mn(i,o[t>>2]|0,n);Ho(e,i);h=r;return}function du(e,t,n){e=e|0;t=t|0;n=n|0;zt(o[e>>2]|0,o[t>>2]|0,n);return}function pu(e,t){e=e|0;t=t|0;Nt(o[e>>2]|0,o[t>>2]|0);return}function hu(e){e=e|0;return Ot(o[e>>2]|0)|0}function vu(e){e=e|0;e=Gt(o[e>>2]|0)|0;if(!e)e=0;else e=eo(e)|0;return e|0}function mu(e,t){e=e|0;t=t|0;e=Pt(o[e>>2]|0,t)|0;if(!e)e=0;else e=eo(e)|0;return e|0}function gu(e,t){e=e|0;t=t|0;var n=0,r=0;r=$T(4)|0;yu(r,t);n=e+4|0;t=o[n>>2]|0;o[n>>2]=r;if(t|0){Ji(t);KT(t)}Ut(o[e>>2]|0,1);return}function yu(e,t){e=e|0;t=t|0;Bu(e,t);return}function _u(e,t,n,r,i,o){e=e|0;t=t|0;n=Y(n);r=r|0;i=Y(i);o=o|0;var u=0,a=0;u=h;h=h+16|0;a=u;bu(a,Zt(t)|0,+n,r,+i,o);s[e>>2]=Y(+c[a>>3]);s[e+4>>2]=Y(+c[a+8>>3]);h=u;return}function bu(e,t,n,r,i,u){e=e|0;t=t|0;n=+n;r=r|0;i=+i;u=u|0;var a=0,l=0,s=0,f=0,d=0;a=h;h=h+32|0;d=a+8|0;f=a+20|0;s=a;l=a+16|0;c[d>>3]=n;o[f>>2]=r;c[s>>3]=i;o[l>>2]=u;wu(e,o[t+4>>2]|0,d,f,s,l);h=a;return}function wu(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;var a=0,l=0;a=h;h=h+16|0;l=a;Dk(l);t=Eu(t)|0;Du(e,t,+c[n>>3],o[r>>2]|0,+c[i>>3],o[u>>2]|0);Ck(l);h=a;return}function Eu(e){e=e|0;return o[e>>2]|0}function Du(e,t,n,r,i,o){e=e|0;t=t|0;n=+n;r=r|0;i=+i;o=o|0;var u=0;u=Cu(Su()|0)|0;n=+ku(n);r=Tu(r)|0;i=+ku(i);xu(e,ot(0,u|0,t|0,+n,r|0,+i,Tu(o)|0)|0);return}function Su(){var e=0;if(!(r[7608]|0)){Ru(9120);e=7608;o[e>>2]=1;o[e+4>>2]=0}return 9120}function Cu(e){e=e|0;return o[e+8>>2]|0}function ku(e){e=+e;return+ +Mu(e)}function Tu(e){e=e|0;return Nu(e)|0}function xu(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;i=h;h=h+32|0;n=i;r=t;if(!(r&1)){o[e>>2]=o[t>>2];o[e+4>>2]=o[t+4>>2];o[e+8>>2]=o[t+8>>2];o[e+12>>2]=o[t+12>>2]}else{Au(n,0);Be(r|0,n|0)|0;Ou(e,n);Pu(n)}h=i;return}function Au(e,t){e=e|0;t=t|0;Iu(e,t);o[e+8>>2]=0;r[e+24>>0]=0;return}function Ou(e,t){e=e|0;t=t|0;t=t+8|0;o[e>>2]=o[t>>2];o[e+4>>2]=o[t+4>>2];o[e+8>>2]=o[t+8>>2];o[e+12>>2]=o[t+12>>2];return}function Pu(e){e=e|0;r[e+24>>0]=0;return}function Iu(e,t){e=e|0;t=t|0;o[e>>2]=t;return}function Nu(e){e=e|0;return e|0}function Mu(e){e=+e;return+e}function Ru(e){e=e|0;Lu(e,Fu()|0,4);return}function Fu(){return 1064}function Lu(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;o[e+8>>2]=tt(t|0,n+1|0)|0;return}function Bu(e,t){e=e|0;t=t|0;t=o[t>>2]|0;o[e>>2]=t;Ae(t|0);return}function ju(e){e=e|0;var t=0,n=0;n=e+4|0;t=o[n>>2]|0;o[n>>2]=0;if(t|0){Ji(t);KT(t)}Ut(o[e>>2]|0,0);return}function Uu(e){e=e|0;$t(o[e>>2]|0);return}function zu(e){e=e|0;return Yt(o[e>>2]|0)|0}function Wu(e,t,n,r){e=e|0;t=+t;n=+n;r=r|0;Or(o[e>>2]|0,Y(t),Y(n),r);return}function Hu(e){e=e|0;return+ +Y(or(o[e>>2]|0))}function Vu(e){e=e|0;return+ +Y(ar(o[e>>2]|0))}function qu(e){e=e|0;return+ +Y(ur(o[e>>2]|0))}function Gu(e){e=e|0;return+ +Y(lr(o[e>>2]|0))}function $u(e){e=e|0;return+ +Y(sr(o[e>>2]|0))}function Yu(e){e=e|0;return+ +Y(cr(o[e>>2]|0))}function Ku(e,t){e=e|0;t=t|0;c[e>>3]=+Y(or(o[t>>2]|0));c[e+8>>3]=+Y(ar(o[t>>2]|0));c[e+16>>3]=+Y(ur(o[t>>2]|0));c[e+24>>3]=+Y(lr(o[t>>2]|0));c[e+32>>3]=+Y(sr(o[t>>2]|0));c[e+40>>3]=+Y(cr(o[t>>2]|0));return}function Xu(e,t){e=e|0;t=t|0;return+ +Y(fr(o[e>>2]|0,t))}function Qu(e,t){e=e|0;t=t|0;return+ +Y(dr(o[e>>2]|0,t))}function Ju(e,t){e=e|0;t=t|0;return+ +Y(pr(o[e>>2]|0,t))}function Zu(){return Ft()|0}function ea(){ta();na();ra();ia();oa();ua();return}function ta(){zb(11713,4938,1);return}function na(){tb(10448);return}function ra(){R_(10408);return}function ia(){Jy(10324);return}function oa(){qm(10096);return}function ua(){aa(9132);return}function aa(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0,_=0,b=0,w=0,E=0,D=0,S=0,C=0,k=0,T=0,x=0,A=0,O=0,P=0,I=0,N=0,M=0,R=0,F=0,L=0,B=0,j=0,U=0,z=0,W=0,H=0,V=0,q=0,G=0,$=0,Y=0,K=0,X=0,Q=0,J=0,Z=0,ee=0,te=0,ne=0,re=0,ie=0,oe=0,ue=0,ae=0,le=0,se=0,ce=0,fe=0,de=0,pe=0,he=0,ve=0,me=0,ge=0,ye=0,_e=0,be=0,we=0,Ee=0,De=0,Se=0,Ce=0,ke=0,Te=0,xe=0,Ae=0,Oe=0,Pe=0,Ie=0;t=h;h=h+672|0;n=t+656|0;Ie=t+648|0;Pe=t+640|0;Oe=t+632|0;Ae=t+624|0;xe=t+616|0;Te=t+608|0;ke=t+600|0;Ce=t+592|0;Se=t+584|0;De=t+576|0;Ee=t+568|0;we=t+560|0;be=t+552|0;_e=t+544|0;ye=t+536|0;ge=t+528|0;me=t+520|0;ve=t+512|0;he=t+504|0;pe=t+496|0;de=t+488|0;fe=t+480|0;ce=t+472|0;se=t+464|0;le=t+456|0;ae=t+448|0;ue=t+440|0;oe=t+432|0;ie=t+424|0;re=t+416|0;ne=t+408|0;te=t+400|0;ee=t+392|0;Z=t+384|0;J=t+376|0;Q=t+368|0;X=t+360|0;K=t+352|0;Y=t+344|0;$=t+336|0;G=t+328|0;q=t+320|0;V=t+312|0;H=t+304|0;W=t+296|0;z=t+288|0;U=t+280|0;j=t+272|0;B=t+264|0;L=t+256|0;F=t+248|0;R=t+240|0;M=t+232|0;N=t+224|0;I=t+216|0;P=t+208|0;O=t+200|0;A=t+192|0;x=t+184|0;T=t+176|0;k=t+168|0;C=t+160|0;S=t+152|0;D=t+144|0;E=t+136|0;w=t+128|0;b=t+120|0;_=t+112|0;y=t+104|0;g=t+96|0;m=t+88|0;v=t+80|0;p=t+72|0;d=t+64|0;f=t+56|0;c=t+48|0;s=t+40|0;l=t+32|0;a=t+24|0;u=t+16|0;i=t+8|0;r=t;la(e,3646);sa(e,3651,2)|0;ca(e,3665,2)|0;fa(e,3682,18)|0;o[Ie>>2]=19;o[Ie+4>>2]=0;o[n>>2]=o[Ie>>2];o[n+4>>2]=o[Ie+4>>2];da(e,3690,n)|0;o[Pe>>2]=1;o[Pe+4>>2]=0;o[n>>2]=o[Pe>>2];o[n+4>>2]=o[Pe+4>>2];pa(e,3696,n)|0;o[Oe>>2]=2;o[Oe+4>>2]=0;o[n>>2]=o[Oe>>2];o[n+4>>2]=o[Oe+4>>2];ha(e,3706,n)|0;o[Ae>>2]=1;o[Ae+4>>2]=0;o[n>>2]=o[Ae>>2];o[n+4>>2]=o[Ae+4>>2];va(e,3722,n)|0;o[xe>>2]=2;o[xe+4>>2]=0;o[n>>2]=o[xe>>2];o[n+4>>2]=o[xe+4>>2];va(e,3734,n)|0;o[Te>>2]=3;o[Te+4>>2]=0;o[n>>2]=o[Te>>2];o[n+4>>2]=o[Te+4>>2];ha(e,3753,n)|0;o[ke>>2]=4;o[ke+4>>2]=0;o[n>>2]=o[ke>>2];o[n+4>>2]=o[ke+4>>2];ha(e,3769,n)|0;o[Ce>>2]=5;o[Ce+4>>2]=0;o[n>>2]=o[Ce>>2];o[n+4>>2]=o[Ce+4>>2];ha(e,3783,n)|0;o[Se>>2]=6;o[Se+4>>2]=0;o[n>>2]=o[Se>>2];o[n+4>>2]=o[Se+4>>2];ha(e,3796,n)|0;o[De>>2]=7;o[De+4>>2]=0;o[n>>2]=o[De>>2];o[n+4>>2]=o[De+4>>2];ha(e,3813,n)|0;o[Ee>>2]=8;o[Ee+4>>2]=0;o[n>>2]=o[Ee>>2];o[n+4>>2]=o[Ee+4>>2];ha(e,3825,n)|0;o[we>>2]=3;o[we+4>>2]=0;o[n>>2]=o[we>>2];o[n+4>>2]=o[we+4>>2];va(e,3843,n)|0;o[be>>2]=4;o[be+4>>2]=0;o[n>>2]=o[be>>2];o[n+4>>2]=o[be+4>>2];va(e,3853,n)|0;o[_e>>2]=9;o[_e+4>>2]=0;o[n>>2]=o[_e>>2];o[n+4>>2]=o[_e+4>>2];ha(e,3870,n)|0;o[ye>>2]=10;o[ye+4>>2]=0;o[n>>2]=o[ye>>2];o[n+4>>2]=o[ye+4>>2];ha(e,3884,n)|0;o[ge>>2]=11;o[ge+4>>2]=0;o[n>>2]=o[ge>>2];o[n+4>>2]=o[ge+4>>2];ha(e,3896,n)|0;o[me>>2]=1;o[me+4>>2]=0;o[n>>2]=o[me>>2];o[n+4>>2]=o[me+4>>2];ma(e,3907,n)|0;o[ve>>2]=2;o[ve+4>>2]=0;o[n>>2]=o[ve>>2];o[n+4>>2]=o[ve+4>>2];ma(e,3915,n)|0;o[he>>2]=3;o[he+4>>2]=0;o[n>>2]=o[he>>2];o[n+4>>2]=o[he+4>>2];ma(e,3928,n)|0;o[pe>>2]=4;o[pe+4>>2]=0;o[n>>2]=o[pe>>2];o[n+4>>2]=o[pe+4>>2];ma(e,3948,n)|0;o[de>>2]=5;o[de+4>>2]=0;o[n>>2]=o[de>>2];o[n+4>>2]=o[de+4>>2];ma(e,3960,n)|0;o[fe>>2]=6;o[fe+4>>2]=0;o[n>>2]=o[fe>>2];o[n+4>>2]=o[fe+4>>2];ma(e,3974,n)|0;o[ce>>2]=7;o[ce+4>>2]=0;o[n>>2]=o[ce>>2];o[n+4>>2]=o[ce+4>>2];ma(e,3983,n)|0;o[se>>2]=20;o[se+4>>2]=0;o[n>>2]=o[se>>2];o[n+4>>2]=o[se+4>>2];da(e,3999,n)|0;o[le>>2]=8;o[le+4>>2]=0;o[n>>2]=o[le>>2];o[n+4>>2]=o[le+4>>2];ma(e,4012,n)|0;o[ae>>2]=9;o[ae+4>>2]=0;o[n>>2]=o[ae>>2];o[n+4>>2]=o[ae+4>>2];ma(e,4022,n)|0;o[ue>>2]=21;o[ue+4>>2]=0;o[n>>2]=o[ue>>2];o[n+4>>2]=o[ue+4>>2];da(e,4039,n)|0;o[oe>>2]=10;o[oe+4>>2]=0;o[n>>2]=o[oe>>2];o[n+4>>2]=o[oe+4>>2];ma(e,4053,n)|0;o[ie>>2]=11;o[ie+4>>2]=0;o[n>>2]=o[ie>>2];o[n+4>>2]=o[ie+4>>2];ma(e,4065,n)|0;o[re>>2]=12;o[re+4>>2]=0;o[n>>2]=o[re>>2];o[n+4>>2]=o[re+4>>2];ma(e,4084,n)|0;o[ne>>2]=13;o[ne+4>>2]=0;o[n>>2]=o[ne>>2];o[n+4>>2]=o[ne+4>>2];ma(e,4097,n)|0;o[te>>2]=14;o[te+4>>2]=0;o[n>>2]=o[te>>2];o[n+4>>2]=o[te+4>>2];ma(e,4117,n)|0;o[ee>>2]=15;o[ee+4>>2]=0;o[n>>2]=o[ee>>2];o[n+4>>2]=o[ee+4>>2];ma(e,4129,n)|0;o[Z>>2]=16;o[Z+4>>2]=0;o[n>>2]=o[Z>>2];o[n+4>>2]=o[Z+4>>2];ma(e,4148,n)|0;o[J>>2]=17;o[J+4>>2]=0;o[n>>2]=o[J>>2];o[n+4>>2]=o[J+4>>2];ma(e,4161,n)|0;o[Q>>2]=18;o[Q+4>>2]=0;o[n>>2]=o[Q>>2];o[n+4>>2]=o[Q+4>>2];ma(e,4181,n)|0;o[X>>2]=5;o[X+4>>2]=0;o[n>>2]=o[X>>2];o[n+4>>2]=o[X+4>>2];va(e,4196,n)|0;o[K>>2]=6;o[K+4>>2]=0;o[n>>2]=o[K>>2];o[n+4>>2]=o[K+4>>2];va(e,4206,n)|0;o[Y>>2]=7;o[Y+4>>2]=0;o[n>>2]=o[Y>>2];o[n+4>>2]=o[Y+4>>2];va(e,4217,n)|0;o[$>>2]=3;o[$+4>>2]=0;o[n>>2]=o[$>>2];o[n+4>>2]=o[$+4>>2];ga(e,4235,n)|0;o[G>>2]=1;o[G+4>>2]=0;o[n>>2]=o[G>>2];o[n+4>>2]=o[G+4>>2];ya(e,4251,n)|0;o[q>>2]=4;o[q+4>>2]=0;o[n>>2]=o[q>>2];o[n+4>>2]=o[q+4>>2];ga(e,4263,n)|0;o[V>>2]=5;o[V+4>>2]=0;o[n>>2]=o[V>>2];o[n+4>>2]=o[V+4>>2];ga(e,4279,n)|0;o[H>>2]=6;o[H+4>>2]=0;o[n>>2]=o[H>>2];o[n+4>>2]=o[H+4>>2];ga(e,4293,n)|0;o[W>>2]=7;o[W+4>>2]=0;o[n>>2]=o[W>>2];o[n+4>>2]=o[W+4>>2];ga(e,4306,n)|0;o[z>>2]=8;o[z+4>>2]=0;o[n>>2]=o[z>>2];o[n+4>>2]=o[z+4>>2];ga(e,4323,n)|0;o[U>>2]=9;o[U+4>>2]=0;o[n>>2]=o[U>>2];o[n+4>>2]=o[U+4>>2];ga(e,4335,n)|0;o[j>>2]=2;o[j+4>>2]=0;o[n>>2]=o[j>>2];o[n+4>>2]=o[j+4>>2];ya(e,4353,n)|0;o[B>>2]=12;o[B+4>>2]=0;o[n>>2]=o[B>>2];o[n+4>>2]=o[B+4>>2];_a(e,4363,n)|0;o[L>>2]=1;o[L+4>>2]=0;o[n>>2]=o[L>>2];o[n+4>>2]=o[L+4>>2];ba(e,4376,n)|0;o[F>>2]=2;o[F+4>>2]=0;o[n>>2]=o[F>>2];o[n+4>>2]=o[F+4>>2];ba(e,4388,n)|0;o[R>>2]=13;o[R+4>>2]=0;o[n>>2]=o[R>>2];o[n+4>>2]=o[R+4>>2];_a(e,4402,n)|0;o[M>>2]=14;o[M+4>>2]=0;o[n>>2]=o[M>>2];o[n+4>>2]=o[M+4>>2];_a(e,4411,n)|0;o[N>>2]=15;o[N+4>>2]=0;o[n>>2]=o[N>>2];o[n+4>>2]=o[N+4>>2];_a(e,4421,n)|0;o[I>>2]=16;o[I+4>>2]=0;o[n>>2]=o[I>>2];o[n+4>>2]=o[I+4>>2];_a(e,4433,n)|0;o[P>>2]=17;o[P+4>>2]=0;o[n>>2]=o[P>>2];o[n+4>>2]=o[P+4>>2];_a(e,4446,n)|0;o[O>>2]=18;o[O+4>>2]=0;o[n>>2]=o[O>>2];o[n+4>>2]=o[O+4>>2];_a(e,4458,n)|0;o[A>>2]=3;o[A+4>>2]=0;o[n>>2]=o[A>>2];o[n+4>>2]=o[A+4>>2];ba(e,4471,n)|0;o[x>>2]=1;o[x+4>>2]=0;o[n>>2]=o[x>>2];o[n+4>>2]=o[x+4>>2];wa(e,4486,n)|0;o[T>>2]=10;o[T+4>>2]=0;o[n>>2]=o[T>>2];o[n+4>>2]=o[T+4>>2];ga(e,4496,n)|0;o[k>>2]=11;o[k+4>>2]=0;o[n>>2]=o[k>>2];o[n+4>>2]=o[k+4>>2];ga(e,4508,n)|0;o[C>>2]=3;o[C+4>>2]=0;o[n>>2]=o[C>>2];o[n+4>>2]=o[C+4>>2];ya(e,4519,n)|0;o[S>>2]=4;o[S+4>>2]=0;o[n>>2]=o[S>>2];o[n+4>>2]=o[S+4>>2];Ea(e,4530,n)|0;o[D>>2]=19;o[D+4>>2]=0;o[n>>2]=o[D>>2];o[n+4>>2]=o[D+4>>2];Da(e,4542,n)|0;o[E>>2]=12;o[E+4>>2]=0;o[n>>2]=o[E>>2];o[n+4>>2]=o[E+4>>2];Sa(e,4554,n)|0;o[w>>2]=13;o[w+4>>2]=0;o[n>>2]=o[w>>2];o[n+4>>2]=o[w+4>>2];Ca(e,4568,n)|0;o[b>>2]=2;o[b+4>>2]=0;o[n>>2]=o[b>>2];o[n+4>>2]=o[b+4>>2];ka(e,4578,n)|0;o[_>>2]=20;o[_+4>>2]=0;o[n>>2]=o[_>>2];o[n+4>>2]=o[_+4>>2];Ta(e,4587,n)|0;o[y>>2]=22;o[y+4>>2]=0;o[n>>2]=o[y>>2];o[n+4>>2]=o[y+4>>2];da(e,4602,n)|0;o[g>>2]=23;o[g+4>>2]=0;o[n>>2]=o[g>>2];o[n+4>>2]=o[g+4>>2];da(e,4619,n)|0;o[m>>2]=14;o[m+4>>2]=0;o[n>>2]=o[m>>2];o[n+4>>2]=o[m+4>>2];xa(e,4629,n)|0;o[v>>2]=1;o[v+4>>2]=0;o[n>>2]=o[v>>2];o[n+4>>2]=o[v+4>>2];Aa(e,4637,n)|0;o[p>>2]=4;o[p+4>>2]=0;o[n>>2]=o[p>>2];o[n+4>>2]=o[p+4>>2];ba(e,4653,n)|0;o[d>>2]=5;o[d+4>>2]=0;o[n>>2]=o[d>>2];o[n+4>>2]=o[d+4>>2];ba(e,4669,n)|0;o[f>>2]=6;o[f+4>>2]=0;o[n>>2]=o[f>>2];o[n+4>>2]=o[f+4>>2];ba(e,4686,n)|0;o[c>>2]=7;o[c+4>>2]=0;o[n>>2]=o[c>>2];o[n+4>>2]=o[c+4>>2];ba(e,4701,n)|0;o[s>>2]=8;o[s+4>>2]=0;o[n>>2]=o[s>>2];o[n+4>>2]=o[s+4>>2];ba(e,4719,n)|0;o[l>>2]=9;o[l+4>>2]=0;o[n>>2]=o[l>>2];o[n+4>>2]=o[l+4>>2];ba(e,4736,n)|0;o[a>>2]=21;o[a+4>>2]=0;o[n>>2]=o[a>>2];o[n+4>>2]=o[a+4>>2];Oa(e,4754,n)|0;o[u>>2]=2;o[u+4>>2]=0;o[n>>2]=o[u>>2];o[n+4>>2]=o[u+4>>2];wa(e,4772,n)|0;o[i>>2]=3;o[i+4>>2]=0;o[n>>2]=o[i>>2];o[n+4>>2]=o[i+4>>2];wa(e,4790,n)|0;o[r>>2]=4;o[r+4>>2]=0;o[n>>2]=o[r>>2];o[n+4>>2]=o[r+4>>2];wa(e,4808,n)|0;h=t;return}function la(e,t){e=e|0;t=t|0;var n=0;n=Mm()|0;o[e>>2]=n;Rm(n,t);cw(o[e>>2]|0);return}function sa(e,t,n){e=e|0;t=t|0;n=n|0;gm(e,Ia(t)|0,n,0);return e|0}function ca(e,t,n){e=e|0;t=t|0;n=n|0;Xv(e,Ia(t)|0,n,0);return e|0}function fa(e,t,n){e=e|0;t=t|0;n=n|0;Nv(e,Ia(t)|0,n,0);return e|0}function da(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];hv(e,t,i);h=r;return e|0}function pa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Gh(e,t,i);h=r;return e|0}function ha(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Th(e,t,i);h=r;return e|0}function va(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];lh(e,t,i);h=r;return e|0}function ma(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Hp(e,t,i);h=r;return e|0}function ga(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Sp(e,t,i);h=r;return e|0}function ya(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];op(e,t,i);h=r;return e|0}function _a(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Cd(e,t,i);h=r;return e|0}function ba(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ud(e,t,i);h=r;return e|0}function wa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];zf(e,t,i);h=r;return e|0}function Ea(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Ef(e,t,i);h=r;return e|0}function Da(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Zc(e,t,i);h=r;return e|0}function Sa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Nc(e,t,i);h=r;return e|0}function Ca(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];hc(e,t,i);h=r;return e|0}function ka(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];qs(e,t,i);h=r;return e|0}function Ta(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ws(e,t,i);h=r;return e|0}function xa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ts(e,t,i);h=r;return e|0}function Aa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Ol(e,t,i);h=r;return e|0}function Oa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Pa(e,t,i);h=r;return e|0}function Pa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Na(e,n,i,1);h=r;return}function Ia(e){e=e|0;return e|0}function Na(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Ma()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Ra(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Fa(u,r)|0,r);h=i;return}function Ma(){var e=0,t=0;if(!(r[7616]|0)){Ya(9136);Fe(24,9136,g|0)|0;t=7616;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9136)|0)){e=9136;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Ya(9136)}return 9136}function Ra(e){e=e|0;return 0}function Fa(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Ma()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Wa(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Ha(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function La(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;var a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0;a=h;h=h+32|0;p=a+24|0;d=a+20|0;s=a+16|0;f=a+12|0;c=a+8|0;l=a+4|0;v=a;o[d>>2]=t;o[s>>2]=n;o[f>>2]=r;o[c>>2]=i;o[l>>2]=u;u=e+28|0;o[v>>2]=o[u>>2];o[p>>2]=o[v>>2];Ba(e+24|0,p,d,f,c,s,l)|0;o[u>>2]=o[o[u>>2]>>2];h=a;return}function Ba(e,t,n,r,i,u,a){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;a=a|0;e=ja(t)|0;t=$T(24)|0;Ua(t+4|0,o[n>>2]|0,o[r>>2]|0,o[i>>2]|0,o[u>>2]|0,o[a>>2]|0);o[t>>2]=o[e>>2];o[e>>2]=t;return t|0}function ja(e){e=e|0;return o[e>>2]|0}function Ua(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;o[e>>2]=t;o[e+4>>2]=n;o[e+8>>2]=r;o[e+12>>2]=i;o[e+16>>2]=u;return}function za(e,t){e=e|0;t=t|0;return t|e|0}function Wa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Ha(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Va(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;qa(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Wa(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Ga(e,l);$a(l);h=c;return}}function Va(e){e=e|0;return 357913941}function qa(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Ga(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function $a(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Ya(e){e=e|0;Ja(e);return}function Ka(e){e=e|0;Qa(e+24|0);return}function Xa(e){e=e|0;return o[e>>2]|0}function Qa(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Ja(e){e=e|0;var t=0;t=Za()|0;nl(e,2,3,t,el()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Za(){return 9228}function el(){return 1140}function tl(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=rl(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];t=il(t,r)|0;h=n;return t|0}function nl(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;o[e>>2]=t;o[e+4>>2]=n;o[e+8>>2]=r;o[e+12>>2]=i;o[e+16>>2]=u;return}function rl(e){e=e|0;return(o[(Ma()|0)+24>>2]|0)+(e*12|0)|0}function il(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;i=h;h=h+48|0;r=i;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;vA[n&31](r,e);r=ol(r)|0;h=i;return r|0}function ol(e){e=e|0;var t=0,n=0,r=0,i=0;i=h;h=h+32|0;t=i+12|0;n=i;r=al(ul()|0)|0;if(!r)e=dl(e)|0;else{ll(t,r);sl(n,t);cl(e,n);e=fl(t)|0}h=i;return e|0}function ul(){var e=0;if(!(r[7632]|0)){Dl(9184);Fe(25,9184,g|0)|0;e=7632;o[e>>2]=1;o[e+4>>2]=0}return 9184}function al(e){e=e|0;return o[e+36>>2]|0}function ll(e,t){e=e|0;t=t|0;o[e>>2]=t;o[e+4>>2]=e;o[e+8>>2]=0;return}function sl(e,t){e=e|0;t=t|0;o[e>>2]=o[t>>2];o[e+4>>2]=o[t+4>>2];o[e+8>>2]=0;return}function cl(e,t){e=e|0;t=t|0;gl(t,e,e+8|0,e+16|0,e+24|0,e+32|0,e+40|0)|0;return}function fl(e){e=e|0;return o[(o[e+4>>2]|0)+8>>2]|0}function dl(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0,s=0;s=h;h=h+16|0;n=s+4|0;r=s;i=UD(8)|0;u=i;a=$T(48)|0;l=a;t=l+48|0;do{o[l>>2]=o[e>>2];l=l+4|0;e=e+4|0}while((l|0)<(t|0));t=u+4|0;o[t>>2]=a;l=$T(8)|0;a=o[t>>2]|0;o[r>>2]=0;o[n>>2]=o[r>>2];pl(l,a,n);o[i>>2]=l;h=s;return u|0}function pl(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;n=$T(16)|0;o[n+4>>2]=0;o[n+8>>2]=0;o[n>>2]=1092;o[n+12>>2]=t;o[e+4>>2]=n;return}function hl(e){e=e|0;zT(e);KT(e);return}function vl(e){e=e|0;e=o[e+12>>2]|0;if(e|0)KT(e);return}function ml(e){e=e|0;KT(e);return}function gl(e,t,n,r,i,u,a){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;a=a|0;u=yl(o[e>>2]|0,t,n,r,i,u,a)|0;a=e+4|0;o[(o[a>>2]|0)+8>>2]=u;return o[(o[a>>2]|0)+8>>2]|0}function yl(e,t,n,r,i,o,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;u=u|0;var a=0,l=0;a=h;h=h+16|0;l=a;Dk(l);e=Eu(e)|0;u=_l(e,+c[t>>3],+c[n>>3],+c[r>>3],+c[i>>3],+c[o>>3],+c[u>>3])|0;Ck(l);h=a;return u|0}function _l(e,t,n,r,i,o,u){e=e|0;t=+t;n=+n;r=+r;i=+i;o=+o;u=+u;var a=0;a=Cu(bl()|0)|0;t=+ku(t);n=+ku(n);r=+ku(r);i=+ku(i);o=+ku(o);return Te(0,a|0,e|0,+t,+n,+r,+i,+o,+ +ku(u))|0}function bl(){var e=0;if(!(r[7624]|0)){wl(9172);e=7624;o[e>>2]=1;o[e+4>>2]=0}return 9172}function wl(e){e=e|0;Lu(e,El()|0,6);return}function El(){return 1112}function Dl(e){e=e|0;Al(e);return}function Sl(e){e=e|0;Cl(e+24|0);kl(e+16|0);return}function Cl(e){e=e|0;xl(e);return}function kl(e){e=e|0;Tl(e);return}function Tl(e){e=e|0;var t=0,n=0;t=o[e>>2]|0;if(t|0)do{n=t;t=o[t>>2]|0;KT(n)}while((t|0)!=0);o[e>>2]=0;return}function xl(e){e=e|0;var t=0,n=0;t=o[e>>2]|0;if(t|0)do{n=t;t=o[t>>2]|0;KT(n)}while((t|0)!=0);o[e>>2]=0;return}function Al(e){e=e|0;var t=0;o[e+16>>2]=0;o[e+20>>2]=0;t=e+24|0;o[t>>2]=0;o[e+28>>2]=t;o[e+36>>2]=0;r[e+40>>0]=0;r[e+41>>0]=0;return}function Ol(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Pl(e,n,i,0);h=r;return}function Pl(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Il()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Nl(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Ml(u,r)|0,r);h=i;return}function Il(){var e=0,t=0;if(!(r[7640]|0)){zl(9232);Fe(26,9232,g|0)|0;t=7640;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9232)|0)){e=9232;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));zl(9232)}return 9232}function Nl(e){e=e|0;return 0}function Ml(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Il()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Rl(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Fl(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Rl(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Fl(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Ll(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Bl(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Rl(u,r,n);o[s>>2]=(o[s>>2]|0)+12;jl(e,l);Ul(l);h=c;return}}function Ll(e){e=e|0;return 357913941}function Bl(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function jl(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Ul(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function zl(e){e=e|0;Vl(e);return}function Wl(e){e=e|0;Hl(e+24|0);return}function Hl(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Vl(e){e=e|0;var t=0;t=Za()|0;nl(e,2,1,t,ql()|0,3);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function ql(){return 1144}function Gl(e,t,n,r,i){e=e|0;t=t|0;n=+n;r=+r;i=i|0;var u=0,a=0,l=0,s=0;u=h;h=h+16|0;a=u+8|0;l=u;s=$l(e)|0;e=o[s+4>>2]|0;o[l>>2]=o[s>>2];o[l+4>>2]=e;o[a>>2]=o[l>>2];o[a+4>>2]=o[l+4>>2];Yl(t,a,n,r,i);h=u;return}function $l(e){e=e|0;return(o[(Il()|0)+24>>2]|0)+(e*12|0)|0}function Yl(e,t,n,r,i){e=e|0;t=t|0;n=+n;r=+r;i=i|0;var u=0,a=0,l=0,s=0,c=0;c=h;h=h+16|0;a=c+2|0;l=c+1|0;s=c;u=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)u=o[(o[e>>2]|0)+u>>2]|0;Kl(a,n);n=+Xl(a,n);Kl(l,r);r=+Xl(l,r);Ql(s,i);s=Jl(s,i)|0;gA[u&1](e,n,r,s);h=c;return}function Kl(e,t){e=e|0;t=+t;return}function Xl(e,t){e=e|0;t=+t;return+ +es(t)}function Ql(e,t){e=e|0;t=t|0;return}function Jl(e,t){e=e|0;t=t|0;return Zl(t)|0}function Zl(e){e=e|0;return e|0}function es(e){e=+e;return+e}function ts(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ns(e,n,i,1);h=r;return}function ns(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=rs()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=is(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,os(u,r)|0,r);h=i;return}function rs(){var e=0,t=0;if(!(r[7648]|0)){ds(9268);Fe(27,9268,g|0)|0;t=7648;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9268)|0)){e=9268;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));ds(9268)}return 9268}function is(e){e=e|0;return 0}function os(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=rs()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];us(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{as(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function us(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function as(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=ls(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;ss(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];us(u,r,n);o[s>>2]=(o[s>>2]|0)+12;cs(e,l);fs(l);h=c;return}}function ls(e){e=e|0;return 357913941}function ss(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function cs(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function fs(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function ds(e){e=e|0;vs(e);return}function ps(e){e=e|0;hs(e+24|0);return}function hs(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function vs(e){e=e|0;var t=0;t=Za()|0;nl(e,2,4,t,ms()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function ms(){return 1160}function gs(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=ys(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];t=_s(t,r)|0;h=n;return t|0}function ys(e){e=e|0;return(o[(rs()|0)+24>>2]|0)+(e*12|0)|0}function _s(e,t){e=e|0;t=t|0;var n=0;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;return bs(mA[n&31](e)|0)|0}function bs(e){e=e|0;return e&1|0}function ws(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Es(e,n,i,0);h=r;return}function Es(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Ds()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Ss(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Cs(u,r)|0,r);h=i;return}function Ds(){var e=0,t=0;if(!(r[7656]|0)){Is(9304);Fe(28,9304,g|0)|0;t=7656;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9304)|0)){e=9304;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Is(9304)}return 9304}function Ss(e){e=e|0;return 0}function Cs(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Ds()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];ks(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Ts(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function ks(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Ts(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=xs(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;As(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];ks(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Os(e,l);Ps(l);h=c;return}}function xs(e){e=e|0;return 357913941}function As(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Os(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Ps(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Is(e){e=e|0;Rs(e);return}function Ns(e){e=e|0;Ms(e+24|0);return}function Ms(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Rs(e){e=e|0;var t=0;t=Za()|0;nl(e,2,5,t,Fs()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Fs(){return 1164}function Ls(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=Bs(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];js(t,i,n);h=r;return}function Bs(e){e=e|0;return(o[(Ds()|0)+24>>2]|0)+(e*12|0)|0}function js(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Us(i,n);n=zs(i,n)|0;vA[r&31](e,n);Ws(i);h=u;return}function Us(e,t){e=e|0;t=t|0;Hs(e,t);return}function zs(e,t){e=e|0;t=t|0;return e|0}function Ws(e){e=e|0;Ji(e);return}function Hs(e,t){e=e|0;t=t|0;Vs(e,t);return}function Vs(e,t){e=e|0;t=t|0;o[e>>2]=t;return}function qs(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Gs(e,n,i,0);h=r;return}function Gs(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=$s()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Ys(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Ks(u,r)|0,r);h=i;return}function $s(){var e=0,t=0;if(!(r[7664]|0)){nc(9340);Fe(29,9340,g|0)|0;t=7664;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9340)|0)){e=9340;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));nc(9340)}return 9340}function Ys(e){e=e|0;return 0}function Ks(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=$s()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Xs(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Qs(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Xs(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Qs(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Js(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Zs(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Xs(u,r,n);o[s>>2]=(o[s>>2]|0)+12;ec(e,l);tc(l);h=c;return}}function Js(e){e=e|0;return 357913941}function Zs(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function ec(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function tc(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function nc(e){e=e|0;oc(e);return}function rc(e){e=e|0;ic(e+24|0);return}function ic(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function oc(e){e=e|0;var t=0;t=Za()|0;nl(e,2,4,t,uc()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function uc(){return 1180}function ac(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=lc(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];n=sc(t,i,n)|0;h=r;return n|0}function lc(e){e=e|0;return(o[($s()|0)+24>>2]|0)+(e*12|0)|0}function sc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;cc(i,n);i=fc(i,n)|0;i=dc(DA[r&15](e,i)|0)|0;h=u;return i|0}function cc(e,t){e=e|0;t=t|0;return}function fc(e,t){e=e|0;t=t|0;return pc(t)|0}function dc(e){e=e|0;return e|0}function pc(e){e=e|0;return e|0}function hc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];vc(e,n,i,0);h=r;return}function vc(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=mc()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=gc(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,yc(u,r)|0,r);h=i;return}function mc(){var e=0,t=0;if(!(r[7672]|0)){Cc(9376);Fe(30,9376,g|0)|0;t=7672;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9376)|0)){e=9376;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Cc(9376)}return 9376}function gc(e){e=e|0;return 0}function yc(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=mc()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];_c(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{bc(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function _c(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function bc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=wc(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Ec(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];_c(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Dc(e,l);Sc(l);h=c;return}}function wc(e){e=e|0;return 357913941}function Ec(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Dc(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Sc(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Cc(e){e=e|0;xc(e);return}function kc(e){e=e|0;Tc(e+24|0);return}function Tc(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function xc(e){e=e|0;var t=0;t=Za()|0;nl(e,2,5,t,Ac()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Ac(){return 1196}function Oc(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=Pc(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];t=Ic(t,r)|0;h=n;return t|0}function Pc(e){e=e|0;return(o[(mc()|0)+24>>2]|0)+(e*12|0)|0}function Ic(e,t){e=e|0;t=t|0;var n=0;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;return dc(mA[n&31](e)|0)|0}function Nc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Mc(e,n,i,1);h=r;return}function Mc(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Rc()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Fc(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Lc(u,r)|0,r);h=i;return}function Rc(){var e=0,t=0;if(!(r[7680]|0)){Vc(9412);Fe(31,9412,g|0)|0;t=7680;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9412)|0)){e=9412;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Vc(9412)}return 9412}function Fc(e){e=e|0;return 0}function Lc(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Rc()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Bc(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{jc(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Bc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function jc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Uc(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;zc(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Bc(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Wc(e,l);Hc(l);h=c;return}}function Uc(e){e=e|0;return 357913941}function zc(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Wc(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Hc(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Vc(e){e=e|0;$c(e);return}function qc(e){e=e|0;Gc(e+24|0);return}function Gc(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function $c(e){e=e|0;var t=0;t=Za()|0;nl(e,2,6,t,Yc()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Yc(){return 1200}function Kc(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=Xc(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];t=Qc(t,r)|0;h=n;return t|0}function Xc(e){e=e|0;return(o[(Rc()|0)+24>>2]|0)+(e*12|0)|0}function Qc(e,t){e=e|0;t=t|0;var n=0;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;return Jc(mA[n&31](e)|0)|0}function Jc(e){e=e|0;return e|0}function Zc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ef(e,n,i,0);h=r;return}function ef(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=tf()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=nf(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,rf(u,r)|0,r);h=i;return}function tf(){var e=0,t=0;if(!(r[7688]|0)){ff(9448);Fe(32,9448,g|0)|0;t=7688;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9448)|0)){e=9448;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));ff(9448)}return 9448}function nf(e){e=e|0;return 0}function rf(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=tf()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];of(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{uf(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function of(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function uf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=af(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;lf(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];of(u,r,n);o[s>>2]=(o[s>>2]|0)+12;sf(e,l);cf(l);h=c;return}}function af(e){e=e|0;return 357913941}function lf(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function sf(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function cf(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function ff(e){e=e|0;hf(e);return}function df(e){e=e|0;pf(e+24|0);return}function pf(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function hf(e){e=e|0;var t=0;t=Za()|0;nl(e,2,6,t,vf()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function vf(){return 1204}function mf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=gf(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];yf(t,i,n);h=r;return}function gf(e){e=e|0;return(o[(tf()|0)+24>>2]|0)+(e*12|0)|0}function yf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;_f(i,n);i=bf(i,n)|0;vA[r&31](e,i);h=u;return}function _f(e,t){e=e|0;t=t|0;return}function bf(e,t){e=e|0;t=t|0;return wf(t)|0}function wf(e){e=e|0;return e|0}function Ef(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Df(e,n,i,0);h=r;return}function Df(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Sf()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Cf(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,kf(u,r)|0,r);h=i;return}function Sf(){var e=0,t=0;if(!(r[7696]|0)){Nf(9484);Fe(33,9484,g|0)|0;t=7696;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9484)|0)){e=9484;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Nf(9484)}return 9484}function Cf(e){e=e|0;return 0}function kf(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Sf()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Tf(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{xf(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Tf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function xf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Af(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Of(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Tf(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Pf(e,l);If(l);h=c;return}}function Af(e){e=e|0;return 357913941}function Of(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Pf(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function If(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Nf(e){e=e|0;Ff(e);return}function Mf(e){e=e|0;Rf(e+24|0);return}function Rf(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Ff(e){e=e|0;var t=0;t=Za()|0;nl(e,2,1,t,Lf()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Lf(){return 1212}function Bf(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;i=h;h=h+16|0;u=i+8|0;a=i;l=jf(e)|0;e=o[l+4>>2]|0;o[a>>2]=o[l>>2];o[a+4>>2]=e;o[u>>2]=o[a>>2];o[u+4>>2]=o[a+4>>2];Uf(t,u,n,r);h=i;return}function jf(e){e=e|0;return(o[(Sf()|0)+24>>2]|0)+(e*12|0)|0}function Uf(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;l=h;h=h+16|0;u=l+1|0;a=l;i=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)i=o[(o[e>>2]|0)+i>>2]|0;_f(u,n);u=bf(u,n)|0;cc(a,r);a=fc(a,r)|0;PA[i&15](e,u,a);h=l;return}function zf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Wf(e,n,i,1);h=r;return}function Wf(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Hf()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Vf(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,qf(u,r)|0,r);h=i;return}function Hf(){var e=0,t=0;if(!(r[7704]|0)){Jf(9520);Fe(34,9520,g|0)|0;t=7704;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9520)|0)){e=9520;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Jf(9520)}return 9520}function Vf(e){e=e|0;return 0}function qf(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Hf()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Gf(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{$f(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Gf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function $f(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Yf(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Kf(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Gf(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Xf(e,l);Qf(l);h=c;return}}function Yf(e){e=e|0;return 357913941}function Kf(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Xf(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Qf(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Jf(e){e=e|0;td(e);return}function Zf(e){e=e|0;ed(e+24|0);return}function ed(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function td(e){e=e|0;var t=0;t=Za()|0;nl(e,2,1,t,nd()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function nd(){return 1224}function rd(e,t,n){e=e|0;t=t|0;n=n|0;var r=0.0,i=0,u=0,a=0,l=0;i=h;h=h+16|0;u=i+8|0;a=i;l=id(e)|0;e=o[l+4>>2]|0;o[a>>2]=o[l>>2];o[a+4>>2]=e;o[u>>2]=o[a>>2];o[u+4>>2]=o[a+4>>2];r=+od(t,u,n);h=i;return+r}function id(e){e=e|0;return(o[(Hf()|0)+24>>2]|0)+(e*12|0)|0}function od(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0.0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Ql(i,n);i=Jl(i,n)|0;a=+Mu(+kA[r&7](e,i));h=u;return+a}function ud(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ad(e,n,i,1);h=r;return}function ad(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=ld()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=sd(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,cd(u,r)|0,r);h=i;return}function ld(){var e=0,t=0;if(!(r[7712]|0)){gd(9556);Fe(35,9556,g|0)|0;t=7712;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9556)|0)){e=9556;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));gd(9556)}return 9556}function sd(e){e=e|0;return 0}function cd(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=ld()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];fd(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{dd(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function fd(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function dd(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=pd(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;hd(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];fd(u,r,n);o[s>>2]=(o[s>>2]|0)+12;vd(e,l);md(l);h=c;return}}function pd(e){e=e|0;return 357913941}function hd(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function vd(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function md(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function gd(e){e=e|0;bd(e);return}function yd(e){e=e|0;_d(e+24|0);return}function _d(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function bd(e){e=e|0;var t=0;t=Za()|0;nl(e,2,5,t,wd()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function wd(){return 1232}function Ed(e,t){e=e|0;t=t|0;var n=0.0,r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=Dd(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];n=+Sd(t,i);h=r;return+n}function Dd(e){e=e|0;return(o[(ld()|0)+24>>2]|0)+(e*12|0)|0}function Sd(e,t){e=e|0;t=t|0;var n=0;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;return+ +Mu(+wA[n&15](e))}function Cd(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];kd(e,n,i,1);h=r;return}function kd(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Td()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=xd(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Ad(u,r)|0,r);h=i;return}function Td(){var e=0,t=0;if(!(r[7720]|0)){Fd(9592);Fe(36,9592,g|0)|0;t=7720;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9592)|0)){e=9592;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Fd(9592)}return 9592}function xd(e){e=e|0;return 0}function Ad(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Td()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Od(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Pd(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Od(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Pd(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Id(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Nd(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Od(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Md(e,l);Rd(l);h=c;return}}function Id(e){e=e|0;return 357913941}function Nd(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Md(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Rd(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Fd(e){e=e|0;jd(e);return}function Ld(e){e=e|0;Bd(e+24|0);return}function Bd(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function jd(e){e=e|0;var t=0;t=Za()|0;nl(e,2,7,t,Ud()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Ud(){return 1276}function zd(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=Wd(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];t=Hd(t,r)|0;h=n;return t|0}function Wd(e){e=e|0;return(o[(Td()|0)+24>>2]|0)+(e*12|0)|0}function Hd(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;i=h;h=h+16|0;r=i;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;vA[n&31](r,e);r=Vd(r)|0;h=i;return r|0}function Vd(e){e=e|0;var t=0,n=0,r=0,i=0;i=h;h=h+32|0;t=i+12|0;n=i;r=al(qd()|0)|0;if(!r)e=$d(e)|0;else{ll(t,r);sl(n,t);Gd(e,n);e=fl(t)|0}h=i;return e|0}function qd(){var e=0;if(!(r[7736]|0)){ip(9640);Fe(25,9640,g|0)|0;e=7736;o[e>>2]=1;o[e+4>>2]=0}return 9640}function Gd(e,t){e=e|0;t=t|0;Jd(t,e,e+8|0)|0;return}function $d(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0;n=h;h=h+16|0;i=n+4|0;a=n;r=UD(8)|0;t=r;l=$T(16)|0;o[l>>2]=o[e>>2];o[l+4>>2]=o[e+4>>2];o[l+8>>2]=o[e+8>>2];o[l+12>>2]=o[e+12>>2];u=t+4|0;o[u>>2]=l;e=$T(8)|0;u=o[u>>2]|0;o[a>>2]=0;o[i>>2]=o[a>>2];Yd(e,u,i);o[r>>2]=e;h=n;return t|0}function Yd(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;n=$T(16)|0;o[n+4>>2]=0;o[n+8>>2]=0;o[n>>2]=1244;o[n+12>>2]=t;o[e+4>>2]=n;return}function Kd(e){e=e|0;zT(e);KT(e);return}function Xd(e){e=e|0;e=o[e+12>>2]|0;if(e|0)KT(e);return}function Qd(e){e=e|0;KT(e);return}function Jd(e,t,n){e=e|0;t=t|0;n=n|0;t=Zd(o[e>>2]|0,t,n)|0;n=e+4|0;o[(o[n>>2]|0)+8>>2]=t;return o[(o[n>>2]|0)+8>>2]|0}function Zd(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0;r=h;h=h+16|0;i=r;Dk(i);e=Eu(e)|0;n=ep(e,o[t>>2]|0,+c[n>>3])|0;Ck(i);h=r;return n|0}function ep(e,t,n){e=e|0;t=t|0;n=+n;var r=0;r=Cu(tp()|0)|0;t=Tu(t)|0;return xe(0,r|0,e|0,t|0,+ +ku(n))|0}function tp(){var e=0;if(!(r[7728]|0)){np(9628);e=7728;o[e>>2]=1;o[e+4>>2]=0}return 9628}function np(e){e=e|0;Lu(e,rp()|0,2);return}function rp(){return 1264}function ip(e){e=e|0;Al(e);return}function op(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];up(e,n,i,1);h=r;return}function up(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=ap()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=lp(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,sp(u,r)|0,r);h=i;return}function ap(){var e=0,t=0;if(!(r[7744]|0)){mp(9684);Fe(37,9684,g|0)|0;t=7744;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9684)|0)){e=9684;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));mp(9684)}return 9684}function lp(e){e=e|0;return 0}function sp(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=ap()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];cp(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{fp(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function cp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function fp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=dp(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;pp(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];cp(u,r,n);o[s>>2]=(o[s>>2]|0)+12;hp(e,l);vp(l);h=c;return}}function dp(e){e=e|0;return 357913941}function pp(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function hp(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function vp(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function mp(e){e=e|0;_p(e);return}function gp(e){e=e|0;yp(e+24|0);return}function yp(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function _p(e){e=e|0;var t=0;t=Za()|0;nl(e,2,5,t,bp()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function bp(){return 1280}function wp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=Ep(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];n=Dp(t,i,n)|0;h=r;return n|0}function Ep(e){e=e|0;return(o[(ap()|0)+24>>2]|0)+(e*12|0)|0}function Dp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;a=h;h=h+32|0;i=a;u=a+16|0;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Ql(u,n);u=Jl(u,n)|0;PA[r&15](i,e,u);u=Vd(i)|0;h=a;return u|0}function Sp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Cp(e,n,i,1);h=r;return}function Cp(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=kp()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Tp(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,xp(u,r)|0,r);h=i;return}function kp(){var e=0,t=0;if(!(r[7752]|0)){Rp(9720);Fe(38,9720,g|0)|0;t=7752;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9720)|0)){e=9720;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Rp(9720)}return 9720}function Tp(e){e=e|0;return 0}function xp(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=kp()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Ap(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Op(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Ap(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Op(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Pp(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Ip(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Ap(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Np(e,l);Mp(l);h=c;return}}function Pp(e){e=e|0;return 357913941}function Ip(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Np(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Mp(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Rp(e){e=e|0;Bp(e);return}function Fp(e){e=e|0;Lp(e+24|0);return}function Lp(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Bp(e){e=e|0;var t=0;t=Za()|0;nl(e,2,8,t,jp()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function jp(){return 1288}function Up(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=zp(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];t=Wp(t,r)|0;h=n;return t|0}function zp(e){e=e|0;return(o[(kp()|0)+24>>2]|0)+(e*12|0)|0}function Wp(e,t){e=e|0;t=t|0;var n=0;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;return Nu(mA[n&31](e)|0)|0}function Hp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Vp(e,n,i,0);h=r;return}function Vp(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=qp()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Gp(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,$p(u,r)|0,r);h=i;return}function qp(){var e=0,t=0;if(!(r[7760]|0)){eh(9756);Fe(39,9756,g|0)|0;t=7760;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9756)|0)){e=9756;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));eh(9756)}return 9756}function Gp(e){e=e|0;return 0}function $p(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=qp()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Yp(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Kp(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Yp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Kp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Xp(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Qp(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Yp(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Jp(e,l);Zp(l);h=c;return}}function Xp(e){e=e|0;return 357913941}function Qp(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Jp(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Zp(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function eh(e){e=e|0;rh(e);return}function th(e){e=e|0;nh(e+24|0);return}function nh(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function rh(e){e=e|0;var t=0;t=Za()|0;nl(e,2,8,t,ih()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function ih(){return 1292}function oh(e,t,n){e=e|0;t=t|0;n=+n;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=uh(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ah(t,i,n);h=r;return}function uh(e){e=e|0;return(o[(qp()|0)+24>>2]|0)+(e*12|0)|0}function ah(e,t,n){e=e|0;t=t|0;n=+n;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Kl(i,n);n=+Xl(i,n);dA[r&31](e,n);h=u;return}function lh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];sh(e,n,i,0);h=r;return}function sh(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=ch()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=fh(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,dh(u,r)|0,r);h=i;return}function ch(){var e=0,t=0;if(!(r[7768]|0)){_h(9792);Fe(40,9792,g|0)|0;t=7768;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9792)|0)){e=9792;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));_h(9792)}return 9792}function fh(e){e=e|0;return 0}function dh(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=ch()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];ph(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{hh(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function ph(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function hh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=vh(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;mh(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];ph(u,r,n);o[s>>2]=(o[s>>2]|0)+12;gh(e,l);yh(l);h=c;return}}function vh(e){e=e|0;return 357913941}function mh(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function gh(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function yh(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function _h(e){e=e|0;Eh(e);return}function bh(e){e=e|0;wh(e+24|0);return}function wh(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Eh(e){e=e|0;var t=0;t=Za()|0;nl(e,2,1,t,Dh()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Dh(){return 1300}function Sh(e,t,n,r){e=e|0;t=t|0;n=n|0;r=+r;var i=0,u=0,a=0,l=0;i=h;h=h+16|0;u=i+8|0;a=i;l=Ch(e)|0;e=o[l+4>>2]|0;o[a>>2]=o[l>>2];o[a+4>>2]=e;o[u>>2]=o[a>>2];o[u+4>>2]=o[a+4>>2];kh(t,u,n,r);h=i;return}function Ch(e){e=e|0;return(o[(ch()|0)+24>>2]|0)+(e*12|0)|0}function kh(e,t,n,r){e=e|0;t=t|0;n=n|0;r=+r;var i=0,u=0,a=0,l=0;l=h;h=h+16|0;u=l+1|0;a=l;i=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)i=o[(o[e>>2]|0)+i>>2]|0;Ql(u,n);u=Jl(u,n)|0;Kl(a,r);r=+Xl(a,r);NA[i&15](e,u,r);h=l;return}function Th(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];xh(e,n,i,0);h=r;return}function xh(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Ah()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Oh(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Ph(u,r)|0,r);h=i;return}function Ah(){var e=0,t=0;if(!(r[7776]|0)){Bh(9828);Fe(41,9828,g|0)|0;t=7776;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9828)|0)){e=9828;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Bh(9828)}return 9828}function Oh(e){e=e|0;return 0}function Ph(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Ah()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Ih(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Nh(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Ih(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Nh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Mh(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Rh(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Ih(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Fh(e,l);Lh(l);h=c;return}}function Mh(e){e=e|0;return 357913941}function Rh(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Fh(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Lh(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Bh(e){e=e|0;zh(e);return}function jh(e){e=e|0;Uh(e+24|0);return}function Uh(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function zh(e){e=e|0;var t=0;t=Za()|0;nl(e,2,7,t,Wh()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Wh(){return 1312}function Hh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=Vh(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];qh(t,i,n);h=r;return}function Vh(e){e=e|0;return(o[(Ah()|0)+24>>2]|0)+(e*12|0)|0}function qh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Ql(i,n);i=Jl(i,n)|0;vA[r&31](e,i);h=u;return}function Gh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];$h(e,n,i,0);h=r;return}function $h(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Yh()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Kh(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Xh(u,r)|0,r);h=i;return}function Yh(){var e=0,t=0;if(!(r[7784]|0)){rv(9864);Fe(42,9864,g|0)|0;t=7784;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9864)|0)){e=9864;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));rv(9864)}return 9864}function Kh(e){e=e|0;return 0}function Xh(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Yh()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Qh(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Jh(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Qh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Jh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Zh(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;ev(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Qh(u,r,n);o[s>>2]=(o[s>>2]|0)+12;tv(e,l);nv(l);h=c;return}}function Zh(e){e=e|0;return 357913941}function ev(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function tv(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function nv(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function rv(e){e=e|0;uv(e);return}function iv(e){e=e|0;ov(e+24|0);return}function ov(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function uv(e){e=e|0;var t=0;t=Za()|0;nl(e,2,8,t,av()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function av(){return 1320}function lv(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=sv(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];cv(t,i,n);h=r;return}function sv(e){e=e|0;return(o[(Yh()|0)+24>>2]|0)+(e*12|0)|0}function cv(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;fv(i,n);i=dv(i,n)|0;vA[r&31](e,i);h=u;return}function fv(e,t){e=e|0;t=t|0;return}function dv(e,t){e=e|0;t=t|0;return pv(t)|0}function pv(e){e=e|0;return e|0}function hv(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];vv(e,n,i,0);h=r;return}function vv(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=mv()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=gv(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,yv(u,r)|0,r);h=i;return}function mv(){var e=0,t=0;if(!(r[7792]|0)){Cv(9900);Fe(43,9900,g|0)|0;t=7792;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9900)|0)){e=9900;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Cv(9900)}return 9900}function gv(e){e=e|0;return 0}function yv(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=mv()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];_v(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{bv(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function _v(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function bv(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=wv(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Ev(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];_v(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Dv(e,l);Sv(l);h=c;return}}function wv(e){e=e|0;return 357913941}function Ev(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Dv(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Sv(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Cv(e){e=e|0;xv(e);return}function kv(e){e=e|0;Tv(e+24|0);return}function Tv(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function xv(e){e=e|0;var t=0;t=Za()|0;nl(e,2,22,t,Av()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Av(){return 1344}function Ov(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=Pv(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];Iv(t,r);h=n;return}function Pv(e){e=e|0;return(o[(mv()|0)+24>>2]|0)+(e*12|0)|0}function Iv(e,t){e=e|0;t=t|0;var n=0;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;hA[n&127](e);return}function Nv(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=Mv()|0;e=Rv(n)|0;La(u,t,i,e,Fv(n,r)|0,r);return}function Mv(){var e=0,t=0;if(!(r[7800]|0)){Hv(9936);Fe(44,9936,g|0)|0;t=7800;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9936)|0)){e=9936;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Hv(9936)}return 9936}function Rv(e){e=e|0;return e|0}function Fv(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=Mv()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){Lv(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{Bv(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function Lv(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function Bv(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=jv(e)|0;if(r>>>0<a>>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;Uv(i,f>>3>>>0<r>>>1>>>0?c>>>0<a>>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;Lv(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;zv(e,i);Wv(i);h=l;return}}function jv(e){e=e|0;return 536870911}function Uv(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function zv(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Wv(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function Hv(e){e=e|0;Gv(e);return}function Vv(e){e=e|0;qv(e+24|0);return}function qv(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function Gv(e){e=e|0;var t=0;t=Za()|0;nl(e,1,23,t,vf()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function $v(e,t){e=e|0;t=t|0;Kv(o[(Yv(e)|0)>>2]|0,t);return}function Yv(e){e=e|0;return(o[(Mv()|0)+24>>2]|0)+(e<<3)|0}function Kv(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;_f(r,t);t=bf(r,t)|0;hA[e&127](t);h=n;return}function Xv(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=Qv()|0;e=Jv(n)|0;La(u,t,i,e,Zv(n,r)|0,r);return}function Qv(){var e=0,t=0;if(!(r[7808]|0)){um(9972);Fe(45,9972,g|0)|0;t=7808;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9972)|0)){e=9972;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));um(9972)}return 9972}function Jv(e){e=e|0;return e|0}function Zv(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=Qv()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){em(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{tm(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function em(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function tm(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=nm(e)|0;if(r>>>0<a>>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;rm(i,f>>3>>>0<r>>>1>>>0?c>>>0<a>>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;em(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;im(e,i);om(i);h=l;return}}function nm(e){e=e|0;return 536870911}function rm(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function im(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function om(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function um(e){e=e|0;sm(e);return}function am(e){e=e|0;lm(e+24|0);return}function lm(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function sm(e){e=e|0;var t=0;t=Za()|0;nl(e,1,9,t,cm()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function cm(){return 1348}function fm(e,t){e=e|0;t=t|0;return pm(o[(dm(e)|0)>>2]|0,t)|0}function dm(e){e=e|0;return(o[(Qv()|0)+24>>2]|0)+(e<<3)|0}function pm(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;hm(r,t);t=vm(r,t)|0;t=dc(mA[e&31](t)|0)|0;h=n;return t|0}function hm(e,t){e=e|0;t=t|0;return}function vm(e,t){e=e|0;t=t|0;return mm(t)|0}function mm(e){e=e|0;return e|0}function gm(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=ym()|0;e=_m(n)|0;La(u,t,i,e,bm(n,r)|0,r);return}function ym(){var e=0,t=0;if(!(r[7816]|0)){Tm(10008);Fe(46,10008,g|0)|0;t=7816;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10008)|0)){e=10008;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Tm(10008)}return 10008}function _m(e){e=e|0;return e|0}function bm(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=ym()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){wm(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{Em(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function wm(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function Em(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=Dm(e)|0;if(r>>>0<a>>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;Sm(i,f>>3>>>0<r>>>1>>>0?c>>>0<a>>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;wm(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;Cm(e,i);km(i);h=l;return}}function Dm(e){e=e|0;return 536870911}function Sm(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function Cm(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function km(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function Tm(e){e=e|0;Om(e);return}function xm(e){e=e|0;Am(e+24|0);return}function Am(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function Om(e){e=e|0;var t=0;t=Za()|0;nl(e,1,15,t,Ac()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Pm(e){e=e|0;return Nm(o[(Im(e)|0)>>2]|0)|0}function Im(e){e=e|0;return(o[(ym()|0)+24>>2]|0)+(e<<3)|0}function Nm(e){e=e|0;return dc(TA[e&7]()|0)|0}function Mm(){var e=0;if(!(r[7832]|0)){Vm(10052);Fe(25,10052,g|0)|0;e=7832;o[e>>2]=1;o[e+4>>2]=0}return 10052}function Rm(e,t){e=e|0;t=t|0;o[e>>2]=Fm()|0;o[e+4>>2]=Lm()|0;o[e+12>>2]=t;o[e+8>>2]=Bm()|0;o[e+32>>2]=2;return}function Fm(){return 11709}function Lm(){return 1188}function Bm(){return Wm()|0}function jm(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){zm(n);KT(n)}}else if(t|0){Qi(t);KT(t)}return}function Um(e,t){e=e|0;t=t|0;return t&e|0}function zm(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function Wm(){var e=0;if(!(r[7824]|0)){o[2511]=Hm()|0;o[2512]=0;e=7824;o[e>>2]=1;o[e+4>>2]=0}return 10044}function Hm(){return 0}function Vm(e){e=e|0;Al(e);return}function qm(e){e=e|0;var t=0,n=0,r=0,i=0,u=0;t=h;h=h+32|0;n=t+24|0;u=t+16|0;i=t+8|0;r=t;Gm(e,4827);$m(e,4834,3)|0;Ym(e,3682,47)|0;o[u>>2]=9;o[u+4>>2]=0;o[n>>2]=o[u>>2];o[n+4>>2]=o[u+4>>2];Km(e,4841,n)|0;o[i>>2]=1;o[i+4>>2]=0;o[n>>2]=o[i>>2];o[n+4>>2]=o[i+4>>2];Xm(e,4871,n)|0;o[r>>2]=10;o[r+4>>2]=0;o[n>>2]=o[r>>2];o[n+4>>2]=o[r+4>>2];Qm(e,4891,n)|0;h=t;return}function Gm(e,t){e=e|0;t=t|0;var n=0;n=Vy()|0;o[e>>2]=n;qy(n,t);cw(o[e>>2]|0);return}function $m(e,t,n){e=e|0;t=t|0;n=n|0;Cy(e,Ia(t)|0,n,0);return e|0}function Ym(e,t,n){e=e|0;t=t|0;n=n|0;ay(e,Ia(t)|0,n,0);return e|0}function Km(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];jg(e,t,i);h=r;return e|0}function Xm(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];gg(e,t,i);h=r;return e|0}function Qm(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Jm(e,t,i);h=r;return e|0}function Jm(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Zm(e,n,i,1);h=r;return}function Zm(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=eg()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=tg(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,ng(u,r)|0,r);h=i;return}function eg(){var e=0,t=0;if(!(r[7840]|0)){sg(10100);Fe(48,10100,g|0)|0;t=7840;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10100)|0)){e=10100;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));sg(10100)}return 10100}function tg(e){e=e|0;return 0}function ng(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=eg()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];rg(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{ig(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function rg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function ig(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=og(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;ug(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];rg(u,r,n);o[s>>2]=(o[s>>2]|0)+12;ag(e,l);lg(l);h=c;return}}function og(e){e=e|0;return 357913941}function ug(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function ag(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function lg(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function sg(e){e=e|0;dg(e);return}function cg(e){e=e|0;fg(e+24|0);return}function fg(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function dg(e){e=e|0;var t=0;t=Za()|0;nl(e,2,6,t,pg()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function pg(){return 1364}function hg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=vg(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];n=mg(t,i,n)|0;h=r;return n|0}function vg(e){e=e|0;return(o[(eg()|0)+24>>2]|0)+(e*12|0)|0}function mg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Ql(i,n);i=Jl(i,n)|0;i=bs(DA[r&15](e,i)|0)|0;h=u;return i|0}function gg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];yg(e,n,i,0);h=r;return}function yg(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=_g()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=bg(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,wg(u,r)|0,r);h=i;return}function _g(){var e=0,t=0;if(!(r[7848]|0)){xg(10136);Fe(49,10136,g|0)|0;t=7848;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10136)|0)){e=10136;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));xg(10136)}return 10136}function bg(e){e=e|0;return 0}function wg(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=_g()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Eg(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Dg(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Eg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Dg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Sg(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Cg(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Eg(u,r,n);o[s>>2]=(o[s>>2]|0)+12;kg(e,l);Tg(l);h=c;return}}function Sg(e){e=e|0;return 357913941}function Cg(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function kg(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Tg(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function xg(e){e=e|0;Pg(e);return}function Ag(e){e=e|0;Og(e+24|0);return}function Og(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Pg(e){e=e|0;var t=0;t=Za()|0;nl(e,2,9,t,Ig()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Ig(){return 1372}function Ng(e,t,n){e=e|0;t=t|0;n=+n;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=Mg(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Rg(t,i,n);h=r;return}function Mg(e){e=e|0;return(o[(_g()|0)+24>>2]|0)+(e*12|0)|0}function Rg(e,t,n){e=e|0;t=t|0;n=+n;var r=0,i=0,u=0,a=ft;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Fg(i,n);a=Y(Lg(i,n));fA[r&1](e,a);h=u;return}function Fg(e,t){e=e|0;t=+t;return}function Lg(e,t){e=e|0;t=+t;return Y(Bg(t))}function Bg(e){e=+e;return Y(e)}function jg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Ug(e,n,i,0);h=r;return}function Ug(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=zg()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Wg(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Hg(u,r)|0,r);h=i;return}function zg(){var e=0,t=0;if(!(r[7856]|0)){Xg(10172);Fe(50,10172,g|0)|0;t=7856;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10172)|0)){e=10172;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Xg(10172)}return 10172}function Wg(e){e=e|0;return 0}function Hg(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=zg()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Vg(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{qg(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Vg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function qg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Gg(e)|0;if(u>>>0<i>>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;$g(l,p>>>0<u>>>1>>>0?d>>>0<i>>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Vg(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Yg(e,l);Kg(l);h=c;return}}function Gg(e){e=e|0;return 357913941}function $g(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Yg(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Kg(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Xg(e){e=e|0;Zg(e);return}function Qg(e){e=e|0;Jg(e+24|0);return}function Jg(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Zg(e){e=e|0;var t=0;t=Za()|0;nl(e,2,3,t,ey()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function ey(){return 1380}function ty(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;i=h;h=h+16|0;u=i+8|0;a=i;l=ny(e)|0;e=o[l+4>>2]|0;o[a>>2]=o[l>>2];o[a+4>>2]=e;o[u>>2]=o[a>>2];o[u+4>>2]=o[a+4>>2];ry(t,u,n,r);h=i;return}function ny(e){e=e|0;return(o[(zg()|0)+24>>2]|0)+(e*12|0)|0}function ry(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;l=h;h=h+16|0;u=l+1|0;a=l;i=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)i=o[(o[e>>2]|0)+i>>2]|0;Ql(u,n);u=Jl(u,n)|0;iy(a,r);a=oy(a,r)|0;PA[i&15](e,u,a);h=l;return}function iy(e,t){e=e|0;t=t|0;return}function oy(e,t){e=e|0;t=t|0;return uy(t)|0}function uy(e){e=e|0;return(e|0)!=0|0}function ay(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=ly()|0;e=sy(n)|0;La(u,t,i,e,cy(n,r)|0,r);return}function ly(){var e=0,t=0;if(!(r[7864]|0)){gy(10208);Fe(51,10208,g|0)|0;t=7864;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10208)|0)){e=10208;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));gy(10208)}return 10208}function sy(e){e=e|0;return e|0}function cy(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=ly()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){fy(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{dy(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function fy(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function dy(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=py(e)|0;if(r>>>0<a>>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;hy(i,f>>3>>>0<r>>>1>>>0?c>>>0<a>>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;fy(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;vy(e,i);my(i);h=l;return}}function py(e){e=e|0;return 536870911}function hy(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function vy(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function my(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function gy(e){e=e|0;by(e);return}function yy(e){e=e|0;_y(e+24|0);return}function _y(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function by(e){e=e|0;var t=0;t=Za()|0;nl(e,1,24,t,wy()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function wy(){return 1392}function Ey(e,t){e=e|0;t=t|0;Sy(o[(Dy(e)|0)>>2]|0,t);return}function Dy(e){e=e|0;return(o[(ly()|0)+24>>2]|0)+(e<<3)|0}function Sy(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;hm(r,t);t=vm(r,t)|0;hA[e&127](t);h=n;return}function Cy(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=ky()|0;e=Ty(n)|0;La(u,t,i,e,xy(n,r)|0,r);return}function ky(){var e=0,t=0;if(!(r[7872]|0)){Ry(10244);Fe(52,10244,g|0)|0;t=7872;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10244)|0)){e=10244;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Ry(10244)}return 10244}function Ty(e){e=e|0;return e|0}function xy(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=ky()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){Ay(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{Oy(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function Ay(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function Oy(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=Py(e)|0;if(r>>>0<a>>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;Iy(i,f>>3>>>0<r>>>1>>>0?c>>>0<a>>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;Ay(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;Ny(e,i);My(i);h=l;return}}function Py(e){e=e|0;return 536870911}function Iy(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function Ny(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function My(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function Ry(e){e=e|0;By(e);return}function Fy(e){e=e|0;Ly(e+24|0);return}function Ly(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function By(e){e=e|0;var t=0;t=Za()|0;nl(e,1,16,t,jy()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function jy(){return 1400}function Uy(e){e=e|0;return Wy(o[(zy(e)|0)>>2]|0)|0}function zy(e){e=e|0;return(o[(ky()|0)+24>>2]|0)+(e<<3)|0}function Wy(e){e=e|0;return Hy(TA[e&7]()|0)|0}function Hy(e){e=e|0;return e|0}function Vy(){var e=0;if(!(r[7880]|0)){Qy(10280);Fe(25,10280,g|0)|0;e=7880;o[e>>2]=1;o[e+4>>2]=0}return 10280}function qy(e,t){e=e|0;t=t|0;o[e>>2]=Gy()|0;o[e+4>>2]=$y()|0;o[e+12>>2]=t;o[e+8>>2]=Yy()|0;o[e+32>>2]=4;return}function Gy(){return 11711}function $y(){return 1356}function Yy(){return Wm()|0}function Ky(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){Xy(n);KT(n)}}else if(t|0){Hi(t);KT(t)}return}function Xy(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function Qy(e){e=e|0;Al(e);return}function Jy(e){e=e|0;Zy(e,4920);e_(e)|0;t_(e)|0;return}function Zy(e,t){e=e|0;t=t|0;var n=0;n=qd()|0;o[e>>2]=n;T_(n,t);cw(o[e>>2]|0);return}function e_(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,v_()|0);return e|0}function t_(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,n_()|0);return e|0}function n_(){var e=0;if(!(r[7888]|0)){i_(10328);Fe(53,10328,g|0)|0;e=7888;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(10328)|0))i_(10328);return 10328}function r_(e,t){e=e|0;t=t|0;La(e,0,t,0,0,0);return}function i_(e){e=e|0;a_(e);s_(e,10);return}function o_(e){e=e|0;u_(e+24|0);return}function u_(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function a_(e){e=e|0;var t=0;t=Za()|0;nl(e,5,1,t,d_()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function l_(e,t,n){e=e|0;t=t|0;n=+n;c_(e,t,n);return}function s_(e,t){e=e|0;t=t|0;o[e+20>>2]=t;return}function c_(e,t,n){e=e|0;t=t|0;n=+n;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;u=r+8|0;l=r+13|0;i=r;a=r+12|0;Ql(l,t);o[u>>2]=Jl(l,t)|0;Kl(a,n);c[i>>3]=+Xl(a,n);f_(e,u,i);h=r;return}function f_(e,t,n){e=e|0;t=t|0;n=n|0;Vo(e+8|0,o[t>>2]|0,+c[n>>3]);r[e+24>>0]=1;return}function d_(){return 1404}function p_(e,t){e=e|0;t=+t;return h_(e,t)|0}function h_(e,t){e=e|0;t=+t;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;r=h;h=h+16|0;u=r+4|0;a=r+8|0;l=r;i=UD(8)|0;n=i;s=$T(16)|0;Ql(u,e);e=Jl(u,e)|0;Kl(a,t);Vo(s,e,+Xl(a,t));a=n+4|0;o[a>>2]=s;e=$T(8)|0;a=o[a>>2]|0;o[l>>2]=0;o[u>>2]=o[l>>2];Yd(e,a,u);o[i>>2]=e;h=r;return n|0}function v_(){var e=0;if(!(r[7896]|0)){m_(10364);Fe(54,10364,g|0)|0;e=7896;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(10364)|0))m_(10364);return 10364}function m_(e){e=e|0;__(e);s_(e,55);return}function g_(e){e=e|0;y_(e+24|0);return}function y_(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function __(e){e=e|0;var t=0;t=Za()|0;nl(e,5,4,t,S_()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function b_(e){e=e|0;w_(e);return}function w_(e){e=e|0;E_(e);return}function E_(e){e=e|0;D_(e+8|0);r[e+24>>0]=1;return}function D_(e){e=e|0;o[e>>2]=0;c[e+8>>3]=0.0;return}function S_(){return 1424}function C_(){return k_()|0}function k_(){var e=0,t=0,n=0,r=0,i=0,u=0,a=0;t=h;h=h+16|0;i=t+4|0;a=t;n=UD(8)|0;e=n;r=$T(16)|0;D_(r);u=e+4|0;o[u>>2]=r;r=$T(8)|0;u=o[u>>2]|0;o[a>>2]=0;o[i>>2]=o[a>>2];Yd(r,u,i);o[n>>2]=r;h=t;return e|0}function T_(e,t){e=e|0;t=t|0;o[e>>2]=x_()|0;o[e+4>>2]=A_()|0;o[e+12>>2]=t;o[e+8>>2]=O_()|0;o[e+32>>2]=5;return}function x_(){return 11710}function A_(){return 1416}function O_(){return N_()|0}function P_(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){I_(n);KT(n)}}else if(t|0)KT(t);return}function I_(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function N_(){var e=0;if(!(r[7904]|0)){o[2600]=M_()|0;o[2601]=0;e=7904;o[e>>2]=1;o[e+4>>2]=0}return 10400}function M_(){return o[357]|0}function R_(e){e=e|0;F_(e,4926);L_(e)|0;return}function F_(e,t){e=e|0;t=t|0;var n=0;n=ul()|0;o[e>>2]=n;K_(n,t);cw(o[e>>2]|0);return}function L_(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,B_()|0);return e|0}function B_(){var e=0;if(!(r[7912]|0)){j_(10412);Fe(56,10412,g|0)|0;e=7912;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(10412)|0))j_(10412);return 10412}function j_(e){e=e|0;W_(e);s_(e,57);return}function U_(e){e=e|0;z_(e+24|0);return}function z_(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function W_(e){e=e|0;var t=0;t=Za()|0;nl(e,5,5,t,G_()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function H_(e){e=e|0;V_(e);return}function V_(e){e=e|0;q_(e);return}function q_(e){e=e|0;var t=0,n=0;t=e+8|0;n=t+48|0;do{o[t>>2]=0;t=t+4|0}while((t|0)<(n|0));r[e+56>>0]=1;return}function G_(){return 1432}function $_(){return Y_()|0}function Y_(){var e=0,t=0,n=0,r=0,i=0,u=0,a=0,l=0;a=h;h=h+16|0;e=a+4|0;t=a;n=UD(8)|0;r=n;i=$T(48)|0;u=i;l=u+48|0;do{o[u>>2]=0;u=u+4|0}while((u|0)<(l|0));u=r+4|0;o[u>>2]=i;l=$T(8)|0;u=o[u>>2]|0;o[t>>2]=0;o[e>>2]=o[t>>2];pl(l,u,e);o[n>>2]=l;h=a;return r|0}function K_(e,t){e=e|0;t=t|0;o[e>>2]=X_()|0;o[e+4>>2]=Q_()|0;o[e+12>>2]=t;o[e+8>>2]=J_()|0;o[e+32>>2]=6;return}function X_(){return 11704}function Q_(){return 1436}function J_(){return N_()|0}function Z_(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){eb(n);KT(n)}}else if(t|0)KT(t);return}function eb(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function tb(e){e=e|0;nb(e,4933);rb(e)|0;ib(e)|0;return}function nb(e,t){e=e|0;t=t|0;var n=0;n=Nb()|0;o[e>>2]=n;Mb(n,t);cw(o[e>>2]|0);return}function rb(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,wb()|0);return e|0}function ib(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,ob()|0);return e|0}function ob(){var e=0;if(!(r[7920]|0)){ub(10452);Fe(58,10452,g|0)|0;e=7920;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(10452)|0))ub(10452);return 10452}function ub(e){e=e|0;sb(e);s_(e,1);return}function ab(e){e=e|0;lb(e+24|0);return}function lb(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function sb(e){e=e|0;var t=0;t=Za()|0;nl(e,5,1,t,hb()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function cb(e,t,n){e=e|0;t=+t;n=+n;fb(e,t,n);return}function fb(e,t,n){e=e|0;t=+t;n=+n;var r=0,i=0,o=0,u=0,a=0;r=h;h=h+32|0;o=r+8|0;a=r+17|0;i=r;u=r+16|0;Kl(a,t);c[o>>3]=+Xl(a,t);Kl(u,n);c[i>>3]=+Xl(u,n);db(e,o,i);h=r;return}function db(e,t,n){e=e|0;t=t|0;n=n|0;pb(e+8|0,+c[t>>3],+c[n>>3]);r[e+24>>0]=1;return}function pb(e,t,n){e=e|0;t=+t;n=+n;c[e>>3]=t;c[e+8>>3]=n;return}function hb(){return 1472}function vb(e,t){e=+e;t=+t;return mb(e,t)|0}function mb(e,t){e=+e;t=+t;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;r=h;h=h+16|0;a=r+4|0;l=r+8|0;s=r;i=UD(8)|0;n=i;u=$T(16)|0;Kl(a,e);e=+Xl(a,e);Kl(l,t);pb(u,e,+Xl(l,t));l=n+4|0;o[l>>2]=u;u=$T(8)|0;l=o[l>>2]|0;o[s>>2]=0;o[a>>2]=o[s>>2];gb(u,l,a);o[i>>2]=u;h=r;return n|0}function gb(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;n=$T(16)|0;o[n+4>>2]=0;o[n+8>>2]=0;o[n>>2]=1452;o[n+12>>2]=t;o[e+4>>2]=n;return}function yb(e){e=e|0;zT(e);KT(e);return}function _b(e){e=e|0;e=o[e+12>>2]|0;if(e|0)KT(e);return}function bb(e){e=e|0;KT(e);return}function wb(){var e=0;if(!(r[7928]|0)){Eb(10488);Fe(59,10488,g|0)|0;e=7928;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(10488)|0))Eb(10488);return 10488}function Eb(e){e=e|0;Cb(e);s_(e,60);return}function Db(e){e=e|0;Sb(e+24|0);return}function Sb(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function Cb(e){e=e|0;var t=0;t=Za()|0;nl(e,5,6,t,Ob()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function kb(e){e=e|0;Tb(e);return}function Tb(e){e=e|0;xb(e);return}function xb(e){e=e|0;Ab(e+8|0);r[e+24>>0]=1;return}function Ab(e){e=e|0;o[e>>2]=0;o[e+4>>2]=0;o[e+8>>2]=0;o[e+12>>2]=0;return}function Ob(){return 1492}function Pb(){return Ib()|0}function Ib(){var e=0,t=0,n=0,r=0,i=0,u=0,a=0;t=h;h=h+16|0;i=t+4|0;a=t;n=UD(8)|0;e=n;r=$T(16)|0;Ab(r);u=e+4|0;o[u>>2]=r;r=$T(8)|0;u=o[u>>2]|0;o[a>>2]=0;o[i>>2]=o[a>>2];gb(r,u,i);o[n>>2]=r;h=t;return e|0}function Nb(){var e=0;if(!(r[7936]|0)){Ub(10524);Fe(25,10524,g|0)|0;e=7936;o[e>>2]=1;o[e+4>>2]=0}return 10524}function Mb(e,t){e=e|0;t=t|0;o[e>>2]=Rb()|0;o[e+4>>2]=Fb()|0;o[e+12>>2]=t;o[e+8>>2]=Lb()|0;o[e+32>>2]=7;return}function Rb(){return 11700}function Fb(){return 1484}function Lb(){return N_()|0}function Bb(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){jb(n);KT(n)}}else if(t|0)KT(t);return}function jb(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function Ub(e){e=e|0;Al(e);return}function zb(e,t,n){e=e|0;t=t|0;n=n|0;e=Ia(t)|0;t=Wb(n)|0;n=Hb(n,0)|0;xw(e,t,n,Vb()|0,0);return}function Wb(e){e=e|0;return e|0}function Hb(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=Vb()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){Jb(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{Zb(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function Vb(){var e=0,t=0;if(!(r[7944]|0)){qb(10568);Fe(61,10568,g|0)|0;t=7944;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10568)|0)){e=10568;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));qb(10568)}return 10568}function qb(e){e=e|0;Yb(e);return}function Gb(e){e=e|0;$b(e+24|0);return}function $b(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function Yb(e){e=e|0;var t=0;t=Za()|0;nl(e,1,17,t,Yc()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Kb(e){e=e|0;return Qb(o[(Xb(e)|0)>>2]|0)|0}function Xb(e){e=e|0;return(o[(Vb()|0)+24>>2]|0)+(e<<3)|0}function Qb(e){e=e|0;return Jc(TA[e&7]()|0)|0}function Jb(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function Zb(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=ew(e)|0;if(r>>>0<a>>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;tw(i,f>>3>>>0<r>>>1>>>0?c>>>0<a>>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;Jb(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;nw(e,i);rw(i);h=l;return}}function ew(e){e=e|0;return 536870911}function tw(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function nw(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function rw(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function iw(){ow();return}function ow(){uw(10604);return}function uw(e){e=e|0;aw(e,4955);return}function aw(e,t){e=e|0;t=t|0;var n=0;n=lw()|0;o[e>>2]=n;sw(n,t);cw(o[e>>2]|0);return}function lw(){var e=0;if(!(r[7952]|0)){bw(10612);Fe(25,10612,g|0)|0;e=7952;o[e>>2]=1;o[e+4>>2]=0}return 10612}function sw(e,t){e=e|0;t=t|0;o[e>>2]=vw()|0;o[e+4>>2]=mw()|0;o[e+12>>2]=t;o[e+8>>2]=gw()|0;o[e+32>>2]=8;return}function cw(e){e=e|0;var t=0,n=0;t=h;h=h+16|0;n=t;fw()|0;o[n>>2]=e;dw(10608,n);h=t;return}function fw(){if(!(r[11714]|0)){o[2652]=0;Fe(62,10608,g|0)|0;r[11714]=1}return 10608}function dw(e,t){e=e|0;t=t|0;var n=0;n=$T(8)|0;o[n+4>>2]=o[t>>2];o[n>>2]=o[e>>2];o[e>>2]=n;return}function pw(e){e=e|0;hw(e);return}function hw(e){e=e|0;var t=0,n=0;t=o[e>>2]|0;if(t|0)do{n=t;t=o[t>>2]|0;KT(n)}while((t|0)!=0);o[e>>2]=0;return}function vw(){return 11715}function mw(){return 1496}function gw(){return Wm()|0}function yw(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){_w(n);KT(n)}}else if(t|0)KT(t);return}function _w(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function bw(e){e=e|0;Al(e);return}function ww(e,t){e=e|0;t=t|0;var n=0,r=0;fw()|0;n=o[2652]|0;e:do{if(n|0){while(1){r=o[n+4>>2]|0;if(r|0?(rT(Ew(r)|0,e)|0)==0:0)break;n=o[n>>2]|0;if(!n)break e}Dw(r,t)}}while(0);return}function Ew(e){e=e|0;return o[e+12>>2]|0}function Dw(e,t){e=e|0;t=t|0;var n=0;e=e+36|0;n=o[e>>2]|0;if(n|0){Ji(n);KT(n)}n=$T(4)|0;yu(n,t);o[e>>2]=n;return}function Sw(){if(!(r[11716]|0)){o[2664]=0;Fe(63,10656,g|0)|0;r[11716]=1}return 10656}function Cw(){var e=0;if(!(r[11717]|0)){kw();o[2665]=1504;r[11717]=1;e=1504}else e=o[2665]|0;return e|0}function kw(){if(!(r[11740]|0)){r[11718]=za(za(8,0)|0,0)|0;r[11719]=za(za(0,0)|0,0)|0;r[11720]=za(za(0,16)|0,0)|0;r[11721]=za(za(8,0)|0,0)|0;r[11722]=za(za(0,0)|0,0)|0;r[11723]=za(za(8,0)|0,0)|0;r[11724]=za(za(0,0)|0,0)|0;r[11725]=za(za(8,0)|0,0)|0;r[11726]=za(za(0,0)|0,0)|0;r[11727]=za(za(8,0)|0,0)|0;r[11728]=za(za(0,0)|0,0)|0;r[11729]=za(za(0,0)|0,32)|0;r[11730]=za(za(0,0)|0,32)|0;r[11740]=1}return}function Tw(){return 1572}function xw(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;var u=0,a=0,l=0,s=0,c=0,f=0;u=h;h=h+32|0;f=u+16|0;c=u+12|0;s=u+8|0;l=u+4|0;a=u;o[f>>2]=e;o[c>>2]=t;o[s>>2]=n;o[l>>2]=r;o[a>>2]=i;Sw()|0;Aw(10656,f,c,s,l,a);h=u;return}function Aw(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;var a=0;a=$T(24)|0;Ua(a+4|0,o[t>>2]|0,o[n>>2]|0,o[r>>2]|0,o[i>>2]|0,o[u>>2]|0);o[a>>2]=o[e>>2];o[e>>2]=a;return}function Ow(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0,_=0,b=0;b=h;h=h+32|0;m=b+20|0;g=b+8|0;y=b+4|0;_=b;t=o[t>>2]|0;if(t|0){v=m+4|0;s=m+8|0;c=g+4|0;f=g+8|0;d=g+8|0;p=m+8|0;do{a=t+4|0;l=Pw(a)|0;if(l|0){i=Iw(l)|0;o[m>>2]=0;o[v>>2]=0;o[s>>2]=0;r=(Nw(l)|0)+1|0;Mw(m,r);if(r|0)while(1){r=r+-1|0;gk(g,o[i>>2]|0);u=o[v>>2]|0;if(u>>>0<(o[p>>2]|0)>>>0){o[u>>2]=o[g>>2];o[v>>2]=(o[v>>2]|0)+4}else Rw(m,g);if(!r)break;else i=i+4|0}r=Fw(l)|0;o[g>>2]=0;o[c>>2]=0;o[f>>2]=0;e:do{if(o[r>>2]|0){i=0;u=0;while(1){if((i|0)==(u|0))Lw(g,r);else{o[i>>2]=o[r>>2];o[c>>2]=(o[c>>2]|0)+4}r=r+4|0;if(!(o[r>>2]|0))break e;i=o[c>>2]|0;u=o[d>>2]|0}}}while(0);o[y>>2]=Bw(a)|0;o[_>>2]=Xa(l)|0;jw(n,e,y,_,m,g);Uw(g);zw(m)}t=o[t>>2]|0}while((t|0)!=0)}h=b;return}function Pw(e){e=e|0;return o[e+12>>2]|0}function Iw(e){e=e|0;return o[e+12>>2]|0}function Nw(e){e=e|0;return o[e+16>>2]|0}function Mw(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;i=h;h=h+32|0;n=i;r=o[e>>2]|0;if((o[e+8>>2]|0)-r>>2>>>0<t>>>0){bE(n,t,(o[e+4>>2]|0)-r>>2,e+8|0);wE(e,n);EE(n)}h=i;return}function Rw(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0;a=h;h=h+32|0;n=a;r=e+4|0;i=((o[r>>2]|0)-(o[e>>2]|0)>>2)+1|0;u=mE(e)|0;if(u>>>0<i>>>0)UT(e);else{l=o[e>>2]|0;c=(o[e+8>>2]|0)-l|0;s=c>>1;bE(n,c>>2>>>0<u>>>1>>>0?s>>>0<i>>>0?i:s:u,(o[r>>2]|0)-l>>2,e+8|0);u=n+8|0;o[o[u>>2]>>2]=o[t>>2];o[u>>2]=(o[u>>2]|0)+4;wE(e,n);EE(n);h=a;return}}function Fw(e){e=e|0;return o[e+8>>2]|0}function Lw(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0;a=h;h=h+32|0;n=a;r=e+4|0;i=((o[r>>2]|0)-(o[e>>2]|0)>>2)+1|0;u=pE(e)|0;if(u>>>0<i>>>0)UT(e);else{l=o[e>>2]|0;c=(o[e+8>>2]|0)-l|0;s=c>>1;gE(n,c>>2>>>0<u>>>1>>>0?s>>>0<i>>>0?i:s:u,(o[r>>2]|0)-l>>2,e+8|0);u=n+8|0;o[o[u>>2]>>2]=o[t>>2];o[u>>2]=(o[u>>2]|0)+4;yE(e,n);_E(n);h=a;return}}function Bw(e){e=e|0;return o[e>>2]|0}function jw(e,t,n,r,i,o){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;Ww(e,t,n,r,i,o);return}function Uw(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-4-r|0)>>>2)<<2);KT(n)}return}function zw(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-4-r|0)>>>2)<<2);KT(n)}return}function Ww(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;var a=0,l=0,s=0,c=0,f=0,d=0;a=h;h=h+48|0;f=a+40|0;l=a+32|0;d=a+24|0;s=a+12|0;c=a;Dk(l);e=Eu(e)|0;o[d>>2]=o[t>>2];n=o[n>>2]|0;r=o[r>>2]|0;Hw(s,i);Vw(c,u);o[f>>2]=o[d>>2];qw(e,f,n,r,s,c);Uw(c);zw(s);Ck(l);h=a;return}function Hw(e,t){e=e|0;t=t|0;var n=0,r=0;o[e>>2]=0;o[e+4>>2]=0;o[e+8>>2]=0;n=t+4|0;r=(o[n>>2]|0)-(o[t>>2]|0)>>2;if(r|0){hE(e,r);vE(e,o[t>>2]|0,o[n>>2]|0,r)}return}function Vw(e,t){e=e|0;t=t|0;var n=0,r=0;o[e>>2]=0;o[e+4>>2]=0;o[e+8>>2]=0;n=t+4|0;r=(o[n>>2]|0)-(o[t>>2]|0)>>2;if(r|0){fE(e,r);dE(e,o[t>>2]|0,o[n>>2]|0,r)}return}function qw(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;var a=0,l=0,s=0,c=0,f=0,d=0;a=h;h=h+32|0;f=a+28|0;d=a+24|0;l=a+12|0;s=a;c=Cu(Gw()|0)|0;o[d>>2]=o[t>>2];o[f>>2]=o[d>>2];t=$w(f)|0;n=Yw(n)|0;r=Kw(r)|0;o[l>>2]=o[i>>2];f=i+4|0;o[l+4>>2]=o[f>>2];d=i+8|0;o[l+8>>2]=o[d>>2];o[d>>2]=0;o[f>>2]=0;o[i>>2]=0;i=Xw(l)|0;o[s>>2]=o[u>>2];f=u+4|0;o[s+4>>2]=o[f>>2];d=u+8|0;o[s+8>>2]=o[d>>2];o[d>>2]=0;o[f>>2]=0;o[u>>2]=0;Oe(0,c|0,e|0,t|0,n|0,r|0,i|0,Qw(s)|0)|0;Uw(s);zw(l);h=a;return}function Gw(){var e=0;if(!(r[7968]|0)){sE(10708);e=7968;o[e>>2]=1;o[e+4>>2]=0}return 10708}function $w(e){e=e|0;return tE(e)|0}function Yw(e){e=e|0;return Zw(e)|0}function Kw(e){e=e|0;return Jc(e)|0}function Xw(e){e=e|0;return eE(e)|0}function Qw(e){e=e|0;return Jw(e)|0}function Jw(e){e=e|0;var t=0,n=0,r=0;r=(o[e+4>>2]|0)-(o[e>>2]|0)|0;n=r>>2;r=UD(r+4|0)|0;o[r>>2]=n;if(n|0){t=0;do{o[r+4+(t<<2)>>2]=Zw(o[(o[e>>2]|0)+(t<<2)>>2]|0)|0;t=t+1|0}while((t|0)!=(n|0))}return r|0}function Zw(e){e=e|0;return e|0}function eE(e){e=e|0;var t=0,n=0,r=0;r=(o[e+4>>2]|0)-(o[e>>2]|0)|0;n=r>>2;r=UD(r+4|0)|0;o[r>>2]=n;if(n|0){t=0;do{o[r+4+(t<<2)>>2]=tE((o[e>>2]|0)+(t<<2)|0)|0;t=t+1|0}while((t|0)!=(n|0))}return r|0}function tE(e){e=e|0;var t=0,n=0,r=0,i=0;i=h;h=h+32|0;t=i+12|0;n=i;r=al(nE()|0)|0;if(!r)e=rE(e)|0;else{ll(t,r);sl(n,t);bk(e,n);e=fl(t)|0}h=i;return e|0}function nE(){var e=0;if(!(r[7960]|0)){lE(10664);Fe(25,10664,g|0)|0;e=7960;o[e>>2]=1;o[e+4>>2]=0}return 10664}function rE(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0;n=h;h=h+16|0;i=n+4|0;a=n;r=UD(8)|0;t=r;l=$T(4)|0;o[l>>2]=o[e>>2];u=t+4|0;o[u>>2]=l;e=$T(8)|0;u=o[u>>2]|0;o[a>>2]=0;o[i>>2]=o[a>>2];iE(e,u,i);o[r>>2]=e;h=n;return t|0}function iE(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;n=$T(16)|0;o[n+4>>2]=0;o[n+8>>2]=0;o[n>>2]=1656;o[n+12>>2]=t;o[e+4>>2]=n;return}function oE(e){e=e|0;zT(e);KT(e);return}function uE(e){e=e|0;e=o[e+12>>2]|0;if(e|0)KT(e);return}function aE(e){e=e|0;KT(e);return}function lE(e){e=e|0;Al(e);return}function sE(e){e=e|0;Lu(e,cE()|0,5);return}function cE(){return 1676}function fE(e,t){e=e|0;t=t|0;var n=0;if((pE(e)|0)>>>0<t>>>0)UT(e);if(t>>>0>1073741823)Ye();else{n=$T(t<<2)|0;o[e+4>>2]=n;o[e>>2]=n;o[e+8>>2]=n+(t<<2);return}}function dE(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;r=e+4|0;e=n-t|0;if((e|0)>0){ix(o[r>>2]|0,t|0,e|0)|0;o[r>>2]=(o[r>>2]|0)+(e>>>2<<2)}return}function pE(e){e=e|0;return 1073741823}function hE(e,t){e=e|0;t=t|0;var n=0;if((mE(e)|0)>>>0<t>>>0)UT(e);if(t>>>0>1073741823)Ye();else{n=$T(t<<2)|0;o[e+4>>2]=n;o[e>>2]=n;o[e+8>>2]=n+(t<<2);return}}function vE(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;r=e+4|0;e=n-t|0;if((e|0)>0){ix(o[r>>2]|0,t|0,e|0)|0;o[r>>2]=(o[r>>2]|0)+(e>>>2<<2)}return}function mE(e){e=e|0;return 1073741823}function gE(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>1073741823)Ye();else{i=$T(t<<2)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<2)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<2);return}function yE(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>2)<<2)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function _E(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-4-t|0)>>>2)<<2);e=o[e>>2]|0;if(e|0)KT(e);return}function bE(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>1073741823)Ye();else{i=$T(t<<2)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<2)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<2);return}function wE(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>2)<<2)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function EE(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-4-t|0)>>>2)<<2);e=o[e>>2]|0;if(e|0)KT(e);return}function DE(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;var u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0;g=h;h=h+32|0;f=g+20|0;d=g+12|0;c=g+16|0;p=g+4|0;v=g;m=g+8|0;l=Cw()|0;u=o[l>>2]|0;a=o[u>>2]|0;if(a|0){s=o[l+8>>2]|0;l=o[l+4>>2]|0;while(1){gk(f,a);SE(e,f,l,s);u=u+4|0;a=o[u>>2]|0;if(!a)break;else{s=s+1|0;l=l+1|0}}}u=Tw()|0;a=o[u>>2]|0;if(a|0)do{gk(f,a);o[d>>2]=o[u+4>>2];CE(t,f,d);u=u+8|0;a=o[u>>2]|0}while((a|0)!=0);u=o[(fw()|0)>>2]|0;if(u|0)do{t=o[u+4>>2]|0;gk(f,o[(kE(t)|0)>>2]|0);o[d>>2]=Ew(t)|0;TE(n,f,d);u=o[u>>2]|0}while((u|0)!=0);gk(c,0);u=Sw()|0;o[f>>2]=o[c>>2];Ow(f,u,i);u=o[(fw()|0)>>2]|0;if(u|0){e=f+4|0;t=f+8|0;n=f+8|0;do{s=o[u+4>>2]|0;gk(d,o[(kE(s)|0)>>2]|0);AE(p,xE(s)|0);a=o[p>>2]|0;if(a|0){o[f>>2]=0;o[e>>2]=0;o[t>>2]=0;do{gk(v,o[(kE(o[a+4>>2]|0)|0)>>2]|0);l=o[e>>2]|0;if(l>>>0<(o[n>>2]|0)>>>0){o[l>>2]=o[v>>2];o[e>>2]=(o[e>>2]|0)+4}else Rw(f,v);a=o[a>>2]|0}while((a|0)!=0);OE(r,d,f);zw(f)}o[m>>2]=o[d>>2];c=PE(s)|0;o[f>>2]=o[m>>2];Ow(f,c,i);kl(p);u=o[u>>2]|0}while((u|0)!=0)}h=g;return}function SE(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;qE(e,t,n,r);return}function CE(e,t,n){e=e|0;t=t|0;n=n|0;VE(e,t,n);return}function kE(e){e=e|0;return e|0}function TE(e,t,n){e=e|0;t=t|0;n=n|0;jE(e,t,n);return}function xE(e){e=e|0;return e+16|0}function AE(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;u=h;h=h+16|0;i=u+8|0;n=u;o[e>>2]=0;r=o[t>>2]|0;o[i>>2]=r;o[n>>2]=e;n=LE(n)|0;if(r|0){r=$T(12)|0;a=(BE(i)|0)+4|0;e=o[a+4>>2]|0;t=r+4|0;o[t>>2]=o[a>>2];o[t+4>>2]=e;t=o[o[i>>2]>>2]|0;o[i>>2]=t;if(!t)e=r;else{t=r;while(1){e=$T(12)|0;s=(BE(i)|0)+4|0;l=o[s+4>>2]|0;a=e+4|0;o[a>>2]=o[s>>2];o[a+4>>2]=l;o[t>>2]=e;a=o[o[i>>2]>>2]|0;o[i>>2]=a;if(!a)break;else t=e}}o[e>>2]=o[n>>2];o[n>>2]=r}h=u;return}function OE(e,t,n){e=e|0;t=t|0;n=n|0;IE(e,t,n);return}function PE(e){e=e|0;return e+24|0}function IE(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+32|0;a=r+24|0;i=r+16|0;l=r+12|0;u=r;Dk(i);e=Eu(e)|0;o[l>>2]=o[t>>2];Hw(u,n);o[a>>2]=o[l>>2];NE(e,a,u);zw(u);Ck(i);h=r;return}function NE(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+32|0;a=r+16|0;l=r+12|0;i=r;u=Cu(ME()|0)|0;o[l>>2]=o[t>>2];o[a>>2]=o[l>>2];t=$w(a)|0;o[i>>2]=o[n>>2];a=n+4|0;o[i+4>>2]=o[a>>2];l=n+8|0;o[i+8>>2]=o[l>>2];o[l>>2]=0;o[a>>2]=0;o[n>>2]=0;ke(0,u|0,e|0,t|0,Xw(i)|0)|0;zw(i);h=r;return}function ME(){var e=0;if(!(r[7976]|0)){RE(10720);e=7976;o[e>>2]=1;o[e+4>>2]=0}return 10720}function RE(e){e=e|0;Lu(e,FE()|0,2);return}function FE(){return 1732}function LE(e){e=e|0;return o[e>>2]|0}function BE(e){e=e|0;return o[e>>2]|0}function jE(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+32|0;u=r+16|0;i=r+8|0;a=r;Dk(i);e=Eu(e)|0;o[a>>2]=o[t>>2];n=o[n>>2]|0;o[u>>2]=o[a>>2];UE(e,u,n);Ck(i);h=r;return}function UE(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;u=r+4|0;a=r;i=Cu(zE()|0)|0;o[a>>2]=o[t>>2];o[u>>2]=o[a>>2];t=$w(u)|0;ke(0,i|0,e|0,t|0,Yw(n)|0)|0;h=r;return}function zE(){var e=0;if(!(r[7984]|0)){WE(10732);e=7984;o[e>>2]=1;o[e+4>>2]=0}return 10732}function WE(e){e=e|0;Lu(e,HE()|0,2);return}function HE(){return 1744}function VE(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+32|0;u=r+16|0;i=r+8|0;a=r;Dk(i);e=Eu(e)|0;o[a>>2]=o[t>>2];n=o[n>>2]|0;o[u>>2]=o[a>>2];UE(e,u,n);Ck(i);h=r;return}function qE(e,t,n,i){e=e|0;t=t|0;n=n|0;i=i|0;var u=0,a=0,l=0,s=0;u=h;h=h+32|0;l=u+16|0;a=u+8|0;s=u;Dk(a);e=Eu(e)|0;o[s>>2]=o[t>>2];n=r[n>>0]|0;i=r[i>>0]|0;o[l>>2]=o[s>>2];GE(e,l,n,i);Ck(a);h=u;return}function GE(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;i=h;h=h+16|0;a=i+4|0;l=i;u=Cu($E()|0)|0;o[l>>2]=o[t>>2];o[a>>2]=o[l>>2];t=$w(a)|0;n=YE(n)|0;nt(0,u|0,e|0,t|0,n|0,YE(r)|0)|0;h=i;return}function $E(){var e=0;if(!(r[7992]|0)){XE(10744);e=7992;o[e>>2]=1;o[e+4>>2]=0}return 10744}function YE(e){e=e|0;return KE(e)|0}function KE(e){e=e|0;return e&255|0}function XE(e){e=e|0;Lu(e,QE()|0,3);return}function QE(){return 1756}function JE(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0;v=h;h=h+32|0;s=v+8|0;c=v+4|0;f=v+20|0;d=v;Vs(e,0);i=_k(t)|0;o[s>>2]=0;p=s+4|0;o[p>>2]=0;o[s+8>>2]=0;switch(i<<24>>24){case 0:{r[f>>0]=0;ZE(c,n,f);eD(e,c)|0;Zi(c);break}case 8:{p=yk(t)|0;r[f>>0]=8;gk(d,o[p+4>>2]|0);tD(c,n,f,d,p+8|0);eD(e,c)|0;Zi(c);break}case 9:{a=yk(t)|0;t=o[a+4>>2]|0;if(t|0){l=s+8|0;u=a+12|0;while(1){t=t+-1|0;gk(c,o[u>>2]|0);i=o[p>>2]|0;if(i>>>0<(o[l>>2]|0)>>>0){o[i>>2]=o[c>>2];o[p>>2]=(o[p>>2]|0)+4}else Rw(s,c);if(!t)break;else u=u+4|0}}r[f>>0]=9;gk(d,o[a+8>>2]|0);nD(c,n,f,d,s);eD(e,c)|0;Zi(c);break}default:{p=yk(t)|0;r[f>>0]=i;gk(d,o[p+4>>2]|0);rD(c,n,f,d);eD(e,c)|0;Zi(c)}}zw(s);h=v;return}function ZE(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,o=0;i=h;h=h+16|0;o=i;Dk(o);t=Eu(t)|0;gD(e,t,r[n>>0]|0);Ck(o);h=i;return}function eD(e,t){e=e|0;t=t|0;var n=0;n=o[e>>2]|0;if(n|0)rt(n|0);o[e>>2]=o[t>>2];o[t>>2]=0;return e|0}function tD(e,t,n,i,u){e=e|0;t=t|0;n=n|0;i=i|0;u=u|0;var a=0,l=0,s=0,c=0;a=h;h=h+32|0;s=a+16|0;l=a+8|0;c=a;Dk(l);t=Eu(t)|0;n=r[n>>0]|0;o[c>>2]=o[i>>2];u=o[u>>2]|0;o[s>>2]=o[c>>2];pD(e,t,n,s,u);Ck(l);h=a;return}function nD(e,t,n,i,u){e=e|0;t=t|0;n=n|0;i=i|0;u=u|0;var a=0,l=0,s=0,c=0,f=0;a=h;h=h+32|0;c=a+24|0;l=a+16|0;f=a+12|0;s=a;Dk(l);t=Eu(t)|0;n=r[n>>0]|0;o[f>>2]=o[i>>2];Hw(s,u);o[c>>2]=o[f>>2];sD(e,t,n,c,s);zw(s);Ck(l);h=a;return}function rD(e,t,n,i){e=e|0;t=t|0;n=n|0;i=i|0;var u=0,a=0,l=0,s=0;u=h;h=h+32|0;l=u+16|0;a=u+8|0;s=u;Dk(a);t=Eu(t)|0;n=r[n>>0]|0;o[s>>2]=o[i>>2];o[l>>2]=o[s>>2];iD(e,t,n,l);Ck(a);h=u;return}function iD(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;i=h;h=h+16|0;u=i+4|0;l=i;a=Cu(oD()|0)|0;n=YE(n)|0;o[l>>2]=o[r>>2];o[u>>2]=o[l>>2];uD(e,ke(0,a|0,t|0,n|0,$w(u)|0)|0);h=i;return}function oD(){var e=0;if(!(r[8e3]|0)){aD(10756);e=8e3;o[e>>2]=1;o[e+4>>2]=0}return 10756}function uD(e,t){e=e|0;t=t|0;Vs(e,t);return}function aD(e){e=e|0;Lu(e,lD()|0,2);return}function lD(){return 1772}function sD(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;var u=0,a=0,l=0,s=0,c=0;u=h;h=h+32|0;s=u+16|0;c=u+12|0;a=u;l=Cu(cD()|0)|0;n=YE(n)|0;o[c>>2]=o[r>>2];o[s>>2]=o[c>>2];r=$w(s)|0;o[a>>2]=o[i>>2];s=i+4|0;o[a+4>>2]=o[s>>2];c=i+8|0;o[a+8>>2]=o[c>>2];o[c>>2]=0;o[s>>2]=0;o[i>>2]=0;uD(e,nt(0,l|0,t|0,n|0,r|0,Xw(a)|0)|0);zw(a);h=u;return}function cD(){var e=0;if(!(r[8008]|0)){fD(10768);e=8008;o[e>>2]=1;o[e+4>>2]=0}return 10768}function fD(e){e=e|0;Lu(e,dD()|0,3);return}function dD(){return 1784}function pD(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;var u=0,a=0,l=0,s=0;u=h;h=h+16|0;l=u+4|0;s=u;a=Cu(hD()|0)|0;n=YE(n)|0;o[s>>2]=o[r>>2];o[l>>2]=o[s>>2];r=$w(l)|0;uD(e,nt(0,a|0,t|0,n|0,r|0,Kw(i)|0)|0);h=u;return}function hD(){var e=0;if(!(r[8016]|0)){vD(10780);e=8016;o[e>>2]=1;o[e+4>>2]=0}return 10780}function vD(e){e=e|0;Lu(e,mD()|0,3);return}function mD(){return 1800}function gD(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=Cu(yD()|0)|0;uD(e,it(0,r|0,t|0,YE(n)|0)|0);return}function yD(){var e=0;if(!(r[8024]|0)){_D(10792);e=8024;o[e>>2]=1;o[e+4>>2]=0}return 10792}function _D(e){e=e|0;Lu(e,bD()|0,1);return}function bD(){return 1816}function wD(){ED();DD();SD();return}function ED(){o[2702]=YT(65536)|0;return}function DD(){$D(10856);return}function SD(){CD(10816);return}function CD(e){e=e|0;kD(e,5044);TD(e)|0;return}function kD(e,t){e=e|0;t=t|0;var n=0;n=nE()|0;o[e>>2]=n;zD(n,t);cw(o[e>>2]|0);return}function TD(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,xD()|0);return e|0}function xD(){var e=0;if(!(r[8032]|0)){AD(10820);Fe(64,10820,g|0)|0;e=8032;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(10820)|0))AD(10820);return 10820}function AD(e){e=e|0;ID(e);s_(e,25);return}function OD(e){e=e|0;PD(e+24|0);return}function PD(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function ID(e){e=e|0;var t=0;t=Za()|0;nl(e,5,18,t,LD()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function ND(e,t){e=e|0;t=t|0;MD(e,t);return}function MD(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;n=h;h=h+16|0;r=n;i=n+4|0;cc(i,t);o[r>>2]=fc(i,t)|0;RD(e,r);h=n;return}function RD(e,t){e=e|0;t=t|0;FD(e+4|0,o[t>>2]|0);r[e+8>>0]=1;return}function FD(e,t){e=e|0;t=t|0;o[e>>2]=t;return}function LD(){return 1824}function BD(e){e=e|0;return jD(e)|0}function jD(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0;n=h;h=h+16|0;i=n+4|0;a=n;r=UD(8)|0;t=r;l=$T(4)|0;cc(i,e);FD(l,fc(i,e)|0);u=t+4|0;o[u>>2]=l;e=$T(8)|0;u=o[u>>2]|0;o[a>>2]=0;o[i>>2]=o[a>>2];iE(e,u,i);o[r>>2]=e;h=n;return t|0}function UD(e){e=e|0;var t=0,n=0;e=e+7&-8;if(e>>>0<=32768?(t=o[2701]|0,e>>>0<=(65536-t|0)>>>0):0){n=(o[2702]|0)+t|0;o[2701]=t+e;e=n}else{e=YT(e+8|0)|0;o[e>>2]=o[2703];o[2703]=e;e=e+8|0}return e|0}function zD(e,t){e=e|0;t=t|0;o[e>>2]=WD()|0;o[e+4>>2]=HD()|0;o[e+12>>2]=t;o[e+8>>2]=VD()|0;o[e+32>>2]=9;return}function WD(){return 11744}function HD(){return 1832}function VD(){return N_()|0}function qD(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){GD(n);KT(n)}}else if(t|0)KT(t);return}function GD(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function $D(e){e=e|0;YD(e,5052);KD(e)|0;XD(e,5058,26)|0;QD(e,5069,1)|0;JD(e,5077,10)|0;ZD(e,5087,19)|0;tS(e,5094,27)|0;return}function YD(e,t){e=e|0;t=t|0;var n=0;n=sk()|0;o[e>>2]=n;ck(n,t);cw(o[e>>2]|0);return}function KD(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,YC()|0);return e|0}function XD(e,t,n){e=e|0;t=t|0;n=n|0;TC(e,Ia(t)|0,n,0);return e|0}function QD(e,t,n){e=e|0;t=t|0;n=n|0;sC(e,Ia(t)|0,n,0);return e|0}function JD(e,t,n){e=e|0;t=t|0;n=n|0;BS(e,Ia(t)|0,n,0);return e|0}function ZD(e,t,n){e=e|0;t=t|0;n=n|0;bS(e,Ia(t)|0,n,0);return e|0}function eS(e,t){e=e|0;t=t|0;var n=0,r=0;e:while(1){n=o[2703]|0;while(1){if((n|0)==(t|0))break e;r=o[n>>2]|0;o[2703]=r;if(!n)n=r;else break}KT(n)}o[2701]=e;return}function tS(e,t,n){e=e|0;t=t|0;n=n|0;nS(e,Ia(t)|0,n,0);return e|0}function nS(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=rS()|0;e=iS(n)|0;La(u,t,i,e,oS(n,r)|0,r);return}function rS(){var e=0,t=0;if(!(r[8040]|0)){dS(10860);Fe(65,10860,g|0)|0;t=8040;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10860)|0)){e=10860;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));dS(10860)}return 10860}function iS(e){e=e|0;return e|0}function oS(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=rS()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){uS(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{aS(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function uS(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function aS(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=lS(e)|0;if(r>>>0<a>>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;sS(i,f>>3>>>0<r>>>1>>>0?c>>>0<a>>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;uS(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;cS(e,i);fS(i);h=l;return}}function lS(e){e=e|0;return 536870911}function sS(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function cS(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function fS(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function dS(e){e=e|0;vS(e);return}function pS(e){e=e|0;hS(e+24|0);return}function hS(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function vS(e){e=e|0;var t=0;t=Za()|0;nl(e,1,11,t,mS()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function mS(){return 1840}function gS(e,t,n){e=e|0;t=t|0;n=n|0;_S(o[(yS(e)|0)>>2]|0,t,n);return}function yS(e){e=e|0;return(o[(rS()|0)+24>>2]|0)+(e<<3)|0}function _S(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,o=0;r=h;h=h+16|0;o=r+1|0;i=r;cc(o,t);t=fc(o,t)|0;cc(i,n);n=fc(i,n)|0;vA[e&31](t,n);h=r;return}function bS(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=wS()|0;e=ES(n)|0;La(u,t,i,e,DS(n,r)|0,r);return}function wS(){var e=0,t=0;if(!(r[8048]|0)){OS(10896);Fe(66,10896,g|0)|0;t=8048;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10896)|0)){e=10896;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));OS(10896)}return 10896}function ES(e){e=e|0;return e|0}function DS(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=wS()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){SS(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{CS(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function SS(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function CS(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=kS(e)|0;if(r>>>0<a>>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;TS(i,f>>3>>>0<r>>>1>>>0?c>>>0<a>>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;SS(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;xS(e,i);AS(i);h=l;return}}function kS(e){e=e|0;return 536870911}function TS(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function xS(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function AS(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function OS(e){e=e|0;NS(e);return}function PS(e){e=e|0;IS(e+24|0);return}function IS(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function NS(e){e=e|0;var t=0;t=Za()|0;nl(e,1,11,t,MS()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function MS(){return 1852}function RS(e,t){e=e|0;t=t|0;return LS(o[(FS(e)|0)>>2]|0,t)|0}function FS(e){e=e|0;return(o[(wS()|0)+24>>2]|0)+(e<<3)|0}function LS(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;cc(r,t);t=fc(r,t)|0;t=Jc(mA[e&31](t)|0)|0;h=n;return t|0}function BS(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=jS()|0;e=US(n)|0;La(u,t,i,e,zS(n,r)|0,r);return}function jS(){var e=0,t=0;if(!(r[8056]|0)){YS(10932);Fe(67,10932,g|0)|0;t=8056;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10932)|0)){e=10932;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));YS(10932)}return 10932}function US(e){e=e|0;return e|0}function zS(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=jS()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){WS(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{HS(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function WS(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function HS(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=VS(e)|0;if(r>>>0<a>>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;qS(i,f>>3>>>0<r>>>1>>>0?c>>>0<a>>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;WS(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;GS(e,i);$S(i);h=l;return}}function VS(e){e=e|0;return 536870911}function qS(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function GS(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function $S(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function YS(e){e=e|0;QS(e);return}function KS(e){e=e|0;XS(e+24|0);return}function XS(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function QS(e){e=e|0;var t=0;t=Za()|0;nl(e,1,7,t,JS()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function JS(){return 1860}function ZS(e,t,n){e=e|0;t=t|0;n=n|0;return tC(o[(eC(e)|0)>>2]|0,t,n)|0}function eC(e){e=e|0;return(o[(jS()|0)+24>>2]|0)+(e<<3)|0}function tC(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0;r=h;h=h+32|0;a=r+12|0;u=r+8|0;l=r;s=r+16|0;i=r+4|0;nC(s,t);rC(l,s,t);Us(i,n);n=zs(i,n)|0;o[a>>2]=o[l>>2];PA[e&15](u,a,n);n=iC(u)|0;Zi(u);Ws(i);h=r;return n|0}function nC(e,t){e=e|0;t=t|0;return}function rC(e,t,n){e=e|0;t=t|0;n=n|0;oC(e,n);return}function iC(e){e=e|0;return Eu(e)|0}function oC(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;i=h;h=h+16|0;n=i;r=t;if(!(r&1))o[e>>2]=o[t>>2];else{uC(n,0);Be(r|0,n|0)|0;aC(e,n);lC(n)}h=i;return}function uC(e,t){e=e|0;t=t|0;Iu(e,t);o[e+4>>2]=0;r[e+8>>0]=0;return}function aC(e,t){e=e|0;t=t|0;o[e>>2]=o[t+4>>2];return}function lC(e){e=e|0;r[e+8>>0]=0;return}function sC(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=cC()|0;e=fC(n)|0;La(u,t,i,e,dC(n,r)|0,r);return}function cC(){var e=0,t=0;if(!(r[8064]|0)){_C(10968);Fe(68,10968,g|0)|0;t=8064;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10968)|0)){e=10968;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));_C(10968)}return 10968}function fC(e){e=e|0;return e|0}function dC(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=cC()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){pC(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{hC(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function pC(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function hC(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=vC(e)|0;if(r>>>0<a>>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;mC(i,f>>3>>>0<r>>>1>>>0?c>>>0<a>>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;pC(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;gC(e,i);yC(i);h=l;return}}function vC(e){e=e|0;return 536870911}function mC(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function gC(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function yC(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function _C(e){e=e|0;EC(e);return}function bC(e){e=e|0;wC(e+24|0);return}function wC(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function EC(e){e=e|0;var t=0;t=Za()|0;nl(e,1,1,t,DC()|0,5);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function DC(){return 1872}function SC(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;kC(o[(CC(e)|0)>>2]|0,t,n,r,i,u);return}function CC(e){e=e|0;return(o[(cC()|0)+24>>2]|0)+(e<<3)|0}function kC(e,t,n,r,i,o){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;var u=0,a=0,l=0,s=0,c=0,f=0;u=h;h=h+32|0;a=u+16|0;l=u+12|0;s=u+8|0;c=u+4|0;f=u;Us(a,t);t=zs(a,t)|0;Us(l,n);n=zs(l,n)|0;Us(s,r);r=zs(s,r)|0;Us(c,i);i=zs(c,i)|0;Us(f,o);o=zs(f,o)|0;cA[e&1](t,n,r,i,o);Ws(f);Ws(c);Ws(s);Ws(l);Ws(a);h=u;return}function TC(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=xC()|0;e=AC(n)|0;La(u,t,i,e,OC(n,r)|0,r);return}function xC(){var e=0,t=0;if(!(r[8072]|0)){LC(11004);Fe(69,11004,g|0)|0;t=8072;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(11004)|0)){e=11004;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));LC(11004)}return 11004}function AC(e){e=e|0;return e|0}function OC(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=xC()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){PC(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{IC(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function PC(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function IC(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=NC(e)|0;if(r>>>0<a>>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;MC(i,f>>3>>>0<r>>>1>>>0?c>>>0<a>>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;PC(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;RC(e,i);FC(i);h=l;return}}function NC(e){e=e|0;return 536870911}function MC(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function RC(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function FC(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function LC(e){e=e|0;UC(e);return}function BC(e){e=e|0;jC(e+24|0);return}function jC(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function UC(e){e=e|0;var t=0;t=Za()|0;nl(e,1,12,t,zC()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function zC(){return 1896}function WC(e,t,n){e=e|0;t=t|0;n=n|0;VC(o[(HC(e)|0)>>2]|0,t,n);return}function HC(e){e=e|0;return(o[(xC()|0)+24>>2]|0)+(e<<3)|0}function VC(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,o=0;r=h;h=h+16|0;o=r+4|0;i=r;qC(o,t);t=GC(o,t)|0;Us(i,n);n=zs(i,n)|0;vA[e&31](t,n);Ws(i);h=r;return}function qC(e,t){e=e|0;t=t|0;return}function GC(e,t){e=e|0;t=t|0;return $C(t)|0}function $C(e){e=e|0;return e|0}function YC(){var e=0;if(!(r[8080]|0)){KC(11040);Fe(70,11040,g|0)|0;e=8080;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(11040)|0))KC(11040);return 11040}function KC(e){e=e|0;JC(e);s_(e,71);return}function XC(e){e=e|0;QC(e+24|0);return}function QC(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function JC(e){e=e|0;var t=0;t=Za()|0;nl(e,5,7,t,nk()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function ZC(e){e=e|0;ek(e);return}function ek(e){e=e|0;tk(e);return}function tk(e){e=e|0;r[e+8>>0]=1;return}function nk(){return 1936}function rk(){return ik()|0}function ik(){var e=0,t=0,n=0,r=0,i=0,u=0,a=0;t=h;h=h+16|0;i=t+4|0;a=t;n=UD(8)|0;e=n;u=e+4|0;o[u>>2]=$T(1)|0;r=$T(8)|0;u=o[u>>2]|0;o[a>>2]=0;o[i>>2]=o[a>>2];ok(r,u,i);o[n>>2]=r;h=t;return e|0}function ok(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;n=$T(16)|0;o[n+4>>2]=0;o[n+8>>2]=0;o[n>>2]=1916;o[n+12>>2]=t;o[e+4>>2]=n;return}function uk(e){e=e|0;zT(e);KT(e);return}function ak(e){e=e|0;e=o[e+12>>2]|0;if(e|0)KT(e);return}function lk(e){e=e|0;KT(e);return}function sk(){var e=0;if(!(r[8088]|0)){mk(11076);Fe(25,11076,g|0)|0;e=8088;o[e>>2]=1;o[e+4>>2]=0}return 11076}function ck(e,t){e=e|0;t=t|0;o[e>>2]=fk()|0;o[e+4>>2]=dk()|0;o[e+12>>2]=t;o[e+8>>2]=pk()|0;o[e+32>>2]=10;return}function fk(){return 11745}function dk(){return 1940}function pk(){return Wm()|0}function hk(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){vk(n);KT(n)}}else if(t|0)KT(t);return}function vk(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function mk(e){e=e|0;Al(e);return}function gk(e,t){e=e|0;t=t|0;o[e>>2]=t;return}function yk(e){e=e|0;return o[e>>2]|0}function _k(e){e=e|0;return r[o[e>>2]>>0]|0}function bk(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;o[r>>2]=o[e>>2];wk(t,r)|0;h=n;return}function wk(e,t){e=e|0;t=t|0;var n=0;n=Ek(o[e>>2]|0,t)|0;t=e+4|0;o[(o[t>>2]|0)+8>>2]=n;return o[(o[t>>2]|0)+8>>2]|0}function Ek(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;Dk(r);e=Eu(e)|0;t=Sk(e,o[t>>2]|0)|0;Ck(r);h=n;return t|0}function Dk(e){e=e|0;o[e>>2]=o[2701];o[e+4>>2]=o[2703];return}function Sk(e,t){e=e|0;t=t|0;var n=0;n=Cu(kk()|0)|0;return it(0,n|0,e|0,Kw(t)|0)|0}function Ck(e){e=e|0;eS(o[e>>2]|0,o[e+4>>2]|0);return}function kk(){var e=0;if(!(r[8096]|0)){Tk(11120);e=8096;o[e>>2]=1;o[e+4>>2]=0}return 11120}function Tk(e){e=e|0;Lu(e,xk()|0,1);return}function xk(){return 1948}function Ak(){Ok();return}function Ok(){var e=0,t=0,n=0,i=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0,_=0;y=h;h=h+16|0;p=y+4|0;v=y;Ne(65536,10804,o[2702]|0,10812);n=Cw()|0;t=o[n>>2]|0;e=o[t>>2]|0;if(e|0){i=o[n+8>>2]|0;n=o[n+4>>2]|0;while(1){ze(e|0,u[n>>0]|0|0,r[i>>0]|0);t=t+4|0;e=o[t>>2]|0;if(!e)break;else{i=i+1|0;n=n+1|0}}}e=Tw()|0;t=o[e>>2]|0;if(t|0)do{We(t|0,o[e+4>>2]|0);e=e+8|0;t=o[e>>2]|0}while((t|0)!=0);We(Pk()|0,5167);d=fw()|0;e=o[d>>2]|0;e:do{if(e|0){do{Ik(o[e+4>>2]|0);e=o[e>>2]|0}while((e|0)!=0);e=o[d>>2]|0;if(e|0){f=d;do{while(1){a=e;e=o[e>>2]|0;a=o[a+4>>2]|0;if(!(Nk(a)|0))break;o[v>>2]=f;o[p>>2]=o[v>>2];Mk(d,p)|0;if(!e)break e}Rk(a);f=o[f>>2]|0;t=Fk(a)|0;l=Xe()|0;s=h;h=h+((1*(t<<2)|0)+15&-16)|0;c=h;h=h+((1*(t<<2)|0)+15&-16)|0;t=o[(xE(a)|0)>>2]|0;if(t|0){n=s;i=c;while(1){o[n>>2]=o[(kE(o[t+4>>2]|0)|0)>>2];o[i>>2]=o[t+8>>2];t=o[t>>2]|0;if(!t)break;else{n=n+4|0;i=i+4|0}}}_=kE(a)|0;t=Lk(a)|0;n=Fk(a)|0;i=Bk(a)|0;Ge(_|0,t|0,s|0,c|0,n|0,i|0,Ew(a)|0);Re(l|0)}while((e|0)!=0)}}}while(0);e=o[(Sw()|0)>>2]|0;if(e|0)do{_=e+4|0;d=Pw(_)|0;a=Fw(d)|0;l=Iw(d)|0;s=(Nw(d)|0)+1|0;c=jk(d)|0;f=Uk(_)|0;d=Xa(d)|0;p=Bw(_)|0;v=zk(_)|0;Ve(0,a|0,l|0,s|0,c|0,f|0,d|0,p|0,v|0,Wk(_)|0);e=o[e>>2]|0}while((e|0)!=0);e=o[(fw()|0)>>2]|0;e:do{if(e|0){t:while(1){t=o[e+4>>2]|0;if(t|0?(m=o[(kE(t)|0)>>2]|0,g=o[(PE(t)|0)>>2]|0,g|0):0){n=g;do{t=n+4|0;i=Pw(t)|0;n:do{if(i|0)switch(Xa(i)|0){case 0:break t;case 4:case 3:case 2:{c=Fw(i)|0;f=Iw(i)|0;d=(Nw(i)|0)+1|0;p=jk(i)|0;v=Xa(i)|0;_=Bw(t)|0;Ve(m|0,c|0,f|0,d|0,p|0,0,v|0,_|0,zk(t)|0,Wk(t)|0);break n}case 1:{s=Fw(i)|0;c=Iw(i)|0;f=(Nw(i)|0)+1|0;d=jk(i)|0;p=Uk(t)|0;v=Xa(i)|0;_=Bw(t)|0;Ve(m|0,s|0,c|0,f|0,d|0,p|0,v|0,_|0,zk(t)|0,Wk(t)|0);break n}case 5:{d=Fw(i)|0;p=Iw(i)|0;v=(Nw(i)|0)+1|0;_=jk(i)|0;Ve(m|0,d|0,p|0,v|0,_|0,Hk(i)|0,Xa(i)|0,0,0,0);break n}default:break n}}while(0);n=o[n>>2]|0}while((n|0)!=0)}e=o[e>>2]|0;if(!e)break e}Ye()}}while(0);$e();h=y;return}function Pk(){return 11703}function Ik(e){e=e|0;r[e+40>>0]=0;return}function Nk(e){e=e|0;return(r[e+40>>0]|0)!=0|0}function Mk(e,t){e=e|0;t=t|0;t=Vk(t)|0;e=o[t>>2]|0;o[t>>2]=o[e>>2];KT(e);return o[t>>2]|0}function Rk(e){e=e|0;r[e+40>>0]=1;return}function Fk(e){e=e|0;return o[e+20>>2]|0}function Lk(e){e=e|0;return o[e+8>>2]|0}function Bk(e){e=e|0;return o[e+32>>2]|0}function jk(e){e=e|0;return o[e+4>>2]|0}function Uk(e){e=e|0;return o[e+4>>2]|0}function zk(e){e=e|0;return o[e+8>>2]|0}function Wk(e){e=e|0;return o[e+16>>2]|0}function Hk(e){e=e|0;return o[e+20>>2]|0}function Vk(e){e=e|0;return o[e>>2]|0}function qk(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0,_=0,b=0,w=0,E=0,D=0;D=h;h=h+16|0;p=D;do{if(e>>>0<245){c=e>>>0<11?16:e+11&-8;e=c>>>3;d=o[2783]|0;n=d>>>e;if(n&3|0){t=(n&1^1)+e|0;e=11172+(t<<1<<2)|0;n=e+8|0;r=o[n>>2]|0;i=r+8|0;u=o[i>>2]|0;if((e|0)==(u|0))o[2783]=d&~(1<<t);else{o[u+12>>2]=e;o[n>>2]=u}E=t<<3;o[r+4>>2]=E|3;E=r+E+4|0;o[E>>2]=o[E>>2]|1;E=i;h=D;return E|0}f=o[2785]|0;if(c>>>0>f>>>0){if(n|0){t=2<<e;t=n<<e&(t|0-t);t=(t&0-t)+-1|0;a=t>>>12&16;t=t>>>a;n=t>>>5&8;t=t>>>n;i=t>>>2&4;t=t>>>i;e=t>>>1&2;t=t>>>e;r=t>>>1&1;r=(n|a|i|e|r)+(t>>>r)|0;t=11172+(r<<1<<2)|0;e=t+8|0;i=o[e>>2]|0;a=i+8|0;n=o[a>>2]|0;if((t|0)==(n|0)){e=d&~(1<<r);o[2783]=e}else{o[n+12>>2]=t;o[e>>2]=n;e=d}u=(r<<3)-c|0;o[i+4>>2]=c|3;r=i+c|0;o[r+4>>2]=u|1;o[r+u>>2]=u;if(f|0){i=o[2788]|0;t=f>>>3;n=11172+(t<<1<<2)|0;t=1<<t;if(!(e&t)){o[2783]=e|t;t=n;e=n+8|0}else{e=n+8|0;t=o[e>>2]|0}o[e>>2]=i;o[t+12>>2]=i;o[i+8>>2]=t;o[i+12>>2]=n}o[2785]=u;o[2788]=r;E=a;h=D;return E|0}l=o[2784]|0;if(l){n=(l&0-l)+-1|0;a=n>>>12&16;n=n>>>a;u=n>>>5&8;n=n>>>u;s=n>>>2&4;n=n>>>s;r=n>>>1&2;n=n>>>r;e=n>>>1&1;e=o[11436+((u|a|s|r|e)+(n>>>e)<<2)>>2]|0;n=(o[e+4>>2]&-8)-c|0;r=o[e+16+(((o[e+16>>2]|0)==0&1)<<2)>>2]|0;if(!r){s=e;u=n}else{do{a=(o[r+4>>2]&-8)-c|0;s=a>>>0<n>>>0;n=s?a:n;e=s?r:e;r=o[r+16+(((o[r+16>>2]|0)==0&1)<<2)>>2]|0}while((r|0)!=0);s=e;u=n}a=s+c|0;if(s>>>0<a>>>0){i=o[s+24>>2]|0;t=o[s+12>>2]|0;do{if((t|0)==(s|0)){e=s+20|0;t=o[e>>2]|0;if(!t){e=s+16|0;t=o[e>>2]|0;if(!t){n=0;break}}while(1){n=t+20|0;r=o[n>>2]|0;if(r|0){t=r;e=n;continue}n=t+16|0;r=o[n>>2]|0;if(!r)break;else{t=r;e=n}}o[e>>2]=0;n=t}else{n=o[s+8>>2]|0;o[n+12>>2]=t;o[t+8>>2]=n;n=t}}while(0);do{if(i|0){t=o[s+28>>2]|0;e=11436+(t<<2)|0;if((s|0)==(o[e>>2]|0)){o[e>>2]=n;if(!n){o[2784]=l&~(1<<t);break}}else{o[i+16+(((o[i+16>>2]|0)!=(s|0)&1)<<2)>>2]=n;if(!n)break}o[n+24>>2]=i;t=o[s+16>>2]|0;if(t|0){o[n+16>>2]=t;o[t+24>>2]=n}t=o[s+20>>2]|0;if(t|0){o[n+20>>2]=t;o[t+24>>2]=n}}}while(0);if(u>>>0<16){E=u+c|0;o[s+4>>2]=E|3;E=s+E+4|0;o[E>>2]=o[E>>2]|1}else{o[s+4>>2]=c|3;o[a+4>>2]=u|1;o[a+u>>2]=u;if(f|0){r=o[2788]|0;t=f>>>3;n=11172+(t<<1<<2)|0;t=1<<t;if(!(d&t)){o[2783]=d|t;t=n;e=n+8|0}else{e=n+8|0;t=o[e>>2]|0}o[e>>2]=r;o[t+12>>2]=r;o[r+8>>2]=t;o[r+12>>2]=n}o[2785]=u;o[2788]=a}E=s+8|0;h=D;return E|0}else d=c}else d=c}else d=c}else if(e>>>0<=4294967231){e=e+11|0;c=e&-8;s=o[2784]|0;if(s){r=0-c|0;e=e>>>8;if(e){if(c>>>0>16777215)l=31;else{d=(e+1048320|0)>>>16&8;w=e<<d;f=(w+520192|0)>>>16&4;w=w<<f;l=(w+245760|0)>>>16&2;l=14-(f|d|l)+(w<<l>>>15)|0;l=c>>>(l+7|0)&1|l<<1}}else l=0;n=o[11436+(l<<2)>>2]|0;e:do{if(!n){n=0;e=0;w=57}else{e=0;a=c<<((l|0)==31?0:25-(l>>>1)|0);u=0;while(1){i=(o[n+4>>2]&-8)-c|0;if(i>>>0<r>>>0)if(!i){e=n;r=0;i=n;w=61;break e}else{e=n;r=i}i=o[n+20>>2]|0;n=o[n+16+(a>>>31<<2)>>2]|0;u=(i|0)==0|(i|0)==(n|0)?u:i;i=(n|0)==0;if(i){n=u;w=57;break}else a=a<<((i^1)&1)}}}while(0);if((w|0)==57){if((n|0)==0&(e|0)==0){e=2<<l;e=s&(e|0-e);if(!e){d=c;break}d=(e&0-e)+-1|0;a=d>>>12&16;d=d>>>a;u=d>>>5&8;d=d>>>u;l=d>>>2&4;d=d>>>l;f=d>>>1&2;d=d>>>f;n=d>>>1&1;e=0;n=o[11436+((u|a|l|f|n)+(d>>>n)<<2)>>2]|0}if(!n){l=e;a=r}else{i=n;w=61}}if((w|0)==61)while(1){w=0;n=(o[i+4>>2]&-8)-c|0;d=n>>>0<r>>>0;n=d?n:r;e=d?i:e;i=o[i+16+(((o[i+16>>2]|0)==0&1)<<2)>>2]|0;if(!i){l=e;a=n;break}else{r=n;w=61}}if((l|0)!=0?a>>>0<((o[2785]|0)-c|0)>>>0:0){u=l+c|0;if(l>>>0>=u>>>0){E=0;h=D;return E|0}i=o[l+24>>2]|0;t=o[l+12>>2]|0;do{if((t|0)==(l|0)){e=l+20|0;t=o[e>>2]|0;if(!t){e=l+16|0;t=o[e>>2]|0;if(!t){t=0;break}}while(1){n=t+20|0;r=o[n>>2]|0;if(r|0){t=r;e=n;continue}n=t+16|0;r=o[n>>2]|0;if(!r)break;else{t=r;e=n}}o[e>>2]=0}else{E=o[l+8>>2]|0;o[E+12>>2]=t;o[t+8>>2]=E}}while(0);do{if(i){e=o[l+28>>2]|0;n=11436+(e<<2)|0;if((l|0)==(o[n>>2]|0)){o[n>>2]=t;if(!t){r=s&~(1<<e);o[2784]=r;break}}else{o[i+16+(((o[i+16>>2]|0)!=(l|0)&1)<<2)>>2]=t;if(!t){r=s;break}}o[t+24>>2]=i;e=o[l+16>>2]|0;if(e|0){o[t+16>>2]=e;o[e+24>>2]=t}e=o[l+20>>2]|0;if(e){o[t+20>>2]=e;o[e+24>>2]=t;r=s}else r=s}else r=s}while(0);do{if(a>>>0>=16){o[l+4>>2]=c|3;o[u+4>>2]=a|1;o[u+a>>2]=a;t=a>>>3;if(a>>>0<256){n=11172+(t<<1<<2)|0;e=o[2783]|0;t=1<<t;if(!(e&t)){o[2783]=e|t;t=n;e=n+8|0}else{e=n+8|0;t=o[e>>2]|0}o[e>>2]=u;o[t+12>>2]=u;o[u+8>>2]=t;o[u+12>>2]=n;break}t=a>>>8;if(t){if(a>>>0>16777215)t=31;else{w=(t+1048320|0)>>>16&8;E=t<<w;b=(E+520192|0)>>>16&4;E=E<<b;t=(E+245760|0)>>>16&2;t=14-(b|w|t)+(E<<t>>>15)|0;t=a>>>(t+7|0)&1|t<<1}}else t=0;n=11436+(t<<2)|0;o[u+28>>2]=t;e=u+16|0;o[e+4>>2]=0;o[e>>2]=0;e=1<<t;if(!(r&e)){o[2784]=r|e;o[n>>2]=u;o[u+24>>2]=n;o[u+12>>2]=u;o[u+8>>2]=u;break}e=a<<((t|0)==31?0:25-(t>>>1)|0);n=o[n>>2]|0;while(1){if((o[n+4>>2]&-8|0)==(a|0)){w=97;break}r=n+16+(e>>>31<<2)|0;t=o[r>>2]|0;if(!t){w=96;break}else{e=e<<1;n=t}}if((w|0)==96){o[r>>2]=u;o[u+24>>2]=n;o[u+12>>2]=u;o[u+8>>2]=u;break}else if((w|0)==97){w=n+8|0;E=o[w>>2]|0;o[E+12>>2]=u;o[w>>2]=u;o[u+8>>2]=E;o[u+12>>2]=n;o[u+24>>2]=0;break}}else{E=a+c|0;o[l+4>>2]=E|3;E=l+E+4|0;o[E>>2]=o[E>>2]|1}}while(0);E=l+8|0;h=D;return E|0}else d=c}else d=c}else d=-1}while(0);n=o[2785]|0;if(n>>>0>=d>>>0){t=n-d|0;e=o[2788]|0;if(t>>>0>15){E=e+d|0;o[2788]=E;o[2785]=t;o[E+4>>2]=t|1;o[E+t>>2]=t;o[e+4>>2]=d|3}else{o[2785]=0;o[2788]=0;o[e+4>>2]=n|3;E=e+n+4|0;o[E>>2]=o[E>>2]|1}E=e+8|0;h=D;return E|0}a=o[2786]|0;if(a>>>0>d>>>0){b=a-d|0;o[2786]=b;E=o[2789]|0;w=E+d|0;o[2789]=w;o[w+4>>2]=b|1;o[E+4>>2]=d|3;E=E+8|0;h=D;return E|0}if(!(o[2901]|0)){o[2903]=4096;o[2902]=4096;o[2904]=-1;o[2905]=-1;o[2906]=0;o[2894]=0;e=p&-16^1431655768;o[p>>2]=e;o[2901]=e;e=4096}else e=o[2903]|0;l=d+48|0;s=d+47|0;u=e+s|0;i=0-e|0;c=u&i;if(c>>>0<=d>>>0){E=0;h=D;return E|0}e=o[2893]|0;if(e|0?(f=o[2891]|0,p=f+c|0,p>>>0<=f>>>0|p>>>0>e>>>0):0){E=0;h=D;return E|0}e:do{if(!(o[2894]&4)){n=o[2789]|0;t:do{if(n){r=11580;while(1){e=o[r>>2]|0;if(e>>>0<=n>>>0?(g=r+4|0,(e+(o[g>>2]|0)|0)>>>0>n>>>0):0)break;e=o[r+8>>2]|0;if(!e){w=118;break t}else r=e}t=u-a&i;if(t>>>0<2147483647){e=lx(t|0)|0;if((e|0)==((o[r>>2]|0)+(o[g>>2]|0)|0)){if((e|0)!=(-1|0)){a=t;u=e;w=135;break e}}else{r=e;w=126}}else t=0}else w=118}while(0);do{if((w|0)==118){n=lx(0)|0;if((n|0)!=(-1|0)?(t=n,v=o[2902]|0,m=v+-1|0,t=((m&t|0)==0?0:(m+t&0-v)-t|0)+c|0,v=o[2891]|0,m=t+v|0,t>>>0>d>>>0&t>>>0<2147483647):0){g=o[2893]|0;if(g|0?m>>>0<=v>>>0|m>>>0>g>>>0:0){t=0;break}e=lx(t|0)|0;if((e|0)==(n|0)){a=t;u=n;w=135;break e}else{r=e;w=126}}else t=0}}while(0);do{if((w|0)==126){n=0-t|0;if(!(l>>>0>t>>>0&(t>>>0<2147483647&(r|0)!=(-1|0))))if((r|0)==(-1|0)){t=0;break}else{a=t;u=r;w=135;break e}e=o[2903]|0;e=s-t+e&0-e;if(e>>>0>=2147483647){a=t;u=r;w=135;break e}if((lx(e|0)|0)==(-1|0)){lx(n|0)|0;t=0;break}else{a=e+t|0;u=r;w=135;break e}}}while(0);o[2894]=o[2894]|4;w=133}else{t=0;w=133}}while(0);if(((w|0)==133?c>>>0<2147483647:0)?(b=lx(c|0)|0,g=lx(0)|0,y=g-b|0,_=y>>>0>(d+40|0)>>>0,!((b|0)==(-1|0)|_^1|b>>>0<g>>>0&((b|0)!=(-1|0)&(g|0)!=(-1|0))^1)):0){a=_?y:t;u=b;w=135}if((w|0)==135){t=(o[2891]|0)+a|0;o[2891]=t;if(t>>>0>(o[2892]|0)>>>0)o[2892]=t;s=o[2789]|0;do{if(s){t=11580;while(1){e=o[t>>2]|0;n=t+4|0;r=o[n>>2]|0;if((u|0)==(e+r|0)){w=145;break}i=o[t+8>>2]|0;if(!i)break;else t=i}if(((w|0)==145?(o[t+12>>2]&8|0)==0:0)?s>>>0<u>>>0&s>>>0>=e>>>0:0){o[n>>2]=r+a;E=s+8|0;E=(E&7|0)==0?0:0-E&7;w=s+E|0;E=(o[2786]|0)+(a-E)|0;o[2789]=w;o[2786]=E;o[w+4>>2]=E|1;o[w+E+4>>2]=40;o[2790]=o[2905];break}if(u>>>0<(o[2787]|0)>>>0)o[2787]=u;n=u+a|0;t=11580;while(1){if((o[t>>2]|0)==(n|0)){w=153;break}e=o[t+8>>2]|0;if(!e)break;else t=e}if((w|0)==153?(o[t+12>>2]&8|0)==0:0){o[t>>2]=u;f=t+4|0;o[f>>2]=(o[f>>2]|0)+a;f=u+8|0;f=u+((f&7|0)==0?0:0-f&7)|0;t=n+8|0;t=n+((t&7|0)==0?0:0-t&7)|0;c=f+d|0;l=t-f-d|0;o[f+4>>2]=d|3;do{if((t|0)!=(s|0)){if((t|0)==(o[2788]|0)){E=(o[2785]|0)+l|0;o[2785]=E;o[2788]=c;o[c+4>>2]=E|1;o[c+E>>2]=E;break}e=o[t+4>>2]|0;if((e&3|0)==1){a=e&-8;r=e>>>3;e:do{if(e>>>0<256){e=o[t+8>>2]|0;n=o[t+12>>2]|0;if((n|0)==(e|0)){o[2783]=o[2783]&~(1<<r);break}else{o[e+12>>2]=n;o[n+8>>2]=e;break}}else{u=o[t+24>>2]|0;e=o[t+12>>2]|0;do{if((e|0)==(t|0)){r=t+16|0;n=r+4|0;e=o[n>>2]|0;if(!e){e=o[r>>2]|0;if(!e){e=0;break}else n=r}while(1){r=e+20|0;i=o[r>>2]|0;if(i|0){e=i;n=r;continue}r=e+16|0;i=o[r>>2]|0;if(!i)break;else{e=i;n=r}}o[n>>2]=0}else{E=o[t+8>>2]|0;o[E+12>>2]=e;o[e+8>>2]=E}}while(0);if(!u)break;n=o[t+28>>2]|0;r=11436+(n<<2)|0;do{if((t|0)!=(o[r>>2]|0)){o[u+16+(((o[u+16>>2]|0)!=(t|0)&1)<<2)>>2]=e;if(!e)break e}else{o[r>>2]=e;if(e|0)break;o[2784]=o[2784]&~(1<<n);break e}}while(0);o[e+24>>2]=u;n=t+16|0;r=o[n>>2]|0;if(r|0){o[e+16>>2]=r;o[r+24>>2]=e}n=o[n+4>>2]|0;if(!n)break;o[e+20>>2]=n;o[n+24>>2]=e}}while(0);t=t+a|0;i=a+l|0}else i=l;t=t+4|0;o[t>>2]=o[t>>2]&-2;o[c+4>>2]=i|1;o[c+i>>2]=i;t=i>>>3;if(i>>>0<256){n=11172+(t<<1<<2)|0;e=o[2783]|0;t=1<<t;if(!(e&t)){o[2783]=e|t;t=n;e=n+8|0}else{e=n+8|0;t=o[e>>2]|0}o[e>>2]=c;o[t+12>>2]=c;o[c+8>>2]=t;o[c+12>>2]=n;break}t=i>>>8;do{if(!t)t=0;else{if(i>>>0>16777215){t=31;break}w=(t+1048320|0)>>>16&8;E=t<<w;b=(E+520192|0)>>>16&4;E=E<<b;t=(E+245760|0)>>>16&2;t=14-(b|w|t)+(E<<t>>>15)|0;t=i>>>(t+7|0)&1|t<<1}}while(0);r=11436+(t<<2)|0;o[c+28>>2]=t;e=c+16|0;o[e+4>>2]=0;o[e>>2]=0;e=o[2784]|0;n=1<<t;if(!(e&n)){o[2784]=e|n;o[r>>2]=c;o[c+24>>2]=r;o[c+12>>2]=c;o[c+8>>2]=c;break}e=i<<((t|0)==31?0:25-(t>>>1)|0);n=o[r>>2]|0;while(1){if((o[n+4>>2]&-8|0)==(i|0)){w=194;break}r=n+16+(e>>>31<<2)|0;t=o[r>>2]|0;if(!t){w=193;break}else{e=e<<1;n=t}}if((w|0)==193){o[r>>2]=c;o[c+24>>2]=n;o[c+12>>2]=c;o[c+8>>2]=c;break}else if((w|0)==194){w=n+8|0;E=o[w>>2]|0;o[E+12>>2]=c;o[w>>2]=c;o[c+8>>2]=E;o[c+12>>2]=n;o[c+24>>2]=0;break}}else{E=(o[2786]|0)+l|0;o[2786]=E;o[2789]=c;o[c+4>>2]=E|1}}while(0);E=f+8|0;h=D;return E|0}t=11580;while(1){e=o[t>>2]|0;if(e>>>0<=s>>>0?(E=e+(o[t+4>>2]|0)|0,E>>>0>s>>>0):0)break;t=o[t+8>>2]|0}i=E+-47|0;e=i+8|0;e=i+((e&7|0)==0?0:0-e&7)|0;i=s+16|0;e=e>>>0<i>>>0?s:e;t=e+8|0;n=u+8|0;n=(n&7|0)==0?0:0-n&7;w=u+n|0;n=a+-40-n|0;o[2789]=w;o[2786]=n;o[w+4>>2]=n|1;o[w+n+4>>2]=40;o[2790]=o[2905];n=e+4|0;o[n>>2]=27;o[t>>2]=o[2895];o[t+4>>2]=o[2896];o[t+8>>2]=o[2897];o[t+12>>2]=o[2898];o[2895]=u;o[2896]=a;o[2898]=0;o[2897]=t;t=e+24|0;do{w=t;t=t+4|0;o[t>>2]=7}while((w+8|0)>>>0<E>>>0);if((e|0)!=(s|0)){u=e-s|0;o[n>>2]=o[n>>2]&-2;o[s+4>>2]=u|1;o[e>>2]=u;t=u>>>3;if(u>>>0<256){n=11172+(t<<1<<2)|0;e=o[2783]|0;t=1<<t;if(!(e&t)){o[2783]=e|t;t=n;e=n+8|0}else{e=n+8|0;t=o[e>>2]|0}o[e>>2]=s;o[t+12>>2]=s;o[s+8>>2]=t;o[s+12>>2]=n;break}t=u>>>8;if(t){if(u>>>0>16777215)n=31;else{w=(t+1048320|0)>>>16&8;E=t<<w;b=(E+520192|0)>>>16&4;E=E<<b;n=(E+245760|0)>>>16&2;n=14-(b|w|n)+(E<<n>>>15)|0;n=u>>>(n+7|0)&1|n<<1}}else n=0;r=11436+(n<<2)|0;o[s+28>>2]=n;o[s+20>>2]=0;o[i>>2]=0;t=o[2784]|0;e=1<<n;if(!(t&e)){o[2784]=t|e;o[r>>2]=s;o[s+24>>2]=r;o[s+12>>2]=s;o[s+8>>2]=s;break}e=u<<((n|0)==31?0:25-(n>>>1)|0);n=o[r>>2]|0;while(1){if((o[n+4>>2]&-8|0)==(u|0)){w=216;break}r=n+16+(e>>>31<<2)|0;t=o[r>>2]|0;if(!t){w=215;break}else{e=e<<1;n=t}}if((w|0)==215){o[r>>2]=s;o[s+24>>2]=n;o[s+12>>2]=s;o[s+8>>2]=s;break}else if((w|0)==216){w=n+8|0;E=o[w>>2]|0;o[E+12>>2]=s;o[w>>2]=s;o[s+8>>2]=E;o[s+12>>2]=n;o[s+24>>2]=0;break}}}else{E=o[2787]|0;if((E|0)==0|u>>>0<E>>>0)o[2787]=u;o[2895]=u;o[2896]=a;o[2898]=0;o[2792]=o[2901];o[2791]=-1;t=0;do{E=11172+(t<<1<<2)|0;o[E+12>>2]=E;o[E+8>>2]=E;t=t+1|0}while((t|0)!=32);E=u+8|0;E=(E&7|0)==0?0:0-E&7;w=u+E|0;E=a+-40-E|0;o[2789]=w;o[2786]=E;o[w+4>>2]=E|1;o[w+E+4>>2]=40;o[2790]=o[2905]}}while(0);t=o[2786]|0;if(t>>>0>d>>>0){b=t-d|0;o[2786]=b;E=o[2789]|0;w=E+d|0;o[2789]=w;o[w+4>>2]=b|1;o[E+4>>2]=d|3;E=E+8|0;h=D;return E|0}}o[(Jk()|0)>>2]=12;E=0;h=D;return E|0}function Gk(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0,s=0;if(!e)return;n=e+-8|0;i=o[2787]|0;e=o[e+-4>>2]|0;t=e&-8;s=n+t|0;do{if(!(e&1)){r=o[n>>2]|0;if(!(e&3))return;a=n+(0-r)|0;u=r+t|0;if(a>>>0<i>>>0)return;if((a|0)==(o[2788]|0)){e=s+4|0;t=o[e>>2]|0;if((t&3|0)!=3){l=a;t=u;break}o[2785]=u;o[e>>2]=t&-2;o[a+4>>2]=u|1;o[a+u>>2]=u;return}n=r>>>3;if(r>>>0<256){e=o[a+8>>2]|0;t=o[a+12>>2]|0;if((t|0)==(e|0)){o[2783]=o[2783]&~(1<<n);l=a;t=u;break}else{o[e+12>>2]=t;o[t+8>>2]=e;l=a;t=u;break}}i=o[a+24>>2]|0;e=o[a+12>>2]|0;do{if((e|0)==(a|0)){n=a+16|0;t=n+4|0;e=o[t>>2]|0;if(!e){e=o[n>>2]|0;if(!e){e=0;break}else t=n}while(1){n=e+20|0;r=o[n>>2]|0;if(r|0){e=r;t=n;continue}n=e+16|0;r=o[n>>2]|0;if(!r)break;else{e=r;t=n}}o[t>>2]=0}else{l=o[a+8>>2]|0;o[l+12>>2]=e;o[e+8>>2]=l}}while(0);if(i){t=o[a+28>>2]|0;n=11436+(t<<2)|0;if((a|0)==(o[n>>2]|0)){o[n>>2]=e;if(!e){o[2784]=o[2784]&~(1<<t);l=a;t=u;break}}else{o[i+16+(((o[i+16>>2]|0)!=(a|0)&1)<<2)>>2]=e;if(!e){l=a;t=u;break}}o[e+24>>2]=i;t=a+16|0;n=o[t>>2]|0;if(n|0){o[e+16>>2]=n;o[n+24>>2]=e}t=o[t+4>>2]|0;if(t){o[e+20>>2]=t;o[t+24>>2]=e;l=a;t=u}else{l=a;t=u}}else{l=a;t=u}}else{l=n;a=n}}while(0);if(a>>>0>=s>>>0)return;e=s+4|0;r=o[e>>2]|0;if(!(r&1))return;if(!(r&2)){e=o[2788]|0;if((s|0)==(o[2789]|0)){s=(o[2786]|0)+t|0;o[2786]=s;o[2789]=l;o[l+4>>2]=s|1;if((l|0)!=(e|0))return;o[2788]=0;o[2785]=0;return}if((s|0)==(e|0)){s=(o[2785]|0)+t|0;o[2785]=s;o[2788]=a;o[l+4>>2]=s|1;o[a+s>>2]=s;return}i=(r&-8)+t|0;n=r>>>3;do{if(r>>>0<256){t=o[s+8>>2]|0;e=o[s+12>>2]|0;if((e|0)==(t|0)){o[2783]=o[2783]&~(1<<n);break}else{o[t+12>>2]=e;o[e+8>>2]=t;break}}else{u=o[s+24>>2]|0;e=o[s+12>>2]|0;do{if((e|0)==(s|0)){n=s+16|0;t=n+4|0;e=o[t>>2]|0;if(!e){e=o[n>>2]|0;if(!e){n=0;break}else t=n}while(1){n=e+20|0;r=o[n>>2]|0;if(r|0){e=r;t=n;continue}n=e+16|0;r=o[n>>2]|0;if(!r)break;else{e=r;t=n}}o[t>>2]=0;n=e}else{n=o[s+8>>2]|0;o[n+12>>2]=e;o[e+8>>2]=n;n=e}}while(0);if(u|0){e=o[s+28>>2]|0;t=11436+(e<<2)|0;if((s|0)==(o[t>>2]|0)){o[t>>2]=n;if(!n){o[2784]=o[2784]&~(1<<e);break}}else{o[u+16+(((o[u+16>>2]|0)!=(s|0)&1)<<2)>>2]=n;if(!n)break}o[n+24>>2]=u;e=s+16|0;t=o[e>>2]|0;if(t|0){o[n+16>>2]=t;o[t+24>>2]=n}e=o[e+4>>2]|0;if(e|0){o[n+20>>2]=e;o[e+24>>2]=n}}}}while(0);o[l+4>>2]=i|1;o[a+i>>2]=i;if((l|0)==(o[2788]|0)){o[2785]=i;return}}else{o[e>>2]=r&-2;o[l+4>>2]=t|1;o[a+t>>2]=t;i=t}e=i>>>3;if(i>>>0<256){n=11172+(e<<1<<2)|0;t=o[2783]|0;e=1<<e;if(!(t&e)){o[2783]=t|e;e=n;t=n+8|0}else{t=n+8|0;e=o[t>>2]|0}o[t>>2]=l;o[e+12>>2]=l;o[l+8>>2]=e;o[l+12>>2]=n;return}e=i>>>8;if(e){if(i>>>0>16777215)e=31;else{a=(e+1048320|0)>>>16&8;s=e<<a;u=(s+520192|0)>>>16&4;s=s<<u;e=(s+245760|0)>>>16&2;e=14-(u|a|e)+(s<<e>>>15)|0;e=i>>>(e+7|0)&1|e<<1}}else e=0;r=11436+(e<<2)|0;o[l+28>>2]=e;o[l+20>>2]=0;o[l+16>>2]=0;t=o[2784]|0;n=1<<e;do{if(t&n){t=i<<((e|0)==31?0:25-(e>>>1)|0);n=o[r>>2]|0;while(1){if((o[n+4>>2]&-8|0)==(i|0)){e=73;break}r=n+16+(t>>>31<<2)|0;e=o[r>>2]|0;if(!e){e=72;break}else{t=t<<1;n=e}}if((e|0)==72){o[r>>2]=l;o[l+24>>2]=n;o[l+12>>2]=l;o[l+8>>2]=l;break}else if((e|0)==73){a=n+8|0;s=o[a>>2]|0;o[s+12>>2]=l;o[a>>2]=l;o[l+8>>2]=s;o[l+12>>2]=n;o[l+24>>2]=0;break}}else{o[2784]=t|n;o[r>>2]=l;o[l+24>>2]=r;o[l+12>>2]=l;o[l+8>>2]=l}}while(0);s=(o[2791]|0)+-1|0;o[2791]=s;if(!s)e=11588;else return;while(1){e=o[e>>2]|0;if(!e)break;else e=e+8|0}o[2791]=-1;return}function $k(){return 11628}function Yk(e){e=e|0;var t=0,n=0;t=h;h=h+16|0;n=t;o[n>>2]=tT(o[e+60>>2]|0)|0;e=Qk(ut(6,n|0)|0)|0;h=t;return e|0}function Kk(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0;d=h;h=h+48|0;c=d+16|0;u=d;i=d+32|0;l=e+28|0;r=o[l>>2]|0;o[i>>2]=r;s=e+20|0;r=(o[s>>2]|0)-r|0;o[i+4>>2]=r;o[i+8>>2]=t;o[i+12>>2]=n;r=r+n|0;a=e+60|0;o[u>>2]=o[a>>2];o[u+4>>2]=i;o[u+8>>2]=2;u=Qk(st(146,u|0)|0)|0;e:do{if((r|0)!=(u|0)){t=2;while(1){if((u|0)<0)break;r=r-u|0;v=o[i+4>>2]|0;p=u>>>0>v>>>0;i=p?i+8|0:i;t=(p<<31>>31)+t|0;v=u-(p?v:0)|0;o[i>>2]=(o[i>>2]|0)+v;p=i+4|0;o[p>>2]=(o[p>>2]|0)-v;o[c>>2]=o[a>>2];o[c+4>>2]=i;o[c+8>>2]=t;u=Qk(st(146,c|0)|0)|0;if((r|0)==(u|0)){f=3;break e}}o[e+16>>2]=0;o[l>>2]=0;o[s>>2]=0;o[e>>2]=o[e>>2]|32;if((t|0)==2)n=0;else n=n-(o[i+4>>2]|0)|0}else f=3}while(0);if((f|0)==3){v=o[e+44>>2]|0;o[e+16>>2]=v+(o[e+48>>2]|0);o[l>>2]=v;o[s>>2]=v}h=d;return n|0}function Xk(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;i=h;h=h+32|0;u=i;r=i+20|0;o[u>>2]=o[e+60>>2];o[u+4>>2]=0;o[u+8>>2]=t;o[u+12>>2]=r;o[u+16>>2]=n;if((Qk(lt(140,u|0)|0)|0)<0){o[r>>2]=-1;e=-1}else e=o[r>>2]|0;h=i;return e|0}function Qk(e){e=e|0;if(e>>>0>4294963200){o[(Jk()|0)>>2]=0-e;e=-1}return e|0}function Jk(){return(Zk()|0)+64|0}function Zk(){return eT()|0}function eT(){return 2084}function tT(e){e=e|0;return e|0}function nT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0;u=h;h=h+32|0;i=u;o[e+36>>2]=1;if((o[e>>2]&64|0)==0?(o[i>>2]=o[e+60>>2],o[i+4>>2]=21523,o[i+8>>2]=u+16,Qe(54,i|0)|0):0)r[e+75>>0]=-1;i=Kk(e,t,n)|0;h=u;return i|0}function rT(e,t){e=e|0;t=t|0;var n=0,i=0;n=r[e>>0]|0;i=r[t>>0]|0;if(n<<24>>24==0?1:n<<24>>24!=i<<24>>24)e=i;else{do{e=e+1|0;t=t+1|0;n=r[e>>0]|0;i=r[t>>0]|0}while(!(n<<24>>24==0?1:n<<24>>24!=i<<24>>24));e=i}return(n&255)-(e&255)|0}function iT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,o=0;e:do{if(!n)e=0;else{while(1){i=r[e>>0]|0;o=r[t>>0]|0;if(i<<24>>24!=o<<24>>24)break;n=n+-1|0;if(!n){e=0;break e}else{e=e+1|0;t=t+1|0}}e=(i&255)-(o&255)|0}}while(0);return e|0}function oT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0;y=h;h=h+224|0;d=y+120|0;p=y+80|0;m=y;g=y+136|0;i=p;u=i+40|0;do{o[i>>2]=0;i=i+4|0}while((i|0)<(u|0));o[d>>2]=o[n>>2];if((uT(0,t,d,m,p)|0)<0)n=-1;else{if((o[e+76>>2]|0)>-1)v=aT(e)|0;else v=0;n=o[e>>2]|0;f=n&32;if((r[e+74>>0]|0)<1)o[e>>2]=n&-33;i=e+48|0;if(!(o[i>>2]|0)){u=e+44|0;a=o[u>>2]|0;o[u>>2]=g;l=e+28|0;o[l>>2]=g;s=e+20|0;o[s>>2]=g;o[i>>2]=80;c=e+16|0;o[c>>2]=g+80;n=uT(e,t,d,m,p)|0;if(a){_A[o[e+36>>2]&7](e,0,0)|0;n=(o[s>>2]|0)==0?-1:n;o[u>>2]=a;o[i>>2]=0;o[c>>2]=0;o[l>>2]=0;o[s>>2]=0}}else n=uT(e,t,d,m,p)|0;i=o[e>>2]|0;o[e>>2]=i|f;if(v|0)lT(e);n=(i&32|0)==0?n:-1}h=y;return n|0}function uT(e,t,n,u,a){e=e|0;t=t|0;n=n|0;u=u|0;a=a|0;var l=0,s=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0,_=0,b=0,w=0,E=0,D=0,S=0,C=0,k=0,T=0,x=0,O=0,P=0,I=0,N=0;N=h;h=h+64|0;x=N+16|0;O=N;k=N+24|0;P=N+8|0;I=N+20|0;o[x>>2]=t;D=(e|0)!=0;S=k+40|0;C=S;k=k+39|0;T=P+4|0;s=0;l=0;v=0;e:while(1){do{if((l|0)>-1)if((s|0)>(2147483647-l|0)){o[(Jk()|0)>>2]=75;l=-1;break}else{l=s+l|0;break}}while(0);s=r[t>>0]|0;if(!(s<<24>>24)){E=87;break}else f=t;t:while(1){switch(s<<24>>24){case 37:{s=f;E=9;break t}case 0:{s=f;break t}default:{}}w=f+1|0;o[x>>2]=w;s=r[w>>0]|0;f=w}t:do{if((E|0)==9)while(1){E=0;if((r[f+1>>0]|0)!=37)break t;s=s+1|0;f=f+2|0;o[x>>2]=f;if((r[f>>0]|0)==37)E=9;else break}}while(0);s=s-t|0;if(D)sT(e,t,s);if(s|0){t=f;continue}d=f+1|0;s=(r[d>>0]|0)+-48|0;if(s>>>0<10){w=(r[f+2>>0]|0)==36;b=w?s:-1;v=w?1:v;d=w?f+3|0:d}else b=-1;o[x>>2]=d;s=r[d>>0]|0;f=(s<<24>>24)+-32|0;t:do{if(f>>>0<32){p=0;m=s;while(1){s=1<<f;if(!(s&75913)){s=m;break t}p=s|p;d=d+1|0;o[x>>2]=d;s=r[d>>0]|0;f=(s<<24>>24)+-32|0;if(f>>>0>=32)break;else m=s}}else p=0}while(0);if(s<<24>>24==42){f=d+1|0;s=(r[f>>0]|0)+-48|0;if(s>>>0<10?(r[d+2>>0]|0)==36:0){o[a+(s<<2)>>2]=10;s=o[u+((r[f>>0]|0)+-48<<3)>>2]|0;v=1;d=d+3|0}else{if(v|0){l=-1;break}if(D){v=(o[n>>2]|0)+(4-1)&~(4-1);s=o[v>>2]|0;o[n>>2]=v+4;v=0;d=f}else{s=0;v=0;d=f}}o[x>>2]=d;w=(s|0)<0;s=w?0-s|0:s;p=w?p|8192:p}else{s=cT(x)|0;if((s|0)<0){l=-1;break}d=o[x>>2]|0}do{if((r[d>>0]|0)==46){if((r[d+1>>0]|0)!=42){o[x>>2]=d+1;f=cT(x)|0;d=o[x>>2]|0;break}m=d+2|0;f=(r[m>>0]|0)+-48|0;if(f>>>0<10?(r[d+3>>0]|0)==36:0){o[a+(f<<2)>>2]=10;f=o[u+((r[m>>0]|0)+-48<<3)>>2]|0;d=d+4|0;o[x>>2]=d;break}if(v|0){l=-1;break e}if(D){w=(o[n>>2]|0)+(4-1)&~(4-1);f=o[w>>2]|0;o[n>>2]=w+4}else f=0;o[x>>2]=m;d=m}else f=-1}while(0);_=0;while(1){if(((r[d>>0]|0)+-65|0)>>>0>57){l=-1;break e}w=d+1|0;o[x>>2]=w;m=r[(r[d>>0]|0)+-65+(5178+(_*58|0))>>0]|0;g=m&255;if((g+-1|0)>>>0<8){_=g;d=w}else break}if(!(m<<24>>24)){l=-1;break}y=(b|0)>-1;do{if(m<<24>>24==19){if(y){l=-1;break e}else E=49}else{if(y){o[a+(b<<2)>>2]=g;y=u+(b<<3)|0;b=o[y+4>>2]|0;E=O;o[E>>2]=o[y>>2];o[E+4>>2]=b;E=49;break}if(!D){l=0;break e}fT(O,g,n)}}while(0);if((E|0)==49?(E=0,!D):0){s=0;t=w;continue}d=r[d>>0]|0;d=(_|0)!=0&(d&15|0)==3?d&-33:d;y=p&-65537;b=(p&8192|0)==0?p:y;t:do{switch(d|0){case 110:switch((_&255)<<24>>24){case 0:{o[o[O>>2]>>2]=l;s=0;t=w;continue e}case 1:{o[o[O>>2]>>2]=l;s=0;t=w;continue e}case 2:{s=o[O>>2]|0;o[s>>2]=l;o[s+4>>2]=((l|0)<0)<<31>>31;s=0;t=w;continue e}case 3:{i[o[O>>2]>>1]=l;s=0;t=w;continue e}case 4:{r[o[O>>2]>>0]=l;s=0;t=w;continue e}case 6:{o[o[O>>2]>>2]=l;s=0;t=w;continue e}case 7:{s=o[O>>2]|0;o[s>>2]=l;o[s+4>>2]=((l|0)<0)<<31>>31;s=0;t=w;continue e}default:{s=0;t=w;continue e}}case 112:{d=120;f=f>>>0>8?f:8;t=b|8;E=61;break}case 88:case 120:{t=b;E=61;break}case 111:{d=O;t=o[d>>2]|0;d=o[d+4>>2]|0;g=pT(t,d,S)|0;y=C-g|0;p=0;m=5642;f=(b&8|0)==0|(f|0)>(y|0)?f:y+1|0;y=b;E=67;break}case 105:case 100:{d=O;t=o[d>>2]|0;d=o[d+4>>2]|0;if((d|0)<0){t=ZT(0,0,t|0,d|0)|0;d=A;p=O;o[p>>2]=t;o[p+4>>2]=d;p=1;m=5642;E=66;break t}else{p=(b&2049|0)!=0&1;m=(b&2048|0)==0?(b&1|0)==0?5642:5644:5643;E=66;break t}}case 117:{d=O;p=0;m=5642;t=o[d>>2]|0;d=o[d+4>>2]|0;E=66;break}case 99:{r[k>>0]=o[O>>2];t=k;p=0;m=5642;g=S;d=1;f=y;break}case 109:{d=vT(o[(Jk()|0)>>2]|0)|0;E=71;break}case 115:{d=o[O>>2]|0;d=d|0?d:5652;E=71;break}case 67:{o[P>>2]=o[O>>2];o[T>>2]=0;o[O>>2]=P;g=-1;d=P;E=75;break}case 83:{t=o[O>>2]|0;if(!f){gT(e,32,s,0,b);t=0;E=84}else{g=f;d=t;E=75}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{s=_T(e,+c[O>>3],s,f,b,d)|0;t=w;continue e}default:{p=0;m=5642;g=S;d=f;f=b}}}while(0);t:do{if((E|0)==61){b=O;_=o[b>>2]|0;b=o[b+4>>2]|0;g=dT(_,b,S,d&32)|0;m=(t&8|0)==0|(_|0)==0&(b|0)==0;p=m?0:2;m=m?5642:5642+(d>>4)|0;y=t;t=_;d=b;E=67}else if((E|0)==66){g=hT(t,d,S)|0;y=b;E=67}else if((E|0)==71){E=0;b=mT(d,0,f)|0;_=(b|0)==0;t=d;p=0;m=5642;g=_?d+f|0:b;d=_?f:b-d|0;f=y}else if((E|0)==75){E=0;m=d;t=0;f=0;while(1){p=o[m>>2]|0;if(!p)break;f=yT(I,p)|0;if((f|0)<0|f>>>0>(g-t|0)>>>0)break;t=f+t|0;if(g>>>0>t>>>0)m=m+4|0;else break}if((f|0)<0){l=-1;break e}gT(e,32,s,t,b);if(!t){t=0;E=84}else{p=0;while(1){f=o[d>>2]|0;if(!f){E=84;break t}f=yT(I,f)|0;p=f+p|0;if((p|0)>(t|0)){E=84;break t}sT(e,I,f);if(p>>>0>=t>>>0){E=84;break}else d=d+4|0}}}}while(0);if((E|0)==67){E=0;d=(t|0)!=0|(d|0)!=0;b=(f|0)!=0|d;d=((d^1)&1)+(C-g)|0;t=b?g:S;g=S;d=b?(f|0)>(d|0)?f:d:f;f=(f|0)>-1?y&-65537:y}else if((E|0)==84){E=0;gT(e,32,s,t,b^8192);s=(s|0)>(t|0)?s:t;t=w;continue}_=g-t|0;y=(d|0)<(_|0)?_:d;b=y+p|0;s=(s|0)<(b|0)?b:s;gT(e,32,s,b,f);sT(e,m,p);gT(e,48,s,b,f^65536);gT(e,48,y,_,0);sT(e,t,_);gT(e,32,s,b,f^8192);t=w}e:do{if((E|0)==87)if(!e)if(!v)l=0;else{l=1;while(1){t=o[a+(l<<2)>>2]|0;if(!t)break;fT(u+(l<<3)|0,t,n);l=l+1|0;if((l|0)>=10){l=1;break e}}while(1){if(o[a+(l<<2)>>2]|0){l=-1;break e}l=l+1|0;if((l|0)>=10){l=1;break}}}}while(0);h=N;return l|0}function aT(e){e=e|0;return 0}function lT(e){e=e|0;return}function sT(e,t,n){e=e|0;t=t|0;n=n|0;if(!(o[e>>2]&32))PT(t,n,e)|0;return}function cT(e){e=e|0;var t=0,n=0,i=0;n=o[e>>2]|0;i=(r[n>>0]|0)+-48|0;if(i>>>0<10){t=0;do{t=i+(t*10|0)|0;n=n+1|0;o[e>>2]=n;i=(r[n>>0]|0)+-48|0}while(i>>>0<10)}else t=0;return t|0}function fT(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0.0;e:do{if(t>>>0<=20)do{switch(t|0){case 9:{r=(o[n>>2]|0)+(4-1)&~(4-1);t=o[r>>2]|0;o[n>>2]=r+4;o[e>>2]=t;break e}case 10:{r=(o[n>>2]|0)+(4-1)&~(4-1);t=o[r>>2]|0;o[n>>2]=r+4;r=e;o[r>>2]=t;o[r+4>>2]=((t|0)<0)<<31>>31;break e}case 11:{r=(o[n>>2]|0)+(4-1)&~(4-1);t=o[r>>2]|0;o[n>>2]=r+4;r=e;o[r>>2]=t;o[r+4>>2]=0;break e}case 12:{r=(o[n>>2]|0)+(8-1)&~(8-1);t=r;i=o[t>>2]|0;t=o[t+4>>2]|0;o[n>>2]=r+8;r=e;o[r>>2]=i;o[r+4>>2]=t;break e}case 13:{i=(o[n>>2]|0)+(4-1)&~(4-1);r=o[i>>2]|0;o[n>>2]=i+4;r=(r&65535)<<16>>16;i=e;o[i>>2]=r;o[i+4>>2]=((r|0)<0)<<31>>31;break e}case 14:{i=(o[n>>2]|0)+(4-1)&~(4-1);r=o[i>>2]|0;o[n>>2]=i+4;i=e;o[i>>2]=r&65535;o[i+4>>2]=0;break e}case 15:{i=(o[n>>2]|0)+(4-1)&~(4-1);r=o[i>>2]|0;o[n>>2]=i+4;r=(r&255)<<24>>24;i=e;o[i>>2]=r;o[i+4>>2]=((r|0)<0)<<31>>31;break e}case 16:{i=(o[n>>2]|0)+(4-1)&~(4-1);r=o[i>>2]|0;o[n>>2]=i+4;i=e;o[i>>2]=r&255;o[i+4>>2]=0;break e}case 17:{i=(o[n>>2]|0)+(8-1)&~(8-1);u=+c[i>>3];o[n>>2]=i+8;c[e>>3]=u;break e}case 18:{i=(o[n>>2]|0)+(8-1)&~(8-1);u=+c[i>>3];o[n>>2]=i+8;c[e>>3]=u;break e}default:break e}}while(0)}while(0);return}function dT(e,t,n,i){e=e|0;t=t|0;n=n|0;i=i|0;if(!((e|0)==0&(t|0)==0))do{n=n+-1|0;r[n>>0]=u[5694+(e&15)>>0]|0|i;e=rx(e|0,t|0,4)|0;t=A}while(!((e|0)==0&(t|0)==0));return n|0}function pT(e,t,n){e=e|0;t=t|0;n=n|0;if(!((e|0)==0&(t|0)==0))do{n=n+-1|0;r[n>>0]=e&7|48;e=rx(e|0,t|0,3)|0;t=A}while(!((e|0)==0&(t|0)==0));return n|0}function hT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0;if(t>>>0>0|(t|0)==0&e>>>0>4294967295){while(1){i=cx(e|0,t|0,10,0)|0;n=n+-1|0;r[n>>0]=i&255|48;i=e;e=ax(e|0,t|0,10,0)|0;if(!(t>>>0>9|(t|0)==9&i>>>0>4294967295))break;else t=A}t=e}else t=e;if(t)while(1){n=n+-1|0;r[n>>0]=(t>>>0)%10|0|48;if(t>>>0<10)break;else t=(t>>>0)/10|0}return n|0}function vT(e){e=e|0;return kT(e,o[(CT()|0)+188>>2]|0)|0}function mT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0,l=0;a=t&255;i=(n|0)!=0;e:do{if(i&(e&3|0)!=0){u=t&255;while(1){if((r[e>>0]|0)==u<<24>>24){l=6;break e}e=e+1|0;n=n+-1|0;i=(n|0)!=0;if(!(i&(e&3|0)!=0)){l=5;break}}}else l=5}while(0);if((l|0)==5)if(i)l=6;else n=0;e:do{if((l|0)==6){u=t&255;if((r[e>>0]|0)!=u<<24>>24){i=V(a,16843009)|0;t:do{if(n>>>0>3)while(1){a=o[e>>2]^i;if((a&-2139062144^-2139062144)&a+-16843009|0)break;e=e+4|0;n=n+-4|0;if(n>>>0<=3){l=11;break t}}else l=11}while(0);if((l|0)==11)if(!n){n=0;break}while(1){if((r[e>>0]|0)==u<<24>>24)break e;e=e+1|0;n=n+-1|0;if(!n){n=0;break}}}}}while(0);return(n|0?e:0)|0}function gT(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;var o=0,u=0;u=h;h=h+256|0;o=u;if((n|0)>(r|0)&(i&73728|0)==0){i=n-r|0;tx(o|0,t|0,(i>>>0<256?i:256)|0)|0;if(i>>>0>255){t=n-r|0;do{sT(e,o,256);i=i+-256|0}while(i>>>0>255);i=t&255}sT(e,o,i)}h=u;return}function yT(e,t){e=e|0;t=t|0;if(!e)e=0;else e=DT(e,t,0)|0;return e|0}function _T(e,t,n,i,a,l){e=e|0;t=+t;n=n|0;i=i|0;a=a|0;l=l|0;var s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0.0,y=0,_=0,b=0,w=0,E=0,D=0,S=0,C=0,k=0,T=0,x=0,O=0,P=0,I=0,N=0;N=h;h=h+560|0;f=N+8|0;b=N;I=N+524|0;P=I;d=N+512|0;o[b>>2]=0;O=d+12|0;bT(t)|0;if((A|0)<0){t=-t;T=1;k=5659}else{T=(a&2049|0)!=0&1;k=(a&2048|0)==0?(a&1|0)==0?5660:5665:5662}bT(t)|0;x=A&2146435072;do{if(x>>>0<2146435072|(x|0)==2146435072&0<0){g=+wT(t,b)*2.0;s=g!=0.0;if(s)o[b>>2]=(o[b>>2]|0)+-1;E=l|32;if((E|0)==97){y=l&32;m=(y|0)==0?k:k+9|0;v=T|2;s=12-i|0;do{if(!(i>>>0>11|(s|0)==0)){t=8.0;do{s=s+-1|0;t=t*16.0}while((s|0)!=0);if((r[m>>0]|0)==45){t=-(t+(-g-t));break}else{t=g+t-t;break}}else t=g}while(0);c=o[b>>2]|0;s=(c|0)<0?0-c|0:c;s=hT(s,((s|0)<0)<<31>>31,O)|0;if((s|0)==(O|0)){s=d+11|0;r[s>>0]=48}r[s+-1>>0]=(c>>31&2)+43;p=s+-2|0;r[p>>0]=l+15;d=(i|0)<1;f=(a&8|0)==0;s=I;do{x=~~t;c=s+1|0;r[s>>0]=u[5694+x>>0]|y;t=(t-+(x|0))*16.0;if((c-P|0)==1?!(f&(d&t==0.0)):0){r[c>>0]=46;s=s+2|0}else s=c}while(t!=0.0);x=s-P|0;P=O-p|0;O=(i|0)!=0&(x+-2|0)<(i|0)?i+2|0:x;s=P+v+O|0;gT(e,32,n,s,a);sT(e,m,v);gT(e,48,n,s,a^65536);sT(e,I,x);gT(e,48,O-x|0,0,0);sT(e,p,P);gT(e,32,n,s,a^8192);break}c=(i|0)<0?6:i;if(s){s=(o[b>>2]|0)+-28|0;o[b>>2]=s;t=g*268435456.0}else{t=g;s=o[b>>2]|0}x=(s|0)<0?f:f+288|0;f=x;do{S=~~t>>>0;o[f>>2]=S;f=f+4|0;t=(t-+(S>>>0))*1.0e9}while(t!=0.0);if((s|0)>0){d=x;v=f;while(1){p=(s|0)<29?s:29;s=v+-4|0;if(s>>>0>=d>>>0){f=0;do{D=nx(o[s>>2]|0,0,p|0)|0;D=ex(D|0,A|0,f|0,0)|0;S=A;w=cx(D|0,S|0,1e9,0)|0;o[s>>2]=w;f=ax(D|0,S|0,1e9,0)|0;s=s+-4|0}while(s>>>0>=d>>>0);if(f){d=d+-4|0;o[d>>2]=f}}f=v;while(1){if(f>>>0<=d>>>0)break;s=f+-4|0;if(!(o[s>>2]|0))f=s;else break}s=(o[b>>2]|0)-p|0;o[b>>2]=s;if((s|0)>0)v=f;else break}}else d=x;if((s|0)<0){i=((c+25|0)/9|0)+1|0;_=(E|0)==102;do{y=0-s|0;y=(y|0)<9?y:9;if(d>>>0<f>>>0){p=(1<<y)+-1|0;v=1e9>>>y;m=0;s=d;do{S=o[s>>2]|0;o[s>>2]=(S>>>y)+m;m=V(S&p,v)|0;s=s+4|0}while(s>>>0<f>>>0);s=(o[d>>2]|0)==0?d+4|0:d;if(!m){d=s;s=f}else{o[f>>2]=m;d=s;s=f+4|0}}else{d=(o[d>>2]|0)==0?d+4|0:d;s=f}f=_?x:d;f=(s-f>>2|0)>(i|0)?f+(i<<2)|0:s;s=(o[b>>2]|0)+y|0;o[b>>2]=s}while((s|0)<0);s=d;i=f}else{s=d;i=f}S=x;if(s>>>0<i>>>0){f=(S-s>>2)*9|0;p=o[s>>2]|0;if(p>>>0>=10){d=10;do{d=d*10|0;f=f+1|0}while(p>>>0>=d>>>0)}}else f=0;_=(E|0)==103;w=(c|0)!=0;d=c-((E|0)!=102?f:0)+((w&_)<<31>>31)|0;if((d|0)<(((i-S>>2)*9|0)+-9|0)){d=d+9216|0;y=x+4+(((d|0)/9|0)+-1024<<2)|0;d=((d|0)%9|0)+1|0;if((d|0)<9){p=10;do{p=p*10|0;d=d+1|0}while((d|0)!=9)}else p=10;v=o[y>>2]|0;m=(v>>>0)%(p>>>0)|0;d=(y+4|0)==(i|0);if(!(d&(m|0)==0)){g=(((v>>>0)/(p>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;D=(p|0)/2|0;t=m>>>0<D>>>0?.5:d&(m|0)==(D|0)?1.0:1.5;if(T){D=(r[k>>0]|0)==45;t=D?-t:t;g=D?-g:g}d=v-m|0;o[y>>2]=d;if(g+t!=g){D=d+p|0;o[y>>2]=D;if(D>>>0>999999999){f=y;while(1){d=f+-4|0;o[f>>2]=0;if(d>>>0<s>>>0){s=s+-4|0;o[s>>2]=0}D=(o[d>>2]|0)+1|0;o[d>>2]=D;if(D>>>0>999999999)f=d;else break}}else d=y;f=(S-s>>2)*9|0;v=o[s>>2]|0;if(v>>>0>=10){p=10;do{p=p*10|0;f=f+1|0}while(v>>>0>=p>>>0)}}else d=y}else d=y;d=d+4|0;d=i>>>0>d>>>0?d:i;D=s}else{d=i;D=s}E=d;while(1){if(E>>>0<=D>>>0){b=0;break}s=E+-4|0;if(!(o[s>>2]|0))E=s;else{b=1;break}}i=0-f|0;do{if(_){s=((w^1)&1)+c|0;if((s|0)>(f|0)&(f|0)>-5){p=l+-1|0;c=s+-1-f|0}else{p=l+-2|0;c=s+-1|0}s=a&8;if(!s){if(b?(C=o[E+-4>>2]|0,(C|0)!=0):0){if(!((C>>>0)%10|0)){d=0;s=10;do{s=s*10|0;d=d+1|0}while(!((C>>>0)%(s>>>0)|0|0))}else d=0}else d=9;s=((E-S>>2)*9|0)+-9|0;if((p|32|0)==102){y=s-d|0;y=(y|0)>0?y:0;c=(c|0)<(y|0)?c:y;y=0;break}else{y=s+f-d|0;y=(y|0)>0?y:0;c=(c|0)<(y|0)?c:y;y=0;break}}else y=s}else{p=l;y=a&8}}while(0);_=c|y;v=(_|0)!=0&1;m=(p|32|0)==102;if(m){w=0;s=(f|0)>0?f:0}else{s=(f|0)<0?i:f;s=hT(s,((s|0)<0)<<31>>31,O)|0;d=O;if((d-s|0)<2)do{s=s+-1|0;r[s>>0]=48}while((d-s|0)<2);r[s+-1>>0]=(f>>31&2)+43;s=s+-2|0;r[s>>0]=p;w=s;s=d-s|0}s=T+1+c+v+s|0;gT(e,32,n,s,a);sT(e,k,T);gT(e,48,n,s,a^65536);if(m){p=D>>>0>x>>>0?x:D;y=I+9|0;v=y;m=I+8|0;d=p;do{f=hT(o[d>>2]|0,0,y)|0;if((d|0)==(p|0)){if((f|0)==(y|0)){r[m>>0]=48;f=m}}else if(f>>>0>I>>>0){tx(I|0,48,f-P|0)|0;do{f=f+-1|0}while(f>>>0>I>>>0)}sT(e,f,v-f|0);d=d+4|0}while(d>>>0<=x>>>0);if(_|0)sT(e,5710,1);if(d>>>0<E>>>0&(c|0)>0)while(1){f=hT(o[d>>2]|0,0,y)|0;if(f>>>0>I>>>0){tx(I|0,48,f-P|0)|0;do{f=f+-1|0}while(f>>>0>I>>>0)}sT(e,f,(c|0)<9?c:9);d=d+4|0;f=c+-9|0;if(!(d>>>0<E>>>0&(c|0)>9)){c=f;break}else c=f}gT(e,48,c+9|0,9,0)}else{_=b?E:D+4|0;if((c|0)>-1){b=I+9|0;y=(y|0)==0;i=b;v=0-P|0;m=I+8|0;p=D;do{f=hT(o[p>>2]|0,0,b)|0;if((f|0)==(b|0)){r[m>>0]=48;f=m}do{if((p|0)==(D|0)){d=f+1|0;sT(e,f,1);if(y&(c|0)<1){f=d;break}sT(e,5710,1);f=d}else{if(f>>>0<=I>>>0)break;tx(I|0,48,f+v|0)|0;do{f=f+-1|0}while(f>>>0>I>>>0)}}while(0);P=i-f|0;sT(e,f,(c|0)>(P|0)?P:c);c=c-P|0;p=p+4|0}while(p>>>0<_>>>0&(c|0)>-1)}gT(e,48,c+18|0,18,0);sT(e,w,O-w|0)}gT(e,32,n,s,a^8192)}else{I=(l&32|0)!=0;s=T+3|0;gT(e,32,n,s,a&-65537);sT(e,k,T);sT(e,t!=t|0.0!=0.0?I?5686:5690:I?5678:5682,3);gT(e,32,n,s,a^8192)}}while(0);h=N;return((s|0)<(n|0)?n:s)|0}function bT(e){e=+e;var t=0;c[d>>3]=e;t=o[d>>2]|0;A=o[d+4>>2]|0;return t|0}function wT(e,t){e=+e;t=t|0;return+ +ET(e,t)}function ET(e,t){e=+e;t=t|0;var n=0,r=0,i=0;c[d>>3]=e;n=o[d>>2]|0;r=o[d+4>>2]|0;i=rx(n|0,r|0,52)|0;switch(i&2047){case 0:{if(e!=0.0){e=+ET(e*18446744073709551616.0,t);n=(o[t>>2]|0)+-64|0}else n=0;o[t>>2]=n;break}case 2047:break;default:{o[t>>2]=(i&2047)+-1022;o[d>>2]=n;o[d+4>>2]=r&-2146435073|1071644672;e=+c[d>>3]}}return+e}function DT(e,t,n){e=e|0;t=t|0;n=n|0;do{if(e){if(t>>>0<128){r[e>>0]=t;e=1;break}if(!(o[o[(ST()|0)+188>>2]>>2]|0))if((t&-128|0)==57216){r[e>>0]=t;e=1;break}else{o[(Jk()|0)>>2]=84;e=-1;break}if(t>>>0<2048){r[e>>0]=t>>>6|192;r[e+1>>0]=t&63|128;e=2;break}if(t>>>0<55296|(t&-8192|0)==57344){r[e>>0]=t>>>12|224;r[e+1>>0]=t>>>6&63|128;r[e+2>>0]=t&63|128;e=3;break}if((t+-65536|0)>>>0<1048576){r[e>>0]=t>>>18|240;r[e+1>>0]=t>>>12&63|128;r[e+2>>0]=t>>>6&63|128;r[e+3>>0]=t&63|128;e=4;break}else{o[(Jk()|0)>>2]=84;e=-1;break}}else e=1}while(0);return e|0}function ST(){return eT()|0}function CT(){return eT()|0}function kT(e,t){e=e|0;t=t|0;var n=0,i=0;i=0;while(1){if((u[5712+i>>0]|0)==(e|0)){e=2;break}n=i+1|0;if((n|0)==87){n=5800;i=87;e=5;break}else i=n}if((e|0)==2)if(!i)n=5800;else{n=5800;e=5}if((e|0)==5)while(1){do{e=n;n=n+1|0}while((r[e>>0]|0)!=0);i=i+-1|0;if(!i)break;else e=5}return TT(n,o[t+20>>2]|0)|0}function TT(e,t){e=e|0;t=t|0;return xT(e,t)|0}function xT(e,t){e=e|0;t=t|0;if(!t)t=0;else t=AT(o[t>>2]|0,o[t+4>>2]|0,e)|0;return(t|0?t:e)|0}function AT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,h=0;h=(o[e>>2]|0)+1794895138|0;a=OT(o[e+8>>2]|0,h)|0;i=OT(o[e+12>>2]|0,h)|0;u=OT(o[e+16>>2]|0,h)|0;e:do{if((a>>>0<t>>>2>>>0?(p=t-(a<<2)|0,i>>>0<p>>>0&u>>>0<p>>>0):0)?((u|i)&3|0)==0:0){p=i>>>2;d=u>>>2;f=0;while(1){s=a>>>1;c=f+s|0;l=c<<1;u=l+p|0;i=OT(o[e+(u<<2)>>2]|0,h)|0;u=OT(o[e+(u+1<<2)>>2]|0,h)|0;if(!(u>>>0<t>>>0&i>>>0<(t-u|0)>>>0)){i=0;break e}if(r[e+(u+i)>>0]|0){i=0;break e}i=rT(n,e+u|0)|0;if(!i)break;i=(i|0)<0;if((a|0)==1){i=0;break e}else{f=i?f:c;a=i?s:a-s|0}}i=l+d|0;u=OT(o[e+(i<<2)>>2]|0,h)|0;i=OT(o[e+(i+1<<2)>>2]|0,h)|0;if(i>>>0<t>>>0&u>>>0<(t-i|0)>>>0)i=(r[e+(i+u)>>0]|0)==0?e+i|0:0;else i=0}else i=0}while(0);return i|0}function OT(e,t){e=e|0;t=t|0;var n=0;n=fx(e|0)|0;return((t|0)==0?e:n)|0}function PT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0,l=0,s=0;i=n+16|0;u=o[i>>2]|0;if(!u){if(!(IT(n)|0)){u=o[i>>2]|0;a=5}else i=0}else a=5;e:do{if((a|0)==5){s=n+20|0;l=o[s>>2]|0;i=l;if((u-l|0)>>>0<t>>>0){i=_A[o[n+36>>2]&7](n,e,t)|0;break}t:do{if((r[n+75>>0]|0)>-1){l=t;while(1){if(!l){a=0;u=e;break t}u=l+-1|0;if((r[e+u>>0]|0)==10)break;else l=u}i=_A[o[n+36>>2]&7](n,e,l)|0;if(i>>>0<l>>>0)break e;a=l;u=e+l|0;t=t-l|0;i=o[s>>2]|0}else{a=0;u=e}}while(0);ix(i|0,u|0,t|0)|0;o[s>>2]=(o[s>>2]|0)+t;i=a+t|0}}while(0);return i|0}function IT(e){e=e|0;var t=0,n=0;t=e+74|0;n=r[t>>0]|0;r[t>>0]=n+255|n;t=o[e>>2]|0;if(!(t&8)){o[e+8>>2]=0;o[e+4>>2]=0;n=o[e+44>>2]|0;o[e+28>>2]=n;o[e+20>>2]=n;o[e+16>>2]=n+(o[e+48>>2]|0);e=0}else{o[e>>2]=t|32;e=-1}return e|0}function NT(e,t){e=Y(e);t=Y(t);var n=0,r=0;n=MT(e)|0;do{if((n&2147483647)>>>0<=2139095040){r=MT(t)|0;if((r&2147483647)>>>0<=2139095040)if((r^n|0)<0){e=(n|0)<0?t:e;break}else{e=e<t?t:e;break}}else e=t}while(0);return Y(e)}function MT(e){e=Y(e);return(s[d>>2]=e,o[d>>2]|0)|0}function RT(e,t){e=Y(e);t=Y(t);var n=0,r=0;n=FT(e)|0;do{if((n&2147483647)>>>0<=2139095040){r=FT(t)|0;if((r&2147483647)>>>0<=2139095040)if((r^n|0)<0){e=(n|0)<0?e:t;break}else{e=e<t?e:t;break}}else e=t}while(0);return Y(e)}function FT(e){e=Y(e);return(s[d>>2]=e,o[d>>2]|0)|0}function LT(e,t){e=Y(e);t=Y(t);var n=0,r=0,i=0,u=0,a=0,l=0,c=0,f=0;u=(s[d>>2]=e,o[d>>2]|0);l=(s[d>>2]=t,o[d>>2]|0);n=u>>>23&255;a=l>>>23&255;c=u&-2147483648;i=l<<1;e:do{if((i|0)!=0?!((n|0)==255|((BT(t)|0)&2147483647)>>>0>2139095040):0){r=u<<1;if(r>>>0<=i>>>0){t=Y(e*Y(0.0));return Y((r|0)==(i|0)?t:e)}if(!n){n=u<<9;if((n|0)>-1){r=n;n=0;do{n=n+-1|0;r=r<<1}while((r|0)>-1)}else n=0;r=u<<1-n}else r=u&8388607|8388608;if(!a){u=l<<9;if((u|0)>-1){i=0;do{i=i+-1|0;u=u<<1}while((u|0)>-1)}else i=0;a=i;l=l<<1-i}else l=l&8388607|8388608;i=r-l|0;u=(i|0)>-1;t:do{if((n|0)>(a|0)){while(1){if(u)if(!i)break;else r=i;r=r<<1;n=n+-1|0;i=r-l|0;u=(i|0)>-1;if((n|0)<=(a|0))break t}t=Y(e*Y(0.0));break e}}while(0);if(u)if(!i){t=Y(e*Y(0.0));break}else r=i;if(r>>>0<8388608)do{r=r<<1;n=n+-1|0}while(r>>>0<8388608);if((n|0)>0)n=r+-8388608|n<<23;else n=r>>>(1-n|0);t=(o[d>>2]=n|c,Y(s[d>>2]))}else f=3}while(0);if((f|0)==3){t=Y(e*t);t=Y(t/t)}return Y(t)}function BT(e){e=Y(e);return(s[d>>2]=e,o[d>>2]|0)|0}function jT(e,t){e=e|0;t=t|0;return oT(o[582]|0,e,t)|0}function UT(e){e=e|0;Ye()}function zT(e){e=e|0;return}function WT(e,t){e=e|0;t=t|0;return 0}function HT(e){e=e|0;if((VT(e+4|0)|0)==-1){hA[o[(o[e>>2]|0)+8>>2]&127](e);e=1}else e=0;return e|0}function VT(e){e=e|0;var t=0;t=o[e>>2]|0;o[e>>2]=t+-1;return t+-1|0}function qT(e){e=e|0;if(HT(e)|0)GT(e);return}function GT(e){e=e|0;var t=0;t=e+8|0;if(!((o[t>>2]|0)!=0?(VT(t)|0)!=-1:0))hA[o[(o[e>>2]|0)+16>>2]&127](e);return}function $T(e){e=e|0;var t=0;t=(e|0)==0?1:e;while(1){e=qk(t)|0;if(e|0)break;e=QT()|0;if(!e){e=0;break}IA[e&0]()}return e|0}function YT(e){e=e|0;return $T(e)|0}function KT(e){e=e|0;Gk(e);return}function XT(e){e=e|0;if((r[e+11>>0]|0)<0)KT(o[e>>2]|0);return}function QT(){var e=0;e=o[2923]|0;o[2923]=e+0;return e|0}function JT(){}function ZT(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;r=t-r-(n>>>0>e>>>0|0)>>>0;return(A=r,e-n>>>0|0)|0}function ex(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;n=e+n>>>0;return(A=t+r+(n>>>0<e>>>0|0)>>>0,n|0)|0}function tx(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0,l=0;a=e+n|0;t=t&255;if((n|0)>=67){while(e&3){r[e>>0]=t;e=e+1|0}i=a&-4|0;u=i-64|0;l=t|t<<8|t<<16|t<<24;while((e|0)<=(u|0)){o[e>>2]=l;o[e+4>>2]=l;o[e+8>>2]=l;o[e+12>>2]=l;o[e+16>>2]=l;o[e+20>>2]=l;o[e+24>>2]=l;o[e+28>>2]=l;o[e+32>>2]=l;o[e+36>>2]=l;o[e+40>>2]=l;o[e+44>>2]=l;o[e+48>>2]=l;o[e+52>>2]=l;o[e+56>>2]=l;o[e+60>>2]=l;e=e+64|0}while((e|0)<(i|0)){o[e>>2]=l;e=e+4|0}}while((e|0)<(a|0)){r[e>>0]=t;e=e+1|0}return a-n|0}function nx(e,t,n){e=e|0;t=t|0;n=n|0;if((n|0)<32){A=t<<n|(e&(1<<n)-1<<32-n)>>>32-n;return e<<n}A=e<<n-32;return 0}function rx(e,t,n){e=e|0;t=t|0;n=n|0;if((n|0)<32){A=t>>>n;return e>>>n|(t&(1<<n)-1)<<32-n}A=0;return t>>>n-32|0}function ix(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0;if((n|0)>=8192)return He(e|0,t|0,n|0)|0;a=e|0;u=e+n|0;if((e&3)==(t&3)){while(e&3){if(!n)return a|0;r[e>>0]=r[t>>0]|0;e=e+1|0;t=t+1|0;n=n-1|0}n=u&-4|0;i=n-64|0;while((e|0)<=(i|0)){o[e>>2]=o[t>>2];o[e+4>>2]=o[t+4>>2];o[e+8>>2]=o[t+8>>2];o[e+12>>2]=o[t+12>>2];o[e+16>>2]=o[t+16>>2];o[e+20>>2]=o[t+20>>2];o[e+24>>2]=o[t+24>>2];o[e+28>>2]=o[t+28>>2];o[e+32>>2]=o[t+32>>2];o[e+36>>2]=o[t+36>>2];o[e+40>>2]=o[t+40>>2];o[e+44>>2]=o[t+44>>2];o[e+48>>2]=o[t+48>>2];o[e+52>>2]=o[t+52>>2];o[e+56>>2]=o[t+56>>2];o[e+60>>2]=o[t+60>>2];e=e+64|0;t=t+64|0}while((e|0)<(n|0)){o[e>>2]=o[t>>2];e=e+4|0;t=t+4|0}}else{n=u-4|0;while((e|0)<(n|0)){r[e>>0]=r[t>>0]|0;r[e+1>>0]=r[t+1>>0]|0;r[e+2>>0]=r[t+2>>0]|0;r[e+3>>0]=r[t+3>>0]|0;e=e+4|0;t=t+4|0}}while((e|0)<(u|0)){r[e>>0]=r[t>>0]|0;e=e+1|0;t=t+1|0}return a|0}function ox(e){e=e|0;var t=0;t=r[m+(e&255)>>0]|0;if((t|0)<8)return t|0;t=r[m+(e>>8&255)>>0]|0;if((t|0)<8)return t+8|0;t=r[m+(e>>16&255)>>0]|0;if((t|0)<8)return t+16|0;return(r[m+(e>>>24)>>0]|0)+24|0}function ux(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;var u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,h=0,v=0;f=e;s=t;c=s;a=n;p=r;l=p;if(!c){u=(i|0)!=0;if(!l){if(u){o[i>>2]=(f>>>0)%(a>>>0);o[i+4>>2]=0}p=0;i=(f>>>0)/(a>>>0)>>>0;return(A=p,i)|0}else{if(!u){p=0;i=0;return(A=p,i)|0}o[i>>2]=e|0;o[i+4>>2]=t&0;p=0;i=0;return(A=p,i)|0}}u=(l|0)==0;do{if(a){if(!u){u=($(l|0)|0)-($(c|0)|0)|0;if(u>>>0<=31){d=u+1|0;l=31-u|0;t=u-31>>31;a=d;e=f>>>(d>>>0)&t|c<<l;t=c>>>(d>>>0)&t;u=0;l=f<<l;break}if(!i){p=0;i=0;return(A=p,i)|0}o[i>>2]=e|0;o[i+4>>2]=s|t&0;p=0;i=0;return(A=p,i)|0}u=a-1|0;if(u&a|0){l=($(a|0)|0)+33-($(c|0)|0)|0;v=64-l|0;d=32-l|0;s=d>>31;h=l-32|0;t=h>>31;a=l;e=d-1>>31&c>>>(h>>>0)|(c<<d|f>>>(l>>>0))&t;t=t&c>>>(l>>>0);u=f<<v&s;l=(c<<v|f>>>(h>>>0))&s|f<<d&l-33>>31;break}if(i|0){o[i>>2]=u&f;o[i+4>>2]=0}if((a|0)==1){h=s|t&0;v=e|0|0;return(A=h,v)|0}else{v=ox(a|0)|0;h=c>>>(v>>>0)|0;v=c<<32-v|f>>>(v>>>0)|0;return(A=h,v)|0}}else{if(u){if(i|0){o[i>>2]=(c>>>0)%(a>>>0);o[i+4>>2]=0}h=0;v=(c>>>0)/(a>>>0)>>>0;return(A=h,v)|0}if(!f){if(i|0){o[i>>2]=0;o[i+4>>2]=(c>>>0)%(l>>>0)}h=0;v=(c>>>0)/(l>>>0)>>>0;return(A=h,v)|0}u=l-1|0;if(!(u&l)){if(i|0){o[i>>2]=e|0;o[i+4>>2]=u&c|t&0}h=0;v=c>>>((ox(l|0)|0)>>>0);return(A=h,v)|0}u=($(l|0)|0)-($(c|0)|0)|0;if(u>>>0<=30){t=u+1|0;l=31-u|0;a=t;e=c<<l|f>>>(t>>>0);t=c>>>(t>>>0);u=0;l=f<<l;break}if(!i){h=0;v=0;return(A=h,v)|0}o[i>>2]=e|0;o[i+4>>2]=s|t&0;h=0;v=0;return(A=h,v)|0}}while(0);if(!a){c=l;s=0;l=0}else{d=n|0|0;f=p|r&0;c=ex(d|0,f|0,-1,-1)|0;n=A;s=l;l=0;do{r=s;s=u>>>31|s<<1;u=l|u<<1;r=e<<1|r>>>31|0;p=e>>>31|t<<1|0;ZT(c|0,n|0,r|0,p|0)|0;v=A;h=v>>31|((v|0)<0?-1:0)<<1;l=h&1;e=ZT(r|0,p|0,h&d|0,(((v|0)<0?-1:0)>>31|((v|0)<0?-1:0)<<1)&f|0)|0;t=A;a=a-1|0}while((a|0)!=0);c=s;s=0}a=0;if(i|0){o[i>>2]=e;o[i+4>>2]=t}h=(u|0)>>>31|(c|a)<<1|(a<<1|u>>>31)&0|s;v=(u<<1|0>>>31)&-2|l;return(A=h,v)|0}function ax(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;return ux(e,t,n,r,0)|0}function lx(e){e=e|0;var t=0,n=0;n=e+15&-16|0;t=o[f>>2]|0;e=t+n|0;if((n|0)>0&(e|0)<(t|0)|(e|0)<0){Z()|0;qe(12);return-1}o[f>>2]=e;if((e|0)>(J()|0)?(Q()|0)==0:0){o[f>>2]=t;qe(12);return-1}return t|0}function sx(e,t,n){e=e|0;t=t|0;n=n|0;var i=0;if((t|0)<(e|0)&(e|0)<(t+n|0)){i=e;t=t+n|0;e=e+n|0;while((n|0)>0){e=e-1|0;t=t-1|0;n=n-1|0;r[e>>0]=r[t>>0]|0}e=i}else ix(e,t,n)|0;return e|0}function cx(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=h;h=h+16|0;i=u|0;ux(e,t,n,r,i)|0;h=u;return(A=o[i+4>>2]|0,o[i>>2]|0)|0}function fx(e){e=e|0;return(e&255)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>>24|0}function dx(e,t,n,r,i,o){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;cA[e&1](t|0,n|0,r|0,i|0,o|0)}function px(e,t,n){e=e|0;t=t|0;n=Y(n);fA[e&1](t|0,Y(n))}function hx(e,t,n){e=e|0;t=t|0;n=+n;dA[e&31](t|0,+n)}function vx(e,t,n,r){e=e|0;t=t|0;n=Y(n);r=Y(r);return Y(pA[e&0](t|0,Y(n),Y(r)))}function mx(e,t){e=e|0;t=t|0;hA[e&127](t|0)}function gx(e,t,n){e=e|0;t=t|0;n=n|0;vA[e&31](t|0,n|0)}function yx(e,t){e=e|0;t=t|0;return mA[e&31](t|0)|0}function _x(e,t,n,r,i){e=e|0;t=t|0;n=+n;r=+r;i=i|0;gA[e&1](t|0,+n,+r,i|0)}function bx(e,t,n,r){e=e|0;t=t|0;n=+n;r=+r;yA[e&1](t|0,+n,+r)}function wx(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;return _A[e&7](t|0,n|0,r|0)|0}function Ex(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;return+bA[e&1](t|0,n|0,r|0)}function Dx(e,t){e=e|0;t=t|0;return+wA[e&15](t|0)}function Sx(e,t,n){e=e|0;t=t|0;n=+n;return EA[e&1](t|0,+n)|0}function Cx(e,t,n){e=e|0;t=t|0;n=n|0;return DA[e&15](t|0,n|0)|0}function kx(e,t,n,r,i,o){e=e|0;t=t|0;n=n|0;r=+r;i=+i;o=o|0;SA[e&1](t|0,n|0,+r,+i,o|0)}function Tx(e,t,n,r,i,o,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;u=u|0;CA[e&1](t|0,n|0,r|0,i|0,o|0,u|0)}function xx(e,t,n){e=e|0;t=t|0;n=n|0;return+kA[e&7](t|0,n|0)}function Ax(e){e=e|0;return TA[e&7]()|0}function Ox(e,t,n,r,i,o){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;return xA[e&1](t|0,n|0,r|0,i|0,o|0)|0}function Px(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=+i;AA[e&1](t|0,n|0,r|0,+i)}function Ix(e,t,n,r,i,o,u){e=e|0;t=t|0;n=n|0;r=Y(r);i=i|0;o=Y(o);u=u|0;OA[e&1](t|0,n|0,Y(r),i|0,Y(o),u|0)}function Nx(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;PA[e&15](t|0,n|0,r|0)}function Mx(e){e=e|0;IA[e&0]()}function Rx(e,t,n,r){e=e|0;t=t|0;n=n|0;r=+r;NA[e&15](t|0,n|0,+r)}function Fx(e,t,n){e=e|0;t=+t;n=+n;return MA[e&1](+t,+n)|0}function Lx(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;RA[e&15](t|0,n|0,r|0,i|0)}function Bx(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;K(0)}function jx(e,t){e=e|0;t=Y(t);K(1)}function Ux(e,t){e=e|0;t=+t;K(2)}function zx(e,t,n){e=e|0;t=Y(t);n=Y(n);K(3);return ft}function Wx(e){e=e|0;K(4)}function Hx(e,t){e=e|0;t=t|0;K(5)}function Vx(e){e=e|0;K(6);return 0}function qx(e,t,n,r){e=e|0;t=+t;n=+n;r=r|0;K(7)}function Gx(e,t,n){e=e|0;t=+t;n=+n;K(8)}function $x(e,t,n){e=e|0;t=t|0;n=n|0;K(9);return 0}function Yx(e,t,n){e=e|0;t=t|0;n=n|0;K(10);return 0.0}function Kx(e){e=e|0;K(11);return 0.0}function Xx(e,t){e=e|0;t=+t;K(12);return 0}function Qx(e,t){e=e|0;t=t|0;K(13);return 0}function Jx(e,t,n,r,i){e=e|0;t=t|0;n=+n;r=+r;i=i|0;K(14)}function Zx(e,t,n,r,i,o){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;K(15)}function eA(e,t){e=e|0;t=t|0;K(16);return 0.0}function tA(){K(17);return 0}function nA(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;K(18);return 0}function rA(e,t,n,r){e=e|0;t=t|0;n=n|0;r=+r;K(19)}function iA(e,t,n,r,i,o){e=e|0;t=t|0;n=Y(n);r=r|0;i=Y(i);o=o|0;K(20)}function oA(e,t,n){e=e|0;t=t|0;n=n|0;K(21)}function uA(){K(22)}function aA(e,t,n){e=e|0;t=t|0;n=+n;K(23)}function lA(e,t){e=+e;t=+t;K(24);return 0}function sA(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;K(25)}var cA=[Bx,DE];var fA=[jx,qi];var dA=[Ux,yo,_o,bo,wo,Eo,Do,So,ko,To,Ao,Oo,Po,Io,No,Mo,Ro,Fo,Lo,Ux,Ux,Ux,Ux,Ux,Ux,Ux,Ux,Ux,Ux,Ux,Ux,Ux];var pA=[zx];var hA=[Wx,zT,hl,vl,ml,Kd,Xd,Qd,yb,_b,bb,oE,uE,aE,uk,ak,lk,bt,Xi,to,Co,xo,ju,Uu,Ka,Sl,Wl,ps,Ns,rc,kc,qc,df,Mf,Zf,yd,Ld,gp,Fp,th,bh,jh,iv,kv,Vv,am,xm,Wi,cg,Ag,Qg,yy,Fy,o_,g_,b_,U_,H_,ab,Db,kb,Gb,pw,Cl,OD,pS,PS,KS,bC,BC,XC,ZC,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx];var vA=[Hx,no,ro,uo,ao,lo,so,co,fo,vo,mo,go,eu,ru,iu,ou,uu,au,lu,pu,gu,Ku,Ov,$v,Ey,ND,ww,eS,Hx,Hx,Hx,Hx];var mA=[Vx,Yk,Ki,zo,qo,Go,$o,Yo,Ko,Xo,Jo,Zo,hu,vu,zu,Pm,Uy,Kb,BD,UD,Vx,Vx,Vx,Vx,Vx,Vx,Vx,Vx,Vx,Vx,Vx,Vx];var gA=[qx,Wu];var yA=[Gx,cb];var _A=[$x,Kk,Xk,nT,ac,wp,hg,ZS];var bA=[Yx,rd];var wA=[Kx,tu,nu,su,Hu,Vu,qu,Gu,$u,Yu,Kx,Kx,Kx,Kx,Kx,Kx];var EA=[Xx,p_];var DA=[Qx,WT,mu,tl,gs,Oc,Kc,zd,Up,fm,Gi,RS,Qx,Qx,Qx,Qx];var SA=[Jx,Gl];var CA=[Zx,SC];var kA=[eA,cu,Xu,Qu,Ju,Ed,eA,eA];var TA=[tA,Zu,$i,Ui,C_,$_,Pb,rk];var xA=[nA,Fr];var AA=[rA,Sh];var OA=[iA,_u];var PA=[oA,Wo,Qo,fu,du,Ls,mf,Hh,lv,Vi,JE,gS,WC,oA,oA,oA];var IA=[uA];var NA=[aA,io,oo,po,ho,Bo,jo,Uo,oh,Ng,l_,aA,aA,aA,aA,aA];var MA=[lA,vb];var RA=[sA,Bf,jm,ty,Ky,P_,Z_,Bb,yw,qD,hk,sA,sA,sA,sA,sA];return{_llvm_bswap_i32:fx,dynCall_idd:Fx,dynCall_i:Ax,_i64Subtract:ZT,___udivdi3:ax,dynCall_vif:px,setThrew:mt,dynCall_viii:Nx,_bitshift64Lshr:rx,_bitshift64Shl:nx,dynCall_vi:mx,dynCall_viiddi:kx,dynCall_diii:Ex,dynCall_iii:Cx,_memset:tx,_sbrk:lx,_memcpy:ix,__GLOBAL__sub_I_Yoga_cpp:ji,dynCall_vii:gx,___uremdi3:cx,dynCall_vid:hx,stackAlloc:dt,_nbind_init:Ak,getTempRet0:yt,dynCall_di:Dx,dynCall_iid:Sx,setTempRet0:gt,_i64Add:ex,dynCall_fiff:vx,dynCall_iiii:wx,_emscripten_get_global_libc:$k,dynCall_viid:Rx,dynCall_viiid:Px,dynCall_viififi:Ix,dynCall_ii:yx,__GLOBAL__sub_I_Binding_cc:wD,dynCall_viiii:Lx,dynCall_iiiiii:Ox,stackSave:pt,dynCall_viiiii:dx,__GLOBAL__sub_I_nbind_cc:ea,dynCall_vidd:bx,_free:Gk,runPostSets:JT,dynCall_viiiiii:Tx,establishStackSpace:vt,_memmove:sx,stackRestore:ht,_malloc:qk,__GLOBAL__sub_I_common_cc:iw,dynCall_viddi:_x,dynCall_dii:xx,dynCall_v:Mx}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii,initialStackTop;function ExitStatus(e){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+e+\")\",this.status=e}Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm,ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var preloadStartTime=null,calledMain=!1;function run(e){function t(){Module.calledRun||(Module.calledRun=!0,ABORT||(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(e),postRun()))}e=e||Module.arguments,null===preloadStartTime&&(preloadStartTime=Date.now()),runDependencies>0||(preRun(),runDependencies>0||Module.calledRun||(Module.setStatus?(Module.setStatus(\"Running...\"),setTimeout((function(){setTimeout((function(){Module.setStatus(\"\")}),1),t()}),1)):t()))}function exit(e,t){t&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=e,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(e)),ENVIRONMENT_IS_NODE&&process.exit(e),Module.quit(e,new ExitStatus(e)))}dependenciesFulfilled=function e(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=e)},Module.callMain=Module.callMain=function(e){e=e||[],ensureInitRuntime();var t=e.length+1;function n(){for(var e=0;e<3;e++)r.push(0)}var r=[allocate(intArrayFromString(Module.thisProgram),\"i8\",ALLOC_NORMAL)];n();for(var i=0;i<t-1;i+=1)r.push(allocate(intArrayFromString(e[i]),\"i8\",ALLOC_NORMAL)),n();r.push(0),r=allocate(r,\"i32\",ALLOC_NORMAL);try{exit(Module._main(t,r,0),!0)}catch(e){if(e instanceof ExitStatus)return;if(\"SimulateInfiniteLoop\"==e)return void(Module.noExitRuntime=!0);var o=e;e&&\"object\"==typeof e&&e.stack&&(o=[e,e.stack]),Module.printErr(\"exception thrown: \"+o),Module.quit(1,e)}finally{calledMain=!0}},Module.run=Module.run=run,Module.exit=Module.exit=exit;var abortDecorators=[];function abort(e){Module.onAbort&&Module.onAbort(e),void 0!==e?(Module.print(e),Module.printErr(e),e=JSON.stringify(e)):e=\"\",ABORT=!0,EXITSTATUS=1;var t=\"abort(\"+e+\") at \"+stackTrace()+\"\\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.\";throw abortDecorators&&abortDecorators.forEach((function(n){t=n(t,e)})),t}if(Module.abort=Module.abort=abort,Module.preInit)for(\"function\"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()},void 0===(__WEBPACK_AMD_DEFINE_RESULT__=function(){return wrapper}.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__=[]))||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)},3019:e=>{\"use strict\";e.exports={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2}},6401:(e,t,n)=>{\"use strict\";var r=n(7180),i=n(3354),o=!1,u=null;if(i({},(function(e,t){if(!o){if(o=!0,e)throw e;u=t}})),!o)throw new Error(\"Failed to load the yoga module - it needed to be loaded synchronously, but didn't\");e.exports=r(u.bind,u.lib)},7180:(e,t,n)=>{\"use strict\";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},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}}();function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}var a=n(3019),l=function(){function e(t,n,r,i,o,a){u(this,e),this.left=t,this.right=n,this.top=r,this.bottom=i,this.width=o,this.height=a}return i(e,[{key:\"fromJS\",value:function(e){e(this.left,this.right,this.top,this.bottom,this.width,this.height)}},{key:\"toString\",value:function(){return\"<Layout#\"+this.left+\":\"+this.right+\";\"+this.top+\":\"+this.bottom+\";\"+this.width+\":\"+this.height+\">\"}}]),e}(),s=function(){function e(t,n){u(this,e),this.width=t,this.height=n}return i(e,null,[{key:\"fromJS\",value:function(t){return new e(t.width,t.height)}}]),i(e,[{key:\"fromJS\",value:function(e){e(this.width,this.height)}},{key:\"toString\",value:function(){return\"<Size#\"+this.width+\"x\"+this.height+\">\"}}]),e}(),c=function(){function e(t,n){u(this,e),this.unit=t,this.value=n}return i(e,[{key:\"fromJS\",value:function(e){e(this.unit,this.value)}},{key:\"toString\",value:function(){switch(this.unit){case a.UNIT_POINT:return String(this.value);case a.UNIT_PERCENT:return this.value+\"%\";case a.UNIT_AUTO:return\"auto\";default:return this.value+\"?\"}}},{key:\"valueOf\",value:function(){return this.value}}]),e}();e.exports=function(e,t){function n(e,t,n){var r=e[t];e[t]=function(){for(var e=arguments.length,t=Array(e),i=0;i<e;i++)t[i]=arguments[i];return n.call.apply(n,[this,r].concat(t))}}for(var i=[\"setPosition\",\"setMargin\",\"setFlexBasis\",\"setWidth\",\"setHeight\",\"setMinWidth\",\"setMinHeight\",\"setMaxWidth\",\"setMaxHeight\",\"setPadding\"],u=function(){var e,r=i[f],u=(o(e={},a.UNIT_POINT,t.Node.prototype[r]),o(e,a.UNIT_PERCENT,t.Node.prototype[r+\"Percent\"]),o(e,a.UNIT_AUTO,t.Node.prototype[r+\"Auto\"]),e);n(t.Node.prototype,r,(function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];var o,l,s=n.pop(),f=void 0,d=void 0;if(\"auto\"===s)f=a.UNIT_AUTO,d=void 0;else if(s instanceof c)f=s.unit,d=s.valueOf();else if(f=\"string\"==typeof s&&s.endsWith(\"%\")?a.UNIT_PERCENT:a.UNIT_POINT,d=parseFloat(s),!Number.isNaN(s)&&Number.isNaN(d))throw new Error(\"Invalid value \"+s+\" for \"+r);if(!u[f])throw new Error('Failed to execute \"'+r+\"\\\": Unsupported unit '\"+s+\"'\");return void 0!==d?(o=u[f]).call.apply(o,[this].concat(n,[d])):(l=u[f]).call.apply(l,[this].concat(n))}))},f=0;f<i.length;f++)u();return n(t.Config.prototype,\"free\",(function(){t.Config.destroy(this)})),n(t.Node,\"create\",(function(e,n){return n?t.Node.createWithConfig(n):t.Node.createDefault()})),n(t.Node.prototype,\"free\",(function(){t.Node.destroy(this)})),n(t.Node.prototype,\"freeRecursive\",(function(){for(var e=0,t=this.getChildCount();e<t;++e)this.getChild(0).freeRecursive();this.free()})),n(t.Node.prototype,\"setMeasureFunc\",(function(e,t){return t?e.call(this,(function(){return s.fromJS(t.apply(void 0,arguments))})):this.unsetMeasureFunc()})),n(t.Node.prototype,\"calculateLayout\",(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:NaN,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:NaN,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:a.DIRECTION_LTR;return e.call(this,t,n,r)})),r({Config:t.Config,Node:t.Node,Layout:e(\"Layout\",l),Size:e(\"Size\",s),Value:e(\"Value\",c),getInstanceCount:function(){return t.getInstanceCount.apply(t,arguments)}},a)}},2357:e=>{\"use strict\";e.exports=require(\"assert\")},6417:e=>{\"use strict\";e.exports=require(\"crypto\")},8614:e=>{\"use strict\";e.exports=require(\"events\")},5747:e=>{\"use strict\";e.exports=require(\"fs\")},8605:e=>{\"use strict\";e.exports=require(\"http\")},7211:e=>{\"use strict\";e.exports=require(\"https\")},2282:e=>{\"use strict\";e.exports=require(\"module\")},1631:e=>{\"use strict\";e.exports=require(\"net\")},2087:e=>{\"use strict\";e.exports=require(\"os\")},2413:e=>{\"use strict\";e.exports=require(\"stream\")},4016:e=>{\"use strict\";e.exports=require(\"tls\")},3867:e=>{\"use strict\";e.exports=require(\"tty\")},8835:e=>{\"use strict\";e.exports=require(\"url\")},8761:e=>{\"use strict\";e.exports=require(\"zlib\")}},__webpack_module_cache__={};function __webpack_require__(e){if(__webpack_module_cache__[e])return __webpack_module_cache__[e].exports;var t=__webpack_module_cache__[e]={id:e,loaded:!1,exports:{}};return __webpack_modules__[e].call(t.exports,t,t.exports,__webpack_require__),t.loaded=!0,t.exports}return __webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),__webpack_require__(7560)})();\nreturn plugin;\n}\n};"
  },
  {
    "path": ".yarn/releases/yarn-3.6.3.cjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable */\n//prettier-ignore\n(()=>{var Dge=Object.create;var lS=Object.defineProperty;var kge=Object.getOwnPropertyDescriptor;var Rge=Object.getOwnPropertyNames;var Fge=Object.getPrototypeOf,Nge=Object.prototype.hasOwnProperty;var J=(r=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(r,{get:(e,t)=>(typeof require<\"u\"?require:e)[t]}):r)(function(r){if(typeof require<\"u\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+r+'\" is not supported')});var Tge=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)lS(r,t,{get:e[t],enumerable:!0})},Lge=(r,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Rge(e))!Nge.call(r,n)&&n!==t&&lS(r,n,{get:()=>e[n],enumerable:!(i=kge(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Dge(Fge(r)):{},Lge(e||!r||!r.__esModule?lS(t,\"default\",{value:r,enumerable:!0}):t,r));var PK=w((z7e,xK)=>{xK.exports=vK;vK.sync=ife;var QK=J(\"fs\");function rfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(\";\"),t.indexOf(\"\")!==-1))return!0;for(var i=0;i<t.length;i++){var n=t[i].toLowerCase();if(n&&r.substr(-n.length).toLowerCase()===n)return!0}return!1}function SK(r,e,t){return!r.isSymbolicLink()&&!r.isFile()?!1:rfe(e,t)}function vK(r,e,t){QK.stat(r,function(i,n){t(i,i?!1:SK(n,r,e))})}function ife(r,e){return SK(QK.statSync(r),r,e)}});var NK=w((V7e,FK)=>{FK.exports=kK;kK.sync=nfe;var DK=J(\"fs\");function kK(r,e,t){DK.stat(r,function(i,n){t(i,i?!1:RK(n,e))})}function nfe(r,e){return RK(DK.statSync(r),e)}function RK(r,e){return r.isFile()&&sfe(r,e)}function sfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt(\"100\",8),l=parseInt(\"010\",8),c=parseInt(\"001\",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var LK=w((Z7e,TK)=>{var X7e=J(\"fs\"),lI;process.platform===\"win32\"||global.TESTING_WINDOWS?lI=PK():lI=NK();TK.exports=SS;SS.sync=ofe;function SS(r,e,t){if(typeof e==\"function\"&&(t=e,e={}),!t){if(typeof Promise!=\"function\")throw new TypeError(\"callback not provided\");return new Promise(function(i,n){SS(r,e||{},function(s,o){s?n(s):i(o)})})}lI(r,e||{},function(i,n){i&&(i.code===\"EACCES\"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function ofe(r,e){try{return lI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code===\"EACCES\")return!1;throw t}}});var YK=w((_7e,GK)=>{var Dg=process.platform===\"win32\"||process.env.OSTYPE===\"cygwin\"||process.env.OSTYPE===\"msys\",MK=J(\"path\"),afe=Dg?\";\":\":\",OK=LK(),KK=r=>Object.assign(new Error(`not found: ${r}`),{code:\"ENOENT\"}),UK=(r,e)=>{let t=e.colon||afe,i=r.match(/\\//)||Dg&&r.match(/\\\\/)?[\"\"]:[...Dg?[process.cwd()]:[],...(e.path||process.env.PATH||\"\").split(t)],n=Dg?e.pathExt||process.env.PATHEXT||\".EXE;.CMD;.BAT;.COM\":\"\",s=Dg?n.split(t):[\"\"];return Dg&&r.indexOf(\".\")!==-1&&s[0]!==\"\"&&s.unshift(\"\"),{pathEnv:i,pathExt:s,pathExtExe:n}},HK=(r,e,t)=>{typeof e==\"function\"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=UK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(KK(r));let f=i[c],h=/^\".*\"$/.test(f)?f.slice(1,-1):f,p=MK.join(h,r),C=!h&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];OK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Afe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=UK(r,e),s=[];for(let o=0;o<t.length;o++){let a=t[o],l=/^\".*\"$/.test(a)?a.slice(1,-1):a,c=MK.join(l,r),u=!l&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+c:c;for(let g=0;g<i.length;g++){let f=u+i[g];try{if(OK.sync(f,{pathExt:n}))if(e.all)s.push(f);else return f}catch{}}}if(e.all&&s.length)return s;if(e.nothrow)return null;throw KK(r)};GK.exports=HK;HK.sync=Afe});var qK=w(($7e,vS)=>{\"use strict\";var jK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!==\"win32\"?\"PATH\":Object.keys(e).reverse().find(i=>i.toUpperCase()===\"PATH\")||\"Path\"};vS.exports=jK;vS.exports.default=jK});var VK=w((eZe,zK)=>{\"use strict\";var JK=J(\"path\"),lfe=YK(),cfe=qK();function WK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=lfe.sync(r.command,{path:t[cfe({env:t})],pathExt:e?JK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=JK.resolve(n?r.options.cwd:\"\",o)),o}function ufe(r){return WK(r)||WK(r,!0)}zK.exports=ufe});var XK=w((tZe,PS)=>{\"use strict\";var xS=/([()\\][%!^\"`<>&|;, *?])/g;function gfe(r){return r=r.replace(xS,\"^$1\"),r}function ffe(r,e){return r=`${r}`,r=r.replace(/(\\\\*)\"/g,'$1$1\\\\\"'),r=r.replace(/(\\\\*)$/,\"$1$1\"),r=`\"${r}\"`,r=r.replace(xS,\"^$1\"),e&&(r=r.replace(xS,\"^$1\")),r}PS.exports.command=gfe;PS.exports.argument=ffe});var _K=w((rZe,ZK)=>{\"use strict\";ZK.exports=/^#!(.*)/});var eU=w((iZe,$K)=>{\"use strict\";var hfe=_K();$K.exports=(r=\"\")=>{let e=r.match(hfe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,\"\").split(\" \"),n=t.split(\"/\").pop();return n===\"env\"?i:i?`${n} ${i}`:n}});var rU=w((nZe,tU)=>{\"use strict\";var DS=J(\"fs\"),pfe=eU();function dfe(r){let t=Buffer.alloc(150),i;try{i=DS.openSync(r,\"r\"),DS.readSync(i,t,0,150,0),DS.closeSync(i)}catch{}return pfe(t.toString())}tU.exports=dfe});var oU=w((sZe,sU)=>{\"use strict\";var Cfe=J(\"path\"),iU=VK(),nU=XK(),mfe=rU(),Efe=process.platform===\"win32\",Ife=/\\.(?:com|exe)$/i,yfe=/node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;function wfe(r){r.file=iU(r);let e=r.file&&mfe(r.file);return e?(r.args.unshift(r.file),r.command=e,iU(r)):r.file}function Bfe(r){if(!Efe)return r;let e=wfe(r),t=!Ife.test(e);if(r.options.forceShell||t){let i=yfe.test(e);r.command=Cfe.normalize(r.command),r.command=nU.command(r.command),r.args=r.args.map(s=>nU.argument(s,i));let n=[r.command].concat(r.args).join(\" \");r.args=[\"/d\",\"/s\",\"/c\",`\"${n}\"`],r.command=process.env.comspec||\"cmd.exe\",r.options.windowsVerbatimArguments=!0}return r}function bfe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Bfe(i)}sU.exports=bfe});var lU=w((oZe,AU)=>{\"use strict\";var kS=process.platform===\"win32\";function RS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:\"ENOENT\",errno:\"ENOENT\",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Qfe(r,e){if(!kS)return;let t=r.emit;r.emit=function(i,n){if(i===\"exit\"){let s=aU(n,e,\"spawn\");if(s)return t.call(r,\"error\",s)}return t.apply(r,arguments)}}function aU(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawn\"):null}function Sfe(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawnSync\"):null}AU.exports={hookChildProcess:Qfe,verifyENOENT:aU,verifyENOENTSync:Sfe,notFoundError:RS}});var TS=w((aZe,kg)=>{\"use strict\";var cU=J(\"child_process\"),FS=oU(),NS=lU();function uU(r,e,t){let i=FS(r,e,t),n=cU.spawn(i.command,i.args,i.options);return NS.hookChildProcess(n,i),n}function vfe(r,e,t){let i=FS(r,e,t),n=cU.spawnSync(i.command,i.args,i.options);return n.error=n.error||NS.verifyENOENTSync(n.status,i),n}kg.exports=uU;kg.exports.spawn=uU;kg.exports.sync=vfe;kg.exports._parse=FS;kg.exports._enoent=NS});var fU=w((AZe,gU)=>{\"use strict\";function xfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,Zl)}xfe(Zl,Error);Zl.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function Pfe(r,e){e=e!==void 0?e:{};var t={},i={Start:SA},n=SA,s=function(m){return m||[]},o=function(m,Q,N){return[{command:m,type:Q}].concat(N||[])},a=function(m,Q){return[{command:m,type:Q||\";\"}]},l=function(m){return m},c=\";\",u=me(\";\",!1),g=\"&\",f=me(\"&\",!1),h=function(m,Q){return Q?{chain:m,then:Q}:{chain:m}},p=function(m,Q){return{type:m,line:Q}},C=\"&&\",y=me(\"&&\",!1),B=\"||\",v=me(\"||\",!1),D=function(m,Q){return Q?{...m,then:Q}:m},T=function(m,Q){return{type:m,chain:Q}},H=\"|&\",j=me(\"|&\",!1),$=\"|\",V=me(\"|\",!1),W=\"=\",_=me(\"=\",!1),A=function(m,Q){return{name:m,args:[Q]}},Ae=function(m){return{name:m,args:[]}},ge=\"(\",re=me(\"(\",!1),M=\")\",F=me(\")\",!1),ue=function(m,Q){return{type:\"subshell\",subshell:m,args:Q}},pe=\"{\",ke=me(\"{\",!1),Fe=\"}\",Ne=me(\"}\",!1),oe=function(m,Q){return{type:\"group\",group:m,args:Q}},le=function(m,Q){return{type:\"command\",args:Q,envs:m}},Be=function(m){return{type:\"envs\",envs:m}},fe=function(m){return m},ae=function(m){return m},qe=/^[0-9]/,ne=Je([[\"0\",\"9\"]],!1,!1),Y=function(m,Q,N){return{type:\"redirection\",subtype:Q,fd:m!==null?parseInt(m):null,args:[N]}},he=\">>\",ie=me(\">>\",!1),de=\">&\",_e=me(\">&\",!1),Pt=\">\",It=me(\">\",!1),Mr=\"<<<\",ii=me(\"<<<\",!1),gi=\"<&\",hr=me(\"<&\",!1),fi=\"<\",ni=me(\"<\",!1),Ks=function(m){return{type:\"argument\",segments:[].concat(...m)}},pr=function(m){return m},Ii=\"$'\",rs=me(\"$'\",!1),fa=\"'\",dA=me(\"'\",!1),cg=function(m){return[{type:\"text\",text:m}]},is='\"\"',CA=me('\"\"',!1),ha=function(){return{type:\"text\",text:\"\"}},wp='\"',mA=me('\"',!1),EA=function(m){return m},wr=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!0}},Tl=function(m){return{type:\"shell\",shell:m,quoted:!0}},ug=function(m){return{type:\"variable\",...m,quoted:!0}},yo=function(m){return{type:\"text\",text:m}},gg=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!1}},Bp=function(m){return{type:\"shell\",shell:m,quoted:!1}},bp=function(m){return{type:\"variable\",...m,quoted:!1}},vr=function(m){return{type:\"glob\",pattern:m}},se=/^[^']/,wo=Je([\"'\"],!0,!1),Fn=function(m){return m.join(\"\")},fg=/^[^$\"]/,bt=Je([\"$\",'\"'],!0,!1),Ll=`\\\\\n`,Nn=me(`\\\\\n`,!1),ns=function(){return\"\"},ss=\"\\\\\",gt=me(\"\\\\\",!1),Bo=/^[\\\\$\"`]/,At=Je([\"\\\\\",\"$\",'\"',\"`\"],!1,!1),ln=function(m){return m},S=\"\\\\a\",Lt=me(\"\\\\a\",!1),hg=function(){return\"a\"},Ml=\"\\\\b\",Qp=me(\"\\\\b\",!1),Sp=function(){return\"\\b\"},vp=/^[Ee]/,xp=Je([\"E\",\"e\"],!1,!1),Pp=function(){return\"\\x1B\"},G=\"\\\\f\",yt=me(\"\\\\f\",!1),IA=function(){return\"\\f\"},zi=\"\\\\n\",Ol=me(\"\\\\n\",!1),Xe=function(){return`\n`},pa=\"\\\\r\",pg=me(\"\\\\r\",!1),ME=function(){return\"\\r\"},Dp=\"\\\\t\",OE=me(\"\\\\t\",!1),ar=function(){return\"\t\"},Tn=\"\\\\v\",Kl=me(\"\\\\v\",!1),kp=function(){return\"\\v\"},Us=/^[\\\\'\"?]/,da=Je([\"\\\\\",\"'\",'\"',\"?\"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},Le=\"\\\\x\",dg=me(\"\\\\x\",!1),Ul=\"\\\\u\",Hs=me(\"\\\\u\",!1),Hl=\"\\\\U\",yA=me(\"\\\\U\",!1),Cg=function(m){return String.fromCodePoint(parseInt(m,16))},mg=/^[0-7]/,Ca=Je([[\"0\",\"7\"]],!1,!1),ma=/^[0-9a-fA-f]/,rt=Je([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"f\"]],!1,!1),bo=nt(),wA=\"-\",Gl=me(\"-\",!1),Gs=\"+\",Yl=me(\"+\",!1),KE=\".\",Rp=me(\".\",!1),Eg=function(m,Q,N){return{type:\"number\",value:(m===\"-\"?-1:1)*parseFloat(Q.join(\"\")+\".\"+N.join(\"\"))}},Fp=function(m,Q){return{type:\"number\",value:(m===\"-\"?-1:1)*parseInt(Q.join(\"\"))}},UE=function(m){return{type:\"variable\",...m}},jl=function(m){return{type:\"variable\",name:m}},HE=function(m){return m},Ig=\"*\",BA=me(\"*\",!1),Rr=\"/\",GE=me(\"/\",!1),Ys=function(m,Q,N){return{type:Q===\"*\"?\"multiplication\":\"division\",right:N}},js=function(m,Q){return Q.reduce((N,U)=>({left:N,...U}),m)},yg=function(m,Q,N){return{type:Q===\"+\"?\"addition\":\"subtraction\",right:N}},bA=\"$((\",R=me(\"$((\",!1),q=\"))\",Ce=me(\"))\",!1),Ke=function(m){return m},Re=\"$(\",ze=me(\"$(\",!1),dt=function(m){return m},Ft=\"${\",Ln=me(\"${\",!1),JQ=\":-\",k1=me(\":-\",!1),R1=function(m,Q){return{name:m,defaultValue:Q}},WQ=\":-}\",F1=me(\":-}\",!1),N1=function(m){return{name:m,defaultValue:[]}},zQ=\":+\",T1=me(\":+\",!1),L1=function(m,Q){return{name:m,alternativeValue:Q}},VQ=\":+}\",M1=me(\":+}\",!1),O1=function(m){return{name:m,alternativeValue:[]}},XQ=function(m){return{name:m}},K1=\"$\",U1=me(\"$\",!1),H1=function(m){return e.isGlobPattern(m)},G1=function(m){return m},ZQ=/^[a-zA-Z0-9_]/,_Q=Je([[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\"],!1,!1),$Q=function(){return L()},eS=/^[$@*?#a-zA-Z0-9_\\-]/,tS=Je([\"$\",\"@\",\"*\",\"?\",\"#\",[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\",\"-\"],!1,!1),Y1=/^[(){}<>$|&; \\t\"']/,wg=Je([\"(\",\")\",\"{\",\"}\",\"<\",\">\",\"$\",\"|\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),rS=/^[<>&; \\t\"']/,iS=Je([\"<\",\">\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),YE=/^[ \\t]/,jE=Je([\" \",\"\t\"],!1,!1),b=0,Oe=0,QA=[{line:1,column:1}],d=0,E=[],I=0,k;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function L(){return r.substring(Oe,b)}function Z(){return Et(Oe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Ri([lt(m)],r.substring(Oe,b),Q)}function we(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Mn(m,Q)}function me(m,Q){return{type:\"literal\",text:m,ignoreCase:Q}}function Je(m,Q,N){return{type:\"class\",parts:m,inverted:Q,ignoreCase:N}}function nt(){return{type:\"any\"}}function wt(){return{type:\"end\"}}function lt(m){return{type:\"other\",description:m}}function it(m){var Q=QA[m],N;if(Q)return Q;for(N=m-1;!QA[N];)N--;for(Q=QA[N],Q={line:Q.line,column:Q.column};N<m;)r.charCodeAt(N)===10?(Q.line++,Q.column=1):Q.column++,N++;return QA[m]=Q,Q}function Et(m,Q){var N=it(m),U=it(Q);return{start:{offset:m,line:N.line,column:N.column},end:{offset:Q,line:U.line,column:U.column}}}function be(m){b<d||(b>d&&(d=b,E=[]),E.push(m))}function Mn(m,Q){return new Zl(m,null,null,Q)}function Ri(m,Q,N){return new Zl(Zl.buildMessage(m,Q),m,Q,N)}function SA(){var m,Q;return m=b,Q=Or(),Q===t&&(Q=null),Q!==t&&(Oe=m,Q=s(Q)),m=Q,m}function Or(){var m,Q,N,U,ce;if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U!==t?(ce=os(),ce===t&&(ce=null),ce!==t?(Oe=m,Q=o(Q,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U===t&&(U=null),U!==t?(Oe=m,Q=a(Q,U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function os(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=Or(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=l(N),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Ea(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&be(f))),m}function Kr(){var m,Q,N;return m=b,Q=j1(),Q!==t?(N=fge(),N===t&&(N=null),N!==t?(Oe=m,Q=h(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function fge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=hge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=p(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function hge(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&be(y)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&be(v))),m}function j1(){var m,Q,N;return m=b,Q=Cge(),Q!==t?(N=pge(),N===t&&(N=null),N!==t?(Oe=m,Q=D(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function pge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=dge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=j1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=T(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function dge(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&be(V))),m}function qE(){var m,Q,N,U,ce,Se;if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t)if(U=W1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Oe=m,Q=A(Q,U),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Cge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===40?(N=ge,b++):(N=t,I===0&&be(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===41?(ht=M,b++):(ht=t,I===0&&be(F)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=ue(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===123?(N=pe,b++):(N=t,I===0&&be(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===125?(ht=Fe,b++):(ht=t,I===0&&be(Ne)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=oe(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){for(N=[],U=qE();U!==t;)N.push(U),U=qE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=J1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=J1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=le(N,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=qE(),U!==t)for(;U!==t;)N.push(U),U=qE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Be(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function q1(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=JE(),U!==t)for(;U!==t;)N.push(U),U=JE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=fe(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function J1(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t?(N=Np(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();Q!==t?(N=JE(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function Np(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(qe.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(ne)),N===t&&(N=null),N!==t?(U=mge(),U!==t?(ce=JE(),ce!==t?(Oe=m,Q=Y(N,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function mge(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&be(ie)),m===t&&(r.substr(b,2)===de?(m=de,b+=2):(m=t,I===0&&be(_e)),m===t&&(r.charCodeAt(b)===62?(m=Pt,b++):(m=t,I===0&&be(It)),m===t&&(r.substr(b,3)===Mr?(m=Mr,b+=3):(m=t,I===0&&be(ii)),m===t&&(r.substr(b,2)===gi?(m=gi,b+=2):(m=t,I===0&&be(hr)),m===t&&(r.charCodeAt(b)===60?(m=fi,b++):(m=t,I===0&&be(ni))))))),m}function JE(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(N=W1(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m}function W1(){var m,Q,N;if(m=b,Q=[],N=z1(),N!==t)for(;N!==t;)Q.push(N),N=z1();else Q=t;return Q!==t&&(Oe=m,Q=Ks(Q)),m=Q,m}function z1(){var m,Q;return m=b,Q=Ege(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=Ige(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=yge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=wge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q))),m}function Ege(){var m,Q,N,U;return m=b,r.substr(b,2)===Ii?(Q=Ii,b+=2):(Q=t,I===0&&be(rs)),Q!==t?(N=Qge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function Ige(){var m,Q,N,U;return m=b,r.charCodeAt(b)===39?(Q=fa,b++):(Q=t,I===0&&be(dA)),Q!==t?(N=Bge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function yge(){var m,Q,N,U;if(m=b,r.substr(b,2)===is?(Q=is,b+=2):(Q=t,I===0&&be(CA)),Q!==t&&(Oe=m,Q=ha()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=wp,b++):(Q=t,I===0&&be(mA)),Q!==t){for(N=[],U=V1();U!==t;)N.push(U),U=V1();N!==t?(r.charCodeAt(b)===34?(U=wp,b++):(U=t,I===0&&be(mA)),U!==t?(Oe=m,Q=EA(N),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function wge(){var m,Q,N;if(m=b,Q=[],N=X1(),N!==t)for(;N!==t;)Q.push(N),N=X1();else Q=t;return Q!==t&&(Oe=m,Q=EA(Q)),m=Q,m}function V1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=wr(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Tl(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=ug(Q)),m=Q,m===t&&(m=b,Q=bge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q))),m}function X1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=gg(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Bp(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=bp(Q)),m=Q,m===t&&(m=b,Q=xge(),Q!==t&&(Oe=m,Q=vr(Q)),m=Q,m===t&&(m=b,Q=vge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q)))),m}function Bge(){var m,Q,N;for(m=b,Q=[],se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));N!==t;)Q.push(N),se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function bge(){var m,Q,N;if(m=b,Q=[],N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt))),N!==t)for(;N!==t;)Q.push(N),N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt)));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function Z1(){var m,Q,N;return m=b,r.substr(b,2)===Ll?(Q=Ll,b+=2):(Q=t,I===0&&be(Nn)),Q!==t&&(Oe=m,Q=ns()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Bo.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(At)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t)),m}function Qge(){var m,Q,N;for(m=b,Q=[],N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));N!==t;)Q.push(N),N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function _1(){var m,Q,N;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&be(Lt)),Q!==t&&(Oe=m,Q=hg()),m=Q,m===t&&(m=b,r.substr(b,2)===Ml?(Q=Ml,b+=2):(Q=t,I===0&&be(Qp)),Q!==t&&(Oe=m,Q=Sp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(vp.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(xp)),N!==t?(Oe=m,Q=Pp(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&be(yt)),Q!==t&&(Oe=m,Q=IA()),m=Q,m===t&&(m=b,r.substr(b,2)===zi?(Q=zi,b+=2):(Q=t,I===0&&be(Ol)),Q!==t&&(Oe=m,Q=Xe()),m=Q,m===t&&(m=b,r.substr(b,2)===pa?(Q=pa,b+=2):(Q=t,I===0&&be(pg)),Q!==t&&(Oe=m,Q=ME()),m=Q,m===t&&(m=b,r.substr(b,2)===Dp?(Q=Dp,b+=2):(Q=t,I===0&&be(OE)),Q!==t&&(Oe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Tn?(Q=Tn,b+=2):(Q=t,I===0&&be(Kl)),Q!==t&&(Oe=m,Q=kp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Us.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(da)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=Sge()))))))))),m}function Sge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as,AS;return m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(N=nS(),N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Le?(Q=Le,b+=2):(Q=t,I===0&&be(dg)),Q!==t?(N=b,U=b,ce=nS(),ce!==t?(Se=On(),Se!==t?(ce=[ce,Se],U=ce):(b=U,U=t)):(b=U,U=t),U===t&&(U=nS()),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ul?(Q=Ul,b+=2):(Q=t,I===0&&be(Hs)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Hl?(Q=Hl,b+=2):(Q=t,I===0&&be(yA)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(qr=On(),qr!==t?(hi=On(),hi!==t?(as=On(),as!==t?(AS=On(),AS!==t?(ce=[ce,Se,ht,Bt,qr,hi,as,AS],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=Cg(N),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function nS(){var m;return mg.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(Ca)),m}function On(){var m;return ma.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(rt)),m}function vge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t)),N!==t)for(;N!==t;)Q.push(N),N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function sS(){var m,Q,N,U,ce,Se;if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;if(N!==t)if(r.charCodeAt(b)===46?(U=KE,b++):(U=t,I===0&&be(Rp)),U!==t){if(ce=[],qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne));else ce=t;ce!==t?(Oe=m,Q=Eg(Q,N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;N!==t?(Oe=m,Q=Fp(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=UE(Q)),m=Q,m===t&&(m=b,Q=ql(),Q!==t&&(Oe=m,Q=jl(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&be(re)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(b)===41?(Se=M,b++):(Se=t,I===0&&be(F)),Se!==t?(Oe=m,Q=HE(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function oS(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=sS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function $1(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=oS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function eK(){var m,Q,N,U,ce,Se;if(m=b,r.substr(b,3)===bA?(Q=bA,b+=3):(Q=t,I===0&&be(R)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(b,2)===q?(Se=q,b+=2):(Se=t,I===0&&be(Ce)),Se!==t?(Oe=m,Q=Ke(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function tK(){var m,Q,N,U;return m=b,r.substr(b,2)===Re?(Q=Re,b+=2):(Q=t,I===0&&be(ze)),Q!==t?(N=Or(),N!==t?(r.charCodeAt(b)===41?(U=M,b++):(U=t,I===0&&be(F)),U!==t?(Oe=m,Q=dt(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function aS(){var m,Q,N,U,ce,Se;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===JQ?(U=JQ,b+=2):(U=t,I===0&&be(k1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=R1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===WQ?(U=WQ,b+=3):(U=t,I===0&&be(F1)),U!==t?(Oe=m,Q=N1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===zQ?(U=zQ,b+=2):(U=t,I===0&&be(T1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=L1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===VQ?(U=VQ,b+=3):(U=t,I===0&&be(M1)),U!==t?(Oe=m,Q=O1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.charCodeAt(b)===125?(U=Fe,b++):(U=t,I===0&&be(Ne)),U!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=K1,b++):(Q=t,I===0&&be(U1)),Q!==t?(N=ql(),N!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function xge(){var m,Q,N;return m=b,Q=Pge(),Q!==t?(Oe=b,N=H1(Q),N?N=void 0:N=t,N!==t?(Oe=m,Q=G1(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function Pge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N!==t)for(;N!==t;)Q.push(N),N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t);else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function rK(){var m,Q,N;if(m=b,Q=[],ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q)),N!==t)for(;N!==t;)Q.push(N),ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function ql(){var m,Q,N;if(m=b,Q=[],eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS)),N!==t)for(;N!==t;)Q.push(N),eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function iK(){var m;return Y1.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(wg)),m}function nK(){var m;return rS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(iS)),m}function He(){var m,Q;if(m=[],YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE)),Q!==t)for(;Q!==t;)m.push(Q),YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b<r.length&&be(wt()),Ri(E,d<r.length?r.charAt(d):null,d<r.length?Et(d,d+1):Et(d,d))}gU.exports={SyntaxError:Zl,parse:Pfe}});var dU=w((wZe,pU)=>{\"use strict\";function Dfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function $l(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,$l)}Dfe($l,Error);$l.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function kfe(r,e){e=e!==void 0?e:{};var t={},i={resolution:le},n=le,s=\"/\",o=ge(\"/\",!1),a=function(ne,Y){return{from:ne,descriptor:Y}},l=function(ne){return{descriptor:ne}},c=\"@\",u=ge(\"@\",!1),g=function(ne,Y){return{fullName:ne,description:Y}},f=function(ne){return{fullName:ne}},h=function(){return W()},p=/^[^\\/@]/,C=re([\"/\",\"@\"],!0,!1),y=/^[^\\/]/,B=re([\"/\"],!0,!1),v=0,D=0,T=[{line:1,column:1}],H=0,j=[],$=0,V;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function W(){return r.substring(D,v)}function _(){return ke(D,v)}function A(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),oe([ue(ne)],r.substring(D,v),Y)}function Ae(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),Ne(ne,Y)}function ge(ne,Y){return{type:\"literal\",text:ne,ignoreCase:Y}}function re(ne,Y,he){return{type:\"class\",parts:ne,inverted:Y,ignoreCase:he}}function M(){return{type:\"any\"}}function F(){return{type:\"end\"}}function ue(ne){return{type:\"other\",description:ne}}function pe(ne){var Y=T[ne],he;if(Y)return Y;for(he=ne-1;!T[he];)he--;for(Y=T[he],Y={line:Y.line,column:Y.column};he<ne;)r.charCodeAt(he)===10?(Y.line++,Y.column=1):Y.column++,he++;return T[ne]=Y,Y}function ke(ne,Y){var he=pe(ne),ie=pe(Y);return{start:{offset:ne,line:he.line,column:he.column},end:{offset:Y,line:ie.line,column:ie.column}}}function Fe(ne){v<H||(v>H&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new $l(ne,null,null,Y)}function oe(ne,Y,he){return new $l($l.buildMessage(ne,Y),ne,Y,he)}function le(){var ne,Y,he,ie;return ne=v,Y=Be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Fe(o)),he!==t?(ie=Be(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Be(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function Be(){var ne,Y,he,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Fe(u)),he!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,he,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(he=ae(),he!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function ae(){var ne,Y,he;if(ne=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,he;if(ne=v,Y=[],y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B)),he!==t)for(;he!==t;)Y.push(he),y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v<r.length&&Fe(F()),oe(j,H<r.length?r.charAt(H):null,H<r.length?ke(H,H+1):ke(H,H))}pU.exports={SyntaxError:$l,parse:kfe}});var tc=w((bZe,ec)=>{\"use strict\";function mU(r){return typeof r>\"u\"||r===null}function Rfe(r){return typeof r==\"object\"&&r!==null}function Ffe(r){return Array.isArray(r)?r:mU(r)?[]:[r]}function Nfe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t<i;t+=1)n=s[t],r[n]=e[n];return r}function Tfe(r,e){var t=\"\",i;for(i=0;i<e;i+=1)t+=r;return t}function Lfe(r){return r===0&&Number.NEGATIVE_INFINITY===1/r}ec.exports.isNothing=mU;ec.exports.isObject=Rfe;ec.exports.toArray=Ffe;ec.exports.repeat=Tfe;ec.exports.isNegativeZero=Lfe;ec.exports.extend=Nfe});var Ng=w((QZe,EU)=>{\"use strict\";function Vp(r,e){Error.call(this),this.name=\"YAMLException\",this.reason=r,this.mark=e,this.message=(this.reason||\"(unknown reason)\")+(this.mark?\" \"+this.mark.toString():\"\"),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||\"\"}Vp.prototype=Object.create(Error.prototype);Vp.prototype.constructor=Vp;Vp.prototype.toString=function(e){var t=this.name+\": \";return t+=this.reason||\"(unknown reason)\",!e&&this.mark&&(t+=\" \"+this.mark.toString()),t};EU.exports=Vp});var wU=w((SZe,yU)=>{\"use strict\";var IU=tc();function HS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}HS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i=\"\",n=this.position;n>0&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=\" ... \",n+=5;break}for(s=\"\",o=this.position;o<this.buffer.length&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(o))===-1;)if(o+=1,o-this.position>t/2-1){s=\" ... \",o-=5;break}return a=this.buffer.slice(n,o),IU.repeat(\" \",e)+i+a+s+`\n`+IU.repeat(\" \",e+this.position-n+i.length)+\"^\"};HS.prototype.toString=function(e){var t,i=\"\";return this.name&&(i+='in \"'+this.name+'\" '),i+=\"at line \"+(this.line+1)+\", column \"+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`:\n`+t)),i};yU.exports=HS});var si=w((vZe,bU)=>{\"use strict\";var BU=Ng(),Mfe=[\"kind\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"defaultStyle\",\"styleAliases\"],Ofe=[\"scalar\",\"sequence\",\"mapping\"];function Kfe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Ufe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(Mfe.indexOf(t)===-1)throw new BU('Unknown option \"'+t+'\" is met in definition of \"'+r+'\" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Kfe(e.styleAliases||null),Ofe.indexOf(this.kind)===-1)throw new BU('Unknown kind \"'+this.kind+'\" is specified for \"'+r+'\" YAML type.')}bU.exports=Ufe});var rc=w((xZe,SU)=>{\"use strict\";var QU=tc(),dI=Ng(),Hfe=si();function GS(r,e,t){var i=[];return r.include.forEach(function(n){t=GS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Gfe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return r}function Tg(r){this.include=r.include||[],this.implicit=r.implicit||[],this.explicit=r.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&e.loadKind!==\"scalar\")throw new dI(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\")}),this.compiledImplicit=GS(this,\"implicit\",[]),this.compiledExplicit=GS(this,\"explicit\",[]),this.compiledTypeMap=Gfe(this.compiledImplicit,this.compiledExplicit)}Tg.DEFAULT=null;Tg.create=function(){var e,t;switch(arguments.length){case 1:e=Tg.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new dI(\"Wrong number of arguments for Schema.create function\")}if(e=QU.toArray(e),t=QU.toArray(t),!e.every(function(i){return i instanceof Tg}))throw new dI(\"Specified list of super schemas (or a single Schema object) contains a non-Schema object.\");if(!t.every(function(i){return i instanceof Hfe}))throw new dI(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");return new Tg({include:e,explicit:t})};SU.exports=Tg});var xU=w((PZe,vU)=>{\"use strict\";var Yfe=si();vU.exports=new Yfe(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(r){return r!==null?r:\"\"}})});var DU=w((DZe,PU)=>{\"use strict\";var jfe=si();PU.exports=new jfe(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(r){return r!==null?r:[]}})});var RU=w((kZe,kU)=>{\"use strict\";var qfe=si();kU.exports=new qfe(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(r){return r!==null?r:{}}})});var CI=w((RZe,FU)=>{\"use strict\";var Jfe=rc();FU.exports=new Jfe({explicit:[xU(),DU(),RU()]})});var TU=w((FZe,NU)=>{\"use strict\";var Wfe=si();function zfe(r){if(r===null)return!0;var e=r.length;return e===1&&r===\"~\"||e===4&&(r===\"null\"||r===\"Null\"||r===\"NULL\")}function Vfe(){return null}function Xfe(r){return r===null}NU.exports=new Wfe(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:zfe,construct:Vfe,predicate:Xfe,represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"}},defaultStyle:\"lowercase\"})});var MU=w((NZe,LU)=>{\"use strict\";var Zfe=si();function _fe(r){if(r===null)return!1;var e=r.length;return e===4&&(r===\"true\"||r===\"True\"||r===\"TRUE\")||e===5&&(r===\"false\"||r===\"False\"||r===\"FALSE\")}function $fe(r){return r===\"true\"||r===\"True\"||r===\"TRUE\"}function ehe(r){return Object.prototype.toString.call(r)===\"[object Boolean]\"}LU.exports=new Zfe(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:_fe,construct:$fe,predicate:ehe,represent:{lowercase:function(r){return r?\"true\":\"false\"},uppercase:function(r){return r?\"TRUE\":\"FALSE\"},camelcase:function(r){return r?\"True\":\"False\"}},defaultStyle:\"lowercase\"})});var KU=w((TZe,OU)=>{\"use strict\";var the=tc(),rhe=si();function ihe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function nhe(r){return 48<=r&&r<=55}function she(r){return 48<=r&&r<=57}function ohe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n===\"-\"||n===\"+\")&&(n=r[++t]),n===\"0\"){if(t+1===e)return!0;if(n=r[++t],n===\"b\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(n!==\"0\"&&n!==\"1\")return!1;i=!0}return i&&n!==\"_\"}if(n===\"x\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(!ihe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}for(;t<e;t++)if(n=r[t],n!==\"_\"){if(!nhe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}if(n===\"_\")return!1;for(;t<e;t++)if(n=r[t],n!==\"_\"){if(n===\":\")break;if(!she(r.charCodeAt(t)))return!1;i=!0}return!i||n===\"_\"?!1:n!==\":\"?!0:/^(:[0-5]?[0-9])+$/.test(r.slice(t))}function ahe(r){var e=r,t=1,i,n,s=[];return e.indexOf(\"_\")!==-1&&(e=e.replace(/_/g,\"\")),i=e[0],(i===\"-\"||i===\"+\")&&(i===\"-\"&&(t=-1),e=e.slice(1),i=e[0]),e===\"0\"?0:i===\"0\"?e[1]===\"b\"?t*parseInt(e.slice(2),2):e[1]===\"x\"?t*parseInt(e,16):t*parseInt(e,8):e.indexOf(\":\")!==-1?(e.split(\":\").forEach(function(o){s.unshift(parseInt(o,10))}),e=0,n=1,s.forEach(function(o){e+=o*n,n*=60}),t*e):t*parseInt(e,10)}function Ahe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&r%1===0&&!the.isNegativeZero(r)}OU.exports=new rhe(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:ohe,construct:ahe,predicate:Ahe,represent:{binary:function(r){return r>=0?\"0b\"+r.toString(2):\"-0b\"+r.toString(2).slice(1)},octal:function(r){return r>=0?\"0\"+r.toString(8):\"-0\"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?\"0x\"+r.toString(16).toUpperCase():\"-0x\"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}})});var GU=w((LZe,HU)=>{\"use strict\";var UU=tc(),lhe=si(),che=new RegExp(\"^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");function uhe(r){return!(r===null||!che.test(r)||r[r.length-1]===\"_\")}function ghe(r){var e,t,i,n;return e=r.replace(/_/g,\"\").toLowerCase(),t=e[0]===\"-\"?-1:1,n=[],\"+-\".indexOf(e[0])>=0&&(e=e.slice(1)),e===\".inf\"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===\".nan\"?NaN:e.indexOf(\":\")>=0?(e.split(\":\").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var fhe=/^[-+]?[0-9]+e/;function hhe(r,e){var t;if(isNaN(r))switch(e){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===r)switch(e){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(UU.isNegativeZero(r))return\"-0.0\";return t=r.toString(10),fhe.test(t)?t.replace(\"e\",\".e\"):t}function phe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&(r%1!==0||UU.isNegativeZero(r))}HU.exports=new lhe(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:uhe,construct:ghe,predicate:phe,represent:hhe,defaultStyle:\"lowercase\"})});var YS=w((MZe,YU)=>{\"use strict\";var dhe=rc();YU.exports=new dhe({include:[CI()],implicit:[TU(),MU(),KU(),GU()]})});var jS=w((OZe,jU)=>{\"use strict\";var Che=rc();jU.exports=new Che({include:[YS()]})});var zU=w((KZe,WU)=>{\"use strict\";var mhe=si(),qU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),JU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");function Ehe(r){return r===null?!1:qU.exec(r)!==null||JU.exec(r)!==null}function Ihe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=qU.exec(r),e===null&&(e=JU.exec(r)),e===null)throw new Error(\"Date resolve error\");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+=\"0\";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]===\"-\"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function yhe(r){return r.toISOString()}WU.exports=new mhe(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:Ehe,construct:Ihe,instanceOf:Date,represent:yhe})});var XU=w((UZe,VU)=>{\"use strict\";var whe=si();function Bhe(r){return r===\"<<\"||r===null}VU.exports=new whe(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:Bhe})});var $U=w((HZe,_U)=>{\"use strict\";var ic;try{ZU=J,ic=ZU(\"buffer\").Buffer}catch{}var ZU,bhe=si(),qS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\\r`;function Qhe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=qS;for(t=0;t<n;t++)if(e=s.indexOf(r.charAt(t)),!(e>64)){if(e<0)return!1;i+=6}return i%8===0}function She(r){var e,t,i=r.replace(/[\\r\\n=]/g,\"\"),n=i.length,s=qS,o=0,a=[];for(e=0;e<n;e++)e%4===0&&e&&(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),ic?ic.from?ic.from(a):new ic(a):a}function vhe(r){var e=\"\",t=0,i,n,s=r.length,o=qS;for(i=0;i<s;i++)i%3===0&&i&&(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function xhe(r){return ic&&ic.isBuffer(r)}_U.exports=new bhe(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:Qhe,construct:She,predicate:xhe,represent:vhe})});var t2=w((YZe,e2)=>{\"use strict\";var Phe=si(),Dhe=Object.prototype.hasOwnProperty,khe=Object.prototype.toString;function Rhe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t<i;t+=1){if(n=a[t],o=!1,khe.call(n)!==\"[object Object]\")return!1;for(s in n)if(Dhe.call(n,s))if(!o)o=!0;else return!1;if(!o)return!1;if(e.indexOf(s)===-1)e.push(s);else return!1}return!0}function Fhe(r){return r!==null?r:[]}e2.exports=new Phe(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:Rhe,construct:Fhe})});var i2=w((jZe,r2)=>{\"use strict\";var Nhe=si(),The=Object.prototype.toString;function Lhe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1){if(i=o[e],The.call(i)!==\"[object Object]\"||(n=Object.keys(i),n.length!==1))return!1;s[e]=[n[0],i[n[0]]]}return!0}function Mhe(r){if(r===null)return[];var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1)i=o[e],n=Object.keys(i),s[e]=[n[0],i[n[0]]];return s}r2.exports=new Nhe(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:Lhe,construct:Mhe})});var s2=w((qZe,n2)=>{\"use strict\";var Ohe=si(),Khe=Object.prototype.hasOwnProperty;function Uhe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Khe.call(t,e)&&t[e]!==null)return!1;return!0}function Hhe(r){return r!==null?r:{}}n2.exports=new Ohe(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:Uhe,construct:Hhe})});var Lg=w((JZe,o2)=>{\"use strict\";var Ghe=rc();o2.exports=new Ghe({include:[jS()],implicit:[zU(),XU()],explicit:[$U(),t2(),i2(),s2()]})});var A2=w((WZe,a2)=>{\"use strict\";var Yhe=si();function jhe(){return!0}function qhe(){}function Jhe(){return\"\"}function Whe(r){return typeof r>\"u\"}a2.exports=new Yhe(\"tag:yaml.org,2002:js/undefined\",{kind:\"scalar\",resolve:jhe,construct:qhe,predicate:Whe,represent:Jhe})});var c2=w((zZe,l2)=>{\"use strict\";var zhe=si();function Vhe(r){if(r===null||r.length===0)return!1;var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return!(e[0]===\"/\"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!==\"/\"))}function Xhe(r){var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return e[0]===\"/\"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Zhe(r){var e=\"/\"+r.source+\"/\";return r.global&&(e+=\"g\"),r.multiline&&(e+=\"m\"),r.ignoreCase&&(e+=\"i\"),e}function _he(r){return Object.prototype.toString.call(r)===\"[object RegExp]\"}l2.exports=new zhe(\"tag:yaml.org,2002:js/regexp\",{kind:\"scalar\",resolve:Vhe,construct:Xhe,predicate:_he,represent:Zhe})});var f2=w((VZe,g2)=>{\"use strict\";var mI;try{u2=J,mI=u2(\"esprima\")}catch{typeof window<\"u\"&&(mI=window.esprima)}var u2,$he=si();function epe(r){if(r===null)return!1;try{var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0});return!(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")}catch{return!1}}function tpe(r){var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0}),i=[],n;if(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")throw new Error(\"Failed to resolve function\");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type===\"BlockStatement\"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,\"return \"+e.slice(n[0],n[1]))}function rpe(r){return r.toString()}function ipe(r){return Object.prototype.toString.call(r)===\"[object Function]\"}g2.exports=new $he(\"tag:yaml.org,2002:js/function\",{kind:\"scalar\",resolve:epe,construct:tpe,predicate:ipe,represent:rpe})});var Xp=w((ZZe,p2)=>{\"use strict\";var h2=rc();p2.exports=h2.DEFAULT=new h2({include:[Lg()],explicit:[A2(),c2(),f2()]})});var N2=w((_Ze,Zp)=>{\"use strict\";var Ba=tc(),w2=Ng(),npe=wU(),B2=Lg(),spe=Xp(),kA=Object.prototype.hasOwnProperty,EI=1,b2=2,Q2=3,II=4,JS=1,ope=2,d2=3,ape=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,Ape=/[\\x85\\u2028\\u2029]/,lpe=/[,\\[\\]\\{\\}]/,S2=/^(?:!|!!|![a-z\\-]+!)$/i,v2=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function C2(r){return Object.prototype.toString.call(r)}function xo(r){return r===10||r===13}function sc(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function Mg(r){return r===44||r===91||r===93||r===123||r===125}function cpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function upe(r){return r===120?2:r===117?4:r===85?8:0}function gpe(r){return 48<=r&&r<=57?r-48:-1}function m2(r){return r===48?\"\\0\":r===97?\"\\x07\":r===98?\"\\b\":r===116||r===9?\"\t\":r===110?`\n`:r===118?\"\\v\":r===102?\"\\f\":r===114?\"\\r\":r===101?\"\\x1B\":r===32?\" \":r===34?'\"':r===47?\"/\":r===92?\"\\\\\":r===78?\"\\x85\":r===95?\"\\xA0\":r===76?\"\\u2028\":r===80?\"\\u2029\":\"\"}function fpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var x2=new Array(256),P2=new Array(256);for(nc=0;nc<256;nc++)x2[nc]=m2(nc)?1:0,P2[nc]=m2(nc);var nc;function hpe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||spe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function D2(r,e){return new w2(e,new npe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw D2(r,e)}function yI(r,e){r.onWarning&&r.onWarning.call(null,D2(r,e))}var E2={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,\"duplication of %YAML directive\"),i.length!==1&&ft(e,\"YAML directive accepts exactly one argument\"),n=/^([0-9]+)\\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,\"ill-formed argument of the YAML directive\"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,\"unacceptable YAML version of the document\"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&yI(e,\"unsupported YAML version of the document\")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,\"TAG directive accepts exactly two arguments\"),n=i[0],s=i[1],S2.test(n)||ft(e,\"ill-formed tag handle (first argument) of the TAG directive\"),kA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for \"'+n+'\" tag handle'),v2.test(s)||ft(e,\"ill-formed tag prefix (second argument) of the TAG directive\"),e.tagMap[n]=s}};function DA(r,e,t,i){var n,s,o,a;if(e<t){if(a=r.input.slice(e,t),i)for(n=0,s=a.length;n<s;n+=1)o=a.charCodeAt(n),o===9||32<=o&&o<=1114111||ft(r,\"expected valid JSON character\");else ape.test(a)&&ft(r,\"the stream contains non-printable characters\");r.result+=a}}function I2(r,e,t,i){var n,s,o,a;for(Ba.isObject(t)||ft(r,\"cannot merge mappings; the provided source object is unacceptable\"),n=Object.keys(t),o=0,a=n.length;o<a;o+=1)s=n[o],kA.call(e,s)||(e[s]=t[s],i[s]=!0)}function Og(r,e,t,i,n,s,o,a){var l,c;if(Array.isArray(n))for(n=Array.prototype.slice.call(n),l=0,c=n.length;l<c;l+=1)Array.isArray(n[l])&&ft(r,\"nested arrays are not supported inside keys\"),typeof n==\"object\"&&C2(n[l])===\"[object Object]\"&&(n[l]=\"[object Object]\");if(typeof n==\"object\"&&C2(n)===\"[object Object]\"&&(n=\"[object Object]\"),n=String(n),e===null&&(e={}),i===\"tag:yaml.org,2002:merge\")if(Array.isArray(s))for(l=0,c=s.length;l<c;l+=1)I2(r,e,s[l],t);else I2(r,e,s,t);else!r.json&&!kA.call(t,n)&&kA.call(e,n)&&(r.line=o||r.line,r.position=a||r.position,ft(r,\"duplicated mapping key\")),e[n]=s,delete t[n];return e}function WS(r){var e;e=r.input.charCodeAt(r.position),e===10?r.position++:e===13?(r.position++,r.input.charCodeAt(r.position)===10&&r.position++):ft(r,\"a line break is expected\"),r.line+=1,r.lineStart=r.position}function zr(r,e,t){for(var i=0,n=r.input.charCodeAt(r.position);n!==0;){for(;sc(n);)n=r.input.charCodeAt(++r.position);if(e&&n===35)do n=r.input.charCodeAt(++r.position);while(n!==10&&n!==13&&n!==0);if(xo(n))for(WS(r),n=r.input.charCodeAt(r.position),i++,r.lineIndent=0;n===32;)r.lineIndent++,n=r.input.charCodeAt(++r.position);else break}return t!==-1&&i!==0&&r.lineIndent<t&&yI(r,\"deficient indentation\"),i}function wI(r){var e=r.position,t;return t=r.input.charCodeAt(e),!!((t===45||t===46)&&t===r.input.charCodeAt(e+1)&&t===r.input.charCodeAt(e+2)&&(e+=3,t=r.input.charCodeAt(e),t===0||fn(t)))}function zS(r,e){e===1?r.result+=\" \":e>1&&(r.result+=Ba.repeat(`\n`,e-1))}function ppe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||Mg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n)))return!1;for(r.kind=\"scalar\",r.result=\"\",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&wI(r)||t&&Mg(h))break;if(xo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(DA(r,s,o,!1),zS(r,r.line-l),s=o=r.position,a=!1),sc(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return DA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function dpe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(DA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else xo(t)?(DA(r,i,n,!0),zS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a single quoted scalar\"):(r.position++,n=r.position);ft(r,\"unexpected end of the stream within a single quoted scalar\")}function Cpe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return DA(r,t,r.position,!0),r.position++,!0;if(a===92){if(DA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),xo(a))zr(r,!1,e);else if(a<256&&x2[a])r.result+=P2[a],r.position++;else if((o=upe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=cpe(a))>=0?s=(s<<4)+o:ft(r,\"expected hexadecimal character\");r.result+=fpe(s),r.position++}else ft(r,\"unknown escape sequence\");t=i=r.position}else xo(a)?(DA(r,t,i,!0),zS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a double quoted scalar\"):(r.position++,i=r.position)}ft(r,\"unexpected end of the stream within a double quoted scalar\")}function mpe(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?\"mapping\":\"sequence\",r.result=s,!0;t||ft(r,\"missed comma between flow collection entries\"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Kg(r,e,EI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Kg(r,e,EI,!1,!0),C=r.result),g?Og(r,s,f,p,h,C):c?s.push(Og(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,\"unexpected end of the stream within a flow collection\")}function Epe(r,e){var t,i,n=JS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind=\"scalar\",r.result=\"\";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)JS===n?n=g===43?d2:ope:ft(r,\"repeat of a chomping mode identifier\");else if((u=gpe(g))>=0)u===0?ft(r,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):o?ft(r,\"repeat of an indentation width identifier\"):(a=e+u-1,o=!0);else break;if(sc(g)){do g=r.input.charCodeAt(++r.position);while(sc(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!xo(g)&&g!==0)}for(;g!==0;){for(WS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndent<a)&&g===32;)r.lineIndent++,g=r.input.charCodeAt(++r.position);if(!o&&r.lineIndent>a&&(a=r.lineIndent),xo(g)){l++;continue}if(r.lineIndent<a){n===d2?r.result+=Ba.repeat(`\n`,s?1+l:l):n===JS&&s&&(r.result+=`\n`);break}for(i?sc(g)?(c=!0,r.result+=Ba.repeat(`\n`,s?1+l:l)):c?(c=!1,r.result+=Ba.repeat(`\n`,l+1)):l===0?s&&(r.result+=\" \"):r.result+=Ba.repeat(`\n`,l):r.result+=Ba.repeat(`\n`,s?1+l:l),s=!0,o=!0,l=0,t=r.position;!xo(g)&&g!==0;)g=r.input.charCodeAt(++r.position);DA(r,t,r.position,!1)}return!0}function y2(r,e){var t,i=r.tag,n=r.anchor,s=[],o,a=!1,l;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),l=r.input.charCodeAt(r.position);l!==0&&!(l!==45||(o=r.input.charCodeAt(r.position+1),!fn(o)));){if(a=!0,r.position++,zr(r,!0,-1)&&r.lineIndent<=e){s.push(null),l=r.input.charCodeAt(r.position);continue}if(t=r.line,Kg(r,e,Q2,!1,!0),s.push(r.result),zr(r,!0,-1),l=r.input.charCodeAt(r.position),(r.line===t||r.lineIndent>e)&&l!==0)ft(r,\"bad indentation of a sequence entry\");else if(r.lineIndent<e)break}return a?(r.tag=i,r.anchor=n,r.kind=\"sequence\",r.result=s,!0):!1}function Ipe(r,e,t){var i,n,s,o,a=r.tag,l=r.anchor,c={},u={},g=null,f=null,h=null,p=!1,C=!1,y;for(r.anchor!==null&&(r.anchorMap[r.anchor]=c),y=r.input.charCodeAt(r.position);y!==0;){if(i=r.input.charCodeAt(r.position+1),s=r.line,o=r.position,(y===63||y===58)&&fn(i))y===63?(p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!0,n=!0):p?(p=!1,n=!0):ft(r,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),r.position+=1,y=i;else if(Kg(r,t,b2,!1,!0))if(r.line===s){for(y=r.input.charCodeAt(r.position);sc(y);)y=r.input.charCodeAt(++r.position);if(y===58)y=r.input.charCodeAt(++r.position),fn(y)||ft(r,\"a whitespace character is expected after the key-value separator within a block mapping\"),p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!1,n=!1,g=r.tag,f=r.result;else if(C)ft(r,\"can not read an implicit mapping pair; a colon is missed\");else return r.tag=a,r.anchor=l,!0}else if(C)ft(r,\"can not read a block mapping entry; a multiline key may not be an implicit key\");else return r.tag=a,r.anchor=l,!0;else break;if((r.line===s||r.lineIndent>e)&&(Kg(r,e,II,!0,n)&&(p?f=r.result:h=r.result),p||(Og(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,\"bad indentation of a mapping entry\");else if(r.lineIndent<e)break}return p&&Og(r,c,u,g,f,null),C&&(r.tag=a,r.anchor=l,r.kind=\"mapping\",r.result=c),C}function ype(r){var e,t=!1,i=!1,n,s,o;if(o=r.input.charCodeAt(r.position),o!==33)return!1;if(r.tag!==null&&ft(r,\"duplication of a tag property\"),o=r.input.charCodeAt(++r.position),o===60?(t=!0,o=r.input.charCodeAt(++r.position)):o===33?(i=!0,n=\"!!\",o=r.input.charCodeAt(++r.position)):n=\"!\",e=r.position,t){do o=r.input.charCodeAt(++r.position);while(o!==0&&o!==62);r.position<r.length?(s=r.input.slice(e,r.position),o=r.input.charCodeAt(++r.position)):ft(r,\"unexpected end of the stream within a verbatim tag\")}else{for(;o!==0&&!fn(o);)o===33&&(i?ft(r,\"tag suffix cannot contain exclamation marks\"):(n=r.input.slice(e-1,r.position+1),S2.test(n)||ft(r,\"named tag handle cannot contain such characters\"),i=!0,e=r.position+1)),o=r.input.charCodeAt(++r.position);s=r.input.slice(e,r.position),lpe.test(s)&&ft(r,\"tag suffix cannot contain flow indicator characters\")}return s&&!v2.test(s)&&ft(r,\"tag name cannot contain such characters: \"+s),t?r.tag=s:kA.call(r.tagMap,n)?r.tag=r.tagMap[n]+s:n===\"!\"?r.tag=\"!\"+s:n===\"!!\"?r.tag=\"tag:yaml.org,2002:\"+s:ft(r,'undeclared tag handle \"'+n+'\"'),!0}function wpe(r){var e,t;if(t=r.input.charCodeAt(r.position),t!==38)return!1;for(r.anchor!==null&&ft(r,\"duplication of an anchor property\"),t=r.input.charCodeAt(++r.position),e=r.position;t!==0&&!fn(t)&&!Mg(t);)t=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an anchor node must contain at least one character\"),r.anchor=r.input.slice(e,r.position),!0}function Bpe(r){var e,t,i;if(i=r.input.charCodeAt(r.position),i!==42)return!1;for(i=r.input.charCodeAt(++r.position),e=r.position;i!==0&&!fn(i)&&!Mg(i);)i=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an alias node must contain at least one character\"),t=r.input.slice(e,r.position),kA.call(r.anchorMap,t)||ft(r,'unidentified alias \"'+t+'\"'),r.result=r.anchorMap[t],zr(r,!0,-1),!0}function Kg(r,e,t,i,n){var s,o,a,l=1,c=!1,u=!1,g,f,h,p,C;if(r.listener!==null&&r.listener(\"open\",r),r.tag=null,r.anchor=null,r.kind=null,r.result=null,s=o=a=II===t||Q2===t,i&&zr(r,!0,-1)&&(c=!0,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)),l===1)for(;ype(r)||wpe(r);)zr(r,!0,-1)?(c=!0,a=s,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)):a=!1;if(a&&(a=c||n),(l===1||II===t)&&(EI===t||b2===t?p=e:p=e+1,C=r.position-r.lineStart,l===1?a&&(y2(r,C)||Ipe(r,C,p))||mpe(r,p)?u=!0:(o&&Epe(r,p)||dpe(r,p)||Cpe(r,p)?u=!0:Bpe(r)?(u=!0,(r.tag!==null||r.anchor!==null)&&ft(r,\"alias node should not have any properties\")):ppe(r,p,EI===t)&&(u=!0,r.tag===null&&(r.tag=\"?\")),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):l===0&&(u=a&&y2(r,C))),r.tag!==null&&r.tag!==\"!\")if(r.tag===\"?\"){for(r.result!==null&&r.kind!==\"scalar\"&&ft(r,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+r.kind+'\"'),g=0,f=r.implicitTypes.length;g<f;g+=1)if(h=r.implicitTypes[g],h.resolve(r.result)){r.result=h.construct(r.result),r.tag=h.tag,r.anchor!==null&&(r.anchorMap[r.anchor]=r.result);break}}else kA.call(r.typeMap[r.kind||\"fallback\"],r.tag)?(h=r.typeMap[r.kind||\"fallback\"][r.tag],r.result!==null&&h.kind!==r.kind&&ft(r,\"unacceptable node kind for !<\"+r.tag+'> tag; it should be \"'+h.kind+'\", not \"'+r.kind+'\"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,\"cannot resolve a node with !<\"+r.tag+\"> explicit tag\")):ft(r,\"unknown tag !<\"+r.tag+\">\");return r.listener!==null&&r.listener(\"close\",r),r.tag!==null||r.anchor!==null||u}function bpe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,\"directive name must not be less than one character in length\");o!==0;){for(;sc(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!xo(o));break}if(xo(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&WS(r),kA.call(E2,i)?E2[i](r,i,n):yI(r,'unknown document directive \"'+i+'\"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,\"directives end mark is expected\"),Kg(r,r.lineIndent-1,II,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&Ape.test(r.input.slice(e,r.position))&&yI(r,\"non-ASCII line breaks are interpreted as content\"),r.documents.push(r.result),r.position===r.lineStart&&wI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position<r.length-1)ft(r,\"end of the stream or a document separator is expected\");else return}function k2(r,e){r=String(r),e=e||{},r.length!==0&&(r.charCodeAt(r.length-1)!==10&&r.charCodeAt(r.length-1)!==13&&(r+=`\n`),r.charCodeAt(0)===65279&&(r=r.slice(1)));var t=new hpe(r,e),i=r.indexOf(\"\\0\");for(i!==-1&&(t.position=i,ft(t,\"null byte is not allowed in input\")),t.input+=\"\\0\";t.input.charCodeAt(t.position)===32;)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)bpe(t);return t.documents}function R2(r,e,t){e!==null&&typeof e==\"object\"&&typeof t>\"u\"&&(t=e,e=null);var i=k2(r,t);if(typeof e!=\"function\")return i;for(var n=0,s=i.length;n<s;n+=1)e(i[n])}function F2(r,e){var t=k2(r,e);if(t.length!==0){if(t.length===1)return t[0];throw new w2(\"expected a single document in the stream, but found more\")}}function Qpe(r,e,t){return typeof e==\"object\"&&e!==null&&typeof t>\"u\"&&(t=e,e=null),R2(r,e,Ba.extend({schema:B2},t))}function Spe(r,e){return F2(r,Ba.extend({schema:B2},e))}Zp.exports.loadAll=R2;Zp.exports.load=F2;Zp.exports.safeLoadAll=Qpe;Zp.exports.safeLoad=Spe});var iH=w(($Ze,_S)=>{\"use strict\";var $p=tc(),ed=Ng(),vpe=Xp(),xpe=Lg(),G2=Object.prototype.toString,Y2=Object.prototype.hasOwnProperty,Ppe=9,_p=10,Dpe=13,kpe=32,Rpe=33,Fpe=34,j2=35,Npe=37,Tpe=38,Lpe=39,Mpe=42,q2=44,Ope=45,J2=58,Kpe=61,Upe=62,Hpe=63,Gpe=64,W2=91,z2=93,Ype=96,V2=123,jpe=124,X2=125,Ni={};Ni[0]=\"\\\\0\";Ni[7]=\"\\\\a\";Ni[8]=\"\\\\b\";Ni[9]=\"\\\\t\";Ni[10]=\"\\\\n\";Ni[11]=\"\\\\v\";Ni[12]=\"\\\\f\";Ni[13]=\"\\\\r\";Ni[27]=\"\\\\e\";Ni[34]='\\\\\"';Ni[92]=\"\\\\\\\\\";Ni[133]=\"\\\\N\";Ni[160]=\"\\\\_\";Ni[8232]=\"\\\\L\";Ni[8233]=\"\\\\P\";var qpe=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"];function Jpe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n<s;n+=1)o=i[n],a=String(e[o]),o.slice(0,2)===\"!!\"&&(o=\"tag:yaml.org,2002:\"+o.slice(2)),l=r.compiledTypeMap.fallback[o],l&&Y2.call(l.styleAliases,a)&&(a=l.styleAliases[a]),t[o]=a;return t}function T2(r){var e,t,i;if(e=r.toString(16).toUpperCase(),r<=255)t=\"x\",i=2;else if(r<=65535)t=\"u\",i=4;else if(r<=4294967295)t=\"U\",i=8;else throw new ed(\"code point within a string may not be greater than 0xFFFFFFFF\");return\"\\\\\"+t+$p.repeat(\"0\",i-e.length)+e}function Wpe(r){this.schema=r.schema||vpe,this.indent=Math.max(1,r.indent||2),this.noArrayIndent=r.noArrayIndent||!1,this.skipInvalid=r.skipInvalid||!1,this.flowLevel=$p.isNothing(r.flowLevel)?-1:r.flowLevel,this.styleMap=Jpe(this.schema,r.styles||null),this.sortKeys=r.sortKeys||!1,this.lineWidth=r.lineWidth||80,this.noRefs=r.noRefs||!1,this.noCompatMode=r.noCompatMode||!1,this.condenseFlow=r.condenseFlow||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function L2(r,e){for(var t=$p.repeat(\" \",e),i=0,n=-1,s=\"\",o,a=r.length;i<a;)n=r.indexOf(`\n`,i),n===-1?(o=r.slice(i),i=a):(o=r.slice(i,n+1),i=n+1),o.length&&o!==`\n`&&(s+=t),s+=o;return s}function VS(r,e){return`\n`+$p.repeat(\" \",r.indent*e)}function zpe(r,e){var t,i,n;for(t=0,i=r.implicitTypes.length;t<i;t+=1)if(n=r.implicitTypes[t],n.resolve(e))return!0;return!1}function ZS(r){return r===kpe||r===Ppe}function Ug(r){return 32<=r&&r<=126||161<=r&&r<=55295&&r!==8232&&r!==8233||57344<=r&&r<=65533&&r!==65279||65536<=r&&r<=1114111}function Vpe(r){return Ug(r)&&!ZS(r)&&r!==65279&&r!==Dpe&&r!==_p}function M2(r,e){return Ug(r)&&r!==65279&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==J2&&(r!==j2||e&&Vpe(e))}function Xpe(r){return Ug(r)&&r!==65279&&!ZS(r)&&r!==Ope&&r!==Hpe&&r!==J2&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==j2&&r!==Tpe&&r!==Mpe&&r!==Rpe&&r!==jpe&&r!==Kpe&&r!==Upe&&r!==Lpe&&r!==Fpe&&r!==Npe&&r!==Gpe&&r!==Ype}function Z2(r){var e=/^\\n* /;return e.test(r)}var _2=1,$2=2,eH=3,tH=4,BI=5;function Zpe(r,e,t,i,n){var s,o,a,l=!1,c=!1,u=i!==-1,g=-1,f=Xpe(r.charCodeAt(0))&&!ZS(r.charCodeAt(r.length-1));if(e)for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}else{for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),o===_p)l=!0,u&&(c=c||s-g-1>i&&r[g+1]!==\" \",g=s);else if(!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==\" \"}return!l&&!c?f&&!n(r)?_2:$2:t>9&&Z2(r)?BI:c?tH:eH}function _pe(r,e,t,i){r.dump=function(){if(e.length===0)return\"''\";if(!r.noCompatMode&&qpe.indexOf(e)!==-1)return\"'\"+e+\"'\";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return zpe(r,l)}switch(Zpe(e,o,r.indent,s,a)){case _2:return e;case $2:return\"'\"+e.replace(/'/g,\"''\")+\"'\";case eH:return\"|\"+O2(e,r.indent)+K2(L2(e,n));case tH:return\">\"+O2(e,r.indent)+K2(L2($pe(e,s),n));case BI:return'\"'+ede(e,s)+'\"';default:throw new ed(\"impossible error: invalid scalar style\")}}()}function O2(r,e){var t=Z2(r)?String(e):\"\",i=r[r.length-1]===`\n`,n=i&&(r[r.length-2]===`\n`||r===`\n`),s=n?\"+\":i?\"\":\"-\";return t+s+`\n`}function K2(r){return r[r.length-1]===`\n`?r.slice(0,-1):r}function $pe(r,e){for(var t=/(\\n+)([^\\n]*)/g,i=function(){var c=r.indexOf(`\n`);return c=c!==-1?c:r.length,t.lastIndex=c,U2(r.slice(0,c),e)}(),n=r[0]===`\n`||r[0]===\" \",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===\" \",i+=a+(!n&&!s&&l!==\"\"?`\n`:\"\")+U2(l,e),n=s}return i}function U2(r,e){if(r===\"\"||r[0]===\" \")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l=\"\";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=`\n`+r.slice(n,s),n=s+1),o=a;return l+=`\n`,r.length-n>e&&o>n?l+=r.slice(n,o)+`\n`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function ede(r){for(var e=\"\",t,i,n,s=0;s<r.length;s++){if(t=r.charCodeAt(s),t>=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=T2((t-55296)*1024+i-56320+65536),s++;continue}n=Ni[t],e+=!n&&Ug(t)?r[s]:n||T2(t)}return e}function tde(r,e,t){var i=\"\",n=r.tag,s,o;for(s=0,o=t.length;s<o;s+=1)oc(r,e,t[s],!1,!1)&&(s!==0&&(i+=\",\"+(r.condenseFlow?\"\":\" \")),i+=r.dump);r.tag=n,r.dump=\"[\"+i+\"]\"}function rde(r,e,t,i){var n=\"\",s=r.tag,o,a;for(o=0,a=t.length;o<a;o+=1)oc(r,e+1,t[o],!0,!0)&&((!i||o!==0)&&(n+=VS(r,e)),r.dump&&_p===r.dump.charCodeAt(0)?n+=\"-\":n+=\"- \",n+=r.dump);r.tag=s,r.dump=n||\"[]\"}function ide(r,e,t){var i=\"\",n=r.tag,s=Object.keys(t),o,a,l,c,u;for(o=0,a=s.length;o<a;o+=1)u=\"\",o!==0&&(u+=\", \"),r.condenseFlow&&(u+='\"'),l=s[o],c=t[l],oc(r,e,l,!1,!1)&&(r.dump.length>1024&&(u+=\"? \"),u+=r.dump+(r.condenseFlow?'\"':\"\")+\":\"+(r.condenseFlow?\"\":\" \"),oc(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump=\"{\"+i+\"}\"}function nde(r,e,t,i){var n=\"\",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys==\"function\")o.sort(r.sortKeys);else if(r.sortKeys)throw new ed(\"sortKeys must be a boolean or a function\");for(a=0,l=o.length;a<l;a+=1)f=\"\",(!i||a!==0)&&(f+=VS(r,e)),c=o[a],u=t[c],oc(r,e+1,c,!0,!0,!0)&&(g=r.tag!==null&&r.tag!==\"?\"||r.dump&&r.dump.length>1024,g&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\"?\":f+=\"? \"),f+=r.dump,g&&(f+=VS(r,e)),oc(r,e+1,u,!0,g)&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\":\":f+=\": \",f+=r.dump,n+=f));r.tag=s,r.dump=n||\"{}\"}function H2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s<o;s+=1)if(a=n[s],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof e==\"object\"&&e instanceof a.instanceOf)&&(!a.predicate||a.predicate(e))){if(r.tag=t?a.tag:\"?\",a.represent){if(l=r.styleMap[a.tag]||a.defaultStyle,G2.call(a.represent)===\"[object Function]\")i=a.represent(e,l);else if(Y2.call(a.represent,l))i=a.represent[l](e,l);else throw new ed(\"!<\"+a.tag+'> tag resolver accepts not \"'+l+'\" style');r.dump=i}return!0}return!1}function oc(r,e,t,i,n,s){r.tag=null,r.dump=t,H2(r,t,!1)||H2(r,t,!0);var o=G2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o===\"[object Object]\"||o===\"[object Array]\",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!==\"?\"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump=\"*ref_\"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o===\"[object Object]\")i&&Object.keys(r.dump).length!==0?(nde(r,e,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(ide(r,e,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump));else if(o===\"[object Array]\"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(rde(r,u,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(tde(r,u,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump))}else if(o===\"[object String]\")r.tag!==\"?\"&&_pe(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new ed(\"unacceptable kind of an object to dump \"+o)}r.tag!==null&&r.tag!==\"?\"&&(r.dump=\"!<\"+r.tag+\"> \"+r.dump)}return!0}function sde(r,e){var t=[],i=[],n,s;for(XS(r,t,i),n=0,s=i.length;n<s;n+=1)e.duplicates.push(t[i[n]]);e.usedDuplicates=new Array(s)}function XS(r,e,t){var i,n,s;if(r!==null&&typeof r==\"object\")if(n=e.indexOf(r),n!==-1)t.indexOf(n)===-1&&t.push(n);else if(e.push(r),Array.isArray(r))for(n=0,s=r.length;n<s;n+=1)XS(r[n],e,t);else for(i=Object.keys(r),n=0,s=i.length;n<s;n+=1)XS(r[i[n]],e,t)}function rH(r,e){e=e||{};var t=new Wpe(e);return t.noRefs||sde(r,t),oc(t,0,r,!0,!0)?t.dump+`\n`:\"\"}function ode(r,e){return rH(r,$p.extend({schema:xpe},e))}_S.exports.dump=rH;_S.exports.safeDump=ode});var sH=w((e_e,Fr)=>{\"use strict\";var bI=N2(),nH=iH();function QI(r){return function(){throw new Error(\"Function \"+r+\" is deprecated and cannot be used.\")}}Fr.exports.Type=si();Fr.exports.Schema=rc();Fr.exports.FAILSAFE_SCHEMA=CI();Fr.exports.JSON_SCHEMA=YS();Fr.exports.CORE_SCHEMA=jS();Fr.exports.DEFAULT_SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_FULL_SCHEMA=Xp();Fr.exports.load=bI.load;Fr.exports.loadAll=bI.loadAll;Fr.exports.safeLoad=bI.safeLoad;Fr.exports.safeLoadAll=bI.safeLoadAll;Fr.exports.dump=nH.dump;Fr.exports.safeDump=nH.safeDump;Fr.exports.YAMLException=Ng();Fr.exports.MINIMAL_SCHEMA=CI();Fr.exports.SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_SCHEMA=Xp();Fr.exports.scan=QI(\"scan\");Fr.exports.parse=QI(\"parse\");Fr.exports.compose=QI(\"compose\");Fr.exports.addConstructor=QI(\"addConstructor\")});var aH=w((t_e,oH)=>{\"use strict\";var ade=sH();oH.exports=ade});var lH=w((r_e,AH)=>{\"use strict\";function Ade(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function ac(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,ac)}Ade(ac,Error);ac.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function lde(r,e){e=e!==void 0?e:{};var t={},i={Start:Hs},n=Hs,s=function(R){return[].concat(...R)},o=\"-\",a=ar(\"-\",!1),l=function(R){return R},c=function(R){return Object.assign({},...R)},u=\"#\",g=ar(\"#\",!1),f=Kl(),h=function(){return{}},p=\":\",C=ar(\":\",!1),y=function(R,q){return{[R]:q}},B=\",\",v=ar(\",\",!1),D=function(R,q){return q},T=function(R,q,Ce){return Object.assign({},...[R].concat(q).map(Ke=>({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Us(\"correct indentation\"),V=\" \",W=ar(\" \",!1),_=function(R){return R.length===bA*yg},A=function(R){return R.length===(bA+1)*yg},Ae=function(){return bA++,!0},ge=function(){return bA--,!0},re=function(){return pg()},M=Us(\"pseudostring\"),F=/^[^\\r\\n\\t ?:,\\][{}#&*!|>'\"%@`\\-]/,ue=Tn([\"\\r\",`\n`,\"\t\",\" \",\"?\",\":\",\",\",\"]\",\"[\",\"{\",\"}\",\"#\",\"&\",\"*\",\"!\",\"|\",\">\",\"'\",'\"',\"%\",\"@\",\"`\",\"-\"],!0,!1),pe=/^[^\\r\\n\\t ,\\][{}:#\"']/,ke=Tn([\"\\r\",`\n`,\"\t\",\" \",\",\",\"]\",\"[\",\"{\",\"}\",\":\",\"#\",'\"',\"'\"],!0,!1),Fe=function(){return pg().replace(/^ *| *$/g,\"\")},Ne=\"--\",oe=ar(\"--\",!1),le=/^[a-zA-Z\\/0-9]/,Be=Tn([[\"a\",\"z\"],[\"A\",\"Z\"],\"/\",[\"0\",\"9\"]],!1,!1),fe=/^[^\\r\\n\\t :,]/,ae=Tn([\"\\r\",`\n`,\"\t\",\" \",\":\",\",\"],!0,!1),qe=\"null\",ne=ar(\"null\",!1),Y=function(){return null},he=\"true\",ie=ar(\"true\",!1),de=function(){return!0},_e=\"false\",Pt=ar(\"false\",!1),It=function(){return!1},Mr=Us(\"string\"),ii='\"',gi=ar('\"',!1),hr=function(){return\"\"},fi=function(R){return R},ni=function(R){return R.join(\"\")},Ks=/^[^\"\\\\\\0-\\x1F\\x7F]/,pr=Tn(['\"',\"\\\\\",[\"\\0\",\"\u001f\"],\"\\x7F\"],!0,!1),Ii='\\\\\"',rs=ar('\\\\\"',!1),fa=function(){return'\"'},dA=\"\\\\\\\\\",cg=ar(\"\\\\\\\\\",!1),is=function(){return\"\\\\\"},CA=\"\\\\/\",ha=ar(\"\\\\/\",!1),wp=function(){return\"/\"},mA=\"\\\\b\",EA=ar(\"\\\\b\",!1),wr=function(){return\"\\b\"},Tl=\"\\\\f\",ug=ar(\"\\\\f\",!1),yo=function(){return\"\\f\"},gg=\"\\\\n\",Bp=ar(\"\\\\n\",!1),bp=function(){return`\n`},vr=\"\\\\r\",se=ar(\"\\\\r\",!1),wo=function(){return\"\\r\"},Fn=\"\\\\t\",fg=ar(\"\\\\t\",!1),bt=function(){return\"\t\"},Ll=\"\\\\u\",Nn=ar(\"\\\\u\",!1),ns=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},ss=/^[0-9a-fA-F]/,gt=Tn([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"F\"]],!1,!1),Bo=Us(\"blank space\"),At=/^[ \\t]/,ln=Tn([\" \",\"\t\"],!1,!1),S=Us(\"white space\"),Lt=/^[ \\t\\n\\r]/,hg=Tn([\" \",\"\t\",`\n`,\"\\r\"],!1,!1),Ml=`\\r\n`,Qp=ar(`\\r\n`,!1),Sp=`\n`,vp=ar(`\n`,!1),xp=\"\\r\",Pp=ar(\"\\r\",!1),G=0,yt=0,IA=[{line:1,column:1}],zi=0,Ol=[],Xe=0,pa;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function pg(){return r.substring(yt,G)}function ME(){return cn(yt,G)}function Dp(R,q){throw q=q!==void 0?q:cn(yt,G),Ul([Us(R)],r.substring(yt,G),q)}function OE(R,q){throw q=q!==void 0?q:cn(yt,G),dg(R,q)}function ar(R,q){return{type:\"literal\",text:R,ignoreCase:q}}function Tn(R,q,Ce){return{type:\"class\",parts:R,inverted:q,ignoreCase:Ce}}function Kl(){return{type:\"any\"}}function kp(){return{type:\"end\"}}function Us(R){return{type:\"other\",description:R}}function da(R){var q=IA[R],Ce;if(q)return q;for(Ce=R-1;!IA[Ce];)Ce--;for(q=IA[Ce],q={line:q.line,column:q.column};Ce<R;)r.charCodeAt(Ce)===10?(q.line++,q.column=1):q.column++,Ce++;return IA[R]=q,q}function cn(R,q){var Ce=da(R),Ke=da(q);return{start:{offset:R,line:Ce.line,column:Ce.column},end:{offset:q,line:Ke.line,column:Ke.column}}}function Le(R){G<zi||(G>zi&&(zi=G,Ol=[]),Ol.push(R))}function dg(R,q){return new ac(R,null,null,q)}function Ul(R,q,Ce){return new ac(ac.buildMessage(R,q),R,q,Ce)}function Hs(){var R;return R=Cg(),R}function Hl(){var R,q,Ce;for(R=G,q=[],Ce=yA();Ce!==t;)q.push(Ce),Ce=yA();return q!==t&&(yt=R,q=s(q)),R=q,R}function yA(){var R,q,Ce,Ke,Re;return R=G,q=ma(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Le(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=Ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Cg(){var R,q,Ce;for(R=G,q=[],Ce=mg();Ce!==t;)q.push(Ce),Ce=mg();return q!==t&&(yt=R,q=c(q)),R=q,R}function mg(){var R,q,Ce,Ke,Re,ze,dt,Ft,Ln;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Le(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ys(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ys();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ma(),q!==t?(Ce=Gl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ma(),q!==t?(Ce=Gs(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=KE(),Re!==t){if(ze=[],dt=Ys(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ys();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Le(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=Ca(),Ft!==t?(yt=R,q=T(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=js(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Le(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ys(),Ce!==t?(Ke=bo(),Ke!==t?(Re=Hl(),Re!==t?(ze=wA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=js(),q!==t?(Ce=bo(),Ce!==t?(Ke=Cg(),Ke!==t?(Re=wA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Yl(),q!==t){if(Ce=[],Ke=Ys(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ys();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ma(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=_(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Le($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function bo(){var R;return yt=G,R=Ae(),R?R=void 0:R=t,R}function wA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Gl(){var R;return R=jl(),R===t&&(R=Rp()),R}function Gs(){var R,q,Ce;if(R=jl(),R===t){if(R=G,q=[],Ce=Eg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Eg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Yl(){var R;return R=Fp(),R===t&&(R=UE(),R===t&&(R=jl(),R===t&&(R=Rp()))),R}function KE(){var R;return R=Fp(),R===t&&(R=jl(),R===t&&(R=Eg())),R}function Rp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(M)),R}function Eg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Le(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Le(Be)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function Fp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Le(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function UE(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,Xe===0&&Le(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===_e?(q=_e,G+=5):(q=t,Xe===0&&Le(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function jl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Le(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(Ce=HE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Le(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Le(Mr)),R}function HE(){var R,q,Ce;if(R=G,q=[],Ce=Ig(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Ig();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function Ig(){var R,q,Ce,Ke,Re,ze;return Ks.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(pr)),R===t&&(R=G,r.substr(G,2)===Ii?(q=Ii,G+=2):(q=t,Xe===0&&Le(rs)),q!==t&&(yt=R,q=fa()),R=q,R===t&&(R=G,r.substr(G,2)===dA?(q=dA,G+=2):(q=t,Xe===0&&Le(cg)),q!==t&&(yt=R,q=is()),R=q,R===t&&(R=G,r.substr(G,2)===CA?(q=CA,G+=2):(q=t,Xe===0&&Le(ha)),q!==t&&(yt=R,q=wp()),R=q,R===t&&(R=G,r.substr(G,2)===mA?(q=mA,G+=2):(q=t,Xe===0&&Le(EA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===Tl?(q=Tl,G+=2):(q=t,Xe===0&&Le(ug)),q!==t&&(yt=R,q=yo()),R=q,R===t&&(R=G,r.substr(G,2)===gg?(q=gg,G+=2):(q=t,Xe===0&&Le(Bp)),q!==t&&(yt=R,q=bp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Le(se)),q!==t&&(yt=R,q=wo()),R=q,R===t&&(R=G,r.substr(G,2)===Fn?(q=Fn,G+=2):(q=t,Xe===0&&Le(fg)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Ll?(q=Ll,G+=2):(q=t,Xe===0&&Le(Nn)),q!==t?(Ce=BA(),Ce!==t?(Ke=BA(),Ke!==t?(Re=BA(),Re!==t?(ze=BA(),ze!==t?(yt=R,q=ns(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function BA(){var R;return ss.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(Bo)),R}function GE(){var R,q;if(Xe++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(S)),R}function Ys(){var R,q,Ce,Ke,Re,ze;if(R=G,q=js(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function js(){var R;return r.substr(G,2)===Ml?(R=Ml,G+=2):(R=t,Xe===0&&Le(Qp)),R===t&&(r.charCodeAt(G)===10?(R=Sp,G++):(R=t,Xe===0&&Le(vp)),R===t&&(r.charCodeAt(G)===13?(R=xp,G++):(R=t,Xe===0&&Le(Pp)))),R}let yg=2,bA=0;if(pa=n(),pa!==t&&G===r.length)return pa;throw pa!==t&&G<r.length&&Le(kp()),Ul(Ol,zi<r.length?r.charAt(zi):null,zi<r.length?cn(zi,zi+1):cn(zi,zi))}AH.exports={SyntaxError:ac,parse:lde}});var pH=w((a_e,ev)=>{\"use strict\";var hde=r=>{let e=!1,t=!1,i=!1;for(let n=0;n<r.length;n++){let s=r[n];e&&/[a-zA-Z]/.test(s)&&s.toUpperCase()===s?(r=r.slice(0,n)+\"-\"+r.slice(n),e=!1,i=t,t=!0,n++):t&&i&&/[a-zA-Z]/.test(s)&&s.toLowerCase()===s?(r=r.slice(0,n-1)+\"-\"+r.slice(n-1),i=t,t=!1,e=!0):(e=s.toLowerCase()===s&&s.toUpperCase()!==s,i=t,t=s.toUpperCase()===s&&s.toLowerCase()!==s)}return r},hH=(r,e)=>{if(!(typeof r==\"string\"||Array.isArray(r)))throw new TypeError(\"Expected the input to be `string | string[]`\");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join(\"-\"):r=r.trim(),r.length===0?\"\":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=hde(r)),r=r.replace(/^[_.\\- ]+/,\"\").toLowerCase().replace(/[_.\\- ]+(\\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\\d+(\\w|$)/g,n=>n.toUpperCase()),t(r))};ev.exports=hH;ev.exports.default=hH});var dH=w((A_e,pde)=>{pde.exports=[{name:\"AppVeyor\",constant:\"APPVEYOR\",env:\"APPVEYOR\",pr:\"APPVEYOR_PULL_REQUEST_NUMBER\"},{name:\"Azure Pipelines\",constant:\"AZURE_PIPELINES\",env:\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\",pr:\"SYSTEM_PULLREQUEST_PULLREQUESTID\"},{name:\"Appcircle\",constant:\"APPCIRCLE\",env:\"AC_APPCIRCLE\"},{name:\"Bamboo\",constant:\"BAMBOO\",env:\"bamboo_planKey\"},{name:\"Bitbucket Pipelines\",constant:\"BITBUCKET\",env:\"BITBUCKET_COMMIT\",pr:\"BITBUCKET_PR_ID\"},{name:\"Bitrise\",constant:\"BITRISE\",env:\"BITRISE_IO\",pr:\"BITRISE_PULL_REQUEST\"},{name:\"Buddy\",constant:\"BUDDY\",env:\"BUDDY_WORKSPACE_ID\",pr:\"BUDDY_EXECUTION_PULL_REQUEST_ID\"},{name:\"Buildkite\",constant:\"BUILDKITE\",env:\"BUILDKITE\",pr:{env:\"BUILDKITE_PULL_REQUEST\",ne:\"false\"}},{name:\"CircleCI\",constant:\"CIRCLE\",env:\"CIRCLECI\",pr:\"CIRCLE_PULL_REQUEST\"},{name:\"Cirrus CI\",constant:\"CIRRUS\",env:\"CIRRUS_CI\",pr:\"CIRRUS_PR\"},{name:\"AWS CodeBuild\",constant:\"CODEBUILD\",env:\"CODEBUILD_BUILD_ARN\"},{name:\"Codefresh\",constant:\"CODEFRESH\",env:\"CF_BUILD_ID\",pr:{any:[\"CF_PULL_REQUEST_NUMBER\",\"CF_PULL_REQUEST_ID\"]}},{name:\"Codeship\",constant:\"CODESHIP\",env:{CI_NAME:\"codeship\"}},{name:\"Drone\",constant:\"DRONE\",env:\"DRONE\",pr:{DRONE_BUILD_EVENT:\"pull_request\"}},{name:\"dsari\",constant:\"DSARI\",env:\"DSARI\"},{name:\"GitHub Actions\",constant:\"GITHUB_ACTIONS\",env:\"GITHUB_ACTIONS\",pr:{GITHUB_EVENT_NAME:\"pull_request\"}},{name:\"GitLab CI\",constant:\"GITLAB\",env:\"GITLAB_CI\",pr:\"CI_MERGE_REQUEST_ID\"},{name:\"GoCD\",constant:\"GOCD\",env:\"GO_PIPELINE_LABEL\"},{name:\"LayerCI\",constant:\"LAYERCI\",env:\"LAYERCI\",pr:\"LAYERCI_PULL_REQUEST\"},{name:\"Hudson\",constant:\"HUDSON\",env:\"HUDSON_URL\"},{name:\"Jenkins\",constant:\"JENKINS\",env:[\"JENKINS_URL\",\"BUILD_ID\"],pr:{any:[\"ghprbPullId\",\"CHANGE_ID\"]}},{name:\"Magnum CI\",constant:\"MAGNUM\",env:\"MAGNUM\"},{name:\"Netlify CI\",constant:\"NETLIFY\",env:\"NETLIFY\",pr:{env:\"PULL_REQUEST\",ne:\"false\"}},{name:\"Nevercode\",constant:\"NEVERCODE\",env:\"NEVERCODE\",pr:{env:\"NEVERCODE_PULL_REQUEST\",ne:\"false\"}},{name:\"Render\",constant:\"RENDER\",env:\"RENDER\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Sail CI\",constant:\"SAIL\",env:\"SAILCI\",pr:\"SAIL_PULL_REQUEST_NUMBER\"},{name:\"Semaphore\",constant:\"SEMAPHORE\",env:\"SEMAPHORE\",pr:\"PULL_REQUEST_NUMBER\"},{name:\"Screwdriver\",constant:\"SCREWDRIVER\",env:\"SCREWDRIVER\",pr:{env:\"SD_PULL_REQUEST\",ne:\"false\"}},{name:\"Shippable\",constant:\"SHIPPABLE\",env:\"SHIPPABLE\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Solano CI\",constant:\"SOLANO\",env:\"TDDIUM\",pr:\"TDDIUM_PR_ID\"},{name:\"Strider CD\",constant:\"STRIDER\",env:\"STRIDER\"},{name:\"TaskCluster\",constant:\"TASKCLUSTER\",env:[\"TASK_ID\",\"RUN_ID\"]},{name:\"TeamCity\",constant:\"TEAMCITY\",env:\"TEAMCITY_VERSION\"},{name:\"Travis CI\",constant:\"TRAVIS\",env:\"TRAVIS\",pr:{env:\"TRAVIS_PULL_REQUEST\",ne:\"false\"}},{name:\"Vercel\",constant:\"VERCEL\",env:\"NOW_BUILDER\"},{name:\"Visual Studio App Center\",constant:\"APPCENTER\",env:\"APPCENTER_BUILD_ID\"}]});var Ac=w(Un=>{\"use strict\";var mH=dH(),Po=process.env;Object.defineProperty(Un,\"_vendors\",{value:mH.map(function(r){return r.constant})});Un.name=null;Un.isPR=null;mH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return CH(i)});if(Un[r.constant]=t,t)switch(Un.name=r.name,typeof r.pr){case\"string\":Un.isPR=!!Po[r.pr];break;case\"object\":\"env\"in r.pr?Un.isPR=r.pr.env in Po&&Po[r.pr.env]!==r.pr.ne:\"any\"in r.pr?Un.isPR=r.pr.any.some(function(i){return!!Po[i]}):Un.isPR=CH(r.pr);break;default:Un.isPR=null}});Un.isCI=!!(Po.CI||Po.CONTINUOUS_INTEGRATION||Po.BUILD_NUMBER||Po.RUN_ID||Un.name);function CH(r){return typeof r==\"string\"?!!Po[r]:Object.keys(r).every(function(e){return Po[e]===r[e]})}});var hn={};ut(hn,{KeyRelationship:()=>lc,applyCascade:()=>od,base64RegExp:()=>BH,colorStringAlphaRegExp:()=>wH,colorStringRegExp:()=>yH,computeKey:()=>RA,getPrintable:()=>Vr,hasExactLength:()=>xH,hasForbiddenKeys:()=>Wde,hasKeyRelationship:()=>av,hasMaxLength:()=>Dde,hasMinLength:()=>Pde,hasMutuallyExclusiveKeys:()=>zde,hasRequiredKeys:()=>Jde,hasUniqueItems:()=>kde,isArray:()=>yde,isAtLeast:()=>Nde,isAtMost:()=>Tde,isBase64:()=>jde,isBoolean:()=>mde,isDate:()=>Ide,isDict:()=>Bde,isEnum:()=>Zi,isHexColor:()=>Yde,isISO8601:()=>Gde,isInExclusiveRange:()=>Mde,isInInclusiveRange:()=>Lde,isInstanceOf:()=>Qde,isInteger:()=>Ode,isJSON:()=>qde,isLiteral:()=>dde,isLowerCase:()=>Kde,isNegative:()=>Rde,isNullable:()=>xde,isNumber:()=>Ede,isObject:()=>bde,isOneOf:()=>Sde,isOptional:()=>vde,isPositive:()=>Fde,isString:()=>sd,isTuple:()=>wde,isUUID4:()=>Hde,isUnknown:()=>vH,isUpperCase:()=>Ude,iso8601RegExp:()=>ov,makeCoercionFn:()=>cc,makeSetter:()=>SH,makeTrait:()=>QH,makeValidator:()=>Qt,matchesRegExp:()=>ad,plural:()=>kI,pushError:()=>pt,simpleKeyRegExp:()=>IH,uuid4RegExp:()=>bH});function Qt({test:r}){return QH(r)()}function Vr(r){return r===null?\"null\":r===void 0?\"undefined\":r===\"\"?\"an empty string\":JSON.stringify(r)}function RA(r,e){var t,i,n;return typeof e==\"number\"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:\".\"}[${e}]`:IH.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:\"\"}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:\".\"}[${JSON.stringify(e)}]`}function cc(r,e){return t=>{let i=r[e];return r[e]=t,cc(r,e).bind(null,i)}}function SH(r,e){return t=>{r[e]=t}}function kI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:\".\"}: ${t}`),!1}function dde(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Zi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var IH,yH,wH,BH,bH,ov,QH,vH,sd,Cde,mde,Ede,Ide,yde,wde,Bde,bde,Qde,Sde,od,vde,xde,Pde,Dde,xH,kde,Rde,Fde,Nde,Tde,Lde,Mde,Ode,ad,Kde,Ude,Hde,Gde,Yde,jde,qde,Jde,Wde,zde,lc,Vde,av,ls=Tge(()=>{IH=/^[a-zA-Z_][a-zA-Z0-9_]*$/,yH=/^#[0-9a-f]{6}$/i,wH=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,BH=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,bH=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,ov=/^(?:[1-9]\\d{3}(-?)(?:(?:0[1-9]|1[0-2])\\1(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])\\1(?:29|30)|(?:0[13578]|1[02])(?:\\1)31|00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[0-5]))|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\\2)29|-?366))T(?:[01]\\d|2[0-3])(:?)[0-5]\\d(?:\\3[0-5]\\d)?(?:Z|[+-][01]\\d(?:\\3[0-5]\\d)?)$/,QH=r=>()=>r;vH=()=>Qt({test:(r,e)=>!0});sd=()=>Qt({test:(r,e)=>typeof r!=\"string\"?pt(e,`Expected a string (got ${Vr(r)})`):!0});Cde=new Map([[\"true\",!0],[\"True\",!0],[\"1\",!0],[1,!0],[\"false\",!1],[\"False\",!1],[\"0\",!1],[0,!1]]),mde=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"boolean\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i=Cde.get(r);if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),Ede=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"number\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"){let n;try{n=JSON.parse(r)}catch{}if(typeof n==\"number\")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),Ide=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"&&ov.test(r))i=new Date(r);else{let n;if(typeof r==\"string\"){let s;try{s=JSON.parse(r)}catch{}typeof s==\"number\"&&(n=s)}else typeof r==\"number\"&&(n=r);if(typeof n<\"u\")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),yde=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t==\"string\"&&typeof e<\"u\"&&typeof(i==null?void 0:i.coercions)<\"u\"){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o<a&&(s=r(t[o],Object.assign(Object.assign({},i),{p:RA(i,o),coercion:cc(t,o)}))&&s,!(!s&&(i==null?void 0:i.errors)==null));++o);return s}}),wde=(r,{delimiter:e}={})=>{let t=xH(r.length);return Qt({test:(i,n)=>{var s;if(typeof i==\"string\"&&typeof e<\"u\"&&typeof(n==null?void 0:n.coercions)<\"u\"){if(typeof(n==null?void 0:n.coercion)>\"u\")return pt(n,\"Unbound coercion result\");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:\".\",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;a<l&&a<r.length&&(o=r[a](i[a],Object.assign(Object.assign({},n),{p:RA(n,a),coercion:cc(i,a)}))&&o,!(!o&&(n==null?void 0:n.errors)==null));++a);return o}})},Bde=(r,{keys:e=null}={})=>Qt({test:(t,i)=>{if(typeof t!=\"object\"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o<a&&(s||(i==null?void 0:i.errors)!=null);++o){let l=n[o],c=t[l];if(l===\"__proto__\"||l===\"constructor\"){s=pt(Object.assign(Object.assign({},i),{p:RA(i,l)}),\"Unsafe property name\");continue}if(e!==null&&!e(l,i)){s=!1;continue}if(!r(c,Object.assign(Object.assign({},i),{p:RA(i,l),coercion:cc(t,l)}))){s=!1;continue}}return s}}),bde=(r,{extra:e=null}={})=>{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!=\"object\"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l===\"constructor\"||l===\"__proto__\")a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),\"Unsafe property name\");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<\"u\"?a=c(u,Object.assign(Object.assign({},n),{p:RA(n,l),coercion:cc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:SH(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Qde=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Sde=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0;for(let c=0,u=r.length;c<u;++c){let g=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0,f=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(r[c](t,Object.assign(Object.assign({},i),{errors:g,coercions:f,p:`${(n=i==null?void 0:i.p)!==null&&n!==void 0?n:\".\"}#${c+1}`}))){if(a.push([`#${c+1}`,f]),!e)break}else l==null||l.push(g[0])}if(a.length===1){let[,c]=a[0];return typeof c<\"u\"&&((s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...c)),!0}return a.length>1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(\", \")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),od=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<\"u\"?cc(o,\"value\"):void 0,l=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<\"u\")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<\"u\"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),vde=r=>Qt({test:(e,t)=>typeof e>\"u\"?!0:r(e,t)}),xde=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),Pde=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Dde=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),xH=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),kde=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;s<o;++s){let a=e[s],l=typeof r<\"u\"?r(a):a;if(i.has(l)){if(n.has(l))continue;pt(t,`Expected to contain unique elements; got a duplicate with ${Vr(e)}`),n.add(l)}else i.add(l)}return n.size===0}}),Rde=()=>Qt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Fde=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Nde=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Tde=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),Lde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),Mde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<e?!0:pt(i,`Expected to be in the [${r}; ${e}[ range (got ${t})`)}),Ode=({unsafe:r=!1}={})=>Qt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),ad=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Kde=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),Ude=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Hde=()=>Qt({test:(r,e)=>bH.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Gde=()=>Qt({test:(r,e)=>ov.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),Yde=({alpha:r=!1})=>Qt({test:(e,t)=>(r?yH.test(e):wH.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),jde=()=>Qt({test:(r,e)=>BH.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),qde=(r=vH())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),Jde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},Wde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},zde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})};(function(r){r.Forbids=\"Forbids\",r.Requires=\"Requires\"})(lc||(lc={}));Vde={[lc.Forbids]:{expect:!1,message:\"forbids using\"},[lc.Requires]:{expect:!0,message:\"requires using\"}},av=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=Vde[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property \"${r}\" ${o.message} ${kI(u.length,\"property\",\"properties\")} ${u.map(g=>`\"${g}\"`).join(\", \")}`):!0}})}});var qH=w((A$e,jH)=>{\"use strict\";jH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Jg=w((l$e,pv)=>{\"use strict\";var gCe=qH(),JH=r=>{if(r<1)throw new TypeError(\"Expected `concurrency` to be a number from 1 and up\");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=gCe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{t<r?n(a,l,...c):e.push(n.bind(null,a,l,...c))},o=(a,...l)=>new Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};pv.exports=JH;pv.exports.default=JH});var gd=w((u$e,WH)=>{var fCe=\"2.0.0\",hCe=Number.MAX_SAFE_INTEGER||9007199254740991,pCe=16;WH.exports={SEMVER_SPEC_VERSION:fCe,MAX_LENGTH:256,MAX_SAFE_INTEGER:hCe,MAX_SAFE_COMPONENT_LENGTH:pCe}});var fd=w((g$e,zH)=>{var dCe=typeof process==\"object\"&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error(\"SEMVER\",...r):()=>{};zH.exports=dCe});var uc=w((NA,VH)=>{var{MAX_SAFE_COMPONENT_LENGTH:dv}=gd(),CCe=fd();NA=VH.exports={};var mCe=NA.re=[],et=NA.src=[],tt=NA.t={},ECe=0,St=(r,e,t)=>{let i=ECe++;CCe(i,e),tt[r]=i,et[i]=e,mCe[i]=new RegExp(e,t?\"g\":void 0)};St(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\");St(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\");St(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\");St(\"MAINVERSION\",`(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})`);St(\"MAINVERSIONLOOSE\",`(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})`);St(\"PRERELEASEIDENTIFIER\",`(?:${et[tt.NUMERICIDENTIFIER]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${et[tt.NUMERICIDENTIFIERLOOSE]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASE\",`(?:-(${et[tt.PRERELEASEIDENTIFIER]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIER]})*))`);St(\"PRERELEASELOOSE\",`(?:-?(${et[tt.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIERLOOSE]})*))`);St(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\");St(\"BUILD\",`(?:\\\\+(${et[tt.BUILDIDENTIFIER]}(?:\\\\.${et[tt.BUILDIDENTIFIER]})*))`);St(\"FULLPLAIN\",`v?${et[tt.MAINVERSION]}${et[tt.PRERELEASE]}?${et[tt.BUILD]}?`);St(\"FULL\",`^${et[tt.FULLPLAIN]}$`);St(\"LOOSEPLAIN\",`[v=\\\\s]*${et[tt.MAINVERSIONLOOSE]}${et[tt.PRERELEASELOOSE]}?${et[tt.BUILD]}?`);St(\"LOOSE\",`^${et[tt.LOOSEPLAIN]}$`);St(\"GTLT\",\"((?:<|>)?=?)\");St(\"XRANGEIDENTIFIERLOOSE\",`${et[tt.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);St(\"XRANGEIDENTIFIER\",`${et[tt.NUMERICIDENTIFIER]}|x|X|\\\\*`);St(\"XRANGEPLAIN\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:${et[tt.PRERELEASE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:${et[tt.PRERELEASELOOSE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAIN]}$`);St(\"XRANGELOOSE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${dv}})(?:\\\\.(\\\\d{1,${dv}}))?(?:\\\\.(\\\\d{1,${dv}}))?(?:$|[^\\\\d])`);St(\"COERCERTL\",et[tt.COERCE],!0);St(\"LONETILDE\",\"(?:~>?)\");St(\"TILDETRIM\",`(\\\\s*)${et[tt.LONETILDE]}\\\\s+`,!0);NA.tildeTrimReplace=\"$1~\";St(\"TILDE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAIN]}$`);St(\"TILDELOOSE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"LONECARET\",\"(?:\\\\^)\");St(\"CARETTRIM\",`(\\\\s*)${et[tt.LONECARET]}\\\\s+`,!0);NA.caretTrimReplace=\"$1^\";St(\"CARET\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAIN]}$`);St(\"CARETLOOSE\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COMPARATORLOOSE\",`^${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]})$|^$`);St(\"COMPARATOR\",`^${et[tt.GTLT]}\\\\s*(${et[tt.FULLPLAIN]})$|^$`);St(\"COMPARATORTRIM\",`(\\\\s*)${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]}|${et[tt.XRANGEPLAIN]})`,!0);NA.comparatorTrimReplace=\"$1$2$3\";St(\"HYPHENRANGE\",`^\\\\s*(${et[tt.XRANGEPLAIN]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAIN]})\\\\s*$`);St(\"HYPHENRANGELOOSE\",`^\\\\s*(${et[tt.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAINLOOSE]})\\\\s*$`);St(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\");St(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\");St(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")});var hd=w((f$e,XH)=>{var ICe=[\"includePrerelease\",\"loose\",\"rtl\"],yCe=r=>r?typeof r!=\"object\"?{loose:!0}:ICe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};XH.exports=yCe});var MI=w((h$e,$H)=>{var ZH=/^[0-9]+$/,_H=(r,e)=>{let t=ZH.test(r),i=ZH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:r<e?-1:1},wCe=(r,e)=>_H(e,r);$H.exports={compareIdentifiers:_H,rcompareIdentifiers:wCe}});var Li=w((p$e,iG)=>{var OI=fd(),{MAX_LENGTH:eG,MAX_SAFE_INTEGER:KI}=gd(),{re:tG,t:rG}=uc(),BCe=hd(),{compareIdentifiers:pd}=MI(),Yn=class{constructor(e,t){if(t=BCe(t),e instanceof Yn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!=\"string\")throw new TypeError(`Invalid Version: ${e}`);if(e.length>eG)throw new TypeError(`version is longer than ${eG} characters`);OI(\"SemVer\",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?tG[rG.LOOSE]:tG[rG.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>KI||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>KI||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>KI||this.patch<0)throw new TypeError(\"Invalid patch version\");i[4]?this.prerelease=i[4].split(\".\").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s<KI)return s}return n}):this.prerelease=[],this.build=i[5]?i[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(OI(\"SemVer.compare\",this.version,this.options,e),!(e instanceof Yn)){if(typeof e==\"string\"&&e===this.version)return 0;e=new Yn(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof Yn||(e=new Yn(e,this.options)),pd(this.major,e.major)||pd(this.minor,e.minor)||pd(this.patch,e.patch)}comparePre(e){if(e instanceof Yn||(e=new Yn(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let i=this.prerelease[t],n=e.prerelease[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}compareBuild(e){e instanceof Yn||(e=new Yn(e,this.options));let t=0;do{let i=this.build[t],n=e.build[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}inc(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":this.prerelease.length===0&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case\"pre\":if(this.prerelease.length===0)this.prerelease=[0];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]==\"number\"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};iG.exports=Yn});var gc=w((d$e,aG)=>{var{MAX_LENGTH:bCe}=gd(),{re:nG,t:sG}=uc(),oG=Li(),QCe=hd(),SCe=(r,e)=>{if(e=QCe(e),r instanceof oG)return r;if(typeof r!=\"string\"||r.length>bCe||!(e.loose?nG[sG.LOOSE]:nG[sG.FULL]).test(r))return null;try{return new oG(r,e)}catch{return null}};aG.exports=SCe});var lG=w((C$e,AG)=>{var vCe=gc(),xCe=(r,e)=>{let t=vCe(r,e);return t?t.version:null};AG.exports=xCe});var uG=w((m$e,cG)=>{var PCe=gc(),DCe=(r,e)=>{let t=PCe(r.trim().replace(/^[=v]+/,\"\"),e);return t?t.version:null};cG.exports=DCe});var fG=w((E$e,gG)=>{var kCe=Li(),RCe=(r,e,t,i)=>{typeof t==\"string\"&&(i=t,t=void 0);try{return new kCe(r,t).inc(e,i).version}catch{return null}};gG.exports=RCe});var cs=w((I$e,pG)=>{var hG=Li(),FCe=(r,e,t)=>new hG(r,t).compare(new hG(e,t));pG.exports=FCe});var UI=w((y$e,dG)=>{var NCe=cs(),TCe=(r,e,t)=>NCe(r,e,t)===0;dG.exports=TCe});var EG=w((w$e,mG)=>{var CG=gc(),LCe=UI(),MCe=(r,e)=>{if(LCe(r,e))return null;{let t=CG(r),i=CG(e),n=t.prerelease.length||i.prerelease.length,s=n?\"pre\":\"\",o=n?\"prerelease\":\"\";for(let a in t)if((a===\"major\"||a===\"minor\"||a===\"patch\")&&t[a]!==i[a])return s+a;return o}};mG.exports=MCe});var yG=w((B$e,IG)=>{var OCe=Li(),KCe=(r,e)=>new OCe(r,e).major;IG.exports=KCe});var BG=w((b$e,wG)=>{var UCe=Li(),HCe=(r,e)=>new UCe(r,e).minor;wG.exports=HCe});var QG=w((Q$e,bG)=>{var GCe=Li(),YCe=(r,e)=>new GCe(r,e).patch;bG.exports=YCe});var vG=w((S$e,SG)=>{var jCe=gc(),qCe=(r,e)=>{let t=jCe(r,e);return t&&t.prerelease.length?t.prerelease:null};SG.exports=qCe});var PG=w((v$e,xG)=>{var JCe=cs(),WCe=(r,e,t)=>JCe(e,r,t);xG.exports=WCe});var kG=w((x$e,DG)=>{var zCe=cs(),VCe=(r,e)=>zCe(r,e,!0);DG.exports=VCe});var HI=w((P$e,FG)=>{var RG=Li(),XCe=(r,e,t)=>{let i=new RG(r,t),n=new RG(e,t);return i.compare(n)||i.compareBuild(n)};FG.exports=XCe});var TG=w((D$e,NG)=>{var ZCe=HI(),_Ce=(r,e)=>r.sort((t,i)=>ZCe(t,i,e));NG.exports=_Ce});var MG=w((k$e,LG)=>{var $Ce=HI(),eme=(r,e)=>r.sort((t,i)=>$Ce(i,t,e));LG.exports=eme});var dd=w((R$e,OG)=>{var tme=cs(),rme=(r,e,t)=>tme(r,e,t)>0;OG.exports=rme});var GI=w((F$e,KG)=>{var ime=cs(),nme=(r,e,t)=>ime(r,e,t)<0;KG.exports=nme});var Cv=w((N$e,UG)=>{var sme=cs(),ome=(r,e,t)=>sme(r,e,t)!==0;UG.exports=ome});var YI=w((T$e,HG)=>{var ame=cs(),Ame=(r,e,t)=>ame(r,e,t)>=0;HG.exports=Ame});var jI=w((L$e,GG)=>{var lme=cs(),cme=(r,e,t)=>lme(r,e,t)<=0;GG.exports=cme});var mv=w((M$e,YG)=>{var ume=UI(),gme=Cv(),fme=dd(),hme=YI(),pme=GI(),dme=jI(),Cme=(r,e,t,i)=>{switch(e){case\"===\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r===t;case\"!==\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r!==t;case\"\":case\"=\":case\"==\":return ume(r,t,i);case\"!=\":return gme(r,t,i);case\">\":return fme(r,t,i);case\">=\":return hme(r,t,i);case\"<\":return pme(r,t,i);case\"<=\":return dme(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};YG.exports=Cme});var qG=w((O$e,jG)=>{var mme=Li(),Eme=gc(),{re:qI,t:JI}=uc(),Ime=(r,e)=>{if(r instanceof mme)return r;if(typeof r==\"number\"&&(r=String(r)),typeof r!=\"string\")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(qI[JI.COERCE]);else{let i;for(;(i=qI[JI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),qI[JI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;qI[JI.COERCERTL].lastIndex=-1}return t===null?null:Eme(`${t[2]}.${t[3]||\"0\"}.${t[4]||\"0\"}`,e)};jG.exports=Ime});var WG=w((K$e,JG)=>{\"use strict\";JG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var WI=w((U$e,zG)=>{\"use strict\";zG.exports=Ht;Ht.Node=fc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach==\"function\")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t<i;t++)e.push(arguments[t]);return e}Ht.prototype.removeNode=function(r){if(r.list!==this)throw new Error(\"removing node which does not belong to this list\");var e=r.next,t=r.prev;return e&&(e.prev=t),t&&(t.next=e),r===this.head&&(this.head=e),r===this.tail&&(this.tail=t),r.list.length--,r.next=null,r.prev=null,r.list=null,e};Ht.prototype.unshiftNode=function(r){if(r!==this.head){r.list&&r.list.removeNode(r);var e=this.head;r.list=this,r.next=e,e&&(e.prev=r),this.head=r,this.tail||(this.tail=r),this.length++}};Ht.prototype.pushNode=function(r){if(r!==this.tail){r.list&&r.list.removeNode(r);var e=this.tail;r.list=this,r.prev=e,e&&(e.next=r),this.tail=r,this.head||(this.head=r),this.length++}};Ht.prototype.push=function(){for(var r=0,e=arguments.length;r<e;r++)wme(this,arguments[r]);return this.length};Ht.prototype.unshift=function(){for(var r=0,e=arguments.length;r<e;r++)Bme(this,arguments[r]);return this.length};Ht.prototype.pop=function(){if(!!this.tail){var r=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,r}};Ht.prototype.shift=function(){if(!!this.head){var r=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,r}};Ht.prototype.forEach=function(r,e){e=e||this;for(var t=this.head,i=0;t!==null;i++)r.call(e,t.value,i,this),t=t.next};Ht.prototype.forEachReverse=function(r,e){e=e||this;for(var t=this.tail,i=this.length-1;t!==null;i--)r.call(e,t.value,i,this),t=t.prev};Ht.prototype.get=function(r){for(var e=0,t=this.head;t!==null&&e<r;e++)t=t.next;if(e===r&&t!==null)return t.value};Ht.prototype.getReverse=function(r){for(var e=0,t=this.tail;t!==null&&e<r;e++)t=t.prev;if(e===r&&t!==null)return t.value};Ht.prototype.map=function(r,e){e=e||this;for(var t=new Ht,i=this.head;i!==null;)t.push(r.call(e,i.value,this)),i=i.next;return t};Ht.prototype.mapReverse=function(r,e){e=e||this;for(var t=new Ht,i=this.tail;i!==null;)t.push(r.call(e,i.value,this)),i=i.prev;return t};Ht.prototype.reduce=function(r,e){var t,i=this.head;if(arguments.length>1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(;n!==null&&i<e;i++,n=n.next)t.push(n.value);return t};Ht.prototype.sliceReverse=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(var s=[],i=0;n&&i<e;i++)s.push(n.value),n=this.removeNode(n);n===null&&(n=this.tail),n!==this.head&&n!==this.tail&&(n=n.prev);for(var i=0;i<t.length;i++)n=yme(this,n,t[i]);return s};Ht.prototype.reverse=function(){for(var r=this.head,e=this.tail,t=r;t!==null;t=t.prev){var i=t.prev;t.prev=t.next,t.next=i}return this.head=e,this.tail=r,this};function yme(r,e,t){var i=e===r.head?new fc(t,null,e,r):new fc(t,e,e.next,r);return i.next===null&&(r.tail=i),i.prev===null&&(r.head=i),r.length++,i}function wme(r,e){r.tail=new fc(e,r.tail,null,r),r.head||(r.head=r.tail),r.length++}function Bme(r,e){r.head=new fc(e,null,r.head,r),r.tail||(r.tail=r.head),r.length++}function fc(r,e,t,i){if(!(this instanceof fc))return new fc(r,e,t,i);this.list=i,this.value=r,e?(e.next=this,this.prev=e):this.prev=null,t?(t.prev=this,this.next=t):this.next=null}try{WG()(Ht)}catch{}});var $G=w((H$e,_G)=>{\"use strict\";var bme=WI(),hc=Symbol(\"max\"),va=Symbol(\"length\"),Wg=Symbol(\"lengthCalculator\"),md=Symbol(\"allowStale\"),pc=Symbol(\"maxAge\"),Sa=Symbol(\"dispose\"),VG=Symbol(\"noDisposeOnSet\"),di=Symbol(\"lruList\"),Zs=Symbol(\"cache\"),ZG=Symbol(\"updateAgeOnGet\"),Ev=()=>1,yv=class{constructor(e){if(typeof e==\"number\"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!=\"number\"||e.max<0))throw new TypeError(\"max must be a non-negative number\");let t=this[hc]=e.max||1/0,i=e.length||Ev;if(this[Wg]=typeof i!=\"function\"?Ev:i,this[md]=e.stale||!1,e.maxAge&&typeof e.maxAge!=\"number\")throw new TypeError(\"maxAge must be a number\");this[pc]=e.maxAge||0,this[Sa]=e.dispose,this[VG]=e.noDisposeOnSet||!1,this[ZG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!=\"number\"||e<0)throw new TypeError(\"max must be a non-negative number\");this[hc]=e||1/0,Cd(this)}get max(){return this[hc]}set allowStale(e){this[md]=!!e}get allowStale(){return this[md]}set maxAge(e){if(typeof e!=\"number\")throw new TypeError(\"maxAge must be a non-negative number\");this[pc]=e,Cd(this)}get maxAge(){return this[pc]}set lengthCalculator(e){typeof e!=\"function\"&&(e=Ev),e!==this[Wg]&&(this[Wg]=e,this[va]=0,this[di].forEach(t=>{t.length=this[Wg](t.value,t.key),this[va]+=t.length})),Cd(this)}get lengthCalculator(){return this[Wg]}get length(){return this[va]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;XG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;XG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Sa]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Sa](e.key,e.value)),this[Zs]=new Map,this[di]=new bme,this[va]=0}dump(){return this[di].map(e=>zI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[pc],i&&typeof i!=\"number\")throw new TypeError(\"maxAge must be a number\");let n=i?Date.now():0,s=this[Wg](t,e);if(this[Zs].has(e)){if(s>this[hc])return zg(this,this[Zs].get(e)),!1;let l=this[Zs].get(e).value;return this[Sa]&&(this[VG]||this[Sa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[va]+=s-l.length,l.length=s,this.get(e),Cd(this),!0}let o=new wv(e,t,s,n,i);return o.length>this[hc]?(this[Sa]&&this[Sa](e,t),!1):(this[va]+=o.length,this[di].unshift(o),this[Zs].set(e,this[di].head),Cd(this),!0)}has(e){if(!this[Zs].has(e))return!1;let t=this[Zs].get(e).value;return!zI(this,t)}get(e){return Iv(this,e,!0)}peek(e){return Iv(this,e,!1)}pop(){let e=this[di].tail;return e?(zg(this,e),e.value):null}del(e){zg(this,this[Zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Zs].forEach((e,t)=>Iv(this,t,!1))}},Iv=(r,e,t)=>{let i=r[Zs].get(e);if(i){let n=i.value;if(zI(r,n)){if(zg(r,i),!r[md])return}else t&&(r[ZG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},zI=(r,e)=>{if(!e||!e.maxAge&&!r[pc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[pc]&&t>r[pc]},Cd=r=>{if(r[va]>r[hc])for(let e=r[di].tail;r[va]>r[hc]&&e!==null;){let t=e.prev;zg(r,e),e=t}},zg=(r,e)=>{if(e){let t=e.value;r[Sa]&&r[Sa](t.key,t.value),r[va]-=t.length,r[Zs].delete(t.key),r[di].removeNode(e)}},wv=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},XG=(r,e,t,i)=>{let n=t.value;zI(r,n)&&(zg(r,t),r[md]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};_G.exports=yv});var us=w((G$e,iY)=>{var dc=class{constructor(e,t){if(t=Sme(t),e instanceof dc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new dc(e.raw,t);if(e instanceof Bv)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!tY(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&kme(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(\",\")}:${e}`,n=eY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[bi.HYPHENRANGELOOSE]:Mi[bi.HYPHENRANGE];e=e.replace(o,Hme(this.options.includePrerelease)),Hr(\"hyphen replace\",e),e=e.replace(Mi[bi.COMPARATORTRIM],xme),Hr(\"comparator trim\",e,Mi[bi.COMPARATORTRIM]),e=e.replace(Mi[bi.TILDETRIM],Pme),e=e.replace(Mi[bi.CARETTRIM],Dme),e=e.split(/\\s+/).join(\" \");let a=s?Mi[bi.COMPARATORLOOSE]:Mi[bi.COMPARATOR],l=e.split(\" \").map(f=>Rme(f,this.options)).join(\" \").split(/\\s+/).map(f=>Ume(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Bv(f,this.options)),c=l.length,u=new Map;for(let f of l){if(tY(f))return[f];u.set(f.value,f)}u.size>1&&u.has(\"\")&&u.delete(\"\");let g=[...u.values()];return eY.set(i,g),g}intersects(e,t){if(!(e instanceof dc))throw new TypeError(\"a Range is required\");return this.set.some(i=>rY(i,t)&&e.set.some(n=>rY(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e==\"string\")try{e=new vme(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Gme(this.set[t],e,this.options))return!0;return!1}};iY.exports=dc;var Qme=$G(),eY=new Qme({max:1e3}),Sme=hd(),Bv=Ed(),Hr=fd(),vme=Li(),{re:Mi,t:bi,comparatorTrimReplace:xme,tildeTrimReplace:Pme,caretTrimReplace:Dme}=uc(),tY=r=>r.value===\"<0.0.0-0\",kme=r=>r.value===\"\",rY=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},Rme=(r,e)=>(Hr(\"comp\",r,e),r=Tme(r,e),Hr(\"caret\",r),r=Fme(r,e),Hr(\"tildes\",r),r=Mme(r,e),Hr(\"xrange\",r),r=Kme(r,e),Hr(\"stars\",r),r),$i=r=>!r||r.toLowerCase()===\"x\"||r===\"*\",Fme=(r,e)=>r.trim().split(/\\s+/).map(t=>Nme(t,e)).join(\" \"),Nme=(r,e)=>{let t=e.loose?Mi[bi.TILDELOOSE]:Mi[bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Hr(\"tilde\",r,i,n,s,o,a);let l;return $i(n)?l=\"\":$i(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:$i(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Hr(\"replaceTilde pr\",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Hr(\"tilde return\",l),l})},Tme=(r,e)=>r.trim().split(/\\s+/).map(t=>Lme(t,e)).join(\" \"),Lme=(r,e)=>{Hr(\"caret\",r,e);let t=e.loose?Mi[bi.CARETLOOSE]:Mi[bi.CARET],i=e.includePrerelease?\"-0\":\"\";return r.replace(t,(n,s,o,a,l)=>{Hr(\"caret\",r,n,s,o,a,l);let c;return $i(s)?c=\"\":$i(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:$i(a)?s===\"0\"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Hr(\"replaceCaret pr\",l),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Hr(\"no pr\"),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Hr(\"caret return\",c),c})},Mme=(r,e)=>(Hr(\"replaceXRanges\",r,e),r.split(/\\s+/).map(t=>Ome(t,e)).join(\" \")),Ome=(r,e)=>{r=r.trim();let t=e.loose?Mi[bi.XRANGELOOSE]:Mi[bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Hr(\"xRange\",r,i,n,s,o,a,l);let c=$i(s),u=c||$i(o),g=u||$i(a),f=g;return n===\"=\"&&f&&(n=\"\"),l=e.includePrerelease?\"-0\":\"\",c?n===\">\"||n===\"<\"?i=\"<0.0.0-0\":i=\"*\":n&&f?(u&&(o=0),a=0,n===\">\"?(n=\">=\",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n===\"<=\"&&(n=\"<\",u?s=+s+1:o=+o+1),n===\"<\"&&(l=\"-0\"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Hr(\"xRange return\",i),i})},Kme=(r,e)=>(Hr(\"replaceStars\",r,e),r.trim().replace(Mi[bi.STAR],\"\")),Ume=(r,e)=>(Hr(\"replaceGTE0\",r,e),r.trim().replace(Mi[e.includePrerelease?bi.GTE0PRE:bi.GTE0],\"\")),Hme=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>($i(i)?t=\"\":$i(n)?t=`>=${i}.0.0${r?\"-0\":\"\"}`:$i(s)?t=`>=${i}.${n}.0${r?\"-0\":\"\"}`:o?t=`>=${t}`:t=`>=${t}${r?\"-0\":\"\"}`,$i(c)?l=\"\":$i(u)?l=`<${+c+1}.0.0-0`:$i(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),Gme=(r,e,t)=>{for(let i=0;i<r.length;i++)if(!r[i].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let i=0;i<r.length;i++)if(Hr(r[i].semver),r[i].semver!==Bv.ANY&&r[i].semver.prerelease.length>0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ed=w((Y$e,AY)=>{var Id=Symbol(\"SemVer ANY\"),Vg=class{static get ANY(){return Id}constructor(e,t){if(t=Yme(t),e instanceof Vg){if(e.loose===!!t.loose)return e;e=e.value}Qv(\"comparator\",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Id?this.value=\"\":this.value=this.operator+this.semver.version,Qv(\"comp\",this)}parse(e){let t=this.options.loose?nY[sY.COMPARATORLOOSE]:nY[sY.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:\"\",this.operator===\"=\"&&(this.operator=\"\"),i[2]?this.semver=new oY(i[2],this.options.loose):this.semver=Id}toString(){return this.value}test(e){if(Qv(\"Comparator.test\",e,this.options.loose),this.semver===Id||e===Id)return!0;if(typeof e==\"string\")try{e=new oY(e,this.options)}catch{return!1}return bv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Vg))throw new TypeError(\"a Comparator is required\");if((!t||typeof t!=\"object\")&&(t={loose:!!t,includePrerelease:!1}),this.operator===\"\")return this.value===\"\"?!0:new aY(e.value,t).test(this.value);if(e.operator===\"\")return e.value===\"\"?!0:new aY(this.value,t).test(e.semver);let i=(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\">=\"||e.operator===\">\"),n=(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\"<=\"||e.operator===\"<\"),s=this.semver.version===e.semver.version,o=(this.operator===\">=\"||this.operator===\"<=\")&&(e.operator===\">=\"||e.operator===\"<=\"),a=bv(this.semver,\"<\",e.semver,t)&&(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\"<=\"||e.operator===\"<\"),l=bv(this.semver,\">\",e.semver,t)&&(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\">=\"||e.operator===\">\");return i||n||s&&o||a||l}};AY.exports=Vg;var Yme=hd(),{re:nY,t:sY}=uc(),bv=mv(),Qv=fd(),oY=Li(),aY=us()});var yd=w((j$e,lY)=>{var jme=us(),qme=(r,e,t)=>{try{e=new jme(e,t)}catch{return!1}return e.test(r)};lY.exports=qme});var uY=w((q$e,cY)=>{var Jme=us(),Wme=(r,e)=>new Jme(r,e).set.map(t=>t.map(i=>i.value).join(\" \").trim().split(\" \"));cY.exports=Wme});var fY=w((J$e,gY)=>{var zme=Li(),Vme=us(),Xme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new Vme(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new zme(i,t))}),i};gY.exports=Xme});var pY=w((W$e,hY)=>{var Zme=Li(),_me=us(),$me=(r,e,t)=>{let i=null,n=null,s=null;try{s=new _me(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new Zme(i,t))}),i};hY.exports=$me});var mY=w((z$e,CY)=>{var Sv=Li(),eEe=us(),dY=dd(),tEe=(r,e)=>{r=new eEe(r,e);let t=new Sv(\"0.0.0\");if(r.test(t)||(t=new Sv(\"0.0.0-0\"),r.test(t)))return t;t=null;for(let i=0;i<r.set.length;++i){let n=r.set[i],s=null;n.forEach(o=>{let a=new Sv(o.semver.version);switch(o.operator){case\">\":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case\"\":case\">=\":(!s||dY(a,s))&&(s=a);break;case\"<\":case\"<=\":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||dY(t,s))&&(t=s)}return t&&r.test(t)?t:null};CY.exports=tEe});var IY=w((V$e,EY)=>{var rEe=us(),iEe=(r,e)=>{try{return new rEe(r,e).range||\"*\"}catch{return null}};EY.exports=iEe});var VI=w((X$e,bY)=>{var nEe=Li(),BY=Ed(),{ANY:sEe}=BY,oEe=us(),aEe=yd(),yY=dd(),wY=GI(),AEe=jI(),lEe=YI(),cEe=(r,e,t,i)=>{r=new nEe(r,i),e=new oEe(e,i);let n,s,o,a,l;switch(t){case\">\":n=yY,s=AEe,o=wY,a=\">\",l=\">=\";break;case\"<\":n=wY,s=lEe,o=yY,a=\"<\",l=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(aEe(r,e,i))return!1;for(let c=0;c<e.set.length;++c){let u=e.set[c],g=null,f=null;if(u.forEach(h=>{h.semver===sEe&&(h=new BY(\">=0.0.0\")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};bY.exports=cEe});var SY=w((Z$e,QY)=>{var uEe=VI(),gEe=(r,e,t)=>uEe(r,e,\">\",t);QY.exports=gEe});var xY=w((_$e,vY)=>{var fEe=VI(),hEe=(r,e,t)=>fEe(r,e,\"<\",t);vY.exports=hEe});var kY=w(($$e,DY)=>{var PY=us(),pEe=(r,e,t)=>(r=new PY(r,t),e=new PY(e,t),r.intersects(e));DY.exports=pEe});var FY=w((eet,RY)=>{var dEe=yd(),CEe=cs();RY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>CEe(u,g,t));for(let u of o)dEe(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push(\"*\"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(\" || \"),c=typeof e.raw==\"string\"?e.raw:String(e);return l.length<c.length?l:e}});var OY=w((tet,MY)=>{var NY=us(),XI=Ed(),{ANY:vv}=XI,wd=yd(),xv=cs(),mEe=(r,e,t={})=>{if(r===e)return!0;r=new NY(r,t),e=new NY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=EEe(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},EEe=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===vv){if(e.length===1&&e[0].semver===vv)return!0;t.includePrerelease?r=[new XI(\">=0.0.0-0\")]:r=[new XI(\">=0.0.0\")]}if(e.length===1&&e[0].semver===vv){if(t.includePrerelease)return!0;e=[new XI(\">=0.0.0\")]}let i=new Set,n,s;for(let h of r)h.operator===\">\"||h.operator===\">=\"?n=TY(n,h,t):h.operator===\"<\"||h.operator===\"<=\"?s=LY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=xv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==\">=\"||s.operator!==\"<=\"))return null}for(let h of i){if(n&&!wd(h,String(n),t)||s&&!wd(h,String(s),t))return null;for(let p of e)if(!wd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator===\"<\"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===\">\"||h.operator===\">=\",c=c||h.operator===\"<\"||h.operator===\"<=\",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===\">\"||h.operator===\">=\"){if(a=TY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===\">=\"&&!wd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator===\"<\"||h.operator===\"<=\"){if(l=LY(s,h,t),l===h&&l!==s)return!1}else if(s.operator===\"<=\"&&!wd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},TY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===\">\"&&r.operator===\">=\"?e:r},LY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i<0?r:i>0||e.operator===\"<\"&&r.operator===\"<=\"?e:r};MY.exports=mEe});var Xr=w((ret,KY)=>{var Pv=uc();KY.exports={re:Pv.re,src:Pv.src,tokens:Pv.t,SEMVER_SPEC_VERSION:gd().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:MI().compareIdentifiers,rcompareIdentifiers:MI().rcompareIdentifiers,parse:gc(),valid:lG(),clean:uG(),inc:fG(),diff:EG(),major:yG(),minor:BG(),patch:QG(),prerelease:vG(),compare:cs(),rcompare:PG(),compareLoose:kG(),compareBuild:HI(),sort:TG(),rsort:MG(),gt:dd(),lt:GI(),eq:UI(),neq:Cv(),gte:YI(),lte:jI(),cmp:mv(),coerce:qG(),Comparator:Ed(),Range:us(),satisfies:yd(),toComparators:uY(),maxSatisfying:fY(),minSatisfying:pY(),minVersion:mY(),validRange:IY(),outside:VI(),gtr:SY(),ltr:xY(),intersects:kY(),simplifyRange:FY(),subset:OY()}});var Dv=w(ZI=>{\"use strict\";Object.defineProperty(ZI,\"__esModule\",{value:!0});ZI.VERSION=void 0;ZI.VERSION=\"9.1.0\"});var Gt=w((exports,module)=>{\"use strict\";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i<n;i++)(s||!(i in e))&&(s||(s=Array.prototype.slice.call(e,0,i)),s[i]=e[i]);return r.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(exports,\"__esModule\",{value:!0});exports.toFastProperties=exports.timer=exports.peek=exports.isES2015MapSupported=exports.PRINT_WARNING=exports.PRINT_ERROR=exports.packArray=exports.IDENTITY=exports.NOOP=exports.merge=exports.groupBy=exports.defaults=exports.assignNoOverwrite=exports.assign=exports.zipObject=exports.sortBy=exports.indexOf=exports.some=exports.difference=exports.every=exports.isObject=exports.isRegExp=exports.isArray=exports.partial=exports.uniq=exports.compact=exports.reduce=exports.findAll=exports.find=exports.cloneObj=exports.cloneArr=exports.contains=exports.has=exports.pick=exports.reject=exports.filter=exports.dropRight=exports.drop=exports.isFunction=exports.isUndefined=exports.isString=exports.forEach=exports.last=exports.first=exports.flatten=exports.map=exports.mapValues=exports.values=exports.keys=exports.isEmpty=void 0;exports.upperFirst=void 0;function isEmpty(r){return r&&r.length===0}exports.isEmpty=isEmpty;function keys(r){return r==null?[]:Object.keys(r)}exports.keys=keys;function values(r){for(var e=[],t=Object.keys(r),i=0;i<t.length;i++)e.push(r[t[i]]);return e}exports.values=values;function mapValues(r,e){for(var t=[],i=keys(r),n=0;n<i.length;n++){var s=i[n];t.push(e.call(null,r[s],s))}return t}exports.mapValues=mapValues;function map(r,e){for(var t=[],i=0;i<r.length;i++)t.push(e.call(null,r[i],i));return t}exports.map=map;function flatten(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];Array.isArray(i)?e=e.concat(flatten(i)):e.push(i)}return e}exports.flatten=flatten;function first(r){return isEmpty(r)?void 0:r[0]}exports.first=first;function last(r){var e=r&&r.length;return e?r[e-1]:void 0}exports.last=last;function forEach(r,e){if(Array.isArray(r))for(var t=0;t<r.length;t++)e.call(null,r[t],t);else if(isObject(r))for(var i=keys(r),t=0;t<i.length;t++){var n=i[t],s=r[n];e.call(null,s,n)}else throw Error(\"non exhaustive match\")}exports.forEach=forEach;function isString(r){return typeof r==\"string\"}exports.isString=isString;function isUndefined(r){return r===void 0}exports.isUndefined=isUndefined;function isFunction(r){return r instanceof Function}exports.isFunction=isFunction;function drop(r,e){return e===void 0&&(e=1),r.slice(e,r.length)}exports.drop=drop;function dropRight(r,e){return e===void 0&&(e=1),r.slice(0,r.length-e)}exports.dropRight=dropRight;function filter(r,e){var t=[];if(Array.isArray(r))for(var i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.filter=filter;function reject(r,e){return filter(r,function(t){return!e(t)})}exports.reject=reject;function pick(r,e){for(var t=Object.keys(r),i={},n=0;n<t.length;n++){var s=t[n],o=r[s];e(o)&&(i[s]=o)}return i}exports.pick=pick;function has(r,e){return isObject(r)?r.hasOwnProperty(e):!1}exports.has=has;function contains(r,e){return find(r,function(t){return t===e})!==void 0}exports.contains=contains;function cloneArr(r){for(var e=[],t=0;t<r.length;t++)e.push(r[t]);return e}exports.cloneArr=cloneArr;function cloneObj(r){var e={};for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}exports.cloneObj=cloneObj;function find(r,e){for(var t=0;t<r.length;t++){var i=r[t];if(e.call(null,i))return i}}exports.find=find;function findAll(r,e){for(var t=[],i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.findAll=findAll;function reduce(r,e,t){for(var i=Array.isArray(r),n=i?r:values(r),s=i?[]:keys(r),o=t,a=0;a<n.length;a++)o=e.call(null,o,n[a],i?a:s[a]);return o}exports.reduce=reduce;function compact(r){return reject(r,function(e){return e==null})}exports.compact=compact;function uniq(r,e){e===void 0&&(e=function(i){return i});var t=[];return reduce(r,function(i,n){var s=e(n);return contains(t,s)?i:(t.push(s),i.concat(n))},[])}exports.uniq=uniq;function partial(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];var i=[null],n=i.concat(e);return Function.bind.apply(r,n)}exports.partial=partial;function isArray(r){return Array.isArray(r)}exports.isArray=isArray;function isRegExp(r){return r instanceof RegExp}exports.isRegExp=isRegExp;function isObject(r){return r instanceof Object}exports.isObject=isObject;function every(r,e){for(var t=0;t<r.length;t++)if(!e(r[t],t))return!1;return!0}exports.every=every;function difference(r,e){return reject(r,function(t){return contains(e,t)})}exports.difference=difference;function some(r,e){for(var t=0;t<r.length;t++)if(e(r[t]))return!0;return!1}exports.some=some;function indexOf(r,e){for(var t=0;t<r.length;t++)if(r[t]===e)return t;return-1}exports.indexOf=indexOf;function sortBy(r,e){var t=cloneArr(r);return t.sort(function(i,n){return e(i)-e(n)}),t}exports.sortBy=sortBy;function zipObject(r,e){if(r.length!==e.length)throw Error(\"can't zipObject with different number of keys and values!\");for(var t={},i=0;i<r.length;i++)t[r[i]]=e[i];return t}exports.zipObject=zipObject;function assign(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];r[a]=n[a]}return r}exports.assign=assign;function assignNoOverwrite(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];has(r,a)||(r[a]=n[a])}return r}exports.assignNoOverwrite=assignNoOverwrite;function defaults(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return assignNoOverwrite.apply(void 0,__spreadArray([{}],r,!1))}exports.defaults=defaults;function groupBy(r,e){var t={};return forEach(r,function(i){var n=e(i),s=t[n];s?s.push(i):t[n]=[i]}),t}exports.groupBy=groupBy;function merge(r,e){for(var t=cloneObj(r),i=keys(e),n=0;n<i.length;n++){var s=i[n],o=e[s];t[s]=o}return t}exports.merge=merge;function NOOP(){}exports.NOOP=NOOP;function IDENTITY(r){return r}exports.IDENTITY=IDENTITY;function packArray(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];e.push(i!==void 0?i:void 0)}return e}exports.packArray=packArray;function PRINT_ERROR(r){console&&console.error&&console.error(\"Error: \"+r)}exports.PRINT_ERROR=PRINT_ERROR;function PRINT_WARNING(r){console&&console.warn&&console.warn(\"Warning: \"+r)}exports.PRINT_WARNING=PRINT_WARNING;function isES2015MapSupported(){return typeof Map==\"function\"}exports.isES2015MapSupported=isES2015MapSupported;function peek(r){return r[r.length-1]}exports.peek=peek;function timer(r){var e=new Date().getTime(),t=r(),i=new Date().getTime(),n=i-e;return{time:n,value:t}}exports.timer=timer;function toFastProperties(toBecomeFast){function FakeConstructor(){}FakeConstructor.prototype=toBecomeFast;var fakeInstance=new FakeConstructor;function fakeAccess(){return typeof fakeInstance.bar}return fakeAccess(),fakeAccess(),toBecomeFast;eval(toBecomeFast)}exports.toFastProperties=toFastProperties;function upperFirst(r){if(!r)return r;var e=getCharacterFromCodePointAt(r,0);return e.toUpperCase()+r.substring(e.length)}exports.upperFirst=upperFirst;var surrogatePairPattern=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;function getCharacterFromCodePointAt(r,e){var t=r.substring(e,e+1);return surrogatePairPattern.test(t)?t:r[e]}});var $I=w((UY,_I)=>{(function(r,e){typeof define==\"function\"&&define.amd?define([],e):typeof _I==\"object\"&&_I.exports?_I.exports=e():r.regexpToAst=e()})(typeof self<\"u\"?self:UY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar(\"/\");var C=this.disjunction();this.consumeChar(\"/\");for(var y={type:\"Flags\",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case\"g\":o(y,\"global\");break;case\"i\":o(y,\"ignoreCase\");break;case\"m\":o(y,\"multiLine\");break;case\"u\":o(y,\"unicode\");break;case\"y\":o(y,\"sticky\");break}if(this.idx!==this.input.length)throw Error(\"Redundant input: \"+this.input.substring(this.idx));return{type:\"Pattern\",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()===\"|\";)this.consumeChar(\"|\"),p.push(this.alternative());return{type:\"Disjunction\",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:\"Alternative\",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case\"^\":return{type:\"StartAnchor\",loc:this.loc(p)};case\"$\":return{type:\"EndAnchor\",loc:this.loc(p)};case\"\\\\\":switch(this.popChar()){case\"b\":return{type:\"WordBoundary\",loc:this.loc(p)};case\"B\":return{type:\"NonWordBoundary\",loc:this.loc(p)}}throw Error(\"Invalid Assertion Escape\");case\"(\":this.consumeChar(\"?\");var C;switch(this.popChar()){case\"=\":C=\"Lookahead\";break;case\"!\":C=\"NegativeLookahead\";break}a(C);var y=this.disjunction();return this.consumeChar(\")\"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case\"*\":C={atLeast:0,atMost:1/0};break;case\"+\":C={atLeast:1,atMost:1/0};break;case\"?\":C={atLeast:0,atMost:1};break;case\"{\":var B=this.integerIncludingZero();switch(this.popChar()){case\"}\":C={atLeast:B,atMost:B};break;case\",\":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar(\"}\");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)===\"?\"?(this.consumeChar(\"?\"),C.greedy=!1):C.greedy=!0,C.type=\"Quantifier\",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case\".\":p=this.dotAll();break;case\"\\\\\":p=this.atomEscape();break;case\"[\":p=this.characterClass();break;case\"(\":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar(\".\"),{type:\"Set\",complement:!0,value:[n(`\n`),n(\"\\r\"),n(\"\\u2028\"),n(\"\\u2029\")]}},r.prototype.atomEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":return this.decimalEscapeAtom();case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:\"GroupBackReference\",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case\"d\":p=u;break;case\"D\":p=u,C=!0;break;case\"s\":p=f;break;case\"S\":p=f,C=!0;break;case\"w\":p=g;break;case\"W\":p=g,C=!0;break}return a(p),{type:\"Set\",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case\"f\":p=n(\"\\f\");break;case\"n\":p=n(`\n`);break;case\"r\":p=n(\"\\r\");break;case\"t\":p=n(\"\t\");break;case\"v\":p=n(\"\\v\");break}return a(p),{type:\"Character\",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar(\"c\");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error(\"Invalid \");var C=p.toUpperCase().charCodeAt(0)-64;return{type:\"Character\",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar(\"0\"),{type:\"Character\",value:n(\"\\0\")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar(\"x\"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar(\"u\"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:\"Character\",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"\\\\\":case\"]\":throw Error(\"TBD\");default:var p=this.popChar();return{type:\"Character\",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar(\"[\"),this.peekChar(0)===\"^\"&&(this.consumeChar(\"^\"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type===\"Character\";if(B&&this.isRangeDash()){this.consumeChar(\"-\");var v=this.classAtom(),D=v.type===\"Character\";if(D){if(v.value<y.value)throw Error(\"Range out of order in character class\");p.push({from:y.value,to:v.value})}else s(y.value,p),p.push(n(\"-\")),s(v.value,p)}else s(y.value,p)}return this.consumeChar(\"]\"),{type:\"Set\",complement:C,value:p}},r.prototype.classAtom=function(){switch(this.peekChar()){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":throw Error(\"TBD\");case\"\\\\\":return this.classEscape();default:return this.classPatternCharacterAtom()}},r.prototype.classEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"b\":return this.consumeChar(\"b\"),{type:\"Character\",value:n(\"\\b\")};case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.group=function(){var p=!0;switch(this.consumeChar(\"(\"),this.peekChar(0)){case\"?\":this.consumeChar(\"?\"),this.consumeChar(\":\"),p=!1;break;default:this.groupIdx++;break}var C=this.disjunction();this.consumeChar(\")\");var y={type:\"Group\",capturing:p,value:C};return p&&(y.idx=this.groupIdx),y},r.prototype.positiveInteger=function(){var p=this.popChar();if(i.test(p)===!1)throw Error(\"Expecting a positive integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.integerIncludingZero=function(){var p=this.popChar();if(t.test(p)===!1)throw Error(\"Expecting an integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.patternCharacter=function(){var p=this.popChar();switch(p){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":throw Error(\"TBD\");default:return{type:\"Character\",value:n(p)}}},r.prototype.isRegExpFlag=function(){switch(this.peekChar(0)){case\"g\":case\"i\":case\"m\":case\"u\":case\"y\":return!0;default:return!1}},r.prototype.isRangeDash=function(){return this.peekChar()===\"-\"&&this.isClassAtom(1)},r.prototype.isDigit=function(){return t.test(this.peekChar(0))},r.prototype.isClassAtom=function(p){switch(p===void 0&&(p=0),this.peekChar(p)){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.isTerm=function(){return this.isAtom()||this.isAssertion()},r.prototype.isAtom=function(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case\".\":case\"\\\\\":case\"[\":case\"(\":return!0;default:return!1}},r.prototype.isAssertion=function(){switch(this.peekChar(0)){case\"^\":case\"$\":return!0;case\"\\\\\":switch(this.peekChar(1)){case\"b\":case\"B\":return!0;default:return!1}case\"(\":return this.peekChar(1)===\"?\"&&(this.peekChar(2)===\"=\"||this.peekChar(2)===\"!\");default:return!1}},r.prototype.isQuantifier=function(){var p=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(p)}},r.prototype.isPatternCharacter=function(){switch(this.peekChar()){case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":case\"/\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.parseHexDigits=function(p){for(var C=\"\",y=0;y<p;y++){var B=this.popChar();if(e.test(B)===!1)throw Error(\"Expecting a HexDecimal digits\");C+=B}var v=parseInt(C,16);return{type:\"Character\",value:v}},r.prototype.peekChar=function(p){return p===void 0&&(p=0),this.input[this.idx+p]},r.prototype.popChar=function(){var p=this.peekChar(0);return this.consumeChar(),p},r.prototype.consumeChar=function(p){if(p!==void 0&&this.input[this.idx]!==p)throw Error(\"Expected: '\"+p+\"' but found: '\"+this.input[this.idx]+\"' at offset: \"+this.idx);if(this.idx>=this.input.length)throw Error(\"Unexpected end of input\");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw\"duplicate flag \"+C;p[C]=!0}function a(p){if(p===void 0)throw Error(\"Internal Error - Should never get here!\")}function l(){throw Error(\"Internal Error - Should never get here!\")}var c,u=[];for(c=n(\"0\");c<=n(\"9\");c++)u.push(c);var g=[n(\"_\")].concat(u);for(c=n(\"a\");c<=n(\"z\");c++)g.push(c);for(c=n(\"A\");c<=n(\"Z\");c++)g.push(c);var f=[n(\" \"),n(\"\\f\"),n(`\n`),n(\"\\r\"),n(\"\t\"),n(\"\\v\"),n(\"\t\"),n(\"\\xA0\"),n(\"\\u1680\"),n(\"\\u2000\"),n(\"\\u2001\"),n(\"\\u2002\"),n(\"\\u2003\"),n(\"\\u2004\"),n(\"\\u2005\"),n(\"\\u2006\"),n(\"\\u2007\"),n(\"\\u2008\"),n(\"\\u2009\"),n(\"\\u200A\"),n(\"\\u2028\"),n(\"\\u2029\"),n(\"\\u202F\"),n(\"\\u205F\"),n(\"\\u3000\"),n(\"\\uFEFF\")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case\"Pattern\":this.visitPattern(p);break;case\"Flags\":this.visitFlags(p);break;case\"Disjunction\":this.visitDisjunction(p);break;case\"Alternative\":this.visitAlternative(p);break;case\"StartAnchor\":this.visitStartAnchor(p);break;case\"EndAnchor\":this.visitEndAnchor(p);break;case\"WordBoundary\":this.visitWordBoundary(p);break;case\"NonWordBoundary\":this.visitNonWordBoundary(p);break;case\"Lookahead\":this.visitLookahead(p);break;case\"NegativeLookahead\":this.visitNegativeLookahead(p);break;case\"Character\":this.visitCharacter(p);break;case\"Set\":this.visitSet(p);break;case\"Group\":this.visitGroup(p);break;case\"GroupBackReference\":this.visitGroupBackReference(p);break;case\"Quantifier\":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:\"0.5.0\"}})});var ty=w(Xg=>{\"use strict\";Object.defineProperty(Xg,\"__esModule\",{value:!0});Xg.clearRegExpParserCache=Xg.getRegExpAst=void 0;var IEe=$I(),ey={},yEe=new IEe.RegExpParser;function wEe(r){var e=r.toString();if(ey.hasOwnProperty(e))return ey[e];var t=yEe.pattern(e);return ey[e]=t,t}Xg.getRegExpAst=wEe;function BEe(){ey={}}Xg.clearRegExpParserCache=BEe});var qY=w(Cn=>{\"use strict\";var bEe=Cn&&Cn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cn,\"__esModule\",{value:!0});Cn.canMatchCharCode=Cn.firstCharOptimizedIndices=Cn.getOptimizedStartCodesIndices=Cn.failedOptimizationPrefixMsg=void 0;var GY=$I(),gs=Gt(),YY=ty(),xa=Rv(),jY=\"Complement Sets are not supported for first char optimization\";Cn.failedOptimizationPrefixMsg=`Unable to use \"first char\" lexer optimizations:\n`;function QEe(r,e){e===void 0&&(e=!1);try{var t=(0,YY.getRegExpAst)(r),i=iy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===jY)e&&(0,gs.PRINT_WARNING)(\"\"+Cn.failedOptimizationPrefixMsg+(\"\tUnable to optimize: < \"+r.toString()+` >\n`)+`\tComplement Sets cannot be automatically optimized.\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n=\"\";e&&(n=`\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,gs.PRINT_ERROR)(Cn.failedOptimizationPrefixMsg+`\n`+(\"\tFailed parsing: < \"+r.toString()+` >\n`)+(\"\tUsing the regexp-to-ast library version: \"+GY.VERSION+`\n`)+\"\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\"+n)}}return[]}Cn.getOptimizedStartCodesIndices=QEe;function iy(r,e,t){switch(r.type){case\"Disjunction\":for(var i=0;i<r.value.length;i++)iy(r.value[i],e,t);break;case\"Alternative\":for(var n=r.value,i=0;i<n.length;i++){var s=n[i];switch(s.type){case\"EndAnchor\":case\"GroupBackReference\":case\"Lookahead\":case\"NegativeLookahead\":case\"StartAnchor\":case\"WordBoundary\":case\"NonWordBoundary\":continue}var o=s;switch(o.type){case\"Character\":ry(o.value,e,t);break;case\"Set\":if(o.complement===!0)throw Error(jY);(0,gs.forEach)(o.value,function(c){if(typeof c==\"number\")ry(c,e,t);else{var u=c;if(t===!0)for(var g=u.from;g<=u.to;g++)ry(g,e,t);else{for(var g=u.from;g<=u.to&&g<xa.minOptimizationVal;g++)ry(g,e,t);if(u.to>=xa.minOptimizationVal)for(var f=u.from>=xa.minOptimizationVal?u.from:xa.minOptimizationVal,h=u.to,p=(0,xa.charCodeToOptimizedIndex)(f),C=(0,xa.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case\"Group\":iy(o.value,e,t);break;default:throw Error(\"Non Exhaustive Match\")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type===\"Group\"&&kv(o)===!1||o.type!==\"Group\"&&a===!1)break}break;default:throw Error(\"non exhaustive match!\")}return(0,gs.values)(e)}Cn.firstCharOptimizedIndices=iy;function ry(r,e,t){var i=(0,xa.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&SEe(r,e)}function SEe(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,xa.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,xa.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function HY(r,e){return(0,gs.find)(r.value,function(t){if(typeof t==\"number\")return(0,gs.contains)(e,t);var i=t;return(0,gs.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function kv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,gs.isArray)(r.value)?(0,gs.every)(r.value,kv):kv(r.value):!1}var vEe=function(r){bEe(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case\"Lookahead\":this.visitLookahead(t);return;case\"NegativeLookahead\":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,gs.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?HY(t,this.targetCharCodes)===void 0&&(this.found=!0):HY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(GY.BaseRegExpVisitor);function xEe(r,e){if(e instanceof RegExp){var t=(0,YY.getRegExpAst)(e),i=new vEe(r);return i.visit(t),i.found}else return(0,gs.find)(e,function(n){return(0,gs.contains)(r,n.charCodeAt(0))})!==void 0}Cn.canMatchCharCode=xEe});var Rv=w(Ve=>{\"use strict\";var JY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,\"__esModule\",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var WY=$I(),ir=Bd(),xe=Gt(),Zg=qY(),zY=ty(),ko=\"PATTERN\";Ve.DEFAULT_MODE=\"defaultMode\";Ve.MODES=\"modes\";Ve.SUPPORT_STICKY=typeof new RegExp(\"(?:)\").sticky==\"boolean\";function PEe(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=PEe;function DEe(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=DEe;function kEe(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:\"full\",lineTerminatorCharacters:[\"\\r\",`\n`],tracer:function(v,D){return D()}});var t=e.tracer;t(\"initCharCodeToOptimizedIndexMap\",function(){HEe()});var i;t(\"Reject Lexer.NA\",function(){i=(0,xe.reject)(r,function(v){return v[ko]===ir.Lexer.NA})});var n=!1,s;t(\"Transform Patterns\",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[ko];if((0,xe.isRegExp)(D)){var T=D.source;return T.length===1&&T!==\"^\"&&T!==\"$\"&&T!==\".\"&&!D.ignoreCase?T:T.length===2&&T[0]===\"\\\\\"&&!(0,xe.contains)([\"d\",\"D\",\"s\",\"S\",\"t\",\"r\",\"n\",\"t\",\"0\",\"c\",\"b\",\"B\",\"f\",\"v\",\"w\",\"W\"],T[1])?T[1]:e.useSticky?Tv(D):Nv(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,\"exec\"))return n=!0,D;if(typeof D==\"string\"){if(D.length===1)return D;var H=D.replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\"),j=new RegExp(H);return e.useSticky?Tv(j):Nv(j)}else throw Error(\"non exhaustive match\")}})});var o,a,l,c,u;t(\"misc mapping\",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error(\"non exhaustive match\")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return T}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,\"POP_MODE\")})});var g;t(\"Line Terminator Handling\",function(){var v=Aj(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!==\"onlyOffset\"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,\"LINE_BREAKS\"))return D.LINE_BREAKS;if(oj(D,v)===!1)return(0,Zg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t(\"Misc Mapping #2\",function(){f=(0,xe.map)(i,Mv),h=(0,xe.map)(s,sj),p=(0,xe.reduce)(i,function(v,D){var T=D.GROUP;return(0,xe.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t(\"First Char Optimization\",function(){B=(0,xe.reduce)(i,function(v,D,T){if(typeof D.PATTERN==\"string\"){var H=D.PATTERN.charCodeAt(0),j=Lv(H);Fv(v,j,C[T])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var _=typeof W==\"string\"?W.charCodeAt(0):W,A=Lv(_);$!==A&&($=A,Fv(v,A,C[T]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tUnable to analyze < \"+D.PATTERN.toString()+` > pattern.\n`)+`\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Zg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){Fv(v,W,C[T])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tTokenType: <\"+D.name+`> is using a custom token pattern without providing <start_chars_hint> parameter.\n`)+`\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t(\"ArrayPacking\",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=kEe;function REe(r,e){var t=[],i=VY(r);t=t.concat(i.errors);var n=XY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(FEe(s)),t=t.concat(rj(s)),t=t.concat(ij(s,e)),t=t.concat(nj(s)),t}Ve.validatePatterns=REe;function FEe(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[ko])});return e=e.concat(ZY(t)),e=e.concat($Y(t)),e=e.concat(ej(t)),e=e.concat(tj(t)),e=e.concat(_Y(t)),e}function VY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,ko)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- missing static 'PATTERN' property\",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=VY;function XY(r){var e=(0,xe.filter)(r,function(n){var s=n[ko];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,\"exec\")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=XY;var NEe=/[^\\\\][\\$]/;function ZY(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return NEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$'\n\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=ZY;function _Y(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n.test(\"\")}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' must not match an empty string\",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=_Y;var TEe=/[^\\\\[][\\^]|^\\^/;function $Y(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return TEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^'\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=$Y;function ej(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=ej;function tj(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:\"The same RegExp pattern ->\"+a+\"<-\"+(\"has been used in all of the following Token Types: \"+o.join(\", \")+\" <-\"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=tj;function rj(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,\"GROUP\"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=rj;function ij(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s=\"Token Type: ->\"+n.name+\"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\"+n.PUSH_MODE+\"<-which does not exist\";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=ij;function nj(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&MEe(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n<a&&LEe(o,i.PATTERN)){var c=\"Token: ->\"+l.name+`<- can never be matched.\n`+(\"Because it appears AFTER the Token Type ->\"+i.name+\"<-\")+`in the lexer's definition.\nSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=nj;function LEe(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,\"exec\"))return e.exec(r,0,[],{});if(typeof e==\"string\")return e===r;throw Error(\"non exhaustive match\")}}function MEe(r){var e=[\".\",\"\\\\\",\"[\",\"]\",\"|\",\"^\",\"$\",\"(\",\")\",\"?\",\"*\",\"+\",\"{\"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Nv(r){var e=r.ignoreCase?\"i\":\"\";return new RegExp(\"^(?:\"+r.source+\")\",e)}Ve.addStartOfInput=Nv;function Tv(r){var e=r.ignoreCase?\"iy\":\"y\";return new RegExp(\"\"+r.source,e)}Ve.addStickyFlag=Tv;function OEe(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.DEFAULT_MODE+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.MODES+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:\"A MultiMode Lexer cannot be initialized with a \"+Ve.DEFAULT_MODE+\": <\"+r.defaultMode+`>which does not exist\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:\"A Lexer cannot be initialized using an undefined Token Type. Mode:\"+(\"<\"+s+\"> at index: <\"+a+`>\n`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=OEe;function KEe(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[ko]===ir.Lexer.NA}),a=Aj(t);return e&&(0,xe.forEach)(o,function(l){var c=oj(l,a);if(c!==!1){var u=aj(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,\"LINE_BREAKS\")?l.LINE_BREAKS===!0&&(n=!0):(0,Zg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found.\n\tThis Lexer has been defined to track line and column information,\n\tBut none of the Token Types can be identified as matching a line terminator.\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n\tfor details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=KEe;function UEe(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error(\"non exhaustive match\")}),e}Ve.cloneEmptyGroups=UEe;function Mv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,\"exec\"))return!0;if((0,xe.isString)(e))return!1;throw Error(\"non exhaustive match\")}Ve.isCustomPattern=Mv;function sj(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=sj;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t<e;t++){var i=r.charCodeAt(t);if(i===10)return this.lastIndex=t+1,!0;if(i===13)return r.charCodeAt(t+1)===10?this.lastIndex=t+2:this.lastIndex=t+1,!0}return!1},lastIndex:0};function oj(r,e){if((0,xe.has)(r,\"LINE_BREAKS\"))return!1;if((0,xe.isRegExp)(r.PATTERN)){try{(0,Zg.canMatchCharCode)(e,r.PATTERN)}catch(t){return{issue:ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR,errMsg:t.message}}return!1}else{if((0,xe.isString)(r.PATTERN))return!1;if(Mv(r))return{issue:ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK};throw Error(\"non exhaustive match\")}}function aj(r,e){if(e.issue===ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+(\"\t Root cause: \"+e.errMsg+`.\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\";throw Error(\"non exhaustive match\")}Ve.buildLineBreakIssueMessage=aj;function Aj(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Fv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var ny=[];function Lv(r){return r<Ve.minOptimizationVal?r:ny[r]}Ve.charCodeToOptimizedIndex=Lv;function HEe(){if((0,xe.isEmpty)(ny)){ny=new Array(65536);for(var r=0;r<65536;r++)ny[r]=r>255?255+~~(r/255):r}}});var _g=w(Nt=>{\"use strict\";Object.defineProperty(Nt,\"__esModule\",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var Zr=Gt();function GEe(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=GEe;function YEe(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=YEe;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function jEe(r){var e=lj(r);cj(e),gj(e),uj(e),(0,Zr.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=jEe;function lj(r){for(var e=(0,Zr.cloneArr)(r),t=r,i=!0;i;){t=(0,Zr.compact)((0,Zr.flatten)((0,Zr.map)(t,function(s){return s.CATEGORIES})));var n=(0,Zr.difference)(t,e);e=e.concat(n),(0,Zr.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=lj;function cj(r){(0,Zr.forEach)(r,function(e){fj(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Ov(e)&&!(0,Zr.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Ov(e)||(e.CATEGORIES=[]),hj(e)||(e.categoryMatches=[]),pj(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=cj;function uj(r){(0,Zr.forEach)(r,function(e){e.categoryMatches=[],(0,Zr.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=uj;function gj(r){(0,Zr.forEach)(r,function(e){Kv([],e)})}Nt.assignCategoriesMapProp=gj;function Kv(r,e){(0,Zr.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,Zr.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,Zr.contains)(i,t)||Kv(i,t)})}Nt.singleAssignCategoriesToksMap=Kv;function fj(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.hasShortKeyProperty=fj;function Ov(r){return(0,Zr.has)(r,\"CATEGORIES\")}Nt.hasCategoriesProperty=Ov;function hj(r){return(0,Zr.has)(r,\"categoryMatches\")}Nt.hasExtendingTokensTypesProperty=hj;function pj(r){return(0,Zr.has)(r,\"categoryMatchesMap\")}Nt.hasExtendingTokensTypesMapProperty=pj;function qEe(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.isTokenType=qEe});var Uv=w(sy=>{\"use strict\";Object.defineProperty(sy,\"__esModule\",{value:!0});sy.defaultLexerErrorProvider=void 0;sy.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return\"Unable to pop Lexer Mode after encountering Token ->\"+r.image+\"<- The Mode Stack is empty\"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return\"unexpected character: ->\"+r.charAt(e)+\"<- at offset: \"+e+\",\"+(\" skipped \"+t+\" characters.\")}}});var Bd=w(Cc=>{\"use strict\";Object.defineProperty(Cc,\"__esModule\",{value:!0});Cc.Lexer=Cc.LexerDefinitionErrorType=void 0;var _s=Rv(),nr=Gt(),JEe=_g(),WEe=Uv(),zEe=ty(),VEe;(function(r){r[r.MISSING_PATTERN=0]=\"MISSING_PATTERN\",r[r.INVALID_PATTERN=1]=\"INVALID_PATTERN\",r[r.EOI_ANCHOR_FOUND=2]=\"EOI_ANCHOR_FOUND\",r[r.UNSUPPORTED_FLAGS_FOUND=3]=\"UNSUPPORTED_FLAGS_FOUND\",r[r.DUPLICATE_PATTERNS_FOUND=4]=\"DUPLICATE_PATTERNS_FOUND\",r[r.INVALID_GROUP_TYPE_FOUND=5]=\"INVALID_GROUP_TYPE_FOUND\",r[r.PUSH_MODE_DOES_NOT_EXIST=6]=\"PUSH_MODE_DOES_NOT_EXIST\",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]=\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]=\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]=\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]=\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\",r[r.SOI_ANCHOR_FOUND=11]=\"SOI_ANCHOR_FOUND\",r[r.EMPTY_MATCH_PATTERN=12]=\"EMPTY_MATCH_PATTERN\",r[r.NO_LINE_BREAKS_FLAGS=13]=\"NO_LINE_BREAKS_FLAGS\",r[r.UNREACHABLE_PATTERN=14]=\"UNREACHABLE_PATTERN\",r[r.IDENTIFY_TERMINATOR=15]=\"IDENTIFY_TERMINATOR\",r[r.CUSTOM_LINE_BREAK=16]=\"CUSTOM_LINE_BREAK\"})(VEe=Cc.LexerDefinitionErrorType||(Cc.LexerDefinitionErrorType={}));var bd={deferDefinitionErrorsHandling:!1,positionTracking:\"full\",lineTerminatorsPattern:/\\n|\\r\\n?/g,lineTerminatorCharacters:[`\n`,\"\\r\"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:WEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(bd);var XEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=bd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t==\"boolean\")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(bd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n==\"number\"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT(\"Lexer Constructor\",function(){var s,o=!0;i.TRACE_INIT(\"Lexer Config handling\",function(){if(i.config.lineTerminatorsPattern===bd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=_s.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===bd.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[_s.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[_s.DEFAULT_MODE]=_s.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT(\"performRuntimeChecks\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT(\"performWarningRuntimeChecks\",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,_s.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT(\"Mode: <\"+g+\"> processing\",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT(\"validatePatterns\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,JEe.augmentTokenTypes)(u);var f;i.TRACE_INIT(\"analyzeTokenTypes\",function(){f=(0,_s.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`-----------------------\n`);throw new Error(`Errors detected in definition of Lexer:\n`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT(\"Choosing sub-methods implementations\",function(){if(_s.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid <positionTracking> config option: \"'+i.config.positionTracking+'\"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT(\"Failed Optimization Warnings\",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error(\"Lexer Modes: < \"+u.join(\", \")+` > cannot be optimized.\n\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n\t Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT(\"clearRegExpParserCache\",function(){(0,zEe.clearRegExpParserCache)()}),i.TRACE_INIT(\"toFastProperties\",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`-----------------------\n`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:\n`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),_=[],A=this.trackStartLines?1:void 0,Ae=this.trackStartLines?1:void 0,ge=(0,_s.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,M=this.config.lineTerminatorsPattern,F=0,ue=[],pe=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ii=(0,_s.charCodeToOptimizedIndex)(pr),rs=pe[Ii];return rs===void 0?Fe:rs}var Be=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ii=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);_.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ii})}else{ke.pop();var rs=(0,nr.last)(ke);ue=i.patternIdxToConfig[rs],pe=i.charCodeToPatternIdxToConfig[rs],F=ue.length;var fa=i.canModeBeOptimized[rs]&&i.config.safeMode===!1;pe&&fa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),pe=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ii=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;pe&&Ii?Ne=le:Ne=oe}fe.call(this,t);for(var ae;j<H;){c=null;var qe=T.charCodeAt(j),ne=Ne(qe),Y=ne.length;for(n=0;n<Y;n++){ae=ne[n];var he=ae.pattern;u=null;var ie=ae.short;if(ie!==!1?qe===ie&&(c=he):ae.isCustom===!0?(D=he.exec(T,j,W,ge),D!==null?(c=D[0],D.payload!==void 0&&(u=D.payload)):c=null):(this.updateLastIndex(he,j),c=this.match(he,e,j)),c!==null){if(l=ae.longerAlt,l!==void 0){var de=l.length;for(o=0;o<de;o++){var _e=ue[l[o]],Pt=_e.pattern;if(g=null,_e.isCustom===!0?(D=Pt.exec(T,j,W,ge),D!==null?(a=D[0],D.payload!==void 0&&(g=D.payload)):a=null):(this.updateLastIndex(Pt,j),a=this.match(Pt,e,j)),a&&a.length>c.length){c=a,u=g,ae=_e;break}}}break}}if(c!==null){if(f=c.length,h=ae.group,h!==void 0&&(p=ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,ae.tokenType,A,Ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,Ae=this.computeNewColumn(Ae,f),re===!0&&ae.canLineTerminator===!0){var It=0,Mr=void 0,ii=void 0;M.lastIndex=0;do Mr=M.test(c),Mr===!0&&(ii=M.lastIndex-1,It++);while(Mr===!0);It!==0&&(A=A+It,Ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,Ae,f))}this.handleModes(ae,Be,fe,C)}else{for(var gi=j,hr=A,fi=Ae,ni=!1;!ni&&j<H;)for(B=T.charCodeAt(j),e=this.chopInput(e,1),j++,s=0;s<F;s++){var Ks=ue[s],he=Ks.pattern,ie=Ks.short;if(ie!==!1?T.charCodeAt(j)===ie&&(ni=!0):Ks.isCustom===!0?ni=he.exec(T,j,W,ge)!==null:(this.updateLastIndex(he,j),ni=he.exec(e)!==null),ni===!0)break}y=j-gi,v=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(T,gi,y,hr,fi),_.push({offset:gi,line:hr,column:fi,length:y,message:v})}}return this.hasCustom||(W.length=$),{tokens:W,groups:ge,errors:_}},r.prototype.handleModes=function(e,t,i,n){if(e.pop===!0){var s=e.push;t(n),s!==void 0&&i.call(this,s)}else e.push!==void 0&&i.call(this,e.push)},r.prototype.chopInput=function(e,t){return e.substring(t)},r.prototype.updateLastIndex=function(e,t){e.lastIndex=t},r.prototype.updateTokenEndLineColumnLocation=function(e,t,i,n,s,o,a){var l,c;t!==void 0&&(l=i===a-1,c=l?-1:0,n===1&&l===!0||(e.endLine=s+c,e.endColumn=o-1+-c))},r.prototype.computeNewColumn=function(e,t){return e+t},r.prototype.createTokenInstance=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return null},r.prototype.createOffsetOnlyToken=function(e,t,i,n){return{image:e,startOffset:t,tokenTypeIdx:i,tokenType:n}},r.prototype.createStartOnlyToken=function(e,t,i,n,s,o){return{image:e,startOffset:t,startLine:s,startColumn:o,tokenTypeIdx:i,tokenType:n}},r.prototype.createFullToken=function(e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:t+a-1,startLine:s,endLine:s,startColumn:o,endColumn:o+a-1,tokenTypeIdx:i,tokenType:n}},r.prototype.addToken=function(e,t,i){return 666},r.prototype.addTokenUsingPush=function(e,t,i){return e.push(i),t},r.prototype.addTokenUsingMemberAccess=function(e,t,i){return e[t]=i,t++,t},r.prototype.handlePayload=function(e,t){},r.prototype.handlePayloadNoCustom=function(e,t){},r.prototype.handlePayloadWithCustom=function(e,t){t!==null&&(e.payload=t)},r.prototype.match=function(e,t,i){return null},r.prototype.matchWithTest=function(e,t,i){var n=e.test(t);return n===!0?t.substring(i,e.lastIndex):null},r.prototype.matchWithExec=function(e,t){var i=e.exec(t);return i!==null?i[0]:i},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r.SKIPPED=\"This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\",r.NA=/NOT_APPLICABLE/,r}();Cc.Lexer=XEe});var TA=w(Qi=>{\"use strict\";Object.defineProperty(Qi,\"__esModule\",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var $s=Gt(),ZEe=Bd(),Hv=_g();function _Ee(r){return bj(r)?r.LABEL:r.name}Qi.tokenLabel=_Ee;function $Ee(r){return r.name}Qi.tokenName=$Ee;function bj(r){return(0,$s.isString)(r.LABEL)&&r.LABEL!==\"\"}Qi.hasTokenLabel=bj;var eIe=\"parent\",dj=\"categories\",Cj=\"label\",mj=\"group\",Ej=\"push_mode\",Ij=\"pop_mode\",yj=\"longer_alt\",wj=\"line_breaks\",Bj=\"start_chars_hint\";function Qj(r){return tIe(r)}Qi.createToken=Qj;function tIe(r){var e=r.pattern,t={};if(t.name=r.name,(0,$s.isUndefined)(e)||(t.PATTERN=e),(0,$s.has)(r,eIe))throw`The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,$s.has)(r,dj)&&(t.CATEGORIES=r[dj]),(0,Hv.augmentTokenTypes)([t]),(0,$s.has)(r,Cj)&&(t.LABEL=r[Cj]),(0,$s.has)(r,mj)&&(t.GROUP=r[mj]),(0,$s.has)(r,Ij)&&(t.POP_MODE=r[Ij]),(0,$s.has)(r,Ej)&&(t.PUSH_MODE=r[Ej]),(0,$s.has)(r,yj)&&(t.LONGER_ALT=r[yj]),(0,$s.has)(r,wj)&&(t.LINE_BREAKS=r[wj]),(0,$s.has)(r,Bj)&&(t.START_CHARS_HINT=r[Bj]),t}Qi.EOF=Qj({name:\"EOF\",pattern:ZEe.Lexer.NA});(0,Hv.augmentTokenTypes)([Qi.EOF]);function rIe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=rIe;function iIe(r,e){return(0,Hv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=iIe});var mn=w(zt=>{\"use strict\";var Pa=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,\"__esModule\",{value:!0});zt.serializeProduction=zt.serializeGrammar=zt.Terminal=zt.Alternation=zt.RepetitionWithSeparator=zt.Repetition=zt.RepetitionMandatoryWithSeparator=zt.RepetitionMandatory=zt.Option=zt.Alternative=zt.Rule=zt.NonTerminal=zt.AbstractProduction=void 0;var Ar=Gt(),nIe=TA(),Ro=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,\"definition\",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();zt.AbstractProduction=Ro;var Sj=function(r){Pa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(Ro);zt.NonTerminal=Sj;var vj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText=\"\",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Rule=vj;var xj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Alternative=xj;var Pj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Option=Pj;var Dj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatory=Dj;var kj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatoryWithSeparator=kj;var Rj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Repetition=Rj;var Fj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionWithSeparator=Fj;var Nj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(Ro);zt.Alternation=Nj;var oy=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();zt.Terminal=oy;function sIe(r){return(0,Ar.map)(r,Qd)}zt.serializeGrammar=sIe;function Qd(r){function e(s){return(0,Ar.map)(s,Qd)}if(r instanceof Sj){var t={type:\"NonTerminal\",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof xj)return{type:\"Alternative\",definition:e(r.definition)};if(r instanceof Pj)return{type:\"Option\",idx:r.idx,definition:e(r.definition)};if(r instanceof Dj)return{type:\"RepetitionMandatory\",idx:r.idx,definition:e(r.definition)};if(r instanceof kj)return{type:\"RepetitionMandatoryWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Fj)return{type:\"RepetitionWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Rj)return{type:\"Repetition\",idx:r.idx,definition:e(r.definition)};if(r instanceof Nj)return{type:\"Alternation\",idx:r.idx,definition:e(r.definition)};if(r instanceof oy){var i={type:\"Terminal\",name:r.terminalType.name,label:(0,nIe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof vj)return{type:\"Rule\",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error(\"non exhaustive match\")}}}zt.serializeProduction=Qd});var Ay=w(ay=>{\"use strict\";Object.defineProperty(ay,\"__esModule\",{value:!0});ay.RestWalker=void 0;var Gv=Gt(),En=mn(),oIe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Gv.forEach)(e.definition,function(n,s){var o=(0,Gv.drop)(e.definition,s+1);if(n instanceof En.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof En.Terminal)i.walkTerminal(n,o,t);else if(n instanceof En.Alternative)i.walkFlat(n,o,t);else if(n instanceof En.Option)i.walkOption(n,o,t);else if(n instanceof En.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof En.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof En.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof En.Repetition)i.walkMany(n,o,t);else if(n instanceof En.Alternation)i.walkOr(n,o,t);else throw Error(\"non exhaustive match\")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Gv.forEach)(e.definition,function(o){var a=new En.Alternative({definition:[o]});n.walk(a,s)})},r}();ay.RestWalker=oIe;function Tj(r,e,t){var i=[new En.Option({definition:[new En.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var $g=w(ly=>{\"use strict\";Object.defineProperty(ly,\"__esModule\",{value:!0});ly.GAstVisitor=void 0;var Fo=mn(),aIe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Fo.NonTerminal:return this.visitNonTerminal(t);case Fo.Alternative:return this.visitAlternative(t);case Fo.Option:return this.visitOption(t);case Fo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Fo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Fo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Fo.Repetition:return this.visitRepetition(t);case Fo.Alternation:return this.visitAlternation(t);case Fo.Terminal:return this.visitTerminal(t);case Fo.Rule:return this.visitRule(t);default:throw Error(\"non exhaustive match\")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();ly.GAstVisitor=aIe});var vd=w(Oi=>{\"use strict\";var AIe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,\"__esModule\",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var Sd=Gt(),br=mn(),lIe=$g();function cIe(r){return r instanceof br.Alternative||r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionMandatory||r instanceof br.RepetitionMandatoryWithSeparator||r instanceof br.RepetitionWithSeparator||r instanceof br.Terminal||r instanceof br.Rule}Oi.isSequenceProd=cIe;function Yv(r,e){e===void 0&&(e=[]);var t=r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionWithSeparator;return t?!0:r instanceof br.Alternation?(0,Sd.some)(r.definition,function(i){return Yv(i,e)}):r instanceof br.NonTerminal&&(0,Sd.contains)(e,r)?!1:r instanceof br.AbstractProduction?(r instanceof br.NonTerminal&&e.push(r),(0,Sd.every)(r.definition,function(i){return Yv(i,e)})):!1}Oi.isOptionalProd=Yv;function uIe(r){return r instanceof br.Alternation}Oi.isBranchingProd=uIe;function gIe(r){if(r instanceof br.NonTerminal)return\"SUBRULE\";if(r instanceof br.Option)return\"OPTION\";if(r instanceof br.Alternation)return\"OR\";if(r instanceof br.RepetitionMandatory)return\"AT_LEAST_ONE\";if(r instanceof br.RepetitionMandatoryWithSeparator)return\"AT_LEAST_ONE_SEP\";if(r instanceof br.RepetitionWithSeparator)return\"MANY_SEP\";if(r instanceof br.Repetition)return\"MANY\";if(r instanceof br.Terminal)return\"CONSUME\";throw Error(\"non exhaustive match\")}Oi.getProductionDslName=gIe;var Lj=function(r){AIe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator=\"-\",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(lIe.GAstVisitor);Oi.DslMethodsCollectorVisitor=Lj;var cy=new Lj;function fIe(r){cy.reset(),r.accept(cy);var e=cy.dslMethods;return cy.reset(),e}Oi.collectMethods=fIe});var qv=w(No=>{\"use strict\";Object.defineProperty(No,\"__esModule\",{value:!0});No.firstForTerminal=No.firstForBranching=No.firstForSequence=No.first=void 0;var uy=Gt(),Mj=mn(),jv=vd();function gy(r){if(r instanceof Mj.NonTerminal)return gy(r.referencedRule);if(r instanceof Mj.Terminal)return Uj(r);if((0,jv.isSequenceProd)(r))return Oj(r);if((0,jv.isBranchingProd)(r))return Kj(r);throw Error(\"non exhaustive match\")}No.first=gy;function Oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,jv.isOptionalProd)(s),e=e.concat(gy(s)),i=i+1,n=t.length>i;return(0,uy.uniq)(e)}No.firstForSequence=Oj;function Kj(r){var e=(0,uy.map)(r.definition,function(t){return gy(t)});return(0,uy.uniq)((0,uy.flatten)(e))}No.firstForBranching=Kj;function Uj(r){return[r.terminalType]}No.firstForTerminal=Uj});var Jv=w(fy=>{\"use strict\";Object.defineProperty(fy,\"__esModule\",{value:!0});fy.IN=void 0;fy.IN=\"_~IN~_\"});var qj=w(fs=>{\"use strict\";var hIe=fs&&fs.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(fs,\"__esModule\",{value:!0});fs.buildInProdFollowPrefix=fs.buildBetweenProdsFollowPrefix=fs.computeAllProdsFollows=fs.ResyncFollowsWalker=void 0;var pIe=Ay(),dIe=qv(),Hj=Gt(),Gj=Jv(),CIe=mn(),Yj=function(r){hIe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=jj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new CIe.Alternative({definition:o}),l=(0,dIe.first)(a);this.follows[s]=l},e}(pIe.RestWalker);fs.ResyncFollowsWalker=Yj;function mIe(r){var e={};return(0,Hj.forEach)(r,function(t){var i=new Yj(t).startWalking();(0,Hj.assign)(e,i)}),e}fs.computeAllProdsFollows=mIe;function jj(r,e){return r.name+e+Gj.IN}fs.buildBetweenProdsFollowPrefix=jj;function EIe(r){var e=r.terminalType.name;return e+r.idx+Gj.IN}fs.buildInProdFollowPrefix=EIe});var xd=w(Da=>{\"use strict\";Object.defineProperty(Da,\"__esModule\",{value:!0});Da.defaultGrammarValidatorErrorProvider=Da.defaultGrammarResolverErrorProvider=Da.defaultParserErrorProvider=void 0;var ef=TA(),IIe=Gt(),eo=Gt(),Wv=mn(),Jj=vd();Da.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,ef.hasTokenLabel)(e),o=s?\"--> \"+(0,ef.tokenLabel)(e)+\" <--\":\"token of type --> \"+e.name+\" <--\",a=\"Expecting \"+o+\" but found --> '\"+t.image+\"' <--\";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return\"Redundant input, expecting EOF but found: \"+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o=\"Expecting: \",a=(0,eo.first)(t).image,l=`\nbut found: '`+a+\"'\";if(n)return o+n+l;var c=(0,eo.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,eo.map)(c,function(h){return\"[\"+(0,eo.map)(h,function(p){return(0,ef.tokenLabel)(p)}).join(\", \")+\"]\"}),g=(0,eo.map)(u,function(h,p){return\"  \"+(p+1)+\". \"+h}),f=`one of these possible Token sequences:\n`+g.join(`\n`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s=\"Expecting: \",o=(0,eo.first)(t).image,a=`\nbut found: '`+o+\"'\";if(i)return s+i+a;var l=(0,eo.map)(e,function(u){return\"[\"+(0,eo.map)(u,function(g){return(0,ef.tokenLabel)(g)}).join(\",\")+\"]\"}),c=`expecting at least one iteration which starts with one of these possible Token sequences::\n  `+(\"<\"+l.join(\" ,\")+\">\");return s+c+a}};Object.freeze(Da.defaultParserErrorProvider);Da.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t=\"Invalid grammar, reference to a rule which is not defined: ->\"+e.nonTerminalName+`<-\ninside top level rule: ->`+r.name+\"<-\";return t}};Da.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Wv.Terminal?u.terminalType.name:u instanceof Wv.NonTerminal?u.nonTerminalName:\"\"}var i=r.name,n=(0,eo.first)(e),s=n.idx,o=(0,Jj.getProductionDslName)(n),a=t(n),l=s>0,c=\"->\"+o+(l?s:\"\")+\"<- \"+(a?\"with argument: ->\"+a+\"<-\":\"\")+`\n                  appears more than once (`+e.length+\" times) in the top level rule: ->\"+i+`<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n                  `;return c=c.replace(/[ \\t]+/g,\" \"),c=c.replace(/\\s\\s+/g,`\n`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar.\n`+(\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\"+r.name+`>.\n`)+`To resolve this make sure each Terminal and Non-Terminal names are unique\nThis is easy to accomplish by using the convention that Terminal names start with an uppercase letter\nand Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous alternatives: <\"+r.ambiguityIndices.join(\" ,\")+`> due to common lookahead prefix\n`+(\"in <OR\"+t+\"> inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\nFor Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous Alternatives Detected: <\"+r.ambiguityIndices.join(\" ,\")+\"> in <OR\"+t+\">\"+(\" inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\nFor Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,Jj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t=\"The repetition <\"+e+\"> within Rule <\"+r.topLevelRule.name+`> can never consume any tokens.\nThis could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return\"deprecated\"},buildEmptyAlternationError:function(r){var e=\"Ambiguous empty alternative: <\"+(r.emptyChoiceIdx+1)+\">\"+(\" in <OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n`)+\"Only the last alternative may be an empty alternative.\";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives:\n`+(\"<OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n has `+(r.alternation.definition.length+1)+\" alternatives.\");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=IIe.map(r.leftRecursionPath,function(s){return s.name}),i=e+\" --> \"+t.concat([e]).join(\" --> \"),n=`Left Recursion found in grammar.\n`+(\"rule: <\"+e+`> can be invoked from itself (directly or indirectly)\n`)+(`without consuming any Tokens. The grammar path that causes this is: \n `+i+`\n`)+` To fix this refactor your grammar to remove the left recursion.\nsee: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return\"deprecated\"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Wv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t=\"Duplicate definition, rule: ->\"+e+\"<- is already defined in the grammar: ->\"+r.grammarName+\"<-\";return t}}});var Vj=w(LA=>{\"use strict\";var yIe=LA&&LA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(LA,\"__esModule\",{value:!0});LA.GastRefResolverVisitor=LA.resolveGrammar=void 0;var wIe=jn(),Wj=Gt(),BIe=$g();function bIe(r,e){var t=new zj(r,e);return t.resolveRefs(),t.errors}LA.resolveGrammar=bIe;var zj=function(r){yIe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,Wj.forEach)((0,Wj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:wIe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(BIe.GAstVisitor);LA.GastRefResolverVisitor=zj});var Dd=w(Nr=>{\"use strict\";var mc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,\"__esModule\",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var Xj=Ay(),Kt=Gt(),QIe=qv(),kt=mn(),Zj=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName=\"\",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error(\"The path does not start with the walker's top Rule!\");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName=\"\",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(Xj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Zj;var SIe=function(r){mc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName=\"\",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,QIe.first)(o),this.found=!0}},e}(Zj);Nr.NextAfterTokenWalker=SIe;var Pd=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(Xj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=Pd;var vIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManyWalker=vIe;var xIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManySepWalker=xIe;var PIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneWalker=PIe;var DIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneSepWalker=DIe;function _j(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=_j(s(c),e,t);return i.concat(u)}for(;t.length<e&&n<r.length;){var a=r[n];if(a instanceof kt.Alternative)return o(a.definition);if(a instanceof kt.NonTerminal)return o(a.definition);if(a instanceof kt.Option)i=o(a.definition);else if(a instanceof kt.RepetitionMandatory){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);return o(l)}else if(a instanceof kt.RepetitionMandatoryWithSeparator){var l=[new kt.Alternative({definition:a.definition}),new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})];return o(l)}else if(a instanceof kt.RepetitionWithSeparator){var l=a.definition.concat([new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})]);i=o(l)}else if(a instanceof kt.Repetition){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);i=o(l)}else{if(a instanceof kt.Alternation)return(0,Kt.forEach)(a.definition,function(c){(0,Kt.isEmpty)(c.definition)===!1&&(i=o(c.definition))}),i;if(a instanceof kt.Terminal)t.push(a.terminalType);else throw Error(\"non exhaustive match\")}n++}return i.push({partialPath:t,suffixDef:(0,Kt.drop)(r,n)}),i}Nr.possiblePathsFrom=_j;function kIe(r,e,t,i){var n=\"EXIT_NONE_TERMINAL\",s=[n],o=\"EXIT_ALTERNATIVE\",a=!1,l=e.length,c=l-i-1,u=[],g=[];for(g.push({idx:-1,def:r,ruleStack:[],occurrenceStack:[]});!(0,Kt.isEmpty)(g);){var f=g.pop();if(f===o){a&&(0,Kt.last)(g).idx<=c&&g.pop();continue}var h=f.def,p=f.idx,C=f.ruleStack,y=f.occurrenceStack;if(!(0,Kt.isEmpty)(h)){var B=h[0];if(B===n){var v={idx:p,def:(0,Kt.drop)(h),ruleStack:(0,Kt.dropRight)(C),occurrenceStack:(0,Kt.dropRight)(y)};g.push(v)}else if(B instanceof kt.Terminal)if(p<l-1){var D=p+1,T=e[D];if(t(T,B.terminalType)){var v={idx:D,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push(v)}}else if(p===l-1)u.push({nextTokenType:B.terminalType,nextTokenOccurrence:B.idx,ruleStack:C,occurrenceStack:y}),a=!0;else throw Error(\"non exhaustive match\");else if(B instanceof kt.NonTerminal){var H=(0,Kt.cloneArr)(C);H.push(B.nonTerminalName);var j=(0,Kt.cloneArr)(y);j.push(B.idx);var v={idx:p,def:B.definition.concat(s,(0,Kt.drop)(h)),ruleStack:H,occurrenceStack:j};g.push(v)}else if(B instanceof kt.Option){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var V={idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.RepetitionMandatory){var W=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionMandatoryWithSeparator){var A=new kt.Terminal({terminalType:B.separator}),W=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionWithSeparator){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var A=new kt.Terminal({terminalType:B.separator}),Ae=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Repetition){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var Ae=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Alternation)for(var ge=B.definition.length-1;ge>=0;ge--){var re=B.definition[ge],M={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(M),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(RIe(B,p,C,y));else throw Error(\"non exhaustive match\")}}return u}Nr.nextPossibleTokensAfter=kIe;function RIe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var kd=w(Zt=>{\"use strict\";var tq=Zt&&Zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Zt,\"__esModule\",{value:!0});Zt.areTokenCategoriesNotUsed=Zt.isStrictPrefixOfPath=Zt.containsPath=Zt.getLookaheadPathsForOptionalProd=Zt.getLookaheadPathsForOr=Zt.lookAheadSequenceFromAlternatives=Zt.buildSingleAlternativeLookaheadFunction=Zt.buildAlternativesLookAheadFunc=Zt.buildLookaheadFuncForOptionalProd=Zt.buildLookaheadFuncForOr=Zt.getProdType=Zt.PROD_TYPE=void 0;var sr=Gt(),$j=Dd(),FIe=Ay(),hy=_g(),MA=mn(),NIe=$g(),oi;(function(r){r[r.OPTION=0]=\"OPTION\",r[r.REPETITION=1]=\"REPETITION\",r[r.REPETITION_MANDATORY=2]=\"REPETITION_MANDATORY\",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]=\"REPETITION_MANDATORY_WITH_SEPARATOR\",r[r.REPETITION_WITH_SEPARATOR=4]=\"REPETITION_WITH_SEPARATOR\",r[r.ALTERNATION=5]=\"ALTERNATION\"})(oi=Zt.PROD_TYPE||(Zt.PROD_TYPE={}));function TIe(r){if(r instanceof MA.Option)return oi.OPTION;if(r instanceof MA.Repetition)return oi.REPETITION;if(r instanceof MA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof MA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof MA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof MA.Alternation)return oi.ALTERNATION;throw Error(\"non exhaustive match\")}Zt.getProdType=TIe;function LIe(r,e,t,i,n,s){var o=iq(r,e,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o,i,a,n)}Zt.buildLookaheadFuncForOr=LIe;function MIe(r,e,t,i,n,s){var o=nq(r,e,n,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o[0],a,i)}Zt.buildLookaheadFuncForOptionalProd=MIe;function OIe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u<n;u++){var g=r[u],f=g.length,h=c[u];if(h!==void 0&&h.call(this)===!1)continue;e:for(var p=0;p<f;p++){for(var C=g[p],y=C.length,B=0;B<y;B++){var v=this.LA(B+1);if(t(v,C[B])===!1)continue e}return u}}};if(s&&!i){var o=(0,sr.map)(r,function(l){return(0,sr.flatten)(l)}),a=(0,sr.reduce)(o,function(l,c,u){return(0,sr.forEach)(c,function(g){(0,sr.has)(l,g.tokenTypeIdx)||(l[g.tokenTypeIdx]=u),(0,sr.forEach)(g.categoryMatches,function(f){(0,sr.has)(l,f)||(l[f]=u)})}),l},[]);return function(){var l=this.LA(1);return a[l.tokenTypeIdx]}}else return function(){for(var l=0;l<n;l++){var c=r[l],u=c.length;e:for(var g=0;g<u;g++){for(var f=c[g],h=f.length,p=0;p<h;p++){var C=this.LA(p+1);if(t(C,f[p])===!1)continue e}return l}}}}Zt.buildAlternativesLookAheadFunc=OIe;function KIe(r,e,t){var i=(0,sr.every)(r,function(c){return c.length===1}),n=r.length;if(i&&!t){var s=(0,sr.flatten)(r);if(s.length===1&&(0,sr.isEmpty)(s[0].categoryMatches)){var o=s[0],a=o.tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===a}}else{var l=(0,sr.reduce)(s,function(c,u,g){return c[u.tokenTypeIdx]=!0,(0,sr.forEach)(u.categoryMatches,function(f){c[f]=!0}),c},[]);return function(){var c=this.LA(1);return l[c.tokenTypeIdx]===!0}}}else return function(){e:for(var c=0;c<n;c++){for(var u=r[c],g=u.length,f=0;f<g;f++){var h=this.LA(f+1);if(e(h,u[f])===!1)continue e}return!0}return!1}}Zt.buildSingleAlternativeLookaheadFunction=KIe;var UIe=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.topProd=t,s.targetOccurrence=i,s.targetProdType=n,s}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.restDef},e.prototype.checkIsTarget=function(t,i,n,s){return t.idx===this.targetOccurrence&&this.targetProdType===i?(this.restDef=n.concat(s),!0):!1},e.prototype.walkOption=function(t,i,n){this.checkIsTarget(t,oi.OPTION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOne=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOneSep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkMany=function(t,i,n){this.checkIsTarget(t,oi.REPETITION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkManySep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e}(FIe.RestWalker),rq=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.targetOccurrence=t,s.targetProdType=i,s.targetRef=n,s.result=[],s}return e.prototype.checkIsTarget=function(t,i){t.idx===this.targetOccurrence&&this.targetProdType===i&&(this.targetRef===void 0||t===this.targetRef)&&(this.result=t.definition)},e.prototype.visitOption=function(t){this.checkIsTarget(t,oi.OPTION)},e.prototype.visitRepetition=function(t){this.checkIsTarget(t,oi.REPETITION)},e.prototype.visitRepetitionMandatory=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR)},e.prototype.visitRepetitionWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR)},e.prototype.visitAlternation=function(t){this.checkIsTarget(t,oi.ALTERNATION)},e}(NIe.GAstVisitor);function eq(r){for(var e=new Array(r),t=0;t<r;t++)e[t]=[];return e}function zv(r){for(var e=[\"\"],t=0;t<r.length;t++){for(var i=r[t],n=[],s=0;s<e.length;s++){var o=e[s];n.push(o+\"_\"+i.tokenTypeIdx);for(var a=0;a<i.categoryMatches.length;a++){var l=\"_\"+i.categoryMatches[a];n.push(o+l)}}e=n}return e}function HIe(r,e,t){for(var i=0;i<r.length;i++)if(i!==t)for(var n=r[i],s=0;s<e.length;s++){var o=e[s];if(n[o]===!0)return!1}return!0}function Vv(r,e){for(var t=(0,sr.map)(r,function(u){return(0,$j.possiblePathsFrom)([u],1)}),i=eq(t.length),n=(0,sr.map)(t,function(u){var g={};return(0,sr.forEach)(u,function(f){var h=zv(f.partialPath);(0,sr.forEach)(h,function(p){g[p]=!0})}),g}),s=t,o=1;o<=e;o++){var a=s;s=eq(a.length);for(var l=function(u){for(var g=a[u],f=0;f<g.length;f++){var h=g[f].partialPath,p=g[f].suffixDef,C=zv(h),y=HIe(n,C,u);if(y||(0,sr.isEmpty)(p)||h.length===e){var B=i[u];if(sq(B,h)===!1){B.push(h);for(var v=0;v<C.length;v++){var D=C[v];n[u][D]=!0}}}else{var T=(0,$j.possiblePathsFrom)(p,o+1,h);s[u]=s[u].concat(T),(0,sr.forEach)(T,function(H){var j=zv(H.partialPath);(0,sr.forEach)(j,function($){n[u][$]=!0})})}}},c=0;c<a.length;c++)l(c)}return i}Zt.lookAheadSequenceFromAlternatives=Vv;function iq(r,e,t,i){var n=new rq(r,oi.ALTERNATION,i);return e.accept(n),Vv(n.result,t)}Zt.getLookaheadPathsForOr=iq;function nq(r,e,t,i){var n=new rq(r,t);e.accept(n);var s=n.result,o=new UIe(e,r,t),a=o.startWalking(),l=new MA.Alternative({definition:s}),c=new MA.Alternative({definition:a});return Vv([l,c],i)}Zt.getLookaheadPathsForOptionalProd=nq;function sq(r,e){e:for(var t=0;t<r.length;t++){var i=r[t];if(i.length===e.length){for(var n=0;n<i.length;n++){var s=e[n],o=i[n],a=s===o||o.categoryMatchesMap[s.tokenTypeIdx]!==void 0;if(a===!1)continue e}return!0}}return!1}Zt.containsPath=sq;function GIe(r,e){return r.length<e.length&&(0,sr.every)(r,function(t,i){var n=e[i];return t===n||n.categoryMatchesMap[t.tokenTypeIdx]})}Zt.isStrictPrefixOfPath=GIe;function Xv(r){return(0,sr.every)(r,function(e){return(0,sr.every)(e,function(t){return(0,sr.every)(t,function(i){return(0,sr.isEmpty)(i.categoryMatches)})})})}Zt.areTokenCategoriesNotUsed=Xv});var rx=w(Vt=>{\"use strict\";var Zv=Vt&&Vt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Vt,\"__esModule\",{value:!0});Vt.checkPrefixAlternativesAmbiguities=Vt.validateSomeNonEmptyLookaheadPath=Vt.validateTooManyAlts=Vt.RepetionCollector=Vt.validateAmbiguousAlternationAlternatives=Vt.validateEmptyOrAlternative=Vt.getFirstNoneTerminal=Vt.validateNoLeftRecursion=Vt.validateRuleIsOverridden=Vt.validateRuleDoesNotAlreadyExist=Vt.OccurrenceValidationCollector=Vt.identifyProductionForDuplicates=Vt.validateGrammar=void 0;var er=Gt(),Qr=Gt(),To=jn(),_v=vd(),tf=kd(),YIe=Dd(),to=mn(),$v=$g();function jIe(r,e,t,i,n){var s=er.map(r,function(h){return qIe(h,i)}),o=er.map(r,function(h){return ex(h,h,i)}),a=[],l=[],c=[];(0,Qr.every)(o,Qr.isEmpty)&&(a=(0,Qr.map)(r,function(h){return cq(h,i)}),l=(0,Qr.map)(r,function(h){return uq(h,e,i)}),c=hq(r,e,i));var u=zIe(r,t,i),g=(0,Qr.map)(r,function(h){return fq(h,i)}),f=(0,Qr.map)(r,function(h){return lq(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}Vt.validateGrammar=jIe;function qIe(r,e){var t=new Aq;r.accept(t);var i=t.allProductions,n=er.groupBy(i,oq),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,_v.getProductionDslName)(l),g={message:c,type:To.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=aq(l);return f&&(g.parameter=f),g});return o}function oq(r){return(0,_v.getProductionDslName)(r)+\"_#_\"+r.idx+\"_#_\"+aq(r)}Vt.identifyProductionForDuplicates=oq;function aq(r){return r instanceof to.Terminal?r.terminalType.name:r instanceof to.NonTerminal?r.nonTerminalName:\"\"}var Aq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.OccurrenceValidationCollector=Aq;function lq(r,e,t,i){var n=[],s=(0,Qr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:To.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}Vt.validateRuleDoesNotAlreadyExist=lq;function JIe(r,e,t){var i=[],n;return er.contains(e,r)||(n=\"Invalid rule override, rule: ->\"+r+\"<- cannot be overridden in the grammar: ->\"+t+\"<-as it is not defined in any of the super grammars \",i.push({message:n,type:To.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}Vt.validateRuleIsOverridden=JIe;function ex(r,e,t,i){i===void 0&&(i=[]);var n=[],s=Rd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:To.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),ex(r,u,t,g)});return n.concat(er.flatten(c))}Vt.validateNoLeftRecursion=ex;function Rd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof to.NonTerminal)e.push(t.referencedRule);else if(t instanceof to.Alternative||t instanceof to.Option||t instanceof to.RepetitionMandatory||t instanceof to.RepetitionMandatoryWithSeparator||t instanceof to.RepetitionWithSeparator||t instanceof to.Repetition)e=e.concat(Rd(t.definition));else if(t instanceof to.Alternation)e=er.flatten(er.map(t.definition,function(o){return Rd(o.definition)}));else if(!(t instanceof to.Terminal))throw Error(\"non exhaustive match\");var i=(0,_v.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(Rd(s))}else return e}Vt.getFirstNoneTerminal=Rd;var tx=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}($v.GAstVisitor);function cq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,YIe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:To.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}Vt.validateEmptyOrAlternative=cq;function uq(r,e,t){var i=new tx;r.accept(i);var n=i.alternations;n=(0,Qr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,tf.getLookaheadPathsForOr)(l,r,c,a),g=WIe(u,a,r,t),f=pq(u,a,r,t);return o.concat(g,f)},[]);return s}Vt.validateAmbiguousAlternationAlternatives=uq;var gq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.RepetionCollector=gq;function fq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:To.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}Vt.validateTooManyAlts=fq;function hq(r,e,t){var i=[];return(0,Qr.forEach)(r,function(n){var s=new gq;n.accept(s);var o=s.allProductions;(0,Qr.forEach)(o,function(a){var l=(0,tf.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,tf.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Qr.isEmpty)((0,Qr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:To.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}Vt.validateSomeNonEmptyLookaheadPath=hq;function WIe(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Qr.forEach)(l,function(u){var g=[c];(0,Qr.forEach)(r,function(f,h){c!==h&&(0,tf.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,tf.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Qr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:To.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function pq(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(o,a,l){var c=(0,Qr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Qr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Qr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx<l&&(0,tf.isStrictPrefixOfPath)(f.path,c)}),g=(0,Qr.map)(u,function(f){var h=[f.idx+1,l+1],p=e.idx===0?\"\":e.idx,C=i.buildAlternationPrefixAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:h,prefixPath:f.path});return{message:C,type:To.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,ruleName:t.name,occurrence:p,alternatives:h}});n=n.concat(g)}}),n}Vt.checkPrefixAlternativesAmbiguities=pq;function zIe(r,e,t){var i=[],n=(0,Qr.map)(e,function(s){return s.name});return(0,Qr.forEach)(r,function(s){var o=s.name;if((0,Qr.contains)(n,o)){var a=t.buildNamespaceConflictError(s);i.push({message:a,type:To.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:o})}}),i}});var Cq=w(rf=>{\"use strict\";Object.defineProperty(rf,\"__esModule\",{value:!0});rf.validateGrammar=rf.resolveGrammar=void 0;var ix=Gt(),VIe=Vj(),XIe=rx(),dq=xd();function ZIe(r){r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarResolverErrorProvider});var e={};return(0,ix.forEach)(r.rules,function(t){e[t.name]=t}),(0,VIe.resolveGrammar)(e,r.errMsgProvider)}rf.resolveGrammar=ZIe;function _Ie(r){return r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarValidatorErrorProvider}),(0,XIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}rf.validateGrammar=_Ie});var nf=w(In=>{\"use strict\";var Fd=In&&In.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(In,\"__esModule\",{value:!0});In.EarlyExitException=In.NotAllInputParsedException=In.NoViableAltException=In.MismatchedTokenException=In.isRecognitionException=void 0;var $Ie=Gt(),mq=\"MismatchedTokenException\",Eq=\"NoViableAltException\",Iq=\"EarlyExitException\",yq=\"NotAllInputParsedException\",wq=[mq,Eq,Iq,yq];Object.freeze(wq);function eye(r){return(0,$Ie.contains)(wq,r.name)}In.isRecognitionException=eye;var py=function(r){Fd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),tye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mq,s}return e}(py);In.MismatchedTokenException=tye;var rye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Eq,s}return e}(py);In.NoViableAltException=rye;var iye=function(r){Fd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=yq,n}return e}(py);In.NotAllInputParsedException=iye;var nye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Iq,s}return e}(py);In.EarlyExitException=nye});var sx=w(Ki=>{\"use strict\";Object.defineProperty(Ki,\"__esModule\",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var dy=TA(),hs=Gt(),sye=nf(),oye=Jv(),aye=jn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION=\"InRuleRecoveryException\";function nx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=nx;nx.prototype=Error.prototype;var Aye=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,hs.has)(e,\"recoveryEnabled\")?e.recoveryEnabled:aye.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Bq)},r.prototype.getTokenToInsert=function(e){var t=(0,dy.createTokenInstance)(e,\"\",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new sye.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,hs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new nx(\"sad sad panda\")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,hs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,hs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,hs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,hs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,hs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,hs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,hs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[dy.EOF];var t=e.ruleName+e.idxInCallingRule+oye.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,dy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,hs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,hs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,hs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Aye;function Bq(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=dy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=Bq});var Cy=w(Jt=>{\"use strict\";Object.defineProperty(Jt,\"__esModule\",{value:!0});Jt.getKeyForAutomaticLookahead=Jt.AT_LEAST_ONE_SEP_IDX=Jt.MANY_SEP_IDX=Jt.AT_LEAST_ONE_IDX=Jt.MANY_IDX=Jt.OPTION_IDX=Jt.OR_IDX=Jt.BITS_FOR_ALT_IDX=Jt.BITS_FOR_RULE_IDX=Jt.BITS_FOR_OCCURRENCE_IDX=Jt.BITS_FOR_METHOD_TYPE=void 0;Jt.BITS_FOR_METHOD_TYPE=4;Jt.BITS_FOR_OCCURRENCE_IDX=8;Jt.BITS_FOR_RULE_IDX=12;Jt.BITS_FOR_ALT_IDX=8;Jt.OR_IDX=1<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.OPTION_IDX=2<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_IDX=3<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_IDX=4<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_SEP_IDX=5<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_SEP_IDX=6<<Jt.BITS_FOR_OCCURRENCE_IDX;function lye(r,e,t){return t|e|r}Jt.getKeyForAutomaticLookahead=lye;var xet=32-Jt.BITS_FOR_ALT_IDX});var Qq=w(my=>{\"use strict\";Object.defineProperty(my,\"__esModule\",{value:!0});my.LooksAhead=void 0;var ka=kd(),ro=Gt(),bq=jn(),Ra=Cy(),Ec=vd(),cye=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,ro.has)(e,\"dynamicTokensEnabled\")?e.dynamicTokensEnabled:bq.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,ro.has)(e,\"maxLookahead\")?e.maxLookahead:bq.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,ro.isES2015MapSupported)()?new Map:[],(0,ro.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,ro.forEach)(e,function(i){t.TRACE_INIT(i.name+\" Rule Lookahead\",function(){var n=(0,Ec.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,ro.forEach)(s,function(g){var f=g.idx===0?\"\":g.idx;t.TRACE_INIT(\"\"+(0,Ec.getProductionDslName)(g)+f,function(){var h=(0,ka.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Ra.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Ra.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,ro.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_IDX,ka.PROD_TYPE.REPETITION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Ra.OPTION_IDX,ka.PROD_TYPE.OPTION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_IDX,ka.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_SEP_IDX,ka.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_SEP_IDX,ka.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(\"\"+o+(t===0?\"\":t),function(){var l=(0,ka.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Ra.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,ka.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,ka.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Ra.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();my.LooksAhead=cye});var Sq=w(Lo=>{\"use strict\";Object.defineProperty(Lo,\"__esModule\",{value:!0});Lo.addNoneTerminalToCst=Lo.addTerminalToCst=Lo.setNodeLocationFull=Lo.setNodeLocationOnlyOffset=void 0;function uye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset)}Lo.setNodeLocationOnlyOffset=uye;function gye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.startColumn=e.startColumn,r.startLine=e.startLine,r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine)}Lo.setNodeLocationFull=gye;function fye(r,e,t){r.children[t]===void 0?r.children[t]=[e]:r.children[t].push(e)}Lo.addTerminalToCst=fye;function hye(r,e,t){r.children[e]===void 0?r.children[e]=[t]:r.children[e].push(t)}Lo.addNoneTerminalToCst=hye});var ox=w(OA=>{\"use strict\";Object.defineProperty(OA,\"__esModule\",{value:!0});OA.defineNameProp=OA.functionName=OA.classNameFromInstance=void 0;var pye=Gt();function dye(r){return xq(r.constructor)}OA.classNameFromInstance=dye;var vq=\"name\";function xq(r){var e=r.name;return e||\"anonymous\"}OA.functionName=xq;function Cye(r,e){var t=Object.getOwnPropertyDescriptor(r,vq);return(0,pye.isUndefined)(t)||t.configurable?(Object.defineProperty(r,vq,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}OA.defineNameProp=Cye});var Fq=w(Si=>{\"use strict\";Object.defineProperty(Si,\"__esModule\",{value:!0});Si.validateRedundantMethods=Si.validateMissingCstMethods=Si.validateVisitor=Si.CstVisitorDefinitionError=Si.createBaseVisitorConstructorWithDefaults=Si.createBaseSemanticVisitorConstructor=Si.defaultVisit=void 0;var ps=Gt(),Nd=ox();function Pq(r,e){for(var t=(0,ps.keys)(r),i=t.length,n=0;n<i;n++)for(var s=t[n],o=r[s],a=o.length,l=0;l<a;l++){var c=o[l];c.tokenTypeIdx===void 0&&this[c.name](c.children,e)}}Si.defaultVisit=Pq;function mye(r,e){var t=function(){};(0,Nd.defineNameProp)(t,r+\"BaseSemantics\");var i={visit:function(n,s){if((0,ps.isArray)(n)&&(n=n[0]),!(0,ps.isUndefined)(n))return this[n.name](n.children,s)},validateVisitor:function(){var n=Dq(this,e);if(!(0,ps.isEmpty)(n)){var s=(0,ps.map)(n,function(o){return o.msg});throw Error(\"Errors Detected in CST Visitor <\"+(0,Nd.functionName)(this.constructor)+`>:\n\t`+(\"\"+s.join(`\n\n`).replace(/\\n/g,`\n\t`)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}Si.createBaseSemanticVisitorConstructor=mye;function Eye(r,e,t){var i=function(){};(0,Nd.defineNameProp)(i,r+\"BaseSemanticsWithDefaults\");var n=Object.create(t.prototype);return(0,ps.forEach)(e,function(s){n[s]=Pq}),i.prototype=n,i.prototype.constructor=i,i}Si.createBaseVisitorConstructorWithDefaults=Eye;var ax;(function(r){r[r.REDUNDANT_METHOD=0]=\"REDUNDANT_METHOD\",r[r.MISSING_METHOD=1]=\"MISSING_METHOD\"})(ax=Si.CstVisitorDefinitionError||(Si.CstVisitorDefinitionError={}));function Dq(r,e){var t=kq(r,e),i=Rq(r,e);return t.concat(i)}Si.validateVisitor=Dq;function kq(r,e){var t=(0,ps.map)(e,function(i){if(!(0,ps.isFunction)(r[i]))return{msg:\"Missing visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+\" CST Visitor.\",type:ax.MISSING_METHOD,methodName:i}});return(0,ps.compact)(t)}Si.validateMissingCstMethods=kq;var Iye=[\"constructor\",\"visit\",\"validateVisitor\"];function Rq(r,e){var t=[];for(var i in r)(0,ps.isFunction)(r[i])&&!(0,ps.contains)(Iye,i)&&!(0,ps.contains)(e,i)&&t.push({msg:\"Redundant visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+` CST Visitor\nThere is no Grammar Rule corresponding to this method's name.\n`,type:ax.REDUNDANT_METHOD,methodName:i});return t}Si.validateRedundantMethods=Rq});var Tq=w(Ey=>{\"use strict\";Object.defineProperty(Ey,\"__esModule\",{value:!0});Ey.TreeBuilder=void 0;var sf=Sq(),_r=Gt(),Nq=Fq(),yye=jn(),wye=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,_r.has)(e,\"nodeLocationTracking\")?e.nodeLocationTracking:yye.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=_r.NOOP,this.cstFinallyStateUpdate=_r.NOOP,this.cstPostTerminal=_r.NOOP,this.cstPostNonTerminal=_r.NOOP,this.cstPostRule=_r.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationFull,this.setNodeLocationFromNode=sf.setNodeLocationFull,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=sf.setNodeLocationOnlyOffset,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=_r.NOOP;else throw Error('Invalid <nodeLocationTracking> config option: \"'+e.nodeLocationTracking+'\"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,_r.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,Nq.createBaseSemanticVisitorConstructor)(this.className,(0,_r.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,_r.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,Nq.createBaseVisitorConstructorWithDefaults)(this.className,(0,_r.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Ey.TreeBuilder=wye});var Mq=w(Iy=>{\"use strict\";Object.defineProperty(Iy,\"__esModule\",{value:!0});Iy.LexerAdapter=void 0;var Lq=jn(),Bye=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,\"input\",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error(\"Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.\");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Lq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?Lq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Iy.LexerAdapter=Bye});var Kq=w(yy=>{\"use strict\";Object.defineProperty(yy,\"__esModule\",{value:!0});yy.RecognizerApi=void 0;var Oq=Gt(),bye=nf(),Ax=jn(),Qye=xd(),Sye=rx(),vye=mn(),xye=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG),(0,Oq.contains)(this.definedRulesNames,e)){var n=Qye.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Ax.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,Sye.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,bye.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,vye.serializeGrammar)((0,Oq.values)(this.gastProductionsCache))},r}();yy.RecognizerApi=xye});var Yq=w(By=>{\"use strict\";Object.defineProperty(By,\"__esModule\",{value:!0});By.RecognizerEngine=void 0;var Pr=Gt(),qn=Cy(),wy=nf(),Uq=kd(),of=Dd(),Hq=jn(),Pye=sx(),Gq=TA(),Td=_g(),Dye=ox(),kye=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,Dye.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Td.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,\"serializedGrammar\"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n\tFor Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty.\n\tNote that the first argument for the parser constructor\n\tis no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset==\"number\")throw Error(`The Parser constructor no longer accepts a token vector as the first argument.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n\tFor Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,\"modes\")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Td.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition\");this.tokensMap.EOF=Gq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Td.tokenStructuredMatcherNoCategories:Td.tokenStructuredMatcher,(0,Td.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error(\"Grammar rule <\"+e+`> may not be defined after the 'performSelfAnalysis' method has been called'\nMake sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,\"resyncEnabled\")?i.resyncEnabled:Hq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,\"recoveryValueFunc\")?i.recoveryValueFunc:Hq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<<qn.BITS_FOR_METHOD_TYPE+qn.BITS_FOR_OCCURRENCE_IDX;this.ruleShortNameIdx++,this.shortRuleNameToFull[o]=e,this.fullRuleNameToShort[e]=o;function a(u){try{if(this.outputCst===!0){t.apply(this,u);var g=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(g),g}else return t.apply(this,u)}catch(f){return this.invokeRuleCatch(f,n,s)}finally{this.ruleFinallyStateUpdate()}}var l=function(u,g){return u===void 0&&(u=0),this.ruleInvocationStateUpdate(o,e,u),a.call(this,g)},c=\"ruleName\";return l[c]=e,l.originalGrammarAction=t,l},r.prototype.invokeRuleCatch=function(e,t,i){var n=this.RULE_STACK.length===1,s=t&&!this.isBackTracking()&&this.recoveryEnabled;if((0,wy.isRecognitionException)(e)){var o=e;if(s){var a=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(a))if(o.resyncedTokens=this.reSyncTo(a),this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];return l.recoveredNode=!0,l}else return i();else{if(this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];l.recoveredNode=!0,o.partialCstResult=l}throw o}}else{if(n)return this.moveToTerminatedState(),i();throw o}}else throw e},r.prototype.optionInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OPTION_IDX,t);return this.optionInternalLogic(e,t,i)},r.prototype.optionInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(e.DEF!==void 0){if(o=e.DEF,a=e.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=e;if(s.call(this)===!0)return o.call(this)},r.prototype.atLeastOneInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_IDX,e);return this.atLeastOneInternalLogic(e,t,i)},r.prototype.atLeastOneInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;if(s.call(this)===!0)for(var c=this.doSingleRepetition(o);s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY,t.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,t],s,qn.AT_LEAST_ONE_IDX,e,of.NextTerminalAfterAtLeastOneWalker)},r.prototype.atLeastOneSepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_SEP_IDX,e);this.atLeastOneSepFirstInternalLogic(e,t,i)},r.prototype.atLeastOneSepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterAtLeastOneSepWalker],l,qn.AT_LEAST_ONE_SEP_IDX,e,of.NextTerminalAfterAtLeastOneSepWalker)}else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,t.ERR_MSG)},r.prototype.manyInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_IDX,e);return this.manyInternalLogic(e,t,i)},r.prototype.manyInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;for(var c=!0;s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);this.attemptInRepetitionRecovery(this.manyInternal,[e,t],s,qn.MANY_IDX,e,of.NextTerminalAfterManyWalker,c)},r.prototype.manySepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_SEP_IDX,e);this.manySepFirstInternalLogic(e,t,i)},r.prototype.manySepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterManySepWalker],l,qn.MANY_SEP_IDX,e,of.NextTerminalAfterManySepWalker)}},r.prototype.repetitionSepSecondInternal=function(e,t,i,n,s){for(;i();)this.CONSUME(t),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,t,i,n,s],i,qn.AT_LEAST_ONE_SEP_IDX,e,s)},r.prototype.doSingleRepetition=function(e){var t=this.getLexerPosition();e.call(this);var i=this.getLexerPosition();return i>t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new wy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,wy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new wy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name===\"MismatchedTokenException\"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===Pye.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),Gq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();By.RecognizerEngine=kye});var qq=w(by=>{\"use strict\";Object.defineProperty(by,\"__esModule\",{value:!0});by.ErrorHandler=void 0;var lx=nf(),cx=Gt(),jq=kd(),Rye=jn(),Fye=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,cx.has)(e,\"errorMessageProvider\")?e.errorMessageProvider:Rye.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,lx.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,cx.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error(\"Trying to save an Error which is not a RecognitionException\")},Object.defineProperty(r.prototype,\"errors\",{get:function(){return(0,cx.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,jq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new lx.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,jq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lx.NoViableAltException(c,this.LA(1),l))},r}();by.ErrorHandler=Fye});var zq=w(Qy=>{\"use strict\";Object.defineProperty(Qy,\"__esModule\",{value:!0});Qy.ContentAssist=void 0;var Jq=Dd(),Wq=Gt(),Nye=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,Wq.isUndefined)(i))throw Error(\"Rule ->\"+e+\"<- does not exist in this grammar.\");return(0,Jq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,Wq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new Jq.NextAfterTokenWalker(n,e).startWalking();return s},r}();Qy.ContentAssist=Nye});var rJ=w(xy=>{\"use strict\";Object.defineProperty(xy,\"__esModule\",{value:!0});xy.GastRecorder=void 0;var yn=Gt(),Mo=mn(),Tye=Bd(),_q=_g(),$q=TA(),Lye=jn(),Mye=Cy(),vy={description:\"This Object indicates the Parser is during Recording Phase\"};Object.freeze(vy);var Vq=!0,Xq=Math.pow(2,Mye.BITS_FOR_OCCURRENCE_IDX)-1,eJ=(0,$q.createToken)({name:\"RECORDING_PHASE_TOKEN\",pattern:Tye.Lexer.NA});(0,_q.augmentTokenTypes)([eJ]);var tJ=(0,$q.createTokenInstance)(eJ,`This IToken indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(tJ);var Oye={name:`This CSTNode indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Kye=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT(\"Enable Recording\",function(){for(var t=function(n){var s=n>0?n:\"\";e[\"CONSUME\"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e[\"SUBRULE\"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e[\"OPTION\"+s]=function(o){return this.optionInternalRecord(o,n)},e[\"OR\"+s]=function(o){return this.orInternalRecord(o,n)},e[\"MANY\"+s]=function(o){this.manyInternalRecord(n,o)},e[\"MANY_SEP\"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e[\"AT_LEAST_ONE\"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e[\"AT_LEAST_ONE_SEP\"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT(\"Deleting Recording methods\",function(){for(var t=0;t<10;t++){var i=t>0?t:\"\";delete e[\"CONSUME\"+i],delete e[\"SUBRULE\"+i],delete e[\"OPTION\"+i],delete e[\"OR\"+i],delete e[\"MANY\"+i],delete e[\"MANY_SEP\"+i],delete e[\"AT_LEAST_ONE\"+i],delete e[\"AT_LEAST_ONE_SEP\"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return Lye.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Mo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+`\n\t This error was thrown during the \"grammar recording phase\" For more info see:\n\thttps://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return Ld.call(this,Mo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatoryWithSeparator,t,e,Vq)},r.prototype.manyInternalRecord=function(e,t){Ld.call(this,Mo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionWithSeparator,t,e,Vq)},r.prototype.orInternalRecord=function(e,t){return Uye.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(Sy(t),!e||(0,yn.has)(e,\"ruleName\")===!1){var n=new Error(\"<SUBRULE\"+Zq(t)+\"> argument is invalid\"+(\" expecting a Parser method reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=e.ruleName,a=new Mo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?Oye:vy},r.prototype.consumeInternalRecord=function(e,t,i){if(Sy(t),!(0,_q.hasShortKeyProperty)(e)){var n=new Error(\"<CONSUME\"+Zq(t)+\"> argument is invalid\"+(\" expecting a TokenType reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=new Mo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),tJ},r}();xy.GastRecorder=Kye;function Ld(r,e,t,i){i===void 0&&(i=!1),Sy(t);var n=(0,yn.peek)(this.recordingProdStack),s=(0,yn.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,yn.has)(e,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),vy}function Uye(r,e){var t=this;Sy(e);var i=(0,yn.peek)(this.recordingProdStack),n=(0,yn.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Mo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,yn.has)(r,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,yn.some)(s,function(l){return(0,yn.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,yn.forEach)(s,function(l){var c=new Mo.Alternative({definition:[]});o.definition.push(c),(0,yn.has)(l,\"IGNORE_AMBIGUITIES\")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,yn.has)(l,\"GATE\")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),vy}function Zq(r){return r===0?\"\":\"\"+r}function Sy(r){if(r<0||r>Xq){var e=new Error(\"Invalid DSL Method idx value: <\"+r+`>\n\t`+(\"Idx value must be a none negative value smaller than \"+(Xq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var nJ=w(Py=>{\"use strict\";Object.defineProperty(Py,\"__esModule\",{value:!0});Py.PerformanceTracer=void 0;var iJ=Gt(),Hye=jn(),Gye=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,iJ.has)(e,\"traceInitPerf\")){var t=e.traceInitPerf,i=typeof t==\"number\";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=Hye.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,iJ.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r}();Py.PerformanceTracer=Gye});var sJ=w(Dy=>{\"use strict\";Object.defineProperty(Dy,\"__esModule\",{value:!0});Dy.applyMixins=void 0;function Yye(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!==\"constructor\"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Dy.applyMixins=Yye});var jn=w(dr=>{\"use strict\";var AJ=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,\"__esModule\",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var en=Gt(),jye=qj(),oJ=TA(),lJ=xd(),aJ=Cq(),qye=sx(),Jye=Qq(),Wye=Tq(),zye=Mq(),Vye=Kq(),Xye=Yq(),Zye=qq(),_ye=zq(),$ye=rJ(),ewe=nJ(),twe=sJ();dr.END_OF_FILE=(0,oJ.createTokenInstance)(oJ.EOF,\"\",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:lJ.defaultParserErrorProvider,nodeLocationTracking:\"none\",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var rwe;(function(r){r[r.INVALID_RULE_NAME=0]=\"INVALID_RULE_NAME\",r[r.DUPLICATE_RULE_NAME=1]=\"DUPLICATE_RULE_NAME\",r[r.INVALID_RULE_OVERRIDE=2]=\"INVALID_RULE_OVERRIDE\",r[r.DUPLICATE_PRODUCTIONS=3]=\"DUPLICATE_PRODUCTIONS\",r[r.UNRESOLVED_SUBRULE_REF=4]=\"UNRESOLVED_SUBRULE_REF\",r[r.LEFT_RECURSION=5]=\"LEFT_RECURSION\",r[r.NONE_LAST_EMPTY_ALT=6]=\"NONE_LAST_EMPTY_ALT\",r[r.AMBIGUOUS_ALTS=7]=\"AMBIGUOUS_ALTS\",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]=\"CONFLICT_TOKENS_RULES_NAMESPACE\",r[r.INVALID_TOKEN_NAME=9]=\"INVALID_TOKEN_NAME\",r[r.NO_NON_EMPTY_LOOKAHEAD=10]=\"NO_NON_EMPTY_LOOKAHEAD\",r[r.AMBIGUOUS_PREFIX_ALTS=11]=\"AMBIGUOUS_PREFIX_ALTS\",r[r.TOO_MANY_ALTS=12]=\"TOO_MANY_ALTS\"})(rwe=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function iwe(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=iwe;var ky=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,en.has)(t,\"ignoredIssues\"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.\n\tPlease use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n\tSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n\tFor further details.`);this.skipValidations=(0,en.has)(t,\"skipValidations\")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\t\\nUse the **instance** method with the same name instead.\")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT(\"performSelfAnalysis\",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT(\"toFastProps\",function(){(0,en.toFastProperties)(e)}),e.TRACE_INIT(\"Grammar Recording\",function(){try{e.enableRecording(),(0,en.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+\" Rule\",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT(\"Grammar Resolving\",function(){n=(0,aJ.resolveGrammar)({rules:(0,en.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT(\"Grammar Validations\",function(){if((0,en.isEmpty)(n)&&e.skipValidations===!1){var s=(0,aJ.validateGrammar)({rules:(0,en.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,en.values)(e.tokensMap),errMsgProvider:lJ.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,en.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT(\"computeAllProdsFollows\",function(){var s=(0,jye.computeAllProdsFollows)((0,en.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT(\"ComputeLookaheadFunctions\",function(){e.preComputeLookaheadFunctions((0,en.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,en.isEmpty)(e.definitionErrors))throw t=(0,en.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected:\n `+t.join(`\n-------------------------------\n`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=ky;(0,twe.applyMixins)(ky,[qye.Recoverable,Jye.LooksAhead,Wye.TreeBuilder,zye.LexerAdapter,Xye.RecognizerEngine,Vye.RecognizerApi,Zye.ErrorHandler,_ye.ContentAssist,$ye.GastRecorder,ewe.PerformanceTracer]);var nwe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(ky);dr.CstParser=nwe;var swe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(ky);dr.EmbeddedActionsParser=swe});var uJ=w(Ry=>{\"use strict\";Object.defineProperty(Ry,\"__esModule\",{value:!0});Ry.createSyntaxDiagramsCode=void 0;var cJ=Dv();function owe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/\":i,s=t.css,o=s===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/diagrams.css\":s,a=`\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n  body {\n    background-color: hsl(30, 20%, 95%)\n  }\n</style>\n\n`,l=`\n<link rel='stylesheet' href='`+o+`'>\n`,c=`\n<script src='`+n+`vendor/railroad-diagrams.js'><\\/script>\n<script src='`+n+`src/diagrams_builder.js'><\\/script>\n<script src='`+n+`src/diagrams_behavior.js'><\\/script>\n<script src='`+n+`src/main.js'><\\/script>\n`,u=`\n<div id=\"diagrams\" align=\"center\"></div>    \n`,g=`\n<script>\n    window.serializedGrammar = `+JSON.stringify(r,null,\"  \")+`;\n<\\/script>\n`,f=`\n<script>\n    var diagramsDiv = document.getElementById(\"diagrams\");\n    main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n<\\/script>\n`;return a+l+c+u+g+f}Ry.createSyntaxDiagramsCode=owe});var hJ=w(We=>{\"use strict\";Object.defineProperty(We,\"__esModule\",{value:!0});We.Parser=We.createSyntaxDiagramsCode=We.clearCache=We.GAstVisitor=We.serializeProduction=We.serializeGrammar=We.Terminal=We.Rule=We.RepetitionWithSeparator=We.RepetitionMandatoryWithSeparator=We.RepetitionMandatory=We.Repetition=We.Option=We.NonTerminal=We.Alternative=We.Alternation=We.defaultLexerErrorProvider=We.NoViableAltException=We.NotAllInputParsedException=We.MismatchedTokenException=We.isRecognitionException=We.EarlyExitException=We.defaultParserErrorProvider=We.tokenName=We.tokenMatcher=We.tokenLabel=We.EOF=We.createTokenInstance=We.createToken=We.LexerDefinitionErrorType=We.Lexer=We.EMPTY_ALT=We.ParserDefinitionErrorType=We.EmbeddedActionsParser=We.CstParser=We.VERSION=void 0;var awe=Dv();Object.defineProperty(We,\"VERSION\",{enumerable:!0,get:function(){return awe.VERSION}});var Fy=jn();Object.defineProperty(We,\"CstParser\",{enumerable:!0,get:function(){return Fy.CstParser}});Object.defineProperty(We,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return Fy.EmbeddedActionsParser}});Object.defineProperty(We,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return Fy.ParserDefinitionErrorType}});Object.defineProperty(We,\"EMPTY_ALT\",{enumerable:!0,get:function(){return Fy.EMPTY_ALT}});var gJ=Bd();Object.defineProperty(We,\"Lexer\",{enumerable:!0,get:function(){return gJ.Lexer}});Object.defineProperty(We,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return gJ.LexerDefinitionErrorType}});var af=TA();Object.defineProperty(We,\"createToken\",{enumerable:!0,get:function(){return af.createToken}});Object.defineProperty(We,\"createTokenInstance\",{enumerable:!0,get:function(){return af.createTokenInstance}});Object.defineProperty(We,\"EOF\",{enumerable:!0,get:function(){return af.EOF}});Object.defineProperty(We,\"tokenLabel\",{enumerable:!0,get:function(){return af.tokenLabel}});Object.defineProperty(We,\"tokenMatcher\",{enumerable:!0,get:function(){return af.tokenMatcher}});Object.defineProperty(We,\"tokenName\",{enumerable:!0,get:function(){return af.tokenName}});var Awe=xd();Object.defineProperty(We,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Awe.defaultParserErrorProvider}});var Md=nf();Object.defineProperty(We,\"EarlyExitException\",{enumerable:!0,get:function(){return Md.EarlyExitException}});Object.defineProperty(We,\"isRecognitionException\",{enumerable:!0,get:function(){return Md.isRecognitionException}});Object.defineProperty(We,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Md.MismatchedTokenException}});Object.defineProperty(We,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Md.NotAllInputParsedException}});Object.defineProperty(We,\"NoViableAltException\",{enumerable:!0,get:function(){return Md.NoViableAltException}});var lwe=Uv();Object.defineProperty(We,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return lwe.defaultLexerErrorProvider}});var Oo=mn();Object.defineProperty(We,\"Alternation\",{enumerable:!0,get:function(){return Oo.Alternation}});Object.defineProperty(We,\"Alternative\",{enumerable:!0,get:function(){return Oo.Alternative}});Object.defineProperty(We,\"NonTerminal\",{enumerable:!0,get:function(){return Oo.NonTerminal}});Object.defineProperty(We,\"Option\",{enumerable:!0,get:function(){return Oo.Option}});Object.defineProperty(We,\"Repetition\",{enumerable:!0,get:function(){return Oo.Repetition}});Object.defineProperty(We,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Oo.RepetitionMandatory}});Object.defineProperty(We,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionMandatoryWithSeparator}});Object.defineProperty(We,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionWithSeparator}});Object.defineProperty(We,\"Rule\",{enumerable:!0,get:function(){return Oo.Rule}});Object.defineProperty(We,\"Terminal\",{enumerable:!0,get:function(){return Oo.Terminal}});var fJ=mn();Object.defineProperty(We,\"serializeGrammar\",{enumerable:!0,get:function(){return fJ.serializeGrammar}});Object.defineProperty(We,\"serializeProduction\",{enumerable:!0,get:function(){return fJ.serializeProduction}});var cwe=$g();Object.defineProperty(We,\"GAstVisitor\",{enumerable:!0,get:function(){return cwe.GAstVisitor}});function uwe(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}We.clearCache=uwe;var gwe=uJ();Object.defineProperty(We,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return gwe.createSyntaxDiagramsCode}});var fwe=function(){function r(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\t\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return r}();We.Parser=fwe});var CJ=w((Jet,dJ)=>{var Ny=hJ(),Fa=Ny.createToken,pJ=Ny.tokenMatcher,ux=Ny.Lexer,hwe=Ny.EmbeddedActionsParser;dJ.exports=r=>{let e=Fa({name:\"LogicalOperator\",pattern:ux.NA}),t=Fa({name:\"Or\",pattern:/\\|/,categories:e}),i=Fa({name:\"Xor\",pattern:/\\^/,categories:e}),n=Fa({name:\"And\",pattern:/&/,categories:e}),s=Fa({name:\"Not\",pattern:/!/}),o=Fa({name:\"LParen\",pattern:/\\(/}),a=Fa({name:\"RParen\",pattern:/\\)/}),l=Fa({name:\"Query\",pattern:r}),u=[Fa({name:\"WhiteSpace\",pattern:/\\s+/,group:ux.SKIPPED}),t,i,n,o,a,s,e,l],g=new ux(u);class f extends hwe{constructor(p){super(u),this.RULE(\"expression\",()=>this.SUBRULE(this.logicalExpression)),this.RULE(\"logicalExpression\",()=>{let y=this.SUBRULE(this.atomicExpression);return this.MANY(()=>{let B=y,v=this.CONSUME(e),D=this.SUBRULE2(this.atomicExpression);pJ(v,t)?y=T=>B(T)||D(T):pJ(v,i)?y=T=>!!(B(T)^D(T)):y=T=>B(T)&&D(T)}),y}),this.RULE(\"atomicExpression\",()=>this.OR([{ALT:()=>this.SUBRULE(this.parenthesisExpression)},{ALT:()=>{let{image:C}=this.CONSUME(l);return y=>y(C)}},{ALT:()=>{this.CONSUME(s);let C=this.SUBRULE(this.atomicExpression);return y=>!C(y)}}])),this.RULE(\"parenthesisExpression\",()=>{let C;return this.CONSUME(o),C=this.SUBRULE(this.expression),this.CONSUME(a),C}),this.performSelfAnalysis()}}return{TinylogicLexer:g,TinylogicParser:f}}});var mJ=w(Ty=>{var pwe=CJ();Ty.makeParser=(r=/[a-z]+/)=>{let{TinylogicLexer:e,TinylogicParser:t}=pwe(r),i=new t;return(n,s)=>{let o=e.tokenize(n);return i.input=o.tokens,i.expression()(s)}};Ty.parse=Ty.makeParser()});var IJ=w((zet,EJ)=>{\"use strict\";EJ.exports={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],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,221],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:[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]}});var gx=w((Vet,wJ)=>{var Od=IJ(),yJ={};for(let r of Object.keys(Od))yJ[Od[r]]=r;var st={rgb:{channels:3,labels:\"rgb\"},hsl:{channels:3,labels:\"hsl\"},hsv:{channels:3,labels:\"hsv\"},hwb:{channels:3,labels:\"hwb\"},cmyk:{channels:4,labels:\"cmyk\"},xyz:{channels:3,labels:\"xyz\"},lab:{channels:3,labels:\"lab\"},lch:{channels:3,labels:\"lch\"},hex:{channels:1,labels:[\"hex\"]},keyword:{channels:1,labels:[\"keyword\"]},ansi16:{channels:1,labels:[\"ansi16\"]},ansi256:{channels:1,labels:[\"ansi256\"]},hcg:{channels:3,labels:[\"h\",\"c\",\"g\"]},apple:{channels:3,labels:[\"r16\",\"g16\",\"b16\"]},gray:{channels:1,labels:[\"gray\"]}};wJ.exports=st;for(let r of Object.keys(st)){if(!(\"channels\"in st[r]))throw new Error(\"missing channels property: \"+r);if(!(\"labels\"in st[r]))throw new Error(\"missing channel labels property: \"+r);if(st[r].labels.length!==st[r].channels)throw new Error(\"channel and label counts mismatch: \"+r);let{channels:e,labels:t}=st[r];delete st[r].channels,delete st[r].labels,Object.defineProperty(st[r],\"channels\",{value:e}),Object.defineProperty(st[r],\"labels\",{value:t})}st.rgb.hsl=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(e,t,i),s=Math.max(e,t,i),o=s-n,a,l;s===n?a=0:e===s?a=(t-i)/o:t===s?a=2+(i-e)/o:i===s&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(n+s)/2;return s===n?l=0:c<=.5?l=o/(s+n):l=o/(2-s-n),[a,l*100,c*100]};st.rgb.hsv=function(r){let e,t,i,n,s,o=r[0]/255,a=r[1]/255,l=r[2]/255,c=Math.max(o,a,l),u=c-Math.min(o,a,l),g=function(f){return(c-f)/6/u+1/2};return u===0?(n=0,s=0):(s=u/c,e=g(o),t=g(a),i=g(l),o===c?n=i-t:a===c?n=1/3+e-i:l===c&&(n=2/3+t-e),n<0?n+=1:n>1&&(n-=1)),[n*360,s*100,c*100]};st.rgb.hwb=function(r){let e=r[0],t=r[1],i=r[2],n=st.rgb.hsl(r)[0],s=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[n,s*100,i*100]};st.rgb.cmyk=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(1-e,1-t,1-i),s=(1-e-n)/(1-n)||0,o=(1-t-n)/(1-n)||0,a=(1-i-n)/(1-n)||0;return[s*100,o*100,a*100,n*100]};function dwe(r,e){return(r[0]-e[0])**2+(r[1]-e[1])**2+(r[2]-e[2])**2}st.rgb.keyword=function(r){let e=yJ[r];if(e)return e;let t=1/0,i;for(let n of Object.keys(Od)){let s=Od[n],o=dwe(r,s);o<t&&(t=o,i=n)}return i};st.keyword.rgb=function(r){return Od[r]};st.rgb.xyz=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let n=e*.4124+t*.3576+i*.1805,s=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[n*100,s*100,o*100]};st.rgb.lab=function(r){let e=st.rgb.xyz(r),t=e[0],i=e[1],n=e[2];t/=95.047,i/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*i-16,o=500*(t-i),a=200*(i-n);return[s,o,a]};st.hsl.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n,s,o;if(t===0)return o=i*255,[o,o,o];i<.5?n=i*(1+t):n=i+t-i*t;let a=2*i-n,l=[0,0,0];for(let c=0;c<3;c++)s=e+1/3*-(c-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(n-a)*6*s:2*s<1?o=n:3*s<2?o=a+(n-a)*(2/3-s)*6:o=a,l[c]=o*255;return l};st.hsl.hsv=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=t,s=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,n*=s<=1?s:2-s;let o=(i+t)/2,a=i===0?2*n/(s+n):2*t/(i+t);return[e,a*100,o*100]};st.hsv.rgb=function(r){let e=r[0]/60,t=r[1]/100,i=r[2]/100,n=Math.floor(e)%6,s=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*s),l=255*i*(1-t*(1-s));switch(i*=255,n){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};st.hsv.hsl=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=Math.max(i,.01),s,o;o=(2-t)*i;let a=(2-t)*n;return s=t*n,s/=a<=1?a:2-a,s=s||0,o/=2,[e,s*100,o*100]};st.hwb.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n=t+i,s;n>1&&(t/=n,i/=n);let o=Math.floor(6*e),a=1-i;s=6*e-o,(o&1)!==0&&(s=1-s);let l=t+s*(a-t),c,u,g;switch(o){default:case 6:case 0:c=a,u=l,g=t;break;case 1:c=l,u=a,g=t;break;case 2:c=t,u=a,g=l;break;case 3:c=t,u=l,g=a;break;case 4:c=l,u=t,g=a;break;case 5:c=a,u=t,g=l;break}return[c*255,u*255,g*255]};st.cmyk.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n=r[3]/100,s=1-Math.min(1,e*(1-n)+n),o=1-Math.min(1,t*(1-n)+n),a=1-Math.min(1,i*(1-n)+n);return[s*255,o*255,a*255]};st.xyz.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n,s,o;return n=e*3.2406+t*-1.5372+i*-.4986,s=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,n=Math.min(Math.max(0,n),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[n*255,s*255,o*255]};st.xyz.lab=function(r){let e=r[0],t=r[1],i=r[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let n=116*t-16,s=500*(e-t),o=200*(t-i);return[n,s,o]};st.lab.xyz=function(r){let e=r[0],t=r[1],i=r[2],n,s,o;s=(e+16)/116,n=t/500+s,o=s-i/200;let a=s**3,l=n**3,c=o**3;return s=a>.008856?a:(s-16/116)/7.787,n=l>.008856?l:(n-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,n*=95.047,s*=100,o*=108.883,[n,s,o]};st.lab.lch=function(r){let e=r[0],t=r[1],i=r[2],n;n=Math.atan2(i,t)*360/2/Math.PI,n<0&&(n+=360);let o=Math.sqrt(t*t+i*i);return[e,o,n]};st.lch.lab=function(r){let e=r[0],t=r[1],n=r[2]/360*2*Math.PI,s=t*Math.cos(n),o=t*Math.sin(n);return[e,s,o]};st.rgb.ansi16=function(r,e=null){let[t,i,n]=r,s=e===null?st.rgb.hsv(r)[2]:e;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(n/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return s===2&&(o+=60),o};st.hsv.ansi16=function(r){return st.rgb.ansi16(st.hsv.rgb(r),r[2])};st.rgb.ansi256=function(r){let e=r[0],t=r[1],i=r[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};st.ansi16.rgb=function(r){let e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(r>50)+1)*.5,i=(e&1)*t*255,n=(e>>1&1)*t*255,s=(e>>2&1)*t*255;return[i,n,s]};st.ansi256.rgb=function(r){if(r>=232){let s=(r-232)*10+8;return[s,s,s]}r-=16;let e,t=Math.floor(r/36)/5*255,i=Math.floor((e=r%36)/6)/5*255,n=e%6/5*255;return[t,i,n]};st.rgb.hex=function(r){let t=(((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255)).toString(16).toUpperCase();return\"000000\".substring(t.length)+t};st.hex.rgb=function(r){let e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split(\"\").map(a=>a+a).join(\"\"));let i=parseInt(t,16),n=i>>16&255,s=i>>8&255,o=i&255;return[n,s,o]};st.rgb.hcg=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.max(Math.max(e,t),i),s=Math.min(Math.min(e,t),i),o=n-s,a,l;return o<1?a=s/(1-o):a=0,o<=0?l=0:n===e?l=(t-i)/o%6:n===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};st.hsl.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=t<.5?2*e*t:2*e*(1-t),n=0;return i<1&&(n=(t-.5*i)/(1-i)),[r[0],i*100,n*100]};st.hsv.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=e*t,n=0;return i<1&&(n=(t-i)/(1-i)),[r[0],i*100,n*100]};st.hcg.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100;if(t===0)return[i*255,i*255,i*255];let n=[0,0,0],s=e%1*6,o=s%1,a=1-o,l=0;switch(Math.floor(s)){case 0:n[0]=1,n[1]=o,n[2]=0;break;case 1:n[0]=a,n[1]=1,n[2]=0;break;case 2:n[0]=0,n[1]=1,n[2]=o;break;case 3:n[0]=0,n[1]=a,n[2]=1;break;case 4:n[0]=o,n[1]=0,n[2]=1;break;default:n[0]=1,n[1]=0,n[2]=a}return l=(1-t)*i,[(t*n[0]+l)*255,(t*n[1]+l)*255,(t*n[2]+l)*255]};st.hcg.hsv=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e),n=0;return i>0&&(n=e/i),[r[0],n*100,i*100]};st.hcg.hsl=function(r){let e=r[1]/100,i=r[2]/100*(1-e)+.5*e,n=0;return i>0&&i<.5?n=e/(2*i):i>=.5&&i<1&&(n=e/(2*(1-i))),[r[0],n*100,i*100]};st.hcg.hwb=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e);return[r[0],(i-e)*100,(1-i)*100]};st.hwb.hcg=function(r){let e=r[1]/100,i=1-r[2]/100,n=i-e,s=0;return n<1&&(s=(i-n)/(1-n)),[r[0],n*100,s*100]};st.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};st.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};st.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};st.gray.hsl=function(r){return[0,0,r[0]]};st.gray.hsv=st.gray.hsl;st.gray.hwb=function(r){return[0,100,r[0]]};st.gray.cmyk=function(r){return[0,0,0,r[0]]};st.gray.lab=function(r){return[r[0],0,0]};st.gray.hex=function(r){let e=Math.round(r[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return\"000000\".substring(i.length)+i};st.rgb.gray=function(r){return[(r[0]+r[1]+r[2])/3/255*100]}});var bJ=w((Xet,BJ)=>{var Ly=gx();function Cwe(){let r={},e=Object.keys(Ly);for(let t=e.length,i=0;i<t;i++)r[e[i]]={distance:-1,parent:null};return r}function mwe(r){let e=Cwe(),t=[r];for(e[r].distance=0;t.length;){let i=t.pop(),n=Object.keys(Ly[i]);for(let s=n.length,o=0;o<s;o++){let a=n[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Ewe(r,e){return function(t){return e(r(t))}}function Iwe(r,e){let t=[e[r].parent,r],i=Ly[e[r].parent][r],n=e[r].parent;for(;e[n].parent;)t.unshift(e[n].parent),i=Ewe(Ly[e[n].parent][n],i),n=e[n].parent;return i.conversion=t,i}BJ.exports=function(r){let e=mwe(r),t={},i=Object.keys(e);for(let n=i.length,s=0;s<n;s++){let o=i[s];e[o].parent!==null&&(t[o]=Iwe(o,e))}return t}});var SJ=w((Zet,QJ)=>{var fx=gx(),ywe=bJ(),Af={},wwe=Object.keys(fx);function Bwe(r){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),r(t))};return\"conversion\"in r&&(e.conversion=r.conversion),e}function bwe(r){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let n=r(t);if(typeof n==\"object\")for(let s=n.length,o=0;o<s;o++)n[o]=Math.round(n[o]);return n};return\"conversion\"in r&&(e.conversion=r.conversion),e}wwe.forEach(r=>{Af[r]={},Object.defineProperty(Af[r],\"channels\",{value:fx[r].channels}),Object.defineProperty(Af[r],\"labels\",{value:fx[r].labels});let e=ywe(r);Object.keys(e).forEach(i=>{let n=e[i];Af[r][i]=bwe(n),Af[r][i].raw=Bwe(n)})});QJ.exports=Af});var RJ=w((_et,kJ)=>{\"use strict\";var vJ=(r,e)=>(...t)=>`\\x1B[${r(...t)+e}m`,xJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};5;${i}m`},PJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},My=r=>r,DJ=(r,e,t)=>[r,e,t],lf=(r,e,t)=>{Object.defineProperty(r,e,{get:()=>{let i=t();return Object.defineProperty(r,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},hx,cf=(r,e,t,i)=>{hx===void 0&&(hx=SJ());let n=i?10:0,s={};for(let[o,a]of Object.entries(hx)){let l=o===\"ansi16\"?\"ansi\":o;o===e?s[l]=r(t,n):typeof a==\"object\"&&(s[l]=r(a[e],n))}return s};function Qwe(){let r=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[n,s]of Object.entries(i))e[n]={open:`\\x1B[${s[0]}m`,close:`\\x1B[${s[1]}m`},i[n]=e[n],r.set(s[0],s[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,\"codes\",{value:r,enumerable:!1}),e.color.close=\"\\x1B[39m\",e.bgColor.close=\"\\x1B[49m\",lf(e.color,\"ansi\",()=>cf(vJ,\"ansi16\",My,!1)),lf(e.color,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!1)),lf(e.color,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!1)),lf(e.bgColor,\"ansi\",()=>cf(vJ,\"ansi16\",My,!0)),lf(e.bgColor,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!0)),lf(e.bgColor,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!0)),e}Object.defineProperty(kJ,\"exports\",{enumerable:!0,get:Qwe})});var NJ=w(($et,FJ)=>{\"use strict\";FJ.exports=(r,e=process.argv)=>{let t=r.startsWith(\"-\")?\"\":r.length===1?\"-\":\"--\",i=e.indexOf(t+r),n=e.indexOf(\"--\");return i!==-1&&(n===-1||i<n)}});var MJ=w((ett,LJ)=>{\"use strict\";var Swe=J(\"os\"),TJ=J(\"tty\"),ds=NJ(),{env:ai}=process,KA;ds(\"no-color\")||ds(\"no-colors\")||ds(\"color=false\")||ds(\"color=never\")?KA=0:(ds(\"color\")||ds(\"colors\")||ds(\"color=true\")||ds(\"color=always\"))&&(KA=1);\"FORCE_COLOR\"in ai&&(ai.FORCE_COLOR===\"true\"?KA=1:ai.FORCE_COLOR===\"false\"?KA=0:KA=ai.FORCE_COLOR.length===0?1:Math.min(parseInt(ai.FORCE_COLOR,10),3));function px(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function dx(r,e){if(KA===0)return 0;if(ds(\"color=16m\")||ds(\"color=full\")||ds(\"color=truecolor\"))return 3;if(ds(\"color=256\"))return 2;if(r&&!e&&KA===void 0)return 0;let t=KA||0;if(ai.TERM===\"dumb\")return t;if(process.platform===\"win32\"){let i=Swe.release().split(\".\");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if(\"CI\"in ai)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\"].some(i=>i in ai)||ai.CI_NAME===\"codeship\"?1:t;if(\"TEAMCITY_VERSION\"in ai)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(ai.TEAMCITY_VERSION)?1:0;if(\"GITHUB_ACTIONS\"in ai)return 1;if(ai.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in ai){let i=parseInt((ai.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(ai.TERM_PROGRAM){case\"iTerm.app\":return i>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(ai.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ai.TERM)||\"COLORTERM\"in ai?1:t}function vwe(r){let e=dx(r,r&&r.isTTY);return px(e)}LJ.exports={supportsColor:vwe,stdout:px(dx(!0,TJ.isatty(1))),stderr:px(dx(!0,TJ.isatty(2)))}});var KJ=w((ttt,OJ)=>{\"use strict\";var xwe=(r,e,t)=>{let i=r.indexOf(e);if(i===-1)return r;let n=e.length,s=0,o=\"\";do o+=r.substr(s,i-s)+e+t,s=i+n,i=r.indexOf(e,s);while(i!==-1);return o+=r.substr(s),o},Pwe=(r,e,t,i)=>{let n=0,s=\"\";do{let o=r[i-1]===\"\\r\";s+=r.substr(n,(o?i-1:i)-n)+e+(o?`\\r\n`:`\n`)+t,n=i+1,i=r.indexOf(`\n`,n)}while(i!==-1);return s+=r.substr(n),s};OJ.exports={stringReplaceAll:xwe,stringEncaseCRLFWithFirstIndex:Pwe}});var jJ=w((rtt,YJ)=>{\"use strict\";var Dwe=/(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi,UJ=/(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g,kwe=/^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/,Rwe=/\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.)|([^\\\\])/gi,Fwe=new Map([[\"n\",`\n`],[\"r\",\"\\r\"],[\"t\",\"\t\"],[\"b\",\"\\b\"],[\"f\",\"\\f\"],[\"v\",\"\\v\"],[\"0\",\"\\0\"],[\"\\\\\",\"\\\\\"],[\"e\",\"\\x1B\"],[\"a\",\"\\x07\"]]);function GJ(r){let e=r[0]===\"u\",t=r[1]===\"{\";return e&&!t&&r.length===5||r[0]===\"x\"&&r.length===3?String.fromCharCode(parseInt(r.slice(1),16)):e&&t?String.fromCodePoint(parseInt(r.slice(2,-1),16)):Fwe.get(r)||r}function Nwe(r,e){let t=[],i=e.trim().split(/\\s*,\\s*/g),n;for(let s of i){let o=Number(s);if(!Number.isNaN(o))t.push(o);else if(n=s.match(kwe))t.push(n[2].replace(Rwe,(a,l,c)=>l?GJ(l):c));else throw new Error(`Invalid Chalk template style argument: ${s} (in style '${r}')`)}return t}function Twe(r){UJ.lastIndex=0;let e=[],t;for(;(t=UJ.exec(r))!==null;){let i=t[1];if(t[2]){let n=Nwe(i,t[2]);e.push([i].concat(n))}else e.push([i])}return e}function HJ(r,e){let t={};for(let n of e)for(let s of n.styles)t[s[0]]=n.inverse?null:s.slice(1);let i=r;for(let[n,s]of Object.entries(t))if(!!Array.isArray(s)){if(!(n in i))throw new Error(`Unknown Chalk style: ${n}`);i=s.length>0?i[n](...s):i[n]}return i}YJ.exports=(r,e)=>{let t=[],i=[],n=[];if(e.replace(Dwe,(s,o,a,l,c,u)=>{if(o)n.push(GJ(o));else if(l){let g=n.join(\"\");n=[],i.push(t.length===0?g:HJ(r,t)(g)),t.push({inverse:a,styles:Twe(l)})}else if(c){if(t.length===0)throw new Error(\"Found extraneous } in Chalk template literal\");i.push(HJ(r,t)(n.join(\"\"))),n=[],t.pop()}else n.push(u)}),i.push(n.join(\"\")),t.length>0){let s=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?\"\":\"s\"} (\\`}\\`)`;throw new Error(s)}return i.join(\"\")}});var wx=w((itt,zJ)=>{\"use strict\";var Kd=RJ(),{stdout:mx,stderr:Ex}=MJ(),{stringReplaceAll:Lwe,stringEncaseCRLFWithFirstIndex:Mwe}=KJ(),qJ=[\"ansi\",\"ansi\",\"ansi256\",\"ansi16m\"],uf=Object.create(null),Owe=(r,e={})=>{if(e.level>3||e.level<0)throw new Error(\"The `level` option should be an integer from 0 to 3\");let t=mx?mx.level:0;r.level=e.level===void 0?t:e.level},Ix=class{constructor(e){return JJ(e)}},JJ=r=>{let e={};return Owe(e,r),e.template=(...t)=>Hwe(e.template,...t),Object.setPrototypeOf(e,Oy.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error(\"`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.\")},e.template.Instance=Ix,e.template};function Oy(r){return JJ(r)}for(let[r,e]of Object.entries(Kd))uf[r]={get(){let t=Ky(this,yx(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,r,{value:t}),t}};uf.visible={get(){let r=Ky(this,this._styler,!0);return Object.defineProperty(this,\"visible\",{value:r}),r}};var WJ=[\"rgb\",\"hex\",\"keyword\",\"hsl\",\"hsv\",\"hwb\",\"ansi\",\"ansi256\"];for(let r of WJ)uf[r]={get(){let{level:e}=this;return function(...t){let i=yx(Kd.color[qJ[e]][r](...t),Kd.color.close,this._styler);return Ky(this,i,this._isEmpty)}}};for(let r of WJ){let e=\"bg\"+r[0].toUpperCase()+r.slice(1);uf[e]={get(){let{level:t}=this;return function(...i){let n=yx(Kd.bgColor[qJ[t]][r](...i),Kd.bgColor.close,this._styler);return Ky(this,n,this._isEmpty)}}}}var Kwe=Object.defineProperties(()=>{},{...uf,level:{enumerable:!0,get(){return this._generator.level},set(r){this._generator.level=r}}}),yx=(r,e,t)=>{let i,n;return t===void 0?(i=r,n=e):(i=t.openAll+r,n=e+t.closeAll),{open:r,close:e,openAll:i,closeAll:n,parent:t}},Ky=(r,e,t)=>{let i=(...n)=>Uwe(i,n.length===1?\"\"+n[0]:n.join(\" \"));return i.__proto__=Kwe,i._generator=r,i._styler=e,i._isEmpty=t,i},Uwe=(r,e)=>{if(r.level<=0||!e)return r._isEmpty?\"\":e;let t=r._styler;if(t===void 0)return e;let{openAll:i,closeAll:n}=t;if(e.indexOf(\"\\x1B\")!==-1)for(;t!==void 0;)e=Lwe(e,t.close,t.open),t=t.parent;let s=e.indexOf(`\n`);return s!==-1&&(e=Mwe(e,n,i,s)),i+e+n},Cx,Hwe=(r,...e)=>{let[t]=e;if(!Array.isArray(t))return e.join(\" \");let i=e.slice(1),n=[t.raw[0]];for(let s=1;s<t.length;s++)n.push(String(i[s-1]).replace(/[{}\\\\]/g,\"\\\\$&\"),String(t.raw[s]));return Cx===void 0&&(Cx=jJ()),Cx(r,n.join(\"\"))};Object.defineProperties(Oy.prototype,uf);var Ud=Oy();Ud.supportsColor=mx;Ud.stderr=Oy({level:Ex?Ex.level:0});Ud.stderr.supportsColor=Ex;Ud.Level={None:0,Basic:1,Ansi256:2,TrueColor:3,0:\"None\",1:\"Basic\",2:\"Ansi256\",3:\"TrueColor\"};zJ.exports=Ud});var Uy=w(Cs=>{\"use strict\";Cs.isInteger=r=>typeof r==\"number\"?Number.isInteger(r):typeof r==\"string\"&&r.trim()!==\"\"?Number.isInteger(Number(r)):!1;Cs.find=(r,e)=>r.nodes.find(t=>t.type===e);Cs.exceedsLimit=(r,e,t=1,i)=>i===!1||!Cs.isInteger(r)||!Cs.isInteger(e)?!1:(Number(e)-Number(r))/Number(t)>=i;Cs.escapeNode=(r,e=0,t)=>{let i=r.nodes[e];!i||(t&&i.type===t||i.type===\"open\"||i.type===\"close\")&&i.escaped!==!0&&(i.value=\"\\\\\"+i.value,i.escaped=!0)};Cs.encloseBrace=r=>r.type!==\"brace\"?!1:r.commas>>0+r.ranges>>0===0?(r.invalid=!0,!0):!1;Cs.isInvalidBrace=r=>r.type!==\"brace\"?!1:r.invalid===!0||r.dollar?!0:r.commas>>0+r.ranges>>0===0||r.open!==!0||r.close!==!0?(r.invalid=!0,!0):!1;Cs.isOpenOrClose=r=>r.type===\"open\"||r.type===\"close\"?!0:r.open===!0||r.close===!0;Cs.reduce=r=>r.reduce((e,t)=>(t.type===\"text\"&&e.push(t.value),t.type===\"range\"&&(t.type=\"text\"),e),[]);Cs.flatten=(...r)=>{let e=[],t=i=>{for(let n=0;n<i.length;n++){let s=i[n];Array.isArray(s)?t(s,e):s!==void 0&&e.push(s)}return e};return t(r),e}});var Hy=w((stt,XJ)=>{\"use strict\";var VJ=Uy();XJ.exports=(r,e={})=>{let t=(i,n={})=>{let s=e.escapeInvalid&&VJ.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=\"\";if(i.value)return(s||o)&&VJ.isOpenOrClose(i)?\"\\\\\"+i.value:i.value;if(i.value)return i.value;if(i.nodes)for(let l of i.nodes)a+=t(l);return a};return t(r)}});var _J=w((ott,ZJ)=>{\"use strict\";ZJ.exports=function(r){return typeof r==\"number\"?r-r===0:typeof r==\"string\"&&r.trim()!==\"\"?Number.isFinite?Number.isFinite(+r):isFinite(+r):!1}});var aW=w((att,oW)=>{\"use strict\";var $J=_J(),Ic=(r,e,t)=>{if($J(r)===!1)throw new TypeError(\"toRegexRange: expected the first argument to be a number\");if(e===void 0||r===e)return String(r);if($J(e)===!1)throw new TypeError(\"toRegexRange: expected the second argument to be a number.\");let i={relaxZeros:!0,...t};typeof i.strictZeros==\"boolean\"&&(i.relaxZeros=i.strictZeros===!1);let n=String(i.relaxZeros),s=String(i.shorthand),o=String(i.capture),a=String(i.wrap),l=r+\":\"+e+\"=\"+n+s+o+a;if(Ic.cache.hasOwnProperty(l))return Ic.cache[l].result;let c=Math.min(r,e),u=Math.max(r,e);if(Math.abs(c-u)===1){let C=r+\"|\"+e;return i.capture?`(${C})`:i.wrap===!1?C:`(?:${C})`}let g=sW(r)||sW(e),f={min:r,max:e,a:c,b:u},h=[],p=[];if(g&&(f.isPadded=g,f.maxLen=String(f.max).length),c<0){let C=u<0?Math.abs(u):1;p=eW(C,Math.abs(c),f,i),c=f.a=0}return u>=0&&(h=eW(c,u,f,i)),f.negatives=p,f.positives=h,f.result=Gwe(p,h,i),i.capture===!0?f.result=`(${f.result})`:i.wrap!==!1&&h.length+p.length>1&&(f.result=`(?:${f.result})`),Ic.cache[l]=f,f.result};function Gwe(r,e,t){let i=Bx(r,e,\"-\",!1,t)||[],n=Bx(e,r,\"\",!1,t)||[],s=Bx(r,e,\"-?\",!0,t)||[];return i.concat(s).concat(n).join(\"|\")}function Ywe(r,e){let t=1,i=1,n=rW(r,t),s=new Set([e]);for(;r<=n&&n<=e;)s.add(n),t+=1,n=rW(r,t);for(n=iW(e+1,i)-1;r<n&&n<=e;)s.add(n),i+=1,n=iW(e+1,i)-1;return s=[...s],s.sort(Jwe),s}function jwe(r,e,t){if(r===e)return{pattern:r,count:[],digits:0};let i=qwe(r,e),n=i.length,s=\"\",o=0;for(let a=0;a<n;a++){let[l,c]=i[a];l===c?s+=l:l!==\"0\"||c!==\"9\"?s+=Wwe(l,c,t):o++}return o&&(s+=t.shorthand===!0?\"\\\\d\":\"[0-9]\"),{pattern:s,count:[o],digits:n}}function eW(r,e,t,i){let n=Ywe(r,e),s=[],o=r,a;for(let l=0;l<n.length;l++){let c=n[l],u=jwe(String(o),String(c),i),g=\"\";if(!t.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+nW(a.count),o=c+1;continue}t.isPadded&&(g=zwe(c,t,i)),u.string=g+u.pattern+nW(u.count),s.push(u),o=c+1,a=u}return s}function Bx(r,e,t,i,n){let s=[];for(let o of r){let{string:a}=o;!i&&!tW(e,\"string\",a)&&s.push(t+a),i&&tW(e,\"string\",a)&&s.push(t+a)}return s}function qwe(r,e){let t=[];for(let i=0;i<r.length;i++)t.push([r[i],e[i]]);return t}function Jwe(r,e){return r>e?1:e>r?-1:0}function tW(r,e,t){return r.some(i=>i[e]===t)}function rW(r,e){return Number(String(r).slice(0,-e)+\"9\".repeat(e))}function iW(r,e){return r-r%Math.pow(10,e)}function nW(r){let[e=0,t=\"\"]=r;return t||e>1?`{${e+(t?\",\"+t:\"\")}}`:\"\"}function Wwe(r,e,t){return`[${r}${e-r===1?\"\":\"-\"}${e}]`}function sW(r){return/^-?(0+)\\d/.test(r)}function zwe(r,e,t){if(!e.isPadded)return r;let i=Math.abs(e.maxLen-String(r).length),n=t.relaxZeros!==!1;switch(i){case 0:return\"\";case 1:return n?\"0?\":\"0\";case 2:return n?\"0{0,2}\":\"00\";default:return n?`0{0,${i}}`:`0{${i}}`}}Ic.cache={};Ic.clearCache=()=>Ic.cache={};oW.exports=Ic});var Sx=w((Att,pW)=>{\"use strict\";var Vwe=J(\"util\"),cW=aW(),AW=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),Xwe=r=>e=>r===!0?Number(e):String(e),bx=r=>typeof r==\"number\"||typeof r==\"string\"&&r!==\"\",Hd=r=>Number.isInteger(+r),Qx=r=>{let e=`${r}`,t=-1;if(e[0]===\"-\"&&(e=e.slice(1)),e===\"0\")return!1;for(;e[++t]===\"0\";);return t>0},Zwe=(r,e,t)=>typeof r==\"string\"||typeof e==\"string\"?!0:t.stringify===!0,_we=(r,e,t)=>{if(e>0){let i=r[0]===\"-\"?\"-\":\"\";i&&(r=r.slice(1)),r=i+r.padStart(i?e-1:e,\"0\")}return t===!1?String(r):r},lW=(r,e)=>{let t=r[0]===\"-\"?\"-\":\"\";for(t&&(r=r.slice(1),e--);r.length<e;)r=\"0\"+r;return t?\"-\"+r:r},$we=(r,e)=>{r.negatives.sort((o,a)=>o<a?-1:o>a?1:0),r.positives.sort((o,a)=>o<a?-1:o>a?1:0);let t=e.capture?\"\":\"?:\",i=\"\",n=\"\",s;return r.positives.length&&(i=r.positives.join(\"|\")),r.negatives.length&&(n=`-(${t}${r.negatives.join(\"|\")})`),i&&n?s=`${i}|${n}`:s=i||n,e.wrap?`(${t}${s})`:s},uW=(r,e,t,i)=>{if(t)return cW(r,e,{wrap:!1,...i});let n=String.fromCharCode(r);if(r===e)return n;let s=String.fromCharCode(e);return`[${n}-${s}]`},gW=(r,e,t)=>{if(Array.isArray(r)){let i=t.wrap===!0,n=t.capture?\"\":\"?:\";return i?`(${n}${r.join(\"|\")})`:r.join(\"|\")}return cW(r,e,t)},fW=(...r)=>new RangeError(\"Invalid range arguments: \"+Vwe.inspect(...r)),hW=(r,e,t)=>{if(t.strictRanges===!0)throw fW([r,e]);return[]},eBe=(r,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step \"${r}\" to be a number`);return[]},tBe=(r,e,t=1,i={})=>{let n=Number(r),s=Number(e);if(!Number.isInteger(n)||!Number.isInteger(s)){if(i.strictRanges===!0)throw fW([r,e]);return[]}n===0&&(n=0),s===0&&(s=0);let o=n>s,a=String(r),l=String(e),c=String(t);t=Math.max(Math.abs(t),1);let u=Qx(a)||Qx(l)||Qx(c),g=u?Math.max(a.length,l.length,c.length):0,f=u===!1&&Zwe(r,e,i)===!1,h=i.transform||Xwe(f);if(i.toRegex&&t===1)return uW(lW(r,g),lW(e,g),!0,i);let p={negatives:[],positives:[]},C=v=>p[v<0?\"negatives\":\"positives\"].push(Math.abs(v)),y=[],B=0;for(;o?n>=s:n<=s;)i.toRegex===!0&&t>1?C(n):y.push(_we(h(n,B),g,f)),n=o?n-t:n+t,B++;return i.toRegex===!0?t>1?$we(p,i):gW(y,null,{wrap:!1,...i}):y},rBe=(r,e,t=1,i={})=>{if(!Hd(r)&&r.length>1||!Hd(e)&&e.length>1)return hW(r,e,i);let n=i.transform||(f=>String.fromCharCode(f)),s=`${r}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(i.toRegex&&t===1)return uW(l,c,!1,i);let u=[],g=0;for(;a?s>=o:s<=o;)u.push(n(s,g)),s=a?s-t:s+t,g++;return i.toRegex===!0?gW(u,null,{wrap:!1,options:i}):u},Gy=(r,e,t,i={})=>{if(e==null&&bx(r))return[r];if(!bx(r)||!bx(e))return hW(r,e,i);if(typeof t==\"function\")return Gy(r,e,1,{transform:t});if(AW(t))return Gy(r,e,0,t);let n={...i};return n.capture===!0&&(n.wrap=!0),t=t||n.step||1,Hd(t)?Hd(r)&&Hd(e)?tBe(r,e,t,n):rBe(r,e,Math.max(Math.abs(t),1),n):t!=null&&!AW(t)?eBe(t,n):Gy(r,e,1,t)};pW.exports=Gy});var mW=w((ltt,CW)=>{\"use strict\";var iBe=Sx(),dW=Uy(),nBe=(r,e={})=>{let t=(i,n={})=>{let s=dW.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?\"\\\\\":\"\",c=\"\";if(i.isOpen===!0||i.isClose===!0)return l+i.value;if(i.type===\"open\")return a?l+i.value:\"(\";if(i.type===\"close\")return a?l+i.value:\")\";if(i.type===\"comma\")return i.prev.type===\"comma\"?\"\":a?i.value:\"|\";if(i.value)return i.value;if(i.nodes&&i.ranges>0){let u=dW.reduce(i.nodes),g=iBe(...u,{...e,wrap:!1,toRegex:!0});if(g.length!==0)return u.length>1&&g.length>1?`(${g})`:g}if(i.nodes)for(let u of i.nodes)c+=t(u,i);return c};return t(r)};CW.exports=nBe});var yW=w((ctt,IW)=>{\"use strict\";var sBe=Sx(),EW=Hy(),gf=Uy(),yc=(r=\"\",e=\"\",t=!1)=>{let i=[];if(r=[].concat(r),e=[].concat(e),!e.length)return r;if(!r.length)return t?gf.flatten(e).map(n=>`{${n}}`):e;for(let n of r)if(Array.isArray(n))for(let s of n)i.push(yc(s,e,t));else for(let s of e)t===!0&&typeof s==\"string\"&&(s=`{${s}}`),i.push(Array.isArray(s)?yc(n,s,t):n+s);return gf.flatten(i)},oBe=(r,e={})=>{let t=e.rangeLimit===void 0?1e3:e.rangeLimit,i=(n,s={})=>{n.queue=[];let o=s,a=s.queue;for(;o.type!==\"brace\"&&o.type!==\"root\"&&o.parent;)o=o.parent,a=o.queue;if(n.invalid||n.dollar){a.push(yc(a.pop(),EW(n,e)));return}if(n.type===\"brace\"&&n.invalid!==!0&&n.nodes.length===2){a.push(yc(a.pop(),[\"{}\"]));return}if(n.nodes&&n.ranges>0){let g=gf.reduce(n.nodes);if(gf.exceedsLimit(...g,e.step,t))throw new RangeError(\"expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.\");let f=sBe(...g,e);f.length===0&&(f=EW(n,e)),a.push(yc(a.pop(),f)),n.nodes=[];return}let l=gf.encloseBrace(n),c=n.queue,u=n;for(;u.type!==\"brace\"&&u.type!==\"root\"&&u.parent;)u=u.parent,c=u.queue;for(let g=0;g<n.nodes.length;g++){let f=n.nodes[g];if(f.type===\"comma\"&&n.type===\"brace\"){g===1&&c.push(\"\"),c.push(\"\");continue}if(f.type===\"close\"){a.push(yc(a.pop(),c,l));continue}if(f.value&&f.type!==\"open\"){c.push(yc(c.pop(),f.value));continue}f.nodes&&i(f,n)}return c};return gf.flatten(i(r))};IW.exports=oBe});var BW=w((utt,wW)=>{\"use strict\";wW.exports={MAX_LENGTH:1024*64,CHAR_0:\"0\",CHAR_9:\"9\",CHAR_UPPERCASE_A:\"A\",CHAR_LOWERCASE_A:\"a\",CHAR_UPPERCASE_Z:\"Z\",CHAR_LOWERCASE_Z:\"z\",CHAR_LEFT_PARENTHESES:\"(\",CHAR_RIGHT_PARENTHESES:\")\",CHAR_ASTERISK:\"*\",CHAR_AMPERSAND:\"&\",CHAR_AT:\"@\",CHAR_BACKSLASH:\"\\\\\",CHAR_BACKTICK:\"`\",CHAR_CARRIAGE_RETURN:\"\\r\",CHAR_CIRCUMFLEX_ACCENT:\"^\",CHAR_COLON:\":\",CHAR_COMMA:\",\",CHAR_DOLLAR:\"$\",CHAR_DOT:\".\",CHAR_DOUBLE_QUOTE:'\"',CHAR_EQUAL:\"=\",CHAR_EXCLAMATION_MARK:\"!\",CHAR_FORM_FEED:\"\\f\",CHAR_FORWARD_SLASH:\"/\",CHAR_HASH:\"#\",CHAR_HYPHEN_MINUS:\"-\",CHAR_LEFT_ANGLE_BRACKET:\"<\",CHAR_LEFT_CURLY_BRACE:\"{\",CHAR_LEFT_SQUARE_BRACKET:\"[\",CHAR_LINE_FEED:`\n`,CHAR_NO_BREAK_SPACE:\"\\xA0\",CHAR_PERCENT:\"%\",CHAR_PLUS:\"+\",CHAR_QUESTION_MARK:\"?\",CHAR_RIGHT_ANGLE_BRACKET:\">\",CHAR_RIGHT_CURLY_BRACE:\"}\",CHAR_RIGHT_SQUARE_BRACKET:\"]\",CHAR_SEMICOLON:\";\",CHAR_SINGLE_QUOTE:\"'\",CHAR_SPACE:\" \",CHAR_TAB:\"\t\",CHAR_UNDERSCORE:\"_\",CHAR_VERTICAL_LINE:\"|\",CHAR_ZERO_WIDTH_NOBREAK_SPACE:\"\\uFEFF\"}});var xW=w((gtt,vW)=>{\"use strict\";var aBe=Hy(),{MAX_LENGTH:bW,CHAR_BACKSLASH:vx,CHAR_BACKTICK:ABe,CHAR_COMMA:lBe,CHAR_DOT:cBe,CHAR_LEFT_PARENTHESES:uBe,CHAR_RIGHT_PARENTHESES:gBe,CHAR_LEFT_CURLY_BRACE:fBe,CHAR_RIGHT_CURLY_BRACE:hBe,CHAR_LEFT_SQUARE_BRACKET:QW,CHAR_RIGHT_SQUARE_BRACKET:SW,CHAR_DOUBLE_QUOTE:pBe,CHAR_SINGLE_QUOTE:dBe,CHAR_NO_BREAK_SPACE:CBe,CHAR_ZERO_WIDTH_NOBREAK_SPACE:mBe}=BW(),EBe=(r,e={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");let t=e||{},i=typeof t.maxLength==\"number\"?Math.min(bW,t.maxLength):bW;if(r.length>i)throw new SyntaxError(`Input length (${r.length}), exceeds max characters (${i})`);let n={type:\"root\",input:r,nodes:[]},s=[n],o=n,a=n,l=0,c=r.length,u=0,g=0,f,h={},p=()=>r[u++],C=y=>{if(y.type===\"text\"&&a.type===\"dot\"&&(a.type=\"text\"),a&&a.type===\"text\"&&y.type===\"text\"){a.value+=y.value;return}return o.nodes.push(y),y.parent=o,y.prev=a,a=y,y};for(C({type:\"bos\"});u<c;)if(o=s[s.length-1],f=p(),!(f===mBe||f===CBe)){if(f===vx){C({type:\"text\",value:(e.keepEscaping?f:\"\")+p()});continue}if(f===SW){C({type:\"text\",value:\"\\\\\"+f});continue}if(f===QW){l++;let y=!0,B;for(;u<c&&(B=p());){if(f+=B,B===QW){l++;continue}if(B===vx){f+=p();continue}if(B===SW&&(l--,l===0))break}C({type:\"text\",value:f});continue}if(f===uBe){o=C({type:\"paren\",nodes:[]}),s.push(o),C({type:\"text\",value:f});continue}if(f===gBe){if(o.type!==\"paren\"){C({type:\"text\",value:f});continue}o=s.pop(),C({type:\"text\",value:f}),o=s[s.length-1];continue}if(f===pBe||f===dBe||f===ABe){let y=f,B;for(e.keepQuotes!==!0&&(f=\"\");u<c&&(B=p());){if(B===vx){f+=B+p();continue}if(B===y){e.keepQuotes===!0&&(f+=B);break}f+=B}C({type:\"text\",value:f});continue}if(f===fBe){g++;let B={type:\"brace\",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)===\"$\"||o.dollar===!0,depth:g,commas:0,ranges:0,nodes:[]};o=C(B),s.push(o),C({type:\"open\",value:f});continue}if(f===hBe){if(o.type!==\"brace\"){C({type:\"text\",value:f});continue}let y=\"close\";o=s.pop(),o.close=!0,C({type:y,value:f}),g--,o=s[s.length-1];continue}if(f===lBe&&g>0){if(o.ranges>0){o.ranges=0;let y=o.nodes.shift();o.nodes=[y,{type:\"text\",value:aBe(o)}]}C({type:\"comma\",value:f}),o.commas++;continue}if(f===cBe&&g>0&&o.commas===0){let y=o.nodes;if(g===0||y.length===0){C({type:\"text\",value:f});continue}if(a.type===\"dot\"){if(o.range=[],a.value+=f,a.type=\"range\",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type=\"text\";continue}o.ranges++,o.args=[];continue}if(a.type===\"range\"){y.pop();let B=y[y.length-1];B.value+=a.value+f,a=B,o.ranges--;continue}C({type:\"dot\",value:f});continue}C({type:\"text\",value:f})}do if(o=s.pop(),o.type!==\"root\"){o.nodes.forEach(v=>{v.nodes||(v.type===\"open\"&&(v.isOpen=!0),v.type===\"close\"&&(v.isClose=!0),v.nodes||(v.type=\"text\"),v.invalid=!0)});let y=s[s.length-1],B=y.nodes.indexOf(o);y.nodes.splice(B,1,...o.nodes)}while(s.length>0);return C({type:\"eos\"}),n};vW.exports=EBe});var kW=w((ftt,DW)=>{\"use strict\";var PW=Hy(),IBe=mW(),yBe=yW(),wBe=xW(),Jn=(r,e={})=>{let t=[];if(Array.isArray(r))for(let i of r){let n=Jn.create(i,e);Array.isArray(n)?t.push(...n):t.push(n)}else t=[].concat(Jn.create(r,e));return e&&e.expand===!0&&e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.parse=(r,e={})=>wBe(r,e);Jn.stringify=(r,e={})=>PW(typeof r==\"string\"?Jn.parse(r,e):r,e);Jn.compile=(r,e={})=>(typeof r==\"string\"&&(r=Jn.parse(r,e)),IBe(r,e));Jn.expand=(r,e={})=>{typeof r==\"string\"&&(r=Jn.parse(r,e));let t=yBe(r,e);return e.noempty===!0&&(t=t.filter(Boolean)),e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.create=(r,e={})=>r===\"\"||r.length<3?[r]:e.expand!==!0?Jn.compile(r,e):Jn.expand(r,e);DW.exports=Jn});var Gd=w((htt,LW)=>{\"use strict\";var BBe=J(\"path\"),Ko=\"\\\\\\\\/\",RW=`[^${Ko}]`,Na=\"\\\\.\",bBe=\"\\\\+\",QBe=\"\\\\?\",Yy=\"\\\\/\",SBe=\"(?=.)\",FW=\"[^/]\",xx=`(?:${Yy}|$)`,NW=`(?:^|${Yy})`,Px=`${Na}{1,2}${xx}`,vBe=`(?!${Na})`,xBe=`(?!${NW}${Px})`,PBe=`(?!${Na}{0,1}${xx})`,DBe=`(?!${Px})`,kBe=`[^.${Yy}]`,RBe=`${FW}*?`,TW={DOT_LITERAL:Na,PLUS_LITERAL:bBe,QMARK_LITERAL:QBe,SLASH_LITERAL:Yy,ONE_CHAR:SBe,QMARK:FW,END_ANCHOR:xx,DOTS_SLASH:Px,NO_DOT:vBe,NO_DOTS:xBe,NO_DOT_SLASH:PBe,NO_DOTS_SLASH:DBe,QMARK_NO_DOT:kBe,STAR:RBe,START_ANCHOR:NW},FBe={...TW,SLASH_LITERAL:`[${Ko}]`,QMARK:RW,STAR:`${RW}*?`,DOTS_SLASH:`${Na}{1,2}(?:[${Ko}]|$)`,NO_DOT:`(?!${Na})`,NO_DOTS:`(?!(?:^|[${Ko}])${Na}{1,2}(?:[${Ko}]|$))`,NO_DOT_SLASH:`(?!${Na}{0,1}(?:[${Ko}]|$))`,NO_DOTS_SLASH:`(?!${Na}{1,2}(?:[${Ko}]|$))`,QMARK_NO_DOT:`[^.${Ko}]`,START_ANCHOR:`(?:^|[${Ko}])`,END_ANCHOR:`(?:[${Ko}]|$)`},NBe={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};LW.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:NBe,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:BBe.sep,extglobChars(r){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${r.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(r){return r===!0?FBe:TW}}});var Yd=w(wn=>{\"use strict\";var TBe=J(\"path\"),LBe=process.platform===\"win32\",{REGEX_BACKSLASH:MBe,REGEX_REMOVE_BACKSLASH:OBe,REGEX_SPECIAL_CHARS:KBe,REGEX_SPECIAL_CHARS_GLOBAL:UBe}=Gd();wn.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);wn.hasRegexChars=r=>KBe.test(r);wn.isRegexChar=r=>r.length===1&&wn.hasRegexChars(r);wn.escapeRegex=r=>r.replace(UBe,\"\\\\$1\");wn.toPosixSlashes=r=>r.replace(MBe,\"/\");wn.removeBackslashes=r=>r.replace(OBe,e=>e===\"\\\\\"?\"\":e);wn.supportsLookbehinds=()=>{let r=process.version.slice(1).split(\".\").map(Number);return r.length===3&&r[0]>=9||r[0]===8&&r[1]>=10};wn.isWindows=r=>r&&typeof r.windows==\"boolean\"?r.windows:LBe===!0||TBe.sep===\"\\\\\";wn.escapeLast=(r,e,t)=>{let i=r.lastIndexOf(e,t);return i===-1?r:r[i-1]===\"\\\\\"?wn.escapeLast(r,e,i-1):`${r.slice(0,i)}\\\\${r.slice(i)}`};wn.removePrefix=(r,e={})=>{let t=r;return t.startsWith(\"./\")&&(t=t.slice(2),e.prefix=\"./\"),t};wn.wrapOutput=(r,e={},t={})=>{let i=t.contains?\"\":\"^\",n=t.contains?\"\":\"$\",s=`${i}(?:${r})${n}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var jW=w((dtt,YW)=>{\"use strict\";var MW=Yd(),{CHAR_ASTERISK:Dx,CHAR_AT:HBe,CHAR_BACKWARD_SLASH:jd,CHAR_COMMA:GBe,CHAR_DOT:kx,CHAR_EXCLAMATION_MARK:Rx,CHAR_FORWARD_SLASH:GW,CHAR_LEFT_CURLY_BRACE:Fx,CHAR_LEFT_PARENTHESES:Nx,CHAR_LEFT_SQUARE_BRACKET:YBe,CHAR_PLUS:jBe,CHAR_QUESTION_MARK:OW,CHAR_RIGHT_CURLY_BRACE:qBe,CHAR_RIGHT_PARENTHESES:KW,CHAR_RIGHT_SQUARE_BRACKET:JBe}=Gd(),UW=r=>r===GW||r===jd,HW=r=>{r.isPrefix!==!0&&(r.depth=r.isGlobstar?1/0:1)},WBe=(r,e)=>{let t=e||{},i=r.length-1,n=t.parts===!0||t.scanToEnd===!0,s=[],o=[],a=[],l=r,c=-1,u=0,g=0,f=!1,h=!1,p=!1,C=!1,y=!1,B=!1,v=!1,D=!1,T=!1,H=!1,j=0,$,V,W={value:\"\",depth:0,isGlob:!1},_=()=>c>=i,A=()=>l.charCodeAt(c+1),Ae=()=>($=V,l.charCodeAt(++c));for(;c<i;){V=Ae();let ue;if(V===jd){v=W.backslashes=!0,V=Ae(),V===Fx&&(B=!0);continue}if(B===!0||V===Fx){for(j++;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,Ae();continue}if(V===Fx){j++;continue}if(B!==!0&&V===kx&&(V=Ae())===kx){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(B!==!0&&V===GBe){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===qBe&&(j--,j===0)){B=!1,f=W.isBrace=!0,H=!0;break}}if(n===!0)continue;break}if(V===GW){if(s.push(c),o.push(W),W={value:\"\",depth:0,isGlob:!1},H===!0)continue;if($===kx&&c===u+1){u+=2;continue}g=c+1;continue}if(t.noext!==!0&&(V===jBe||V===HBe||V===Dx||V===OW||V===Rx)===!0&&A()===Nx){if(p=W.isGlob=!0,C=W.isExtglob=!0,H=!0,V===Rx&&c===u&&(T=!0),n===!0){for(;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,V=Ae();continue}if(V===KW){p=W.isGlob=!0,H=!0;break}}continue}break}if(V===Dx){if($===Dx&&(y=W.isGlobstar=!0),p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===OW){if(p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===YBe){for(;_()!==!0&&(ue=Ae());){if(ue===jd){v=W.backslashes=!0,Ae();continue}if(ue===JBe){h=W.isBracket=!0,p=W.isGlob=!0,H=!0;break}}if(n===!0)continue;break}if(t.nonegate!==!0&&V===Rx&&c===u){D=W.negated=!0,u++;continue}if(t.noparen!==!0&&V===Nx){if(p=W.isGlob=!0,n===!0){for(;_()!==!0&&(V=Ae());){if(V===Nx){v=W.backslashes=!0,V=Ae();continue}if(V===KW){H=!0;break}}continue}break}if(p===!0){if(H=!0,n===!0)continue;break}}t.noext===!0&&(C=!1,p=!1);let ge=l,re=\"\",M=\"\";u>0&&(re=l.slice(0,u),l=l.slice(u),g-=u),ge&&p===!0&&g>0?(ge=l.slice(0,g),M=l.slice(g)):p===!0?(ge=\"\",M=l):ge=l,ge&&ge!==\"\"&&ge!==\"/\"&&ge!==l&&UW(ge.charCodeAt(ge.length-1))&&(ge=ge.slice(0,-1)),t.unescape===!0&&(M&&(M=MW.removeBackslashes(M)),ge&&v===!0&&(ge=MW.removeBackslashes(ge)));let F={prefix:re,input:r,start:u,base:ge,glob:M,isBrace:f,isBracket:h,isGlob:p,isExtglob:C,isGlobstar:y,negated:D,negatedExtglob:T};if(t.tokens===!0&&(F.maxDepth=0,UW(V)||o.push(W),F.tokens=o),t.parts===!0||t.tokens===!0){let ue;for(let pe=0;pe<s.length;pe++){let ke=ue?ue+1:u,Fe=s[pe],Ne=r.slice(ke,Fe);t.tokens&&(pe===0&&u!==0?(o[pe].isPrefix=!0,o[pe].value=re):o[pe].value=Ne,HW(o[pe]),F.maxDepth+=o[pe].depth),(pe!==0||Ne!==\"\")&&a.push(Ne),ue=Fe}if(ue&&ue+1<r.length){let pe=r.slice(ue+1);a.push(pe),t.tokens&&(o[o.length-1].value=pe,HW(o[o.length-1]),F.maxDepth+=o[o.length-1].depth)}F.slashes=s,F.parts=a}return F};YW.exports=WBe});var WW=w((Ctt,JW)=>{\"use strict\";var jy=Gd(),Wn=Yd(),{MAX_LENGTH:qy,POSIX_REGEX_SOURCE:zBe,REGEX_NON_SPECIAL_CHARS:VBe,REGEX_SPECIAL_CHARS_BACKREF:XBe,REPLACEMENTS:qW}=jy,ZBe=(r,e)=>{if(typeof e.expandRange==\"function\")return e.expandRange(...r,e);r.sort();let t=`[${r.join(\"-\")}]`;try{new RegExp(t)}catch{return r.map(n=>Wn.escapeRegex(n)).join(\"..\")}return t},ff=(r,e)=>`Missing ${r}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`,Tx=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");r=qW[r]||r;let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);let s={type:\"bos\",value:\"\",output:t.prepend||\"\"},o=[s],a=t.capture?\"\":\"?:\",l=Wn.isWindows(e),c=jy.globChars(l),u=jy.extglobChars(c),{DOT_LITERAL:g,PLUS_LITERAL:f,SLASH_LITERAL:h,ONE_CHAR:p,DOTS_SLASH:C,NO_DOT:y,NO_DOT_SLASH:B,NO_DOTS_SLASH:v,QMARK:D,QMARK_NO_DOT:T,STAR:H,START_ANCHOR:j}=c,$=Y=>`(${a}(?:(?!${j}${Y.dot?C:g}).)*?)`,V=t.dot?\"\":y,W=t.dot?D:T,_=t.bash===!0?$(t):H;t.capture&&(_=`(${_})`),typeof t.noext==\"boolean\"&&(t.noextglob=t.noext);let A={input:r,index:-1,start:0,dot:t.dot===!0,consumed:\"\",output:\"\",prefix:\"\",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};r=Wn.removePrefix(r,A),n=r.length;let Ae=[],ge=[],re=[],M=s,F,ue=()=>A.index===n-1,pe=A.peek=(Y=1)=>r[A.index+Y],ke=A.advance=()=>r[++A.index]||\"\",Fe=()=>r.slice(A.index+1),Ne=(Y=\"\",he=0)=>{A.consumed+=Y,A.index+=he},oe=Y=>{A.output+=Y.output!=null?Y.output:Y.value,Ne(Y.value)},le=()=>{let Y=1;for(;pe()===\"!\"&&(pe(2)!==\"(\"||pe(3)===\"?\");)ke(),A.start++,Y++;return Y%2===0?!1:(A.negated=!0,A.start++,!0)},Be=Y=>{A[Y]++,re.push(Y)},fe=Y=>{A[Y]--,re.pop()},ae=Y=>{if(M.type===\"globstar\"){let he=A.braces>0&&(Y.type===\"comma\"||Y.type===\"brace\"),ie=Y.extglob===!0||Ae.length&&(Y.type===\"pipe\"||Y.type===\"paren\");Y.type!==\"slash\"&&Y.type!==\"paren\"&&!he&&!ie&&(A.output=A.output.slice(0,-M.output.length),M.type=\"star\",M.value=\"*\",M.output=_,A.output+=M.output)}if(Ae.length&&Y.type!==\"paren\"&&(Ae[Ae.length-1].inner+=Y.value),(Y.value||Y.output)&&oe(Y),M&&M.type===\"text\"&&Y.type===\"text\"){M.value+=Y.value,M.output=(M.output||\"\")+Y.value;return}Y.prev=M,o.push(Y),M=Y},qe=(Y,he)=>{let ie={...u[he],conditions:1,inner:\"\"};ie.prev=M,ie.parens=A.parens,ie.output=A.output;let de=(t.capture?\"(\":\"\")+ie.open;Be(\"parens\"),ae({type:Y,value:he,output:A.output?\"\":p}),ae({type:\"paren\",extglob:!0,value:ke(),output:de}),Ae.push(ie)},ne=Y=>{let he=Y.close+(t.capture?\")\":\"\"),ie;if(Y.type===\"negate\"){let de=_;if(Y.inner&&Y.inner.length>1&&Y.inner.includes(\"/\")&&(de=$(t)),(de!==_||ue()||/^\\)+$/.test(Fe()))&&(he=Y.close=`)$))${de}`),Y.inner.includes(\"*\")&&(ie=Fe())&&/^\\.[^\\\\/.]+$/.test(ie)){let _e=Tx(ie,{...e,fastpaths:!1}).output;he=Y.close=`)${_e})${de})`}Y.prev.type===\"bos\"&&(A.negatedExtglob=!0)}ae({type:\"paren\",extglob:!0,value:F,output:he}),fe(\"parens\")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\\]{}\"])/.test(r)){let Y=!1,he=r.replace(XBe,(ie,de,_e,Pt,It,Mr)=>Pt===\"\\\\\"?(Y=!0,ie):Pt===\"?\"?de?de+Pt+(It?D.repeat(It.length):\"\"):Mr===0?W+(It?D.repeat(It.length):\"\"):D.repeat(_e.length):Pt===\".\"?g.repeat(_e.length):Pt===\"*\"?de?de+Pt+(It?_:\"\"):_:de?ie:`\\\\${ie}`);return Y===!0&&(t.unescape===!0?he=he.replace(/\\\\/g,\"\"):he=he.replace(/\\\\+/g,ie=>ie.length%2===0?\"\\\\\\\\\":ie?\"\\\\\":\"\")),he===r&&t.contains===!0?(A.output=r,A):(A.output=Wn.wrapOutput(he,A,e),A)}for(;!ue();){if(F=ke(),F===\"\\0\")continue;if(F===\"\\\\\"){let ie=pe();if(ie===\"/\"&&t.bash!==!0||ie===\".\"||ie===\";\")continue;if(!ie){F+=\"\\\\\",ae({type:\"text\",value:F});continue}let de=/^\\\\+/.exec(Fe()),_e=0;if(de&&de[0].length>2&&(_e=de[0].length,A.index+=_e,_e%2!==0&&(F+=\"\\\\\")),t.unescape===!0?F=ke():F+=ke(),A.brackets===0){ae({type:\"text\",value:F});continue}}if(A.brackets>0&&(F!==\"]\"||M.value===\"[\"||M.value===\"[^\")){if(t.posix!==!1&&F===\":\"){let ie=M.value.slice(1);if(ie.includes(\"[\")&&(M.posix=!0,ie.includes(\":\"))){let de=M.value.lastIndexOf(\"[\"),_e=M.value.slice(0,de),Pt=M.value.slice(de+2),It=zBe[Pt];if(It){M.value=_e+It,A.backtrack=!0,ke(),!s.output&&o.indexOf(M)===1&&(s.output=p);continue}}}(F===\"[\"&&pe()!==\":\"||F===\"-\"&&pe()===\"]\")&&(F=`\\\\${F}`),F===\"]\"&&(M.value===\"[\"||M.value===\"[^\")&&(F=`\\\\${F}`),t.posix===!0&&F===\"!\"&&M.value===\"[\"&&(F=\"^\"),M.value+=F,oe({value:F});continue}if(A.quotes===1&&F!=='\"'){F=Wn.escapeRegex(F),M.value+=F,oe({value:F});continue}if(F==='\"'){A.quotes=A.quotes===1?0:1,t.keepQuotes===!0&&ae({type:\"text\",value:F});continue}if(F===\"(\"){Be(\"parens\"),ae({type:\"paren\",value:F});continue}if(F===\")\"){if(A.parens===0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"(\"));let ie=Ae[Ae.length-1];if(ie&&A.parens===ie.parens+1){ne(Ae.pop());continue}ae({type:\"paren\",value:F,output:A.parens?\")\":\"\\\\)\"}),fe(\"parens\");continue}if(F===\"[\"){if(t.nobracket===!0||!Fe().includes(\"]\")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));F=`\\\\${F}`}else Be(\"brackets\");ae({type:\"bracket\",value:F});continue}if(F===\"]\"){if(t.nobracket===!0||M&&M.type===\"bracket\"&&M.value.length===1){ae({type:\"text\",value:F,output:`\\\\${F}`});continue}if(A.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"[\"));ae({type:\"text\",value:F,output:`\\\\${F}`});continue}fe(\"brackets\");let ie=M.value.slice(1);if(M.posix!==!0&&ie[0]===\"^\"&&!ie.includes(\"/\")&&(F=`/${F}`),M.value+=F,oe({value:F}),t.literalBrackets===!1||Wn.hasRegexChars(ie))continue;let de=Wn.escapeRegex(M.value);if(A.output=A.output.slice(0,-M.value.length),t.literalBrackets===!0){A.output+=de,M.value=de;continue}M.value=`(${a}${de}|${M.value})`,A.output+=M.value;continue}if(F===\"{\"&&t.nobrace!==!0){Be(\"braces\");let ie={type:\"brace\",value:F,output:\"(\",outputIndex:A.output.length,tokensIndex:A.tokens.length};ge.push(ie),ae(ie);continue}if(F===\"}\"){let ie=ge[ge.length-1];if(t.nobrace===!0||!ie){ae({type:\"text\",value:F,output:F});continue}let de=\")\";if(ie.dots===!0){let _e=o.slice(),Pt=[];for(let It=_e.length-1;It>=0&&(o.pop(),_e[It].type!==\"brace\");It--)_e[It].type!==\"dots\"&&Pt.unshift(_e[It].value);de=ZBe(Pt,t),A.backtrack=!0}if(ie.comma!==!0&&ie.dots!==!0){let _e=A.output.slice(0,ie.outputIndex),Pt=A.tokens.slice(ie.tokensIndex);ie.value=ie.output=\"\\\\{\",F=de=\"\\\\}\",A.output=_e;for(let It of Pt)A.output+=It.output||It.value}ae({type:\"brace\",value:F,output:de}),fe(\"braces\"),ge.pop();continue}if(F===\"|\"){Ae.length>0&&Ae[Ae.length-1].conditions++,ae({type:\"text\",value:F});continue}if(F===\",\"){let ie=F,de=ge[ge.length-1];de&&re[re.length-1]===\"braces\"&&(de.comma=!0,ie=\"|\"),ae({type:\"comma\",value:F,output:ie});continue}if(F===\"/\"){if(M.type===\"dot\"&&A.index===A.start+1){A.start=A.index+1,A.consumed=\"\",A.output=\"\",o.pop(),M=s;continue}ae({type:\"slash\",value:F,output:h});continue}if(F===\".\"){if(A.braces>0&&M.type===\"dot\"){M.value===\".\"&&(M.output=g);let ie=ge[ge.length-1];M.type=\"dots\",M.output+=F,M.value+=F,ie.dots=!0;continue}if(A.braces+A.parens===0&&M.type!==\"bos\"&&M.type!==\"slash\"){ae({type:\"text\",value:F,output:g});continue}ae({type:\"dot\",value:F,output:g});continue}if(F===\"?\"){if(!(M&&M.value===\"(\")&&t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"qmark\",F);continue}if(M&&M.type===\"paren\"){let de=pe(),_e=F;if(de===\"<\"&&!Wn.supportsLookbehinds())throw new Error(\"Node.js v10 or higher is required for regex lookbehinds\");(M.value===\"(\"&&!/[!=<:]/.test(de)||de===\"<\"&&!/<([!=]|\\w+>)/.test(Fe()))&&(_e=`\\\\${F}`),ae({type:\"text\",value:F,output:_e});continue}if(t.dot!==!0&&(M.type===\"slash\"||M.type===\"bos\")){ae({type:\"qmark\",value:F,output:T});continue}ae({type:\"qmark\",value:F,output:D});continue}if(F===\"!\"){if(t.noextglob!==!0&&pe()===\"(\"&&(pe(2)!==\"?\"||!/[!=<:]/.test(pe(3)))){qe(\"negate\",F);continue}if(t.nonegate!==!0&&A.index===0){le();continue}}if(F===\"+\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"plus\",F);continue}if(M&&M.value===\"(\"||t.regex===!1){ae({type:\"plus\",value:F,output:f});continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\"||M.type===\"brace\")||A.parens>0){ae({type:\"plus\",value:F});continue}ae({type:\"plus\",value:f});continue}if(F===\"@\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){ae({type:\"at\",extglob:!0,value:F,output:\"\"});continue}ae({type:\"text\",value:F});continue}if(F!==\"*\"){(F===\"$\"||F===\"^\")&&(F=`\\\\${F}`);let ie=VBe.exec(Fe());ie&&(F+=ie[0],A.index+=ie[0].length),ae({type:\"text\",value:F});continue}if(M&&(M.type===\"globstar\"||M.star===!0)){M.type=\"star\",M.star=!0,M.value+=F,M.output=_,A.backtrack=!0,A.globstar=!0,Ne(F);continue}let Y=Fe();if(t.noextglob!==!0&&/^\\([^?]/.test(Y)){qe(\"star\",F);continue}if(M.type===\"star\"){if(t.noglobstar===!0){Ne(F);continue}let ie=M.prev,de=ie.prev,_e=ie.type===\"slash\"||ie.type===\"bos\",Pt=de&&(de.type===\"star\"||de.type===\"globstar\");if(t.bash===!0&&(!_e||Y[0]&&Y[0]!==\"/\")){ae({type:\"star\",value:F,output:\"\"});continue}let It=A.braces>0&&(ie.type===\"comma\"||ie.type===\"brace\"),Mr=Ae.length&&(ie.type===\"pipe\"||ie.type===\"paren\");if(!_e&&ie.type!==\"paren\"&&!It&&!Mr){ae({type:\"star\",value:F,output:\"\"});continue}for(;Y.slice(0,3)===\"/**\";){let ii=r[A.index+4];if(ii&&ii!==\"/\")break;Y=Y.slice(3),Ne(\"/**\",3)}if(ie.type===\"bos\"&&ue()){M.type=\"globstar\",M.value+=F,M.output=$(t),A.output=M.output,A.globstar=!0,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&!Pt&&ue()){A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=$(t)+(t.strictSlashes?\")\":\"|$)\"),M.value+=F,A.globstar=!0,A.output+=ie.output+M.output,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&Y[0]===\"/\"){let ii=Y[1]!==void 0?\"|$\":\"\";A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=`${$(t)}${h}|${h}${ii})`,M.value+=F,A.output+=ie.output+M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}if(ie.type===\"bos\"&&Y[0]===\"/\"){M.type=\"globstar\",M.value+=F,M.output=`(?:^|${h}|${$(t)}${h})`,A.output=M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}A.output=A.output.slice(0,-M.output.length),M.type=\"globstar\",M.output=$(t),M.value+=F,A.output+=M.output,A.globstar=!0,Ne(F);continue}let he={type:\"star\",value:F,output:_};if(t.bash===!0){he.output=\".*?\",(M.type===\"bos\"||M.type===\"slash\")&&(he.output=V+he.output),ae(he);continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\")&&t.regex===!0){he.output=F,ae(he);continue}(A.index===A.start||M.type===\"slash\"||M.type===\"dot\")&&(M.type===\"dot\"?(A.output+=B,M.output+=B):t.dot===!0?(A.output+=v,M.output+=v):(A.output+=V,M.output+=V),pe()!==\"*\"&&(A.output+=p,M.output+=p)),ae(he)}for(;A.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));A.output=Wn.escapeLast(A.output,\"[\"),fe(\"brackets\")}for(;A.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\")\"));A.output=Wn.escapeLast(A.output,\"(\"),fe(\"parens\")}for(;A.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"}\"));A.output=Wn.escapeLast(A.output,\"{\"),fe(\"braces\")}if(t.strictSlashes!==!0&&(M.type===\"star\"||M.type===\"bracket\")&&ae({type:\"maybe_slash\",value:\"\",output:`${h}?`}),A.backtrack===!0){A.output=\"\";for(let Y of A.tokens)A.output+=Y.output!=null?Y.output:Y.value,Y.suffix&&(A.output+=Y.suffix)}return A};Tx.fastpaths=(r,e)=>{let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);r=qW[r]||r;let s=Wn.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:g,NO_DOTS_SLASH:f,STAR:h,START_ANCHOR:p}=jy.globChars(s),C=t.dot?g:u,y=t.dot?f:u,B=t.capture?\"\":\"?:\",v={negated:!1,prefix:\"\"},D=t.bash===!0?\".*?\":h;t.capture&&(D=`(${D})`);let T=V=>V.noglobstar===!0?D:`(${B}(?:(?!${p}${V.dot?c:o}).)*?)`,H=V=>{switch(V){case\"*\":return`${C}${l}${D}`;case\".*\":return`${o}${l}${D}`;case\"*.*\":return`${C}${D}${o}${l}${D}`;case\"*/*\":return`${C}${D}${a}${l}${y}${D}`;case\"**\":return C+T(t);case\"**/*\":return`(?:${C}${T(t)}${a})?${y}${l}${D}`;case\"**/*.*\":return`(?:${C}${T(t)}${a})?${y}${D}${o}${l}${D}`;case\"**/.*\":return`(?:${C}${T(t)}${a})?${o}${l}${D}`;default:{let W=/^(.*?)\\.(\\w+)$/.exec(V);if(!W)return;let _=H(W[1]);return _?_+o+W[2]:void 0}}},j=Wn.removePrefix(r,v),$=H(j);return $&&t.strictSlashes!==!0&&($+=`${a}?`),$};JW.exports=Tx});var VW=w((mtt,zW)=>{\"use strict\";var _Be=J(\"path\"),$Be=jW(),Lx=WW(),Mx=Yd(),e0e=Gd(),t0e=r=>r&&typeof r==\"object\"&&!Array.isArray(r),Gr=(r,e,t=!1)=>{if(Array.isArray(r)){let u=r.map(f=>Gr(f,e,t));return f=>{for(let h of u){let p=h(f);if(p)return p}return!1}}let i=t0e(r)&&r.tokens&&r.input;if(r===\"\"||typeof r!=\"string\"&&!i)throw new TypeError(\"Expected pattern to be a non-empty string\");let n=e||{},s=Mx.isWindows(e),o=i?Gr.compileRe(r,e):Gr.makeRe(r,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(n.ignore){let u={...e,ignore:null,onMatch:null,onResult:null};l=Gr(n.ignore,u,t)}let c=(u,g=!1)=>{let{isMatch:f,match:h,output:p}=Gr.test(u,o,e,{glob:r,posix:s}),C={glob:r,state:a,regex:o,posix:s,input:u,output:p,match:h,isMatch:f};return typeof n.onResult==\"function\"&&n.onResult(C),f===!1?(C.isMatch=!1,g?C:!1):l(u)?(typeof n.onIgnore==\"function\"&&n.onIgnore(C),C.isMatch=!1,g?C:!1):(typeof n.onMatch==\"function\"&&n.onMatch(C),g?C:!0)};return t&&(c.state=a),c};Gr.test=(r,e,t,{glob:i,posix:n}={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected input to be a string\");if(r===\"\")return{isMatch:!1,output:\"\"};let s=t||{},o=s.format||(n?Mx.toPosixSlashes:null),a=r===i,l=a&&o?o(r):r;return a===!1&&(l=o?o(r):r,a=l===i),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=Gr.matchBase(r,e,t,n):a=e.exec(l)),{isMatch:Boolean(a),match:a,output:l}};Gr.matchBase=(r,e,t,i=Mx.isWindows(t))=>(e instanceof RegExp?e:Gr.makeRe(e,t)).test(_Be.basename(r));Gr.isMatch=(r,e,t)=>Gr(e,t)(r);Gr.parse=(r,e)=>Array.isArray(r)?r.map(t=>Gr.parse(t,e)):Lx(r,{...e,fastpaths:!1});Gr.scan=(r,e)=>$Be(r,e);Gr.compileRe=(r,e,t=!1,i=!1)=>{if(t===!0)return r.output;let n=e||{},s=n.contains?\"\":\"^\",o=n.contains?\"\":\"$\",a=`${s}(?:${r.output})${o}`;r&&r.negated===!0&&(a=`^(?!${a}).*$`);let l=Gr.toRegex(a,e);return i===!0&&(l.state=r),l};Gr.makeRe=(r,e={},t=!1,i=!1)=>{if(!r||typeof r!=\"string\")throw new TypeError(\"Expected a non-empty string\");let n={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(r[0]===\".\"||r[0]===\"*\")&&(n.output=Lx.fastpaths(r,e)),n.output||(n=Lx(r,e)),Gr.compileRe(n,e,t,i)};Gr.toRegex=(r,e)=>{try{let t=e||{};return new RegExp(r,t.flags||(t.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===!0)throw t;return/$^/}};Gr.constants=e0e;zW.exports=Gr});var Ox=w((Ett,XW)=>{\"use strict\";XW.exports=VW()});var Bn=w((Itt,e3)=>{\"use strict\";var _W=J(\"util\"),$W=kW(),Uo=Ox(),Kx=Yd(),ZW=r=>r===\"\"||r===\"./\",Sr=(r,e,t)=>{e=[].concat(e),r=[].concat(r);let i=new Set,n=new Set,s=new Set,o=0,a=u=>{s.add(u.output),t&&t.onResult&&t.onResult(u)};for(let u=0;u<e.length;u++){let g=Uo(String(e[u]),{...t,onResult:a},!0),f=g.state.negated||g.state.negatedExtglob;f&&o++;for(let h of r){let p=g(h,!0);!(f?!p.isMatch:p.isMatch)||(f?i.add(p.output):(i.delete(p.output),n.add(p.output)))}}let c=(o===e.length?[...s]:[...n]).filter(u=>!i.has(u));if(t&&c.length===0){if(t.failglob===!0)throw new Error(`No matches found for \"${e.join(\", \")}\"`);if(t.nonull===!0||t.nullglob===!0)return t.unescape?e.map(u=>u.replace(/\\\\/g,\"\")):e}return c};Sr.match=Sr;Sr.matcher=(r,e)=>Uo(r,e);Sr.isMatch=(r,e,t)=>Uo(e,t)(r);Sr.any=Sr.isMatch;Sr.not=(r,e,t={})=>{e=[].concat(e).map(String);let i=new Set,n=[],o=Sr(r,e,{...t,onResult:a=>{t.onResult&&t.onResult(a),n.push(a.output)}});for(let a of n)o.includes(a)||i.add(a);return[...i]};Sr.contains=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);if(Array.isArray(e))return e.some(i=>Sr.contains(r,i,t));if(typeof e==\"string\"){if(ZW(r)||ZW(e))return!1;if(r.includes(e)||r.startsWith(\"./\")&&r.slice(2).includes(e))return!0}return Sr.isMatch(r,e,{...t,contains:!0})};Sr.matchKeys=(r,e,t)=>{if(!Kx.isObject(r))throw new TypeError(\"Expected the first argument to be an object\");let i=Sr(Object.keys(r),e,t),n={};for(let s of i)n[s]=r[s];return n};Sr.some=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(i.some(o=>s(o)))return!0}return!1};Sr.every=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(!i.every(o=>s(o)))return!1}return!0};Sr.all=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);return[].concat(e).every(i=>Uo(i,t)(r))};Sr.capture=(r,e,t)=>{let i=Kx.isWindows(t),s=Uo.makeRe(String(r),{...t,capture:!0}).exec(i?Kx.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?\"\":o)};Sr.makeRe=(...r)=>Uo.makeRe(...r);Sr.scan=(...r)=>Uo.scan(...r);Sr.parse=(r,e)=>{let t=[];for(let i of[].concat(r||[]))for(let n of $W(String(i),e))t.push(Uo.parse(n,e));return t};Sr.braces=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return e&&e.nobrace===!0||!/\\{.*\\}/.test(r)?[r]:$W(r,e)};Sr.braceExpand=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return Sr.braces(r,{...e,expand:!0})};e3.exports=Sr});var r3=w((ytt,t3)=>{\"use strict\";t3.exports=({onlyFirst:r=!1}={})=>{let e=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(e,r?void 0:\"g\")}});var n3=w((wtt,i3)=>{\"use strict\";var r0e=r3();i3.exports=r=>typeof r==\"string\"?r.replace(r0e(),\"\"):r});var m3=w((Ftt,C3)=>{\"use strict\";C3.exports=(...r)=>[...new Set([].concat(...r))]});var sP=w((Ntt,y3)=>{\"use strict\";var p0e=J(\"stream\"),E3=p0e.PassThrough,d0e=Array.prototype.slice;y3.exports=C0e;function C0e(){let r=[],e=!1,t=d0e.call(arguments),i=t[t.length-1];i&&!Array.isArray(i)&&i.pipe==null?t.pop():i={};let n=i.end!==!1;i.objectMode==null&&(i.objectMode=!0),i.highWaterMark==null&&(i.highWaterMark=64*1024);let s=E3(i);function o(){for(let c=0,u=arguments.length;c<u;c++)r.push(I3(arguments[c],i));return a(),this}function a(){if(e)return;e=!0;let c=r.shift();if(!c){process.nextTick(l);return}Array.isArray(c)||(c=[c]);let u=c.length+1;function g(){--u>0||(e=!1,a())}function f(h){function p(){h.removeListener(\"merge2UnpipeEnd\",p),h.removeListener(\"end\",p),g()}if(h._readableState.endEmitted)return g();h.on(\"merge2UnpipeEnd\",p),h.on(\"end\",p),h.pipe(s,{end:!1}),h.resume()}for(let h=0;h<c.length;h++)f(c[h]);g()}function l(){return e=!1,s.emit(\"queueDrain\"),n&&s.end()}return s.setMaxListeners(0),s.add=o,s.on(\"unpipe\",function(c){c.emit(\"merge2UnpipeEnd\")}),t.length&&o.apply(null,t),s}function I3(r,e){if(Array.isArray(r))for(let t=0,i=r.length;t<i;t++)r[t]=I3(r[t],e);else{if(!r._readableState&&r.pipe&&(r=r.pipe(E3(e))),!r._readableState||!r.pause||!r.pipe)throw new Error(\"Only readable stream can be merged.\");r.pause()}return r}});var w3=w(Zy=>{\"use strict\";Object.defineProperty(Zy,\"__esModule\",{value:!0});function m0e(r){return r.reduce((e,t)=>[].concat(e,t),[])}Zy.flatten=m0e;function E0e(r,e){let t=[[]],i=0;for(let n of r)e(n)?(i++,t[i]=[]):t[i].push(n);return t}Zy.splitWhen=E0e});var B3=w(oP=>{\"use strict\";Object.defineProperty(oP,\"__esModule\",{value:!0});function I0e(r){return r.code===\"ENOENT\"}oP.isEnoentCodeError=I0e});var b3=w(AP=>{\"use strict\";Object.defineProperty(AP,\"__esModule\",{value:!0});var aP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function y0e(r,e){return new aP(r,e)}AP.createDirentFromStats=y0e});var Q3=w(yf=>{\"use strict\";Object.defineProperty(yf,\"__esModule\",{value:!0});var w0e=J(\"path\"),B0e=2,b0e=/(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\())/g;function Q0e(r){return r.replace(/\\\\/g,\"/\")}yf.unixify=Q0e;function S0e(r,e){return w0e.resolve(r,e)}yf.makeAbsolute=S0e;function v0e(r){return r.replace(b0e,\"\\\\$2\")}yf.escape=v0e;function x0e(r){if(r.charAt(0)===\".\"){let e=r.charAt(1);if(e===\"/\"||e===\"\\\\\")return r.slice(B0e)}return r}yf.removeLeadingDotSegment=x0e});var v3=w((Ktt,S3)=>{S3.exports=function(e){if(typeof e!=\"string\"||e===\"\")return!1;for(var t;t=/(\\\\).|([@?!+*]\\(.*\\))/g.exec(e);){if(t[2])return!0;e=e.slice(t.index+t[0].length)}return!1}});var D3=w((Utt,P3)=>{var P0e=v3(),x3={\"{\":\"}\",\"(\":\")\",\"[\":\"]\"},D0e=function(r){if(r[0]===\"!\")return!0;for(var e=0,t=-2,i=-2,n=-2,s=-2,o=-2;e<r.length;){if(r[e]===\"*\"||r[e+1]===\"?\"&&/[\\].+)]/.test(r[e])||i!==-1&&r[e]===\"[\"&&r[e+1]!==\"]\"&&(i<e&&(i=r.indexOf(\"]\",e)),i>e&&(o===-1||o>i||(o=r.indexOf(\"\\\\\",e),o===-1||o>i)))||n!==-1&&r[e]===\"{\"&&r[e+1]!==\"}\"&&(n=r.indexOf(\"}\",e),n>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>n))||s!==-1&&r[e]===\"(\"&&r[e+1]===\"?\"&&/[:!=]/.test(r[e+2])&&r[e+3]!==\")\"&&(s=r.indexOf(\")\",e),s>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>s))||t!==-1&&r[e]===\"(\"&&r[e+1]!==\"|\"&&(t<e&&(t=r.indexOf(\"|\",e)),t!==-1&&r[t+1]!==\")\"&&(s=r.indexOf(\")\",t),s>t&&(o=r.indexOf(\"\\\\\",t),o===-1||o>s))))return!0;if(r[e]===\"\\\\\"){var a=r[e+1];e+=2;var l=x3[a];if(l){var c=r.indexOf(l,e);c!==-1&&(e=c+1)}if(r[e]===\"!\")return!0}else e++}return!1},k0e=function(r){if(r[0]===\"!\")return!0;for(var e=0;e<r.length;){if(/[*?{}()[\\]]/.test(r[e]))return!0;if(r[e]===\"\\\\\"){var t=r[e+1];e+=2;var i=x3[t];if(i){var n=r.indexOf(i,e);n!==-1&&(e=n+1)}if(r[e]===\"!\")return!0}else e++}return!1};P3.exports=function(e,t){if(typeof e!=\"string\"||e===\"\")return!1;if(P0e(e))return!0;var i=D0e;return t&&t.strict===!1&&(i=k0e),i(e)}});var R3=w((Htt,k3)=>{\"use strict\";var R0e=D3(),F0e=J(\"path\").posix.dirname,N0e=J(\"os\").platform()===\"win32\",lP=\"/\",T0e=/\\\\/g,L0e=/[\\{\\[].*[\\}\\]]$/,M0e=/(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/,O0e=/\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;k3.exports=function(e,t){var i=Object.assign({flipBackslashes:!0},t);i.flipBackslashes&&N0e&&e.indexOf(lP)<0&&(e=e.replace(T0e,lP)),L0e.test(e)&&(e+=lP),e+=\"a\";do e=F0e(e);while(R0e(e)||M0e.test(e));return e.replace(O0e,\"$1\")}});var H3=w($r=>{\"use strict\";Object.defineProperty($r,\"__esModule\",{value:!0});var K0e=J(\"path\"),U0e=R3(),F3=Bn(),H0e=Ox(),N3=\"**\",G0e=\"\\\\\",Y0e=/[*?]|^!/,j0e=/\\[.*]/,q0e=/(?:^|[^!*+?@])\\(.*\\|.*\\)/,J0e=/[!*+?@]\\(.*\\)/,W0e=/{.*(?:,|\\.\\.).*}/;function T3(r,e={}){return!L3(r,e)}$r.isStaticPattern=T3;function L3(r,e={}){return!!(e.caseSensitiveMatch===!1||r.includes(G0e)||Y0e.test(r)||j0e.test(r)||q0e.test(r)||e.extglob!==!1&&J0e.test(r)||e.braceExpansion!==!1&&W0e.test(r))}$r.isDynamicPattern=L3;function z0e(r){return _y(r)?r.slice(1):r}$r.convertToPositivePattern=z0e;function V0e(r){return\"!\"+r}$r.convertToNegativePattern=V0e;function _y(r){return r.startsWith(\"!\")&&r[1]!==\"(\"}$r.isNegativePattern=_y;function M3(r){return!_y(r)}$r.isPositivePattern=M3;function X0e(r){return r.filter(_y)}$r.getNegativePatterns=X0e;function Z0e(r){return r.filter(M3)}$r.getPositivePatterns=Z0e;function _0e(r){return U0e(r,{flipBackslashes:!1})}$r.getBaseDirectory=_0e;function $0e(r){return r.includes(N3)}$r.hasGlobStar=$0e;function O3(r){return r.endsWith(\"/\"+N3)}$r.endsWithSlashGlobStar=O3;function ebe(r){let e=K0e.basename(r);return O3(r)||T3(e)}$r.isAffectDepthOfReadingPattern=ebe;function tbe(r){return r.reduce((e,t)=>e.concat(K3(t)),[])}$r.expandPatternsWithBraceExpansion=tbe;function K3(r){return F3.braces(r,{expand:!0,nodupes:!0})}$r.expandBraceExpansion=K3;function rbe(r,e){let t=H0e.scan(r,Object.assign(Object.assign({},e),{parts:!0}));return t.parts.length===0?[r]:t.parts}$r.getPatternParts=rbe;function U3(r,e){return F3.makeRe(r,e)}$r.makeRe=U3;function ibe(r,e){return r.map(t=>U3(t,e))}$r.convertPatternsToRe=ibe;function nbe(r,e){return e.some(t=>t.test(r))}$r.matchAny=nbe});var Y3=w(cP=>{\"use strict\";Object.defineProperty(cP,\"__esModule\",{value:!0});var sbe=sP();function obe(r){let e=sbe(r);return r.forEach(t=>{t.once(\"error\",i=>e.emit(\"error\",i))}),e.once(\"close\",()=>G3(r)),e.once(\"end\",()=>G3(r)),e}cP.merge=obe;function G3(r){r.forEach(e=>e.emit(\"close\"))}});var j3=w($y=>{\"use strict\";Object.defineProperty($y,\"__esModule\",{value:!0});function abe(r){return typeof r==\"string\"}$y.isString=abe;function Abe(r){return r===\"\"}$y.isEmpty=Abe});var Ma=w(La=>{\"use strict\";Object.defineProperty(La,\"__esModule\",{value:!0});var lbe=w3();La.array=lbe;var cbe=B3();La.errno=cbe;var ube=b3();La.fs=ube;var gbe=Q3();La.path=gbe;var fbe=H3();La.pattern=fbe;var hbe=Y3();La.stream=hbe;var pbe=j3();La.string=pbe});var V3=w(Oa=>{\"use strict\";Object.defineProperty(Oa,\"__esModule\",{value:!0});var bc=Ma();function dbe(r,e){let t=q3(r),i=J3(r,e.ignore),n=t.filter(l=>bc.pattern.isStaticPattern(l,e)),s=t.filter(l=>bc.pattern.isDynamicPattern(l,e)),o=uP(n,i,!1),a=uP(s,i,!0);return o.concat(a)}Oa.generate=dbe;function uP(r,e,t){let i=W3(r);return\".\"in i?[gP(\".\",r,e,t)]:z3(i,e,t)}Oa.convertPatternsToTasks=uP;function q3(r){return bc.pattern.getPositivePatterns(r)}Oa.getPositivePatterns=q3;function J3(r,e){return bc.pattern.getNegativePatterns(r).concat(e).map(bc.pattern.convertToPositivePattern)}Oa.getNegativePatternsAsPositive=J3;function W3(r){let e={};return r.reduce((t,i)=>{let n=bc.pattern.getBaseDirectory(i);return n in t?t[n].push(i):t[n]=[i],t},e)}Oa.groupPatternsByBaseDirectory=W3;function z3(r,e,t){return Object.keys(r).map(i=>gP(i,r[i],e,t))}Oa.convertPatternGroupsToTasks=z3;function gP(r,e,t,i){return{dynamic:i,positive:e,negative:t,base:r,patterns:[].concat(e,t.map(bc.pattern.convertToNegativePattern))}}Oa.convertPatternGroupToTask=gP});var Z3=w(ew=>{\"use strict\";Object.defineProperty(ew,\"__esModule\",{value:!0});ew.read=void 0;function Cbe(r,e,t){e.fs.lstat(r,(i,n)=>{if(i!==null){X3(t,i);return}if(!n.isSymbolicLink()||!e.followSymbolicLink){fP(t,n);return}e.fs.stat(r,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){X3(t,s);return}fP(t,n);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),fP(t,o)})})}ew.read=Cbe;function X3(r,e){r(e)}function fP(r,e){r(null,e)}});var _3=w(tw=>{\"use strict\";Object.defineProperty(tw,\"__esModule\",{value:!0});tw.read=void 0;function mbe(r,e){let t=e.fs.lstatSync(r);if(!t.isSymbolicLink()||!e.followSymbolicLink)return t;try{let i=e.fs.statSync(r);return e.markSymbolicLink&&(i.isSymbolicLink=()=>!0),i}catch(i){if(!e.throwErrorOnBrokenSymbolicLink)return t;throw i}}tw.read=mbe});var $3=w(UA=>{\"use strict\";Object.defineProperty(UA,\"__esModule\",{value:!0});UA.createFileSystemAdapter=UA.FILE_SYSTEM_ADAPTER=void 0;var rw=J(\"fs\");UA.FILE_SYSTEM_ADAPTER={lstat:rw.lstat,stat:rw.stat,lstatSync:rw.lstatSync,statSync:rw.statSync};function Ebe(r){return r===void 0?UA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},UA.FILE_SYSTEM_ADAPTER),r)}UA.createFileSystemAdapter=Ebe});var e4=w(pP=>{\"use strict\";Object.defineProperty(pP,\"__esModule\",{value:!0});var Ibe=$3(),hP=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Ibe.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,t){return e!=null?e:t}};pP.default=hP});var Qc=w(HA=>{\"use strict\";Object.defineProperty(HA,\"__esModule\",{value:!0});HA.statSync=HA.stat=HA.Settings=void 0;var t4=Z3(),ybe=_3(),dP=e4();HA.Settings=dP.default;function wbe(r,e,t){if(typeof e==\"function\"){t4.read(r,CP(),e);return}t4.read(r,CP(e),t)}HA.stat=wbe;function Bbe(r,e){let t=CP(e);return ybe.read(r,t)}HA.statSync=Bbe;function CP(r={}){return r instanceof dP.default?r:new dP.default(r)}});var i4=w((_tt,r4)=>{r4.exports=bbe;function bbe(r,e){var t,i,n,s=!0;Array.isArray(r)?(t=[],i=r.length):(n=Object.keys(r),t={},i=n.length);function o(l){function c(){e&&e(l,t),e=null}s?process.nextTick(c):c()}function a(l,c,u){t[l]=u,(--i===0||c)&&o(c)}i?n?n.forEach(function(l){r[l](function(c,u){a(l,c,u)})}):r.forEach(function(l,c){l(function(u,g){a(c,u,g)})}):o(null),s=!1}});var mP=w(nw=>{\"use strict\";Object.defineProperty(nw,\"__esModule\",{value:!0});nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var iw=process.versions.node.split(\".\");if(iw[0]===void 0||iw[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var n4=Number.parseInt(iw[0],10),Qbe=Number.parseInt(iw[1],10),s4=10,Sbe=10,vbe=n4>s4,xbe=n4===s4&&Qbe>=Sbe;nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=vbe||xbe});var o4=w(sw=>{\"use strict\";Object.defineProperty(sw,\"__esModule\",{value:!0});sw.createDirentFromStats=void 0;var EP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function Pbe(r,e){return new EP(r,e)}sw.createDirentFromStats=Pbe});var IP=w(ow=>{\"use strict\";Object.defineProperty(ow,\"__esModule\",{value:!0});ow.fs=void 0;var Dbe=o4();ow.fs=Dbe});var yP=w(aw=>{\"use strict\";Object.defineProperty(aw,\"__esModule\",{value:!0});aw.joinPathSegments=void 0;function kbe(r,e,t){return r.endsWith(t)?r+e:r+t+e}aw.joinPathSegments=kbe});var g4=w(GA=>{\"use strict\";Object.defineProperty(GA,\"__esModule\",{value:!0});GA.readdir=GA.readdirWithFileTypes=GA.read=void 0;var Rbe=Qc(),a4=i4(),Fbe=mP(),A4=IP(),l4=yP();function Nbe(r,e,t){if(!e.stats&&Fbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){c4(r,e,t);return}u4(r,e,t)}GA.read=Nbe;function c4(r,e,t){e.fs.readdir(r,{withFileTypes:!0},(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(a=>({dirent:a,name:a.name,path:l4.joinPathSegments(r,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){wP(t,s);return}let o=s.map(a=>Tbe(a,e));a4(o,(a,l)=>{if(a!==null){Aw(t,a);return}wP(t,l)})})}GA.readdirWithFileTypes=c4;function Tbe(r,e){return t=>{if(!r.dirent.isSymbolicLink()){t(null,r);return}e.fs.stat(r.path,(i,n)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){t(i);return}t(null,r);return}r.dirent=A4.fs.createDirentFromStats(r.name,n),t(null,r)})}}function u4(r,e,t){e.fs.readdir(r,(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(o=>{let a=l4.joinPathSegments(r,o,e.pathSegmentSeparator);return l=>{Rbe.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let g={name:o,path:a,dirent:A4.fs.createDirentFromStats(o,u)};e.stats&&(g.stats=u),l(null,g)})}});a4(s,(o,a)=>{if(o!==null){Aw(t,o);return}wP(t,a)})})}GA.readdir=u4;function Aw(r,e){r(e)}function wP(r,e){r(null,e)}});var C4=w(YA=>{\"use strict\";Object.defineProperty(YA,\"__esModule\",{value:!0});YA.readdir=YA.readdirWithFileTypes=YA.read=void 0;var Lbe=Qc(),Mbe=mP(),f4=IP(),h4=yP();function Obe(r,e){return!e.stats&&Mbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?p4(r,e):d4(r,e)}YA.read=Obe;function p4(r,e){return e.fs.readdirSync(r,{withFileTypes:!0}).map(i=>{let n={dirent:i,name:i.name,path:h4.joinPathSegments(r,i.name,e.pathSegmentSeparator)};if(n.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(n.path);n.dirent=f4.fs.createDirentFromStats(n.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return n})}YA.readdirWithFileTypes=p4;function d4(r,e){return e.fs.readdirSync(r).map(i=>{let n=h4.joinPathSegments(r,i,e.pathSegmentSeparator),s=Lbe.statSync(n,e.fsStatSettings),o={name:i,path:n,dirent:f4.fs.createDirentFromStats(i,s)};return e.stats&&(o.stats=s),o})}YA.readdir=d4});var m4=w(jA=>{\"use strict\";Object.defineProperty(jA,\"__esModule\",{value:!0});jA.createFileSystemAdapter=jA.FILE_SYSTEM_ADAPTER=void 0;var wf=J(\"fs\");jA.FILE_SYSTEM_ADAPTER={lstat:wf.lstat,stat:wf.stat,lstatSync:wf.lstatSync,statSync:wf.statSync,readdir:wf.readdir,readdirSync:wf.readdirSync};function Kbe(r){return r===void 0?jA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},jA.FILE_SYSTEM_ADAPTER),r)}jA.createFileSystemAdapter=Kbe});var E4=w(bP=>{\"use strict\";Object.defineProperty(bP,\"__esModule\",{value:!0});var Ube=J(\"path\"),Hbe=Qc(),Gbe=m4(),BP=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Gbe.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Ube.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new Hbe.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};bP.default=BP});var lw=w(qA=>{\"use strict\";Object.defineProperty(qA,\"__esModule\",{value:!0});qA.Settings=qA.scandirSync=qA.scandir=void 0;var I4=g4(),Ybe=C4(),QP=E4();qA.Settings=QP.default;function jbe(r,e,t){if(typeof e==\"function\"){I4.read(r,SP(),e);return}I4.read(r,SP(e),t)}qA.scandir=jbe;function qbe(r,e){let t=SP(e);return Ybe.read(r,t)}qA.scandirSync=qbe;function SP(r={}){return r instanceof QP.default?r:new QP.default(r)}});var w4=w((Art,y4)=>{\"use strict\";function Jbe(r){var e=new r,t=e;function i(){var s=e;return s.next?e=s.next:(e=new r,t=e),s.next=null,s}function n(s){t.next=s,t=s}return{get:i,release:n}}y4.exports=Jbe});var b4=w((lrt,vP)=>{\"use strict\";var Wbe=w4();function B4(r,e,t){if(typeof r==\"function\"&&(t=e,e=r,r=null),t<1)throw new Error(\"fastqueue concurrency must be greater than 1\");var i=Wbe(zbe),n=null,s=null,o=0,a=null,l={push:C,drain:Is,saturated:Is,pause:u,paused:!1,concurrency:t,running:c,resume:h,idle:p,length:g,getQueue:f,unshift:y,empty:Is,kill:v,killAndDrain:D,error:T};return l;function c(){return o}function u(){l.paused=!0}function g(){for(var H=n,j=0;H;)H=H.next,j++;return j}function f(){for(var H=n,j=[];H;)j.push(H.value),H=H.next;return j}function h(){if(!!l.paused){l.paused=!1;for(var H=0;H<l.concurrency;H++)o++,B()}}function p(){return o===0&&l.length()===0}function C(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,$.errorHandler=a,o===l.concurrency||l.paused?s?(s.next=$,s=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function y(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,o===l.concurrency||l.paused?n?($.next=n,n=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function B(H){H&&i.release(H);var j=n;j?l.paused?o--:(s===n&&(s=null),n=j.next,j.next=null,e.call(r,j.value,j.worked),s===null&&l.empty()):--o===0&&l.drain()}function v(){n=null,s=null,l.drain=Is}function D(){n=null,s=null,l.drain(),l.drain=Is}function T(H){a=H}}function Is(){}function zbe(){this.value=null,this.callback=Is,this.next=null,this.release=Is,this.context=null,this.errorHandler=null;var r=this;this.worked=function(t,i){var n=r.callback,s=r.errorHandler,o=r.value;r.value=null,r.callback=Is,r.errorHandler&&s(t,o),n.call(r.context,t,i),r.release(r)}}function Vbe(r,e,t){typeof r==\"function\"&&(t=e,e=r,r=null);function i(u,g){e.call(this,u).then(function(f){g(null,f)},g)}var n=B4(r,i,t),s=n.push,o=n.unshift;return n.push=a,n.unshift=l,n.drained=c,n;function a(u){var g=new Promise(function(f,h){s(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function l(u){var g=new Promise(function(f,h){o(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function c(){var u=n.drain,g=new Promise(function(f){n.drain=function(){u(),f()}});return g}}vP.exports=B4;vP.exports.promise=Vbe});var cw=w(Yo=>{\"use strict\";Object.defineProperty(Yo,\"__esModule\",{value:!0});Yo.joinPathSegments=Yo.replacePathSegmentSeparator=Yo.isAppliedFilter=Yo.isFatalError=void 0;function Xbe(r,e){return r.errorFilter===null?!0:!r.errorFilter(e)}Yo.isFatalError=Xbe;function Zbe(r,e){return r===null||r(e)}Yo.isAppliedFilter=Zbe;function _be(r,e){return r.split(/[/\\\\]/).join(e)}Yo.replacePathSegmentSeparator=_be;function $be(r,e,t){return r===\"\"?e:r.endsWith(t)?r+e:r+t+e}Yo.joinPathSegments=$be});var DP=w(PP=>{\"use strict\";Object.defineProperty(PP,\"__esModule\",{value:!0});var eQe=cw(),xP=class{constructor(e,t){this._root=e,this._settings=t,this._root=eQe.replacePathSegmentSeparator(e,t.pathSegmentSeparator)}};PP.default=xP});var FP=w(RP=>{\"use strict\";Object.defineProperty(RP,\"__esModule\",{value:!0});var tQe=J(\"events\"),rQe=lw(),iQe=b4(),uw=cw(),nQe=DP(),kP=class extends nQe.default{constructor(e,t){super(e,t),this._settings=t,this._scandir=rQe.scandir,this._emitter=new tQe.EventEmitter,this._queue=iQe(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit(\"end\")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error(\"The reader is already destroyed\");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on(\"entry\",e)}onError(e){this._emitter.once(\"error\",e)}onEnd(e){this._emitter.once(\"end\",e)}_pushToQueue(e,t){let i={directory:e,base:t};this._queue.push(i,n=>{n!==null&&this._handleError(n)})}_worker(e,t){this._scandir(e.directory,this._settings.fsScandirSettings,(i,n)=>{if(i!==null){t(i,void 0);return}for(let s of n)this._handleEntry(s,e.base);t(null,void 0)})}_handleError(e){this._isDestroyed||!uw.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit(\"error\",e))}_handleEntry(e,t){if(this._isDestroyed||this._isFatalError)return;let i=e.path;t!==void 0&&(e.path=uw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),uw.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&uw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_emitEntry(e){this._emitter.emit(\"entry\",e)}};RP.default=kP});var Q4=w(TP=>{\"use strict\";Object.defineProperty(TP,\"__esModule\",{value:!0});var sQe=FP(),NP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new sQe.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(t=>{oQe(e,t)}),this._reader.onEntry(t=>{this._storage.add(t)}),this._reader.onEnd(()=>{aQe(e,[...this._storage])}),this._reader.read()}};TP.default=NP;function oQe(r,e){r(e)}function aQe(r,e){r(null,e)}});var S4=w(MP=>{\"use strict\";Object.defineProperty(MP,\"__esModule\",{value:!0});var AQe=J(\"stream\"),lQe=FP(),LP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new lQe.default(this._root,this._settings),this._stream=new AQe.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit(\"error\",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};MP.default=LP});var v4=w(KP=>{\"use strict\";Object.defineProperty(KP,\"__esModule\",{value:!0});var cQe=lw(),gw=cw(),uQe=DP(),OP=class extends uQe.default{constructor(){super(...arguments),this._scandir=cQe.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,t){this._queue.add({directory:e,base:t})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,t){try{let i=this._scandir(e,this._settings.fsScandirSettings);for(let n of i)this._handleEntry(n,t)}catch(i){this._handleError(i)}}_handleError(e){if(!!gw.isFatalError(this._settings,e))throw e}_handleEntry(e,t){let i=e.path;t!==void 0&&(e.path=gw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),gw.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&gw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_pushToStorage(e){this._storage.add(e)}};KP.default=OP});var x4=w(HP=>{\"use strict\";Object.defineProperty(HP,\"__esModule\",{value:!0});var gQe=v4(),UP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new gQe.default(this._root,this._settings)}read(){return this._reader.read()}};HP.default=UP});var P4=w(YP=>{\"use strict\";Object.defineProperty(YP,\"__esModule\",{value:!0});var fQe=J(\"path\"),hQe=lw(),GP=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fQe.sep),this.fsScandirSettings=new hQe.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};YP.default=GP});var qP=w(jo=>{\"use strict\";Object.defineProperty(jo,\"__esModule\",{value:!0});jo.Settings=jo.walkStream=jo.walkSync=jo.walk=void 0;var D4=Q4(),pQe=S4(),dQe=x4(),jP=P4();jo.Settings=jP.default;function CQe(r,e,t){if(typeof e==\"function\"){new D4.default(r,fw()).read(e);return}new D4.default(r,fw(e)).read(t)}jo.walk=CQe;function mQe(r,e){let t=fw(e);return new dQe.default(r,t).read()}jo.walkSync=mQe;function EQe(r,e){let t=fw(e);return new pQe.default(r,t).read()}jo.walkStream=EQe;function fw(r={}){return r instanceof jP.default?r:new jP.default(r)}});var zP=w(WP=>{\"use strict\";Object.defineProperty(WP,\"__esModule\",{value:!0});var IQe=J(\"path\"),yQe=Qc(),k4=Ma(),JP=class{constructor(e){this._settings=e,this._fsStatSettings=new yQe.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return IQe.resolve(this._settings.cwd,e)}_makeEntry(e,t){let i={name:t,path:t,dirent:k4.fs.createDirentFromStats(t,e)};return this._settings.stats&&(i.stats=e),i}_isFatalError(e){return!k4.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};WP.default=JP});var ZP=w(XP=>{\"use strict\";Object.defineProperty(XP,\"__esModule\",{value:!0});var wQe=J(\"stream\"),BQe=Qc(),bQe=qP(),QQe=zP(),VP=class extends QQe.default{constructor(){super(...arguments),this._walkStream=bQe.walkStream,this._stat=BQe.stat}dynamic(e,t){return this._walkStream(e,t)}static(e,t){let i=e.map(this._getFullEntryPath,this),n=new wQe.PassThrough({objectMode:!0});n._write=(s,o,a)=>this._getEntry(i[s],e[s],t).then(l=>{l!==null&&t.entryFilter(l)&&n.push(l),s===i.length-1&&n.end(),a()}).catch(a);for(let s=0;s<i.length;s++)n.write(s);return n}_getEntry(e,t,i){return this._getStat(e).then(n=>this._makeEntry(n,t)).catch(n=>{if(i.errorFilter(n))return null;throw n})}_getStat(e){return new Promise((t,i)=>{this._stat(e,this._fsStatSettings,(n,s)=>n===null?t(s):i(n))})}};XP.default=VP});var R4=w($P=>{\"use strict\";Object.defineProperty($P,\"__esModule\",{value:!0});var Bf=Ma(),_P=class{constructor(e,t,i){this._patterns=e,this._settings=t,this._micromatchOptions=i,this._storage=[],this._fillStorage()}_fillStorage(){let e=Bf.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let t of e){let i=this._getPatternSegments(t),n=this._splitSegmentsIntoSections(i);this._storage.push({complete:n.length<=1,pattern:t,segments:i,sections:n})}}_getPatternSegments(e){return Bf.pattern.getPatternParts(e,this._micromatchOptions).map(i=>Bf.pattern.isDynamicPattern(i,this._settings)?{dynamic:!0,pattern:i,patternRe:Bf.pattern.makeRe(i,this._micromatchOptions)}:{dynamic:!1,pattern:i})}_splitSegmentsIntoSections(e){return Bf.array.splitWhen(e,t=>t.dynamic&&Bf.pattern.hasGlobStar(t.pattern))}};$P.default=_P});var F4=w(tD=>{\"use strict\";Object.defineProperty(tD,\"__esModule\",{value:!0});var SQe=R4(),eD=class extends SQe.default{match(e){let t=e.split(\"/\"),i=t.length,n=this._storage.filter(s=>!s.complete||s.segments.length>i);for(let s of n){let o=s.sections[0];if(!s.complete&&i>o.length||t.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};tD.default=eD});var N4=w(iD=>{\"use strict\";Object.defineProperty(iD,\"__esModule\",{value:!0});var hw=Ma(),vQe=F4(),rD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t}getFilter(e,t,i){let n=this._getMatcher(t),s=this._getNegativePatternsRe(i);return o=>this._filter(e,o,n,s)}_getMatcher(e){return new vQe.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let t=e.filter(hw.pattern.isAffectDepthOfReadingPattern);return hw.pattern.convertPatternsToRe(t,this._micromatchOptions)}_filter(e,t,i,n){let s=this._getEntryLevel(e,t.path);if(this._isSkippedByDeep(s)||this._isSkippedSymbolicLink(t))return!1;let o=hw.path.removeLeadingDotSegment(t.path);return this._isSkippedByPositivePatterns(o,i)?!1:this._isSkippedByNegativePatterns(o,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,t){let i=e.split(\"/\").length;return t.split(\"/\").length-(e===\"\"?0:i)}_isSkippedByPositivePatterns(e,t){return!this._settings.baseNameMatch&&!t.match(e)}_isSkippedByNegativePatterns(e,t){return!hw.pattern.matchAny(e,t)}};iD.default=rD});var T4=w(sD=>{\"use strict\";Object.defineProperty(sD,\"__esModule\",{value:!0});var Zd=Ma(),nD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t,this.index=new Map}getFilter(e,t){let i=Zd.pattern.convertPatternsToRe(e,this._micromatchOptions),n=Zd.pattern.convertPatternsToRe(t,this._micromatchOptions);return s=>this._filter(s,i,n)}_filter(e,t,i){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e,i))return!1;let n=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(n,t)&&!this._isMatchToPatterns(e.path,i)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,t){if(!this._settings.absolute)return!1;let i=Zd.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(i,t)}_isMatchToPatterns(e,t){let i=Zd.path.removeLeadingDotSegment(e);return Zd.pattern.matchAny(i,t)}};sD.default=nD});var L4=w(aD=>{\"use strict\";Object.defineProperty(aD,\"__esModule\",{value:!0});var xQe=Ma(),oD=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return xQe.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};aD.default=oD});var O4=w(lD=>{\"use strict\";Object.defineProperty(lD,\"__esModule\",{value:!0});var M4=Ma(),AD=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let t=e.path;return this._settings.absolute&&(t=M4.path.makeAbsolute(this._settings.cwd,t),t=M4.path.unixify(t)),this._settings.markDirectories&&e.dirent.isDirectory()&&(t+=\"/\"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:t}):t}};lD.default=AD});var pw=w(uD=>{\"use strict\";Object.defineProperty(uD,\"__esModule\",{value:!0});var PQe=J(\"path\"),DQe=N4(),kQe=T4(),RQe=L4(),FQe=O4(),cD=class{constructor(e){this._settings=e,this.errorFilter=new RQe.default(this._settings),this.entryFilter=new kQe.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new DQe.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new FQe.default(this._settings)}_getRootDirectory(e){return PQe.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let t=e.base===\".\"?\"\":e.base;return{basePath:t,pathSegmentSeparator:\"/\",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(t,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};uD.default=cD});var K4=w(fD=>{\"use strict\";Object.defineProperty(fD,\"__esModule\",{value:!0});var NQe=ZP(),TQe=pw(),gD=class extends TQe.default{constructor(){super(...arguments),this._reader=new NQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=[];return new Promise((s,o)=>{let a=this.api(t,e,i);a.once(\"error\",o),a.on(\"data\",l=>n.push(i.transform(l))),a.once(\"end\",()=>s(n))})}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};fD.default=gD});var U4=w(pD=>{\"use strict\";Object.defineProperty(pD,\"__esModule\",{value:!0});var LQe=J(\"stream\"),MQe=ZP(),OQe=pw(),hD=class extends OQe.default{constructor(){super(...arguments),this._reader=new MQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=this.api(t,e,i),s=new LQe.Readable({objectMode:!0,read:()=>{}});return n.once(\"error\",o=>s.emit(\"error\",o)).on(\"data\",o=>s.emit(\"data\",i.transform(o))).once(\"end\",()=>s.emit(\"end\")),s.once(\"close\",()=>n.destroy()),s}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};pD.default=hD});var H4=w(CD=>{\"use strict\";Object.defineProperty(CD,\"__esModule\",{value:!0});var KQe=Qc(),UQe=qP(),HQe=zP(),dD=class extends HQe.default{constructor(){super(...arguments),this._walkSync=UQe.walkSync,this._statSync=KQe.statSync}dynamic(e,t){return this._walkSync(e,t)}static(e,t){let i=[];for(let n of e){let s=this._getFullEntryPath(n),o=this._getEntry(s,n,t);o===null||!t.entryFilter(o)||i.push(o)}return i}_getEntry(e,t,i){try{let n=this._getStat(e);return this._makeEntry(n,t)}catch(n){if(i.errorFilter(n))return null;throw n}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};CD.default=dD});var G4=w(ED=>{\"use strict\";Object.defineProperty(ED,\"__esModule\",{value:!0});var GQe=H4(),YQe=pw(),mD=class extends YQe.default{constructor(){super(...arguments),this._reader=new GQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e);return this.api(t,e,i).map(i.transform)}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};ED.default=mD});var Y4=w(_d=>{\"use strict\";Object.defineProperty(_d,\"__esModule\",{value:!0});var bf=J(\"fs\"),jQe=J(\"os\"),qQe=jQe.cpus().length;_d.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:bf.lstat,lstatSync:bf.lstatSync,stat:bf.stat,statSync:bf.statSync,readdir:bf.readdir,readdirSync:bf.readdirSync};var ID=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,qQe),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,t){return e===void 0?t:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},_d.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};_d.default=ID});var dw=w((Frt,q4)=>{\"use strict\";var j4=V3(),JQe=K4(),WQe=U4(),zQe=G4(),yD=Y4(),Sc=Ma();async function wD(r,e){Qf(r);let t=BD(r,JQe.default,e),i=await Promise.all(t);return Sc.array.flatten(i)}(function(r){function e(o,a){Qf(o);let l=BD(o,zQe.default,a);return Sc.array.flatten(l)}r.sync=e;function t(o,a){Qf(o);let l=BD(o,WQe.default,a);return Sc.stream.merge(l)}r.stream=t;function i(o,a){Qf(o);let l=[].concat(o),c=new yD.default(a);return j4.generate(l,c)}r.generateTasks=i;function n(o,a){Qf(o);let l=new yD.default(a);return Sc.pattern.isDynamicPattern(o,l)}r.isDynamicPattern=n;function s(o){return Qf(o),Sc.path.escape(o)}r.escapePath=s})(wD||(wD={}));function BD(r,e,t){let i=[].concat(r),n=new yD.default(t),s=j4.generate(i,n),o=new e(n);return s.map(o.read,o)}function Qf(r){if(![].concat(r).every(i=>Sc.string.isString(i)&&!Sc.string.isEmpty(i)))throw new TypeError(\"Patterns must be a string (non empty) or an array of strings\")}q4.exports=wD});var W4=w(vc=>{\"use strict\";var{promisify:VQe}=J(\"util\"),J4=J(\"fs\");async function bD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return(await VQe(J4[r])(t))[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}function QD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return J4[r](t)[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}vc.isFile=bD.bind(null,\"stat\",\"isFile\");vc.isDirectory=bD.bind(null,\"stat\",\"isDirectory\");vc.isSymlink=bD.bind(null,\"lstat\",\"isSymbolicLink\");vc.isFileSync=QD.bind(null,\"statSync\",\"isFile\");vc.isDirectorySync=QD.bind(null,\"statSync\",\"isDirectory\");vc.isSymlinkSync=QD.bind(null,\"lstatSync\",\"isSymbolicLink\")});var _4=w((Trt,SD)=>{\"use strict\";var xc=J(\"path\"),z4=W4(),V4=r=>r.length>1?`{${r.join(\",\")}}`:r[0],X4=(r,e)=>{let t=r[0]===\"!\"?r.slice(1):r;return xc.isAbsolute(t)?t:xc.join(e,t)},XQe=(r,e)=>xc.extname(r)?`**/${r}`:`**/${r}.${V4(e)}`,Z4=(r,e)=>{if(e.files&&!Array.isArray(e.files))throw new TypeError(`Expected \\`files\\` to be of type \\`Array\\` but received type \\`${typeof e.files}\\``);if(e.extensions&&!Array.isArray(e.extensions))throw new TypeError(`Expected \\`extensions\\` to be of type \\`Array\\` but received type \\`${typeof e.extensions}\\``);return e.files&&e.extensions?e.files.map(t=>xc.posix.join(r,XQe(t,e.extensions))):e.files?e.files.map(t=>xc.posix.join(r,`**/${t}`)):e.extensions?[xc.posix.join(r,`**/*.${V4(e.extensions)}`)]:[xc.posix.join(r,\"**\")]};SD.exports=async(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=await Promise.all([].concat(r).map(async i=>await z4.isDirectory(X4(i,e.cwd))?Z4(i,e):i));return[].concat.apply([],t)};SD.exports.sync=(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=[].concat(r).map(i=>z4.isDirectorySync(X4(i,e.cwd))?Z4(i,e):i);return[].concat.apply([],t)}});var o8=w((Lrt,s8)=>{function $4(r){return Array.isArray(r)?r:[r]}var i8=\"\",e8=\" \",vD=\"\\\\\",ZQe=/^\\s+$/,_Qe=/^\\\\!/,$Qe=/^\\\\#/,eSe=/\\r?\\n/g,tSe=/^\\.*\\/|^\\.+$/,xD=\"/\",t8=typeof Symbol<\"u\"?Symbol.for(\"node-ignore\"):\"node-ignore\",rSe=(r,e,t)=>Object.defineProperty(r,e,{value:t}),iSe=/([0-z])-([0-z])/g,nSe=r=>r.replace(iSe,(e,t,i)=>t.charCodeAt(0)<=i.charCodeAt(0)?e:i8),sSe=r=>{let{length:e}=r;return r.slice(0,e-e%2)},oSe=[[/\\\\?\\s+$/,r=>r.indexOf(\"\\\\\")===0?e8:i8],[/\\\\\\s/g,()=>e8],[/[\\\\$.|*+(){^]/g,r=>`\\\\${r}`],[/(?!\\\\)\\?/g,()=>\"[^/]\"],[/^\\//,()=>\"^\"],[/\\//g,()=>\"\\\\/\"],[/^\\^*\\\\\\*\\\\\\*\\\\\\//,()=>\"^(?:.*\\\\/)?\"],[/^(?=[^^])/,function(){return/\\/(?!$)/.test(this)?\"^\":\"(?:^|\\\\/)\"}],[/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,(r,e,t)=>e+6<t.length?\"(?:\\\\/[^\\\\/]+)*\":\"\\\\/.+\"],[/(^|[^\\\\]+)\\\\\\*(?=.+)/g,(r,e)=>`${e}[^\\\\/]*`],[/\\\\\\\\\\\\(?=[$.|*+(){^])/g,()=>vD],[/\\\\\\\\/g,()=>vD],[/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,(r,e,t,i,n)=>e===vD?`\\\\[${t}${sSe(i)}${n}`:n===\"]\"&&i.length%2===0?`[${nSe(t)}${i}]`:\"[]\"],[/(?:[^*])$/,r=>/\\/$/.test(r)?`${r}$`:`${r}(?=$|\\\\/$)`],[/(\\^|\\\\\\/)?\\\\\\*$/,(r,e)=>`${e?`${e}[^/]+`:\"[^/]*\"}(?=$|\\\\/$)`]],r8=Object.create(null),aSe=(r,e)=>{let t=r8[r];return t||(t=oSe.reduce((i,n)=>i.replace(n[0],n[1].bind(r)),r),r8[r]=t),e?new RegExp(t,\"i\"):new RegExp(t)},kD=r=>typeof r==\"string\",ASe=r=>r&&kD(r)&&!ZQe.test(r)&&r.indexOf(\"#\")!==0,lSe=r=>r.split(eSe),PD=class{constructor(e,t,i,n){this.origin=e,this.pattern=t,this.negative=i,this.regex=n}},cSe=(r,e)=>{let t=r,i=!1;r.indexOf(\"!\")===0&&(i=!0,r=r.substr(1)),r=r.replace(_Qe,\"!\").replace($Qe,\"#\");let n=aSe(r,e);return new PD(t,r,i,n)},uSe=(r,e)=>{throw new e(r)},Ka=(r,e,t)=>kD(r)?r?Ka.isNotRelative(r)?t(`path should be a \\`path.relative()\\`d string, but got \"${e}\"`,RangeError):!0:t(\"path must not be empty\",TypeError):t(`path must be a string, but got \\`${e}\\``,TypeError),n8=r=>tSe.test(r);Ka.isNotRelative=n8;Ka.convert=r=>r;var DD=class{constructor({ignorecase:e=!0}={}){rSe(this,t8,!0),this._rules=[],this._ignorecase=e,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[t8]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(ASe(e)){let t=cSe(e,this._ignorecase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,$4(kD(e)?lSe(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,t){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:o}=s;if(n===o&&i!==n||o&&!i&&!n&&!t)return;s.regex.test(e)&&(i=!o,n=o)}),{ignored:i,unignored:n}}_test(e,t,i,n){let s=e&&Ka.convert(e);return Ka(s,e,uSe),this._t(s,t,i,n)}_t(e,t,i,n){if(e in t)return t[e];if(n||(n=e.split(xD)),n.pop(),!n.length)return t[e]=this._testOne(e,i);let s=this._t(n.join(xD)+xD,t,i,n);return t[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return $4(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Cw=r=>new DD(r),gSe=()=>!1,fSe=r=>Ka(r&&Ka.convert(r),r,gSe);Cw.isPathValid=fSe;Cw.default=Cw;s8.exports=Cw;if(typeof process<\"u\"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform===\"win32\")){let r=t=>/^\\\\\\\\\\?\\\\/.test(t)||/[\"<>|\\u0000-\\u001F]+/u.test(t)?t:t.replace(/\\\\/g,\"/\");Ka.convert=r;let e=/^[a-z]:\\//i;Ka.isNotRelative=t=>e.test(t)||n8(t)}});var A8=w((Mrt,a8)=>{\"use strict\";a8.exports=r=>{let e=/^\\\\\\\\\\?\\\\/.test(r),t=/[^\\u0000-\\u0080]+/.test(r);return e||t?r:r.replace(/\\\\/g,\"/\")}});var p8=w((Ort,RD)=>{\"use strict\";var{promisify:hSe}=J(\"util\"),l8=J(\"fs\"),Ua=J(\"path\"),c8=dw(),pSe=o8(),$d=A8(),u8=[\"**/node_modules/**\",\"**/flow-typed/**\",\"**/coverage/**\",\"**/.git\"],dSe=hSe(l8.readFile),CSe=r=>e=>e.startsWith(\"!\")?\"!\"+Ua.posix.join(r,e.slice(1)):Ua.posix.join(r,e),mSe=(r,e)=>{let t=$d(Ua.relative(e.cwd,Ua.dirname(e.fileName)));return r.split(/\\r?\\n/).filter(Boolean).filter(i=>!i.startsWith(\"#\")).map(CSe(t))},g8=r=>{let e=pSe();for(let t of r)e.add(mSe(t.content,{cwd:t.cwd,fileName:t.filePath}));return e},ESe=(r,e)=>{if(r=$d(r),Ua.isAbsolute(e)){if($d(e).startsWith(r))return e;throw new Error(`Path ${e} is not in cwd ${r}`)}return Ua.join(r,e)},f8=(r,e)=>t=>r.ignores($d(Ua.relative(e,ESe(e,t.path||t)))),ISe=async(r,e)=>{let t=Ua.join(e,r),i=await dSe(t,\"utf8\");return{cwd:e,filePath:t,content:i}},ySe=(r,e)=>{let t=Ua.join(e,r),i=l8.readFileSync(t,\"utf8\");return{cwd:e,filePath:t,content:i}},h8=({ignore:r=[],cwd:e=$d(process.cwd())}={})=>({ignore:r,cwd:e});RD.exports=async r=>{r=h8(r);let e=await c8(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}),t=await Promise.all(e.map(n=>ISe(n,r.cwd))),i=g8(t);return f8(i,r.cwd)};RD.exports.sync=r=>{r=h8(r);let t=c8.sync(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}).map(n=>ySe(n,r.cwd)),i=g8(t);return f8(i,r.cwd)}});var C8=w((Krt,d8)=>{\"use strict\";var{Transform:wSe}=J(\"stream\"),mw=class extends wSe{constructor(){super({objectMode:!0})}},FD=class extends mw{constructor(e){super(),this._filter=e}_transform(e,t,i){this._filter(e)&&this.push(e),i()}},ND=class extends mw{constructor(){super(),this._pushed=new Set}_transform(e,t,i){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),i()}};d8.exports={FilterStream:FD,UniqueStream:ND}});var OD=w((Urt,Pc)=>{\"use strict\";var E8=J(\"fs\"),Ew=m3(),BSe=sP(),Iw=dw(),yw=_4(),TD=p8(),{FilterStream:bSe,UniqueStream:QSe}=C8(),I8=()=>!1,m8=r=>r[0]===\"!\",SSe=r=>{if(!r.every(e=>typeof e==\"string\"))throw new TypeError(\"Patterns must be a string or an array of strings\")},vSe=(r={})=>{if(!r.cwd)return;let e;try{e=E8.statSync(r.cwd)}catch{return}if(!e.isDirectory())throw new Error(\"The `cwd` option must be a path to a directory\")},xSe=r=>r.stats instanceof E8.Stats?r.path:r,ww=(r,e)=>{r=Ew([].concat(r)),SSe(r),vSe(e);let t=[];e={ignore:[],expandDirectories:!0,...e};for(let[i,n]of r.entries()){if(m8(n))continue;let s=r.slice(i).filter(a=>m8(a)).map(a=>a.slice(1)),o={...e,ignore:e.ignore.concat(s)};t.push({pattern:n,options:o})}return t},PSe=(r,e)=>{let t={};return r.options.cwd&&(t.cwd=r.options.cwd),Array.isArray(r.options.expandDirectories)?t={...t,files:r.options.expandDirectories}:typeof r.options.expandDirectories==\"object\"&&(t={...t,...r.options.expandDirectories}),e(r.pattern,t)},LD=(r,e)=>r.options.expandDirectories?PSe(r,e):[r.pattern],y8=r=>r&&r.gitignore?TD.sync({cwd:r.cwd,ignore:r.ignore}):I8,MD=r=>e=>{let{options:t}=r;return t.ignore&&Array.isArray(t.ignore)&&t.expandDirectories&&(t.ignore=yw.sync(t.ignore)),{pattern:e,options:t}};Pc.exports=async(r,e)=>{let t=ww(r,e),i=async()=>e&&e.gitignore?TD({cwd:e.cwd,ignore:e.ignore}):I8,n=async()=>{let l=await Promise.all(t.map(async c=>{let u=await LD(c,yw);return Promise.all(u.map(MD(c)))}));return Ew(...l)},[s,o]=await Promise.all([i(),n()]),a=await Promise.all(o.map(l=>Iw(l.pattern,l.options)));return Ew(...a).filter(l=>!s(xSe(l)))};Pc.exports.sync=(r,e)=>{let t=ww(r,e),i=[];for(let o of t){let a=LD(o,yw.sync).map(MD(o));i.push(...a)}let n=y8(e),s=[];for(let o of i)s=Ew(s,Iw.sync(o.pattern,o.options));return s.filter(o=>!n(o))};Pc.exports.stream=(r,e)=>{let t=ww(r,e),i=[];for(let a of t){let l=LD(a,yw.sync).map(MD(a));i.push(...l)}let n=y8(e),s=new bSe(a=>!n(a)),o=new QSe;return BSe(i.map(a=>Iw.stream(a.pattern,a.options))).pipe(s).pipe(o)};Pc.exports.generateGlobTasks=ww;Pc.exports.hasMagic=(r,e)=>[].concat(r).some(t=>Iw.isDynamicPattern(t,e));Pc.exports.gitignore=TD});var vn=w((iit,L8)=>{function GSe(r){var e=typeof r;return r!=null&&(e==\"object\"||e==\"function\")}L8.exports=GSe});var WD=w((nit,M8)=>{var YSe=typeof global==\"object\"&&global&&global.Object===Object&&global;M8.exports=YSe});var ys=w((sit,O8)=>{var jSe=WD(),qSe=typeof self==\"object\"&&self&&self.Object===Object&&self,JSe=jSe||qSe||Function(\"return this\")();O8.exports=JSe});var U8=w((oit,K8)=>{var WSe=ys(),zSe=function(){return WSe.Date.now()};K8.exports=zSe});var G8=w((ait,H8)=>{var VSe=/\\s/;function XSe(r){for(var e=r.length;e--&&VSe.test(r.charAt(e)););return e}H8.exports=XSe});var j8=w((Ait,Y8)=>{var ZSe=G8(),_Se=/^\\s+/;function $Se(r){return r&&r.slice(0,ZSe(r)+1).replace(_Se,\"\")}Y8.exports=$Se});var Rc=w((lit,q8)=>{var eve=ys(),tve=eve.Symbol;q8.exports=tve});var V8=w((cit,z8)=>{var J8=Rc(),W8=Object.prototype,rve=W8.hasOwnProperty,ive=W8.toString,uC=J8?J8.toStringTag:void 0;function nve(r){var e=rve.call(r,uC),t=r[uC];try{r[uC]=void 0;var i=!0}catch{}var n=ive.call(r);return i&&(e?r[uC]=t:delete r[uC]),n}z8.exports=nve});var Z8=w((uit,X8)=>{var sve=Object.prototype,ove=sve.toString;function ave(r){return ove.call(r)}X8.exports=ave});var Fc=w((git,ez)=>{var _8=Rc(),Ave=V8(),lve=Z8(),cve=\"[object Null]\",uve=\"[object Undefined]\",$8=_8?_8.toStringTag:void 0;function gve(r){return r==null?r===void 0?uve:cve:$8&&$8 in Object(r)?Ave(r):lve(r)}ez.exports=gve});var Wo=w((fit,tz)=>{function fve(r){return r!=null&&typeof r==\"object\"}tz.exports=fve});var gC=w((hit,rz)=>{var hve=Fc(),pve=Wo(),dve=\"[object Symbol]\";function Cve(r){return typeof r==\"symbol\"||pve(r)&&hve(r)==dve}rz.exports=Cve});var oz=w((pit,sz)=>{var mve=j8(),iz=vn(),Eve=gC(),nz=0/0,Ive=/^[-+]0x[0-9a-f]+$/i,yve=/^0b[01]+$/i,wve=/^0o[0-7]+$/i,Bve=parseInt;function bve(r){if(typeof r==\"number\")return r;if(Eve(r))return nz;if(iz(r)){var e=typeof r.valueOf==\"function\"?r.valueOf():r;r=iz(e)?e+\"\":e}if(typeof r!=\"string\")return r===0?r:+r;r=mve(r);var t=yve.test(r);return t||wve.test(r)?Bve(r.slice(2),t?2:8):Ive.test(r)?nz:+r}sz.exports=bve});var lz=w((dit,Az)=>{var Qve=vn(),zD=U8(),az=oz(),Sve=\"Expected a function\",vve=Math.max,xve=Math.min;function Pve(r,e,t){var i,n,s,o,a,l,c=0,u=!1,g=!1,f=!0;if(typeof r!=\"function\")throw new TypeError(Sve);e=az(e)||0,Qve(t)&&(u=!!t.leading,g=\"maxWait\"in t,s=g?vve(az(t.maxWait)||0,e):s,f=\"trailing\"in t?!!t.trailing:f);function h(j){var $=i,V=n;return i=n=void 0,c=j,o=r.apply(V,$),o}function p(j){return c=j,a=setTimeout(B,e),u?h(j):o}function C(j){var $=j-l,V=j-c,W=e-$;return g?xve(W,s-V):W}function y(j){var $=j-l,V=j-c;return l===void 0||$>=e||$<0||g&&V>=s}function B(){var j=zD();if(y(j))return v(j);a=setTimeout(B,C(j))}function v(j){return a=void 0,f&&i?h(j):(i=n=void 0,o)}function D(){a!==void 0&&clearTimeout(a),c=0,i=l=n=a=void 0}function T(){return a===void 0?o:v(zD())}function H(){var j=zD(),$=y(j);if(i=arguments,n=this,l=j,$){if(a===void 0)return p(l);if(g)return clearTimeout(a),a=setTimeout(B,e),h(l)}return a===void 0&&(a=setTimeout(B,e)),o}return H.cancel=D,H.flush=T,H}Az.exports=Pve});var uz=w((Cit,cz)=>{var Dve=lz(),kve=vn(),Rve=\"Expected a function\";function Fve(r,e,t){var i=!0,n=!0;if(typeof r!=\"function\")throw new TypeError(Rve);return kve(t)&&(i=\"leading\"in t?!!t.leading:i,n=\"trailing\"in t?!!t.trailing:n),Dve(r,e,{leading:i,maxWait:e,trailing:n})}cz.exports=Fve});var Ya=w((Ga,jw)=>{\"use strict\";Object.defineProperty(Ga,\"__esModule\",{value:!0});var Iz=[\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Uint16Array\",\"Int32Array\",\"Uint32Array\",\"Float32Array\",\"Float64Array\",\"BigInt64Array\",\"BigUint64Array\"];function Jve(r){return Iz.includes(r)}var Wve=[\"Function\",\"Generator\",\"AsyncGenerator\",\"GeneratorFunction\",\"AsyncGeneratorFunction\",\"AsyncFunction\",\"Observable\",\"Array\",\"Buffer\",\"Object\",\"RegExp\",\"Date\",\"Error\",\"Map\",\"Set\",\"WeakMap\",\"WeakSet\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"DataView\",\"Promise\",\"URL\",\"FormData\",\"URLSearchParams\",\"HTMLElement\",...Iz];function zve(r){return Wve.includes(r)}var Vve=[\"null\",\"undefined\",\"string\",\"number\",\"bigint\",\"boolean\",\"symbol\"];function Xve(r){return Vve.includes(r)}function Lf(r){return e=>typeof e===r}var{toString:yz}=Object.prototype,CC=r=>{let e=yz.call(r).slice(8,-1);if(/HTML\\w+Element/.test(e)&&X.domElement(r))return\"HTMLElement\";if(zve(e))return e},lr=r=>e=>CC(e)===r;function X(r){if(r===null)return\"null\";switch(typeof r){case\"undefined\":return\"undefined\";case\"string\":return\"string\";case\"number\":return\"number\";case\"boolean\":return\"boolean\";case\"function\":return\"Function\";case\"bigint\":return\"bigint\";case\"symbol\":return\"symbol\";default:}if(X.observable(r))return\"Observable\";if(X.array(r))return\"Array\";if(X.buffer(r))return\"Buffer\";let e=CC(r);if(e)return e;if(r instanceof String||r instanceof Boolean||r instanceof Number)throw new TypeError(\"Please don't use object wrappers for primitive types\");return\"Object\"}X.undefined=Lf(\"undefined\");X.string=Lf(\"string\");var Zve=Lf(\"number\");X.number=r=>Zve(r)&&!X.nan(r);X.bigint=Lf(\"bigint\");X.function_=Lf(\"function\");X.null_=r=>r===null;X.class_=r=>X.function_(r)&&r.toString().startsWith(\"class \");X.boolean=r=>r===!0||r===!1;X.symbol=Lf(\"symbol\");X.numericString=r=>X.string(r)&&!X.emptyStringOrWhitespace(r)&&!Number.isNaN(Number(r));X.array=(r,e)=>Array.isArray(r)?X.function_(e)?r.every(e):!0:!1;X.buffer=r=>{var e,t,i,n;return(n=(i=(t=(e=r)===null||e===void 0?void 0:e.constructor)===null||t===void 0?void 0:t.isBuffer)===null||i===void 0?void 0:i.call(t,r))!==null&&n!==void 0?n:!1};X.nullOrUndefined=r=>X.null_(r)||X.undefined(r);X.object=r=>!X.null_(r)&&(typeof r==\"object\"||X.function_(r));X.iterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.iterator])};X.asyncIterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.asyncIterator])};X.generator=r=>X.iterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.asyncGenerator=r=>X.asyncIterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.nativePromise=r=>lr(\"Promise\")(r);var _ve=r=>{var e,t;return X.function_((e=r)===null||e===void 0?void 0:e.then)&&X.function_((t=r)===null||t===void 0?void 0:t.catch)};X.promise=r=>X.nativePromise(r)||_ve(r);X.generatorFunction=lr(\"GeneratorFunction\");X.asyncGeneratorFunction=r=>CC(r)===\"AsyncGeneratorFunction\";X.asyncFunction=r=>CC(r)===\"AsyncFunction\";X.boundFunction=r=>X.function_(r)&&!r.hasOwnProperty(\"prototype\");X.regExp=lr(\"RegExp\");X.date=lr(\"Date\");X.error=lr(\"Error\");X.map=r=>lr(\"Map\")(r);X.set=r=>lr(\"Set\")(r);X.weakMap=r=>lr(\"WeakMap\")(r);X.weakSet=r=>lr(\"WeakSet\")(r);X.int8Array=lr(\"Int8Array\");X.uint8Array=lr(\"Uint8Array\");X.uint8ClampedArray=lr(\"Uint8ClampedArray\");X.int16Array=lr(\"Int16Array\");X.uint16Array=lr(\"Uint16Array\");X.int32Array=lr(\"Int32Array\");X.uint32Array=lr(\"Uint32Array\");X.float32Array=lr(\"Float32Array\");X.float64Array=lr(\"Float64Array\");X.bigInt64Array=lr(\"BigInt64Array\");X.bigUint64Array=lr(\"BigUint64Array\");X.arrayBuffer=lr(\"ArrayBuffer\");X.sharedArrayBuffer=lr(\"SharedArrayBuffer\");X.dataView=lr(\"DataView\");X.directInstanceOf=(r,e)=>Object.getPrototypeOf(r)===e.prototype;X.urlInstance=r=>lr(\"URL\")(r);X.urlString=r=>{if(!X.string(r))return!1;try{return new URL(r),!0}catch{return!1}};X.truthy=r=>Boolean(r);X.falsy=r=>!r;X.nan=r=>Number.isNaN(r);X.primitive=r=>X.null_(r)||Xve(typeof r);X.integer=r=>Number.isInteger(r);X.safeInteger=r=>Number.isSafeInteger(r);X.plainObject=r=>{if(yz.call(r)!==\"[object Object]\")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.getPrototypeOf({})};X.typedArray=r=>Jve(CC(r));var $ve=r=>X.safeInteger(r)&&r>=0;X.arrayLike=r=>!X.nullOrUndefined(r)&&!X.function_(r)&&$ve(r.length);X.inRange=(r,e)=>{if(X.number(e))return r>=Math.min(0,e)&&r<=Math.max(e,0);if(X.array(e)&&e.length===2)return r>=Math.min(...e)&&r<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var exe=1,txe=[\"innerHTML\",\"ownerDocument\",\"style\",\"attributes\",\"nodeValue\"];X.domElement=r=>X.object(r)&&r.nodeType===exe&&X.string(r.nodeName)&&!X.plainObject(r)&&txe.every(e=>e in r);X.observable=r=>{var e,t,i,n;return r?r===((t=(e=r)[Symbol.observable])===null||t===void 0?void 0:t.call(e))||r===((n=(i=r)[\"@@observable\"])===null||n===void 0?void 0:n.call(i)):!1};X.nodeStream=r=>X.object(r)&&X.function_(r.pipe)&&!X.observable(r);X.infinite=r=>r===1/0||r===-1/0;var wz=r=>e=>X.integer(e)&&Math.abs(e%2)===r;X.evenInteger=wz(0);X.oddInteger=wz(1);X.emptyArray=r=>X.array(r)&&r.length===0;X.nonEmptyArray=r=>X.array(r)&&r.length>0;X.emptyString=r=>X.string(r)&&r.length===0;X.nonEmptyString=r=>X.string(r)&&r.length>0;var rxe=r=>X.string(r)&&!/\\S/.test(r);X.emptyStringOrWhitespace=r=>X.emptyString(r)||rxe(r);X.emptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length===0;X.nonEmptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length>0;X.emptySet=r=>X.set(r)&&r.size===0;X.nonEmptySet=r=>X.set(r)&&r.size>0;X.emptyMap=r=>X.map(r)&&r.size===0;X.nonEmptyMap=r=>X.map(r)&&r.size>0;X.propertyKey=r=>X.any([X.string,X.number,X.symbol],r);X.formData=r=>lr(\"FormData\")(r);X.urlSearchParams=r=>lr(\"URLSearchParams\")(r);var Bz=(r,e,t)=>{if(!X.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(t.length===0)throw new TypeError(\"Invalid number of values\");return r.call(t,e)};X.any=(r,...e)=>(X.array(r)?r:[r]).some(i=>Bz(Array.prototype.some,i,e));X.all=(r,...e)=>Bz(Array.prototype.every,r,e);var Ye=(r,e,t,i={})=>{if(!r){let{multipleValues:n}=i,s=n?`received values of types ${[...new Set(t.map(o=>`\\`${X(o)}\\``))].join(\", \")}`:`received value of type \\`${X(t)}\\``;throw new TypeError(`Expected value which is \\`${e}\\`, ${s}.`)}};Ga.assert={undefined:r=>Ye(X.undefined(r),\"undefined\",r),string:r=>Ye(X.string(r),\"string\",r),number:r=>Ye(X.number(r),\"number\",r),bigint:r=>Ye(X.bigint(r),\"bigint\",r),function_:r=>Ye(X.function_(r),\"Function\",r),null_:r=>Ye(X.null_(r),\"null\",r),class_:r=>Ye(X.class_(r),\"Class\",r),boolean:r=>Ye(X.boolean(r),\"boolean\",r),symbol:r=>Ye(X.symbol(r),\"symbol\",r),numericString:r=>Ye(X.numericString(r),\"string with a number\",r),array:(r,e)=>{Ye(X.array(r),\"Array\",r),e&&r.forEach(e)},buffer:r=>Ye(X.buffer(r),\"Buffer\",r),nullOrUndefined:r=>Ye(X.nullOrUndefined(r),\"null or undefined\",r),object:r=>Ye(X.object(r),\"Object\",r),iterable:r=>Ye(X.iterable(r),\"Iterable\",r),asyncIterable:r=>Ye(X.asyncIterable(r),\"AsyncIterable\",r),generator:r=>Ye(X.generator(r),\"Generator\",r),asyncGenerator:r=>Ye(X.asyncGenerator(r),\"AsyncGenerator\",r),nativePromise:r=>Ye(X.nativePromise(r),\"native Promise\",r),promise:r=>Ye(X.promise(r),\"Promise\",r),generatorFunction:r=>Ye(X.generatorFunction(r),\"GeneratorFunction\",r),asyncGeneratorFunction:r=>Ye(X.asyncGeneratorFunction(r),\"AsyncGeneratorFunction\",r),asyncFunction:r=>Ye(X.asyncFunction(r),\"AsyncFunction\",r),boundFunction:r=>Ye(X.boundFunction(r),\"Function\",r),regExp:r=>Ye(X.regExp(r),\"RegExp\",r),date:r=>Ye(X.date(r),\"Date\",r),error:r=>Ye(X.error(r),\"Error\",r),map:r=>Ye(X.map(r),\"Map\",r),set:r=>Ye(X.set(r),\"Set\",r),weakMap:r=>Ye(X.weakMap(r),\"WeakMap\",r),weakSet:r=>Ye(X.weakSet(r),\"WeakSet\",r),int8Array:r=>Ye(X.int8Array(r),\"Int8Array\",r),uint8Array:r=>Ye(X.uint8Array(r),\"Uint8Array\",r),uint8ClampedArray:r=>Ye(X.uint8ClampedArray(r),\"Uint8ClampedArray\",r),int16Array:r=>Ye(X.int16Array(r),\"Int16Array\",r),uint16Array:r=>Ye(X.uint16Array(r),\"Uint16Array\",r),int32Array:r=>Ye(X.int32Array(r),\"Int32Array\",r),uint32Array:r=>Ye(X.uint32Array(r),\"Uint32Array\",r),float32Array:r=>Ye(X.float32Array(r),\"Float32Array\",r),float64Array:r=>Ye(X.float64Array(r),\"Float64Array\",r),bigInt64Array:r=>Ye(X.bigInt64Array(r),\"BigInt64Array\",r),bigUint64Array:r=>Ye(X.bigUint64Array(r),\"BigUint64Array\",r),arrayBuffer:r=>Ye(X.arrayBuffer(r),\"ArrayBuffer\",r),sharedArrayBuffer:r=>Ye(X.sharedArrayBuffer(r),\"SharedArrayBuffer\",r),dataView:r=>Ye(X.dataView(r),\"DataView\",r),urlInstance:r=>Ye(X.urlInstance(r),\"URL\",r),urlString:r=>Ye(X.urlString(r),\"string with a URL\",r),truthy:r=>Ye(X.truthy(r),\"truthy\",r),falsy:r=>Ye(X.falsy(r),\"falsy\",r),nan:r=>Ye(X.nan(r),\"NaN\",r),primitive:r=>Ye(X.primitive(r),\"primitive\",r),integer:r=>Ye(X.integer(r),\"integer\",r),safeInteger:r=>Ye(X.safeInteger(r),\"integer\",r),plainObject:r=>Ye(X.plainObject(r),\"plain object\",r),typedArray:r=>Ye(X.typedArray(r),\"TypedArray\",r),arrayLike:r=>Ye(X.arrayLike(r),\"array-like\",r),domElement:r=>Ye(X.domElement(r),\"HTMLElement\",r),observable:r=>Ye(X.observable(r),\"Observable\",r),nodeStream:r=>Ye(X.nodeStream(r),\"Node.js Stream\",r),infinite:r=>Ye(X.infinite(r),\"infinite number\",r),emptyArray:r=>Ye(X.emptyArray(r),\"empty array\",r),nonEmptyArray:r=>Ye(X.nonEmptyArray(r),\"non-empty array\",r),emptyString:r=>Ye(X.emptyString(r),\"empty string\",r),nonEmptyString:r=>Ye(X.nonEmptyString(r),\"non-empty string\",r),emptyStringOrWhitespace:r=>Ye(X.emptyStringOrWhitespace(r),\"empty string or whitespace\",r),emptyObject:r=>Ye(X.emptyObject(r),\"empty object\",r),nonEmptyObject:r=>Ye(X.nonEmptyObject(r),\"non-empty object\",r),emptySet:r=>Ye(X.emptySet(r),\"empty set\",r),nonEmptySet:r=>Ye(X.nonEmptySet(r),\"non-empty set\",r),emptyMap:r=>Ye(X.emptyMap(r),\"empty map\",r),nonEmptyMap:r=>Ye(X.nonEmptyMap(r),\"non-empty map\",r),propertyKey:r=>Ye(X.propertyKey(r),\"PropertyKey\",r),formData:r=>Ye(X.formData(r),\"FormData\",r),urlSearchParams:r=>Ye(X.urlSearchParams(r),\"URLSearchParams\",r),evenInteger:r=>Ye(X.evenInteger(r),\"even integer\",r),oddInteger:r=>Ye(X.oddInteger(r),\"odd integer\",r),directInstanceOf:(r,e)=>Ye(X.directInstanceOf(r,e),\"T\",r),inRange:(r,e)=>Ye(X.inRange(r,e),\"in range\",r),any:(r,...e)=>Ye(X.any(r,...e),\"predicate returns truthy for any value\",e,{multipleValues:!0}),all:(r,...e)=>Ye(X.all(r,...e),\"predicate returns truthy for all values\",e,{multipleValues:!0})};Object.defineProperties(X,{class:{value:X.class_},function:{value:X.function_},null:{value:X.null_}});Object.defineProperties(Ga.assert,{class:{value:Ga.assert.class_},function:{value:Ga.assert.function_},null:{value:Ga.assert.null_}});Ga.default=X;jw.exports=X;jw.exports.default=X;jw.exports.assert=Ga.assert});var bz=w((rnt,dk)=>{\"use strict\";var qw=class extends Error{constructor(e){super(e||\"Promise was canceled\"),this.name=\"CancelError\"}get isCanceled(){return!0}},Mf=class{static fn(e){return(...t)=>new Mf((i,n,s)=>{t.push(s),e(...t).then(i,n)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((t,i)=>{this._reject=i;let n=a=>{this._isPending=!1,t(a)},s=a=>{this._isPending=!1,i(a)},o=a=>{if(!this._isPending)throw new Error(\"The `onCancel` handler was attached after the promise settled.\");this._cancelHandlers.push(a)};return Object.defineProperties(o,{shouldReject:{get:()=>this._rejectOnCancel,set:a=>{this._rejectOnCancel=a}}}),e(n,s,o)})}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let t of this._cancelHandlers)t()}catch(t){this._reject(t)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new qw(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Mf.prototype,Promise.prototype);dk.exports=Mf;dk.exports.CancelError=qw});var Qz=w((mk,Ek)=>{\"use strict\";Object.defineProperty(mk,\"__esModule\",{value:!0});var ixe=J(\"tls\"),Ck=(r,e)=>{let t;typeof e==\"function\"?t={connect:e}:t=e;let i=typeof t.connect==\"function\",n=typeof t.secureConnect==\"function\",s=typeof t.close==\"function\",o=()=>{i&&t.connect(),r instanceof ixe.TLSSocket&&n&&(r.authorized?t.secureConnect():r.authorizationError||r.once(\"secureConnect\",t.secureConnect)),s&&r.once(\"close\",t.close)};r.writable&&!r.connecting?o():r.connecting?r.once(\"connect\",o):r.destroyed&&s&&t.close(r._hadError)};mk.default=Ck;Ek.exports=Ck;Ek.exports.default=Ck});var Sz=w((yk,wk)=>{\"use strict\";Object.defineProperty(yk,\"__esModule\",{value:!0});var nxe=Qz(),sxe=Number(process.versions.node.split(\".\")[0]),Ik=r=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};r.timings=e;let t=o=>{let a=o.emit.bind(o);o.emit=(l,...c)=>(l===\"error\"&&(e.error=Date.now(),e.phases.total=e.error-e.start,o.emit=a),a(l,...c))};t(r),r.prependOnceListener(\"abort\",()=>{e.abort=Date.now(),(!e.response||sxe>=13)&&(e.phases.total=Date.now()-e.start)});let i=o=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let a=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};o.prependOnceListener(\"lookup\",a),nxe.default(o,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(o.removeListener(\"lookup\",a),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};r.socket?i(r.socket):r.prependOnceListener(\"socket\",i);let n=()=>{var o;e.upload=Date.now(),e.phases.request=e.upload-(o=e.secureConnect,o!=null?o:e.connect)};return(()=>typeof r.writableFinished==\"boolean\"?r.writableFinished:r.finished&&r.outputSize===0&&(!r.socket||r.socket.writableLength===0))()?n():r.prependOnceListener(\"finish\",n),r.prependOnceListener(\"response\",o=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,o.timings=e,t(o),o.prependOnceListener(\"end\",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};yk.default=Ik;wk.exports=Ik;wk.exports.default=Ik});var Fz=w((int,Qk)=>{\"use strict\";var{V4MAPPED:oxe,ADDRCONFIG:axe,ALL:Rz,promises:{Resolver:vz},lookup:Axe}=J(\"dns\"),{promisify:Bk}=J(\"util\"),lxe=J(\"os\"),Of=Symbol(\"cacheableLookupCreateConnection\"),bk=Symbol(\"cacheableLookupInstance\"),xz=Symbol(\"expires\"),cxe=typeof Rz==\"number\",Pz=r=>{if(!(r&&typeof r.createConnection==\"function\"))throw new Error(\"Expected an Agent instance as the first argument\")},uxe=r=>{for(let e of r)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},Dz=()=>{let r=!1,e=!1;for(let t of Object.values(lxe.networkInterfaces()))for(let i of t)if(!i.internal&&(i.family===\"IPv6\"?e=!0:r=!0,r&&e))return{has4:r,has6:e};return{has4:r,has6:e}},gxe=r=>Symbol.iterator in r,kz={ttl:!0},fxe={all:!0},Jw=class{constructor({cache:e=new Map,maxTtl:t=1/0,fallbackDuration:i=3600,errorTtl:n=.15,resolver:s=new vz,lookup:o=Axe}={}){if(this.maxTtl=t,this.errorTtl=n,this._cache=e,this._resolver=s,this._dnsLookup=Bk(o),this._resolver instanceof vz?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=Bk(this._resolver.resolve4.bind(this._resolver)),this._resolve6=Bk(this._resolver.resolve6.bind(this._resolver))),this._iface=Dz(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,i<1)this._fallback=!1;else{this._fallback=!0;let a=setInterval(()=>{this._hostnamesToFallback.clear()},i*1e3);a.unref&&a.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,t,i){if(typeof t==\"function\"?(i=t,t={}):typeof t==\"number\"&&(t={family:t}),!i)throw new Error(\"Callback must be a function.\");this.lookupAsync(e,t).then(n=>{t.all?i(null,n):i(null,n.address,n.family,n.expires,n.ttl)},i)}async lookupAsync(e,t={}){typeof t==\"number\"&&(t={family:t});let i=await this.query(e);if(t.family===6){let n=i.filter(s=>s.family===6);t.hints&oxe&&(cxe&&t.hints&Rz||n.length===0)?uxe(i):i=n}else t.family===4&&(i=i.filter(n=>n.family===4));if(t.hints&axe){let{_iface:n}=this;i=i.filter(s=>s.family===6?n.has6:n.has4)}if(i.length===0){let n=new Error(`cacheableLookup ENOTFOUND ${e}`);throw n.code=\"ENOTFOUND\",n.hostname=e,n}return t.all?i:i[0]}async query(e){let t=await this._cache.get(e);if(!t){let i=this._pending[e];if(i)t=await i;else{let n=this.queryAndCache(e);this._pending[e]=n,t=await n}}return t=t.map(i=>({...i})),t}async _resolve(e){let t=async c=>{try{return await c}catch(u){if(u.code===\"ENODATA\"||u.code===\"ENOTFOUND\")return[];throw u}},[i,n]=await Promise.all([this._resolve4(e,kz),this._resolve6(e,kz)].map(c=>t(c))),s=0,o=0,a=0,l=Date.now();for(let c of i)c.family=4,c.expires=l+c.ttl*1e3,s=Math.max(s,c.ttl);for(let c of n)c.family=6,c.expires=l+c.ttl*1e3,o=Math.max(o,c.ttl);return i.length>0?n.length>0?a=Math.min(s,o):a=s:a=o,{entries:[...i,...n],cacheTtl:a}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,t,i){if(this.maxTtl>0&&i>0){i=Math.min(i,this.maxTtl)*1e3,t[xz]=Date.now()+i;try{await this._cache.set(e,t,i)}catch(n){this.lookupAsync=async()=>{let s=new Error(\"Cache Error. Please recreate the CacheableLookup instance.\");throw s.cause=n,s}}gxe(this._cache)&&this._tick(i)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,fxe);try{let t=await this._resolve(e);t.entries.length===0&&this._fallback&&(t=await this._lookup(e),t.entries.length!==0&&this._hostnamesToFallback.add(e));let i=t.entries.length===0?this.errorTtl:t.cacheTtl;return await this._set(e,t.entries,i),delete this._pending[e],t.entries}catch(t){throw delete this._pending[e],t}}_tick(e){let t=this._nextRemovalTime;(!t||e<t)&&(clearTimeout(this._removalTimeout),this._nextRemovalTime=e,this._removalTimeout=setTimeout(()=>{this._nextRemovalTime=!1;let i=1/0,n=Date.now();for(let[s,o]of this._cache){let a=o[xz];n>=a?this._cache.delete(s):a<i&&(i=a)}i!==1/0&&this._tick(i-n)},e),this._removalTimeout.unref&&this._removalTimeout.unref())}install(e){if(Pz(e),Of in e)throw new Error(\"CacheableLookup has been already installed\");e[Of]=e.createConnection,e[bk]=this,e.createConnection=(t,i)=>(\"lookup\"in t||(t.lookup=this.lookup),e[Of](t,i))}uninstall(e){if(Pz(e),e[Of]){if(e[bk]!==this)throw new Error(\"The agent is not owned by this CacheableLookup instance\");e.createConnection=e[Of],delete e[Of],delete e[bk]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=Dz(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};Qk.exports=Jw;Qk.exports.default=Jw});var Lz=w((nnt,Sk)=>{\"use strict\";var hxe=typeof URL>\"u\"?J(\"url\").URL:URL,pxe=\"text/plain\",dxe=\"us-ascii\",Nz=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),Cxe=(r,{stripHash:e})=>{let t=r.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!t)throw new Error(`Invalid URL: ${r}`);let i=t[1].split(\";\"),n=t[2],s=e?\"\":t[3],o=!1;i[i.length-1]===\"base64\"&&(i.pop(),o=!0);let a=(i.shift()||\"\").toLowerCase(),c=[...i.map(u=>{let[g,f=\"\"]=u.split(\"=\").map(h=>h.trim());return g===\"charset\"&&(f=f.toLowerCase(),f===dxe)?\"\":`${g}${f?`=${f}`:\"\"}`}).filter(Boolean)];return o&&c.push(\"base64\"),(c.length!==0||a&&a!==pxe)&&c.unshift(a),`data:${c.join(\";\")},${o?n.trim():n}${s?`#${s}`:\"\"}`},Tz=(r,e)=>{if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,\"normalizeHttps\"))throw new Error(\"options.normalizeHttps is renamed to options.forceHttp\");if(Reflect.has(e,\"normalizeHttp\"))throw new Error(\"options.normalizeHttp is renamed to options.forceHttps\");if(Reflect.has(e,\"stripFragment\"))throw new Error(\"options.stripFragment is renamed to options.stripHash\");if(r=r.trim(),/^data:/i.test(r))return Cxe(r,e);let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new hxe(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash&&(n.hash=\"\"),n.pathname&&(n.pathname=n.pathname.replace(/((?!:).|^)\\/{2,}/g,(s,o)=>/^(?!\\/)/g.test(o)?`${o}/`:\"/\")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split(\"/\"),o=s[s.length-1];Nz(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.([a-z\\-\\d]{2,63})\\.([a-z.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])Nz(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\")),r=n.toString(),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r};Sk.exports=Tz;Sk.exports.default=Tz});var Kz=w((snt,Oz)=>{Oz.exports=Mz;function Mz(r,e){if(r&&e)return Mz(r)(e);if(typeof r!=\"function\")throw new TypeError(\"need wrapper function\");return Object.keys(r).forEach(function(i){t[i]=r[i]}),t;function t(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];var s=r.apply(this,i),o=i[i.length-1];return typeof s==\"function\"&&s!==o&&Object.keys(o).forEach(function(a){s[a]=o[a]}),s}}});var xk=w((ont,vk)=>{var Uz=Kz();vk.exports=Uz(Ww);vk.exports.strict=Uz(Hz);Ww.proto=Ww(function(){Object.defineProperty(Function.prototype,\"once\",{value:function(){return Ww(this)},configurable:!0}),Object.defineProperty(Function.prototype,\"onceStrict\",{value:function(){return Hz(this)},configurable:!0})});function Ww(r){var e=function(){return e.called?e.value:(e.called=!0,e.value=r.apply(this,arguments))};return e.called=!1,e}function Hz(r){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=r.apply(this,arguments)},t=r.name||\"Function wrapped with `once`\";return e.onceError=t+\" shouldn't be called more than once\",e.called=!1,e}});var Pk=w((ant,Yz)=>{var mxe=xk(),Exe=function(){},Ixe=function(r){return r.setHeader&&typeof r.abort==\"function\"},yxe=function(r){return r.stdio&&Array.isArray(r.stdio)&&r.stdio.length===3},Gz=function(r,e,t){if(typeof e==\"function\")return Gz(r,null,e);e||(e={}),t=mxe(t||Exe);var i=r._writableState,n=r._readableState,s=e.readable||e.readable!==!1&&r.readable,o=e.writable||e.writable!==!1&&r.writable,a=function(){r.writable||l()},l=function(){o=!1,s||t.call(r)},c=function(){s=!1,o||t.call(r)},u=function(p){t.call(r,p?new Error(\"exited with error code: \"+p):null)},g=function(p){t.call(r,p)},f=function(){if(s&&!(n&&n.ended))return t.call(r,new Error(\"premature close\"));if(o&&!(i&&i.ended))return t.call(r,new Error(\"premature close\"))},h=function(){r.req.on(\"finish\",l)};return Ixe(r)?(r.on(\"complete\",l),r.on(\"abort\",f),r.req?h():r.on(\"request\",h)):o&&!i&&(r.on(\"end\",a),r.on(\"close\",a)),yxe(r)&&r.on(\"exit\",u),r.on(\"end\",c),r.on(\"finish\",l),e.error!==!1&&r.on(\"error\",g),r.on(\"close\",f),function(){r.removeListener(\"complete\",l),r.removeListener(\"abort\",f),r.removeListener(\"request\",h),r.req&&r.req.removeListener(\"finish\",l),r.removeListener(\"end\",a),r.removeListener(\"close\",a),r.removeListener(\"finish\",l),r.removeListener(\"exit\",u),r.removeListener(\"end\",c),r.removeListener(\"error\",g),r.removeListener(\"close\",f)}};Yz.exports=Gz});var Jz=w((Ant,qz)=>{var wxe=xk(),Bxe=Pk(),Dk=J(\"fs\"),mC=function(){},bxe=/^v?\\.0/.test(process.version),zw=function(r){return typeof r==\"function\"},Qxe=function(r){return!bxe||!Dk?!1:(r instanceof(Dk.ReadStream||mC)||r instanceof(Dk.WriteStream||mC))&&zw(r.close)},Sxe=function(r){return r.setHeader&&zw(r.abort)},vxe=function(r,e,t,i){i=wxe(i);var n=!1;r.on(\"close\",function(){n=!0}),Bxe(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Qxe(r))return r.close(mC);if(Sxe(r))return r.abort();if(zw(r.destroy))return r.destroy();i(o||new Error(\"stream was destroyed\"))}}},jz=function(r){r()},xxe=function(r,e){return r.pipe(e)},Pxe=function(){var r=Array.prototype.slice.call(arguments),e=zw(r[r.length-1]||mC)&&r.pop()||mC;if(Array.isArray(r[0])&&(r=r[0]),r.length<2)throw new Error(\"pump requires two streams per minimum\");var t,i=r.map(function(n,s){var o=s<r.length-1,a=s>0;return vxe(n,o,a,function(l){t||(t=l),l&&i.forEach(jz),!o&&(i.forEach(jz),e(t))})});return r.reduce(xxe)};qz.exports=Pxe});var zz=w((lnt,Wz)=>{\"use strict\";var{PassThrough:Dxe}=J(\"stream\");Wz.exports=r=>{r={...r};let{array:e}=r,{encoding:t}=r,i=t===\"buffer\",n=!1;e?n=!(t||i):t=t||\"utf8\",i&&(t=null);let s=new Dxe({objectMode:n});t&&s.setEncoding(t);let o=0,a=[];return s.on(\"data\",l=>{a.push(l),n?o=a.length:o+=l.length}),s.getBufferedValue=()=>e?a:i?Buffer.concat(a,o):a.join(\"\"),s.getBufferedLength=()=>o,s}});var Vz=w((cnt,Kf)=>{\"use strict\";var kxe=Jz(),Rxe=zz(),Vw=class extends Error{constructor(){super(\"maxBuffer exceeded\"),this.name=\"MaxBufferError\"}};async function Xw(r,e){if(!r)return Promise.reject(new Error(\"Expected a stream\"));e={maxBuffer:1/0,...e};let{maxBuffer:t}=e,i;return await new Promise((n,s)=>{let o=a=>{a&&(a.bufferedData=i.getBufferedValue()),s(a)};i=kxe(r,Rxe(e),a=>{if(a){o(a);return}n()}),i.on(\"data\",()=>{i.getBufferedLength()>t&&o(new Vw)})}),i.getBufferedValue()}Kf.exports=Xw;Kf.exports.default=Xw;Kf.exports.buffer=(r,e)=>Xw(r,{...e,encoding:\"buffer\"});Kf.exports.array=(r,e)=>Xw(r,{...e,array:!0});Kf.exports.MaxBufferError=Vw});var Zz=w((gnt,Xz)=>{\"use strict\";var Fxe=new Set([200,203,204,206,300,301,404,405,410,414,501]),Nxe=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Txe=new Set([500,502,503,504]),Lxe={date:!0,connection:!0,\"keep-alive\":!0,\"proxy-authenticate\":!0,\"proxy-authorization\":!0,te:!0,trailer:!0,\"transfer-encoding\":!0,upgrade:!0},Mxe={\"content-length\":!0,\"content-encoding\":!0,\"transfer-encoding\":!0,\"content-range\":!0};function Lc(r){let e=parseInt(r,10);return isFinite(e)?e:0}function Oxe(r){return r?Txe.has(r.status):!0}function kk(r){let e={};if(!r)return e;let t=r.trim().split(/\\s*,\\s*/);for(let i of t){let[n,s]=i.split(/\\s*=\\s*/,2);e[n]=s===void 0?!0:s.replace(/^\"|\"$/g,\"\")}return e}function Kxe(r){let e=[];for(let t in r){let i=r[t];e.push(i===!0?t:t+\"=\"+i)}if(!!e.length)return e.join(\", \")}Xz.exports=class{constructor(e,t,{shared:i,cacheHeuristic:n,immutableMinTimeToLive:s,ignoreCargoCult:o,_fromObject:a}={}){if(a){this._fromObject(a);return}if(!t||!t.headers)throw Error(\"Response headers missing\");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=i!==!1,this._cacheHeuristic=n!==void 0?n:.1,this._immutableMinTtl=s!==void 0?s:24*3600*1e3,this._status=\"status\"in t?t.status:200,this._resHeaders=t.headers,this._rescc=kk(t.headers[\"cache-control\"]),this._method=\"method\"in e?e.method:\"GET\",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=t.headers.vary?e.headers:null,this._reqcc=kk(e.headers[\"cache-control\"]),o&&\"pre-check\"in this._rescc&&\"post-check\"in this._rescc&&(delete this._rescc[\"pre-check\"],delete this._rescc[\"post-check\"],delete this._rescc[\"no-cache\"],delete this._rescc[\"no-store\"],delete this._rescc[\"must-revalidate\"],this._resHeaders=Object.assign({},this._resHeaders,{\"cache-control\":Kxe(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),t.headers[\"cache-control\"]==null&&/no-cache/.test(t.headers.pragma)&&(this._rescc[\"no-cache\"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc[\"no-store\"]&&(this._method===\"GET\"||this._method===\"HEAD\"||this._method===\"POST\"&&this._hasExplicitExpiration())&&Nxe.has(this._status)&&!this._rescc[\"no-store\"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc[\"max-age\"]||this._isShared&&this._rescc[\"s-maxage\"]||this._rescc.public||Fxe.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc[\"s-maxage\"]||this._rescc[\"max-age\"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error(\"Request headers missing\")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let t=kk(e.headers[\"cache-control\"]);return t[\"no-cache\"]||/no-cache/.test(e.headers.pragma)||t[\"max-age\"]&&this.age()>t[\"max-age\"]||t[\"min-fresh\"]&&this.timeToLive()<1e3*t[\"min-fresh\"]||this.stale()&&!(t[\"max-stale\"]&&!this._rescc[\"must-revalidate\"]&&(t[\"max-stale\"]===!0||t[\"max-stale\"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,t){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||t&&e.method===\"HEAD\")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc[\"must-revalidate\"]||this._rescc.public||this._rescc[\"s-maxage\"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary===\"*\")return!1;let t=this._resHeaders.vary.trim().toLowerCase().split(/\\s*,\\s*/);for(let i of t)if(e.headers[i]!==this._reqHeaders[i])return!1;return!0}_copyWithoutHopByHopHeaders(e){let t={};for(let i in e)Lxe[i]||(t[i]=e[i]);if(e.connection){let i=e.connection.trim().split(/\\s*,\\s*/);for(let n of i)delete t[n]}if(t.warning){let i=t.warning.split(/,/).filter(n=>!/^\\s*1[0-9][0-9]/.test(n));i.length?t.warning=i.join(\",\").trim():delete t.warning}return t}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),t=this.age();return t>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:\"\")+'113 - \"rfc7234 5.5.4\"'),e.age=`${Math.round(t)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),t=(this.now()-this._responseTime)/1e3;return e+t}_ageValue(){return Lc(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc[\"no-cache\"]||this._isShared&&this._resHeaders[\"set-cookie\"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary===\"*\")return 0;if(this._isShared){if(this._rescc[\"proxy-revalidate\"])return 0;if(this._rescc[\"s-maxage\"])return Lc(this._rescc[\"s-maxage\"])}if(this._rescc[\"max-age\"])return Lc(this._rescc[\"max-age\"]);let e=this._rescc.immutable?this._immutableMinTtl:0,t=this.date();if(this._resHeaders.expires){let i=Date.parse(this._resHeaders.expires);return Number.isNaN(i)||i<t?0:Math.max(e,(i-t)/1e3)}if(this._resHeaders[\"last-modified\"]){let i=Date.parse(this._resHeaders[\"last-modified\"]);if(isFinite(i)&&t>i)return Math.max(e,(t-i)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),t=e+Lc(this._rescc[\"stale-if-error\"]),i=e+Lc(this._rescc[\"stale-while-revalidate\"]);return Math.max(0,e,t,i)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Lc(this._rescc[\"stale-if-error\"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Lc(this._rescc[\"stale-while-revalidate\"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error(\"Reinitialized\");if(!e||e.v!==1)throw Error(\"Invalid serialization\");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let t=this._copyWithoutHopByHopHeaders(e.headers);if(delete t[\"if-range\"],!this._requestMatches(e,!0)||!this.storable())return delete t[\"if-none-match\"],delete t[\"if-modified-since\"],t;if(this._resHeaders.etag&&(t[\"if-none-match\"]=t[\"if-none-match\"]?`${t[\"if-none-match\"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),t[\"accept-ranges\"]||t[\"if-match\"]||t[\"if-unmodified-since\"]||this._method&&this._method!=\"GET\"){if(delete t[\"if-modified-since\"],t[\"if-none-match\"]){let n=t[\"if-none-match\"].split(/,/).filter(s=>!/^\\s*W\\//.test(s));n.length?t[\"if-none-match\"]=n.join(\",\").trim():delete t[\"if-none-match\"]}}else this._resHeaders[\"last-modified\"]&&!t[\"if-modified-since\"]&&(t[\"if-modified-since\"]=this._resHeaders[\"last-modified\"]);return t}revalidatedPolicy(e,t){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Oxe(t))return{modified:!1,matches:!1,policy:this};if(!t||!t.headers)throw Error(\"Response headers missing\");let i=!1;if(t.status!==void 0&&t.status!=304?i=!1:t.headers.etag&&!/^\\s*W\\//.test(t.headers.etag)?i=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag:this._resHeaders.etag&&t.headers.etag?i=this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag.replace(/^\\s*W\\//,\"\"):this._resHeaders[\"last-modified\"]?i=this._resHeaders[\"last-modified\"]===t.headers[\"last-modified\"]:!this._resHeaders.etag&&!this._resHeaders[\"last-modified\"]&&!t.headers.etag&&!t.headers[\"last-modified\"]&&(i=!0),!i)return{policy:new this.constructor(e,t),modified:t.status!=304,matches:!1};let n={};for(let o in this._resHeaders)n[o]=o in t.headers&&!Mxe[o]?t.headers[o]:this._resHeaders[o];let s=Object.assign({},t,{status:this._status,method:this._method,headers:n});return{policy:new this.constructor(e,s,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var Zw=w((fnt,_z)=>{\"use strict\";_z.exports=r=>{let e={};for(let[t,i]of Object.entries(r))e[t.toLowerCase()]=i;return e}});var e5=w((hnt,$z)=>{\"use strict\";var Uxe=J(\"stream\").Readable,Hxe=Zw(),Rk=class extends Uxe{constructor(e,t,i,n){if(typeof e!=\"number\")throw new TypeError(\"Argument `statusCode` should be a number\");if(typeof t!=\"object\")throw new TypeError(\"Argument `headers` should be an object\");if(!(i instanceof Buffer))throw new TypeError(\"Argument `body` should be a buffer\");if(typeof n!=\"string\")throw new TypeError(\"Argument `url` should be a string\");super(),this.statusCode=e,this.headers=Hxe(t),this.body=i,this.url=n}_read(){this.push(this.body),this.push(null)}};$z.exports=Rk});var r5=w((pnt,t5)=>{\"use strict\";var Gxe=[\"destroy\",\"setTimeout\",\"socket\",\"headers\",\"trailers\",\"rawHeaders\",\"statusCode\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"rawTrailers\",\"statusMessage\"];t5.exports=(r,e)=>{let t=new Set(Object.keys(r).concat(Gxe));for(let i of t)i in e||(e[i]=typeof r[i]==\"function\"?r[i].bind(r):r[i])}});var n5=w((dnt,i5)=>{\"use strict\";var Yxe=J(\"stream\").PassThrough,jxe=r5(),qxe=r=>{if(!(r&&r.pipe))throw new TypeError(\"Parameter `response` must be a response stream.\");let e=new Yxe;return jxe(r,e),r.pipe(e)};i5.exports=qxe});var s5=w(Fk=>{Fk.stringify=function r(e){if(typeof e>\"u\")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(\":base64:\"+e.toString(\"base64\"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e==\"object\"){var t=\"\",i=Array.isArray(e);t=i?\"[\":\"{\";var n=!0;for(var s in e){var o=typeof e[s]==\"function\"||!i&&typeof e[s]>\"u\";Object.hasOwnProperty.call(e,s)&&!o&&(n||(t+=\",\"),n=!1,i?e[s]==null?t+=\"null\":t+=r(e[s]):e[s]!==void 0&&(t+=r(s)+\":\"+r(e[s])))}return t+=i?\"]\":\"}\",t}else return typeof e==\"string\"?JSON.stringify(/^:/.test(e)?\":\"+e:e):typeof e>\"u\"?\"null\":JSON.stringify(e)};Fk.parse=function(r){return JSON.parse(r,function(e,t){return typeof t==\"string\"?/^:base64:/.test(t)?Buffer.from(t.substring(8),\"base64\"):/^:/.test(t)?t.substring(1):t:t})}});var A5=w((mnt,a5)=>{\"use strict\";var Jxe=J(\"events\"),o5=s5(),Wxe=r=>{let e={redis:\"@keyv/redis\",mongodb:\"@keyv/mongo\",mongo:\"@keyv/mongo\",sqlite:\"@keyv/sqlite\",postgresql:\"@keyv/postgres\",postgres:\"@keyv/postgres\",mysql:\"@keyv/mysql\"};if(r.adapter||r.uri){let t=r.adapter||/^[^:]*/.exec(r.uri)[0];return new(J(e[t]))(r)}return new Map},Nk=class extends Jxe{constructor(e,t){if(super(),this.opts=Object.assign({namespace:\"keyv\",serialize:o5.stringify,deserialize:o5.parse},typeof e==\"string\"?{uri:e}:e,t),!this.opts.store){let i=Object.assign({},this.opts);this.opts.store=Wxe(i)}typeof this.opts.store.on==\"function\"&&this.opts.store.on(\"error\",i=>this.emit(\"error\",i)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,t){e=this._getKeyPrefix(e);let{store:i}=this.opts;return Promise.resolve().then(()=>i.get(e)).then(n=>typeof n==\"string\"?this.opts.deserialize(n):n).then(n=>{if(n!==void 0){if(typeof n.expires==\"number\"&&Date.now()>n.expires){this.delete(e);return}return t&&t.raw?n:n.value}})}set(e,t,i){e=this._getKeyPrefix(e),typeof i>\"u\"&&(i=this.opts.ttl),i===0&&(i=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let s=typeof i==\"number\"?Date.now()+i:null;return t={value:t,expires:s},this.opts.serialize(t)}).then(s=>n.set(e,s,i)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:t}=this.opts;return Promise.resolve().then(()=>t.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};a5.exports=Nk});var u5=w((Int,c5)=>{\"use strict\";var zxe=J(\"events\"),_w=J(\"url\"),Vxe=Lz(),Xxe=Vz(),Tk=Zz(),l5=e5(),Zxe=Zw(),_xe=n5(),$xe=A5(),ao=class{constructor(e,t){if(typeof e!=\"function\")throw new TypeError(\"Parameter `request` must be a function\");return this.cache=new $xe({uri:typeof t==\"string\"&&t,store:typeof t!=\"string\"&&t,namespace:\"cacheable-request\"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(t,i)=>{let n;if(typeof t==\"string\")n=Lk(_w.parse(t)),t={};else if(t instanceof _w.URL)n=Lk(_w.parse(t.toString())),t={};else{let[g,...f]=(t.path||\"\").split(\"?\"),h=f.length>0?`?${f.join(\"?\")}`:\"\";n=Lk({...t,pathname:g,search:h})}t={headers:{},method:\"GET\",cache:!0,strictTtl:!1,automaticFailover:!1,...t,...ePe(n)},t.headers=Zxe(t.headers);let s=new zxe,o=Vxe(_w.format(n),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),a=`${t.method}:${o}`,l=!1,c=!1,u=g=>{c=!0;let f=!1,h,p=new Promise(y=>{h=()=>{f||(f=!0,y())}}),C=y=>{if(l&&!g.forceRefresh){y.status=y.statusCode;let v=Tk.fromObject(l.cachePolicy).revalidatedPolicy(g,y);if(!v.modified){let D=v.policy.responseHeaders();y=new l5(l.statusCode,D,l.body,l.url),y.cachePolicy=v.policy,y.fromCache=!0}}y.fromCache||(y.cachePolicy=new Tk(g,y,g),y.fromCache=!1);let B;g.cache&&y.cachePolicy.storable()?(B=_xe(y),(async()=>{try{let v=Xxe.buffer(y);if(await Promise.race([p,new Promise(j=>y.once(\"end\",j))]),f)return;let D=await v,T={cachePolicy:y.cachePolicy.toObject(),url:y.url,statusCode:y.fromCache?l.statusCode:y.statusCode,body:D},H=g.strictTtl?y.cachePolicy.timeToLive():void 0;g.maxTtl&&(H=H?Math.min(H,g.maxTtl):g.maxTtl),await this.cache.set(a,T,H)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})()):g.cache&&l&&(async()=>{try{await this.cache.delete(a)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})(),s.emit(\"response\",B||y),typeof i==\"function\"&&i(B||y)};try{let y=e(g,C);y.once(\"error\",h),y.once(\"abort\",h),s.emit(\"request\",y)}catch(y){s.emit(\"error\",new ao.RequestError(y))}};return(async()=>{let g=async h=>{await Promise.resolve();let p=h.cache?await this.cache.get(a):void 0;if(typeof p>\"u\")return u(h);let C=Tk.fromObject(p.cachePolicy);if(C.satisfiesWithoutRevalidation(h)&&!h.forceRefresh){let y=C.responseHeaders(),B=new l5(p.statusCode,y,p.body,p.url);B.cachePolicy=C,B.fromCache=!0,s.emit(\"response\",B),typeof i==\"function\"&&i(B)}else l=p,h.headers=C.revalidationHeaders(h),u(h)},f=h=>s.emit(\"error\",new ao.CacheError(h));this.cache.once(\"error\",f),s.on(\"response\",()=>this.cache.removeListener(\"error\",f));try{await g(t)}catch(h){t.automaticFailover&&!c&&u(t),s.emit(\"error\",new ao.CacheError(h))}})(),s}}};function ePe(r){let e={...r};return e.path=`${r.pathname||\"/\"}${r.search||\"\"}`,delete e.pathname,delete e.search,e}function Lk(r){return{protocol:r.protocol,auth:r.auth,hostname:r.hostname||r.host||\"localhost\",port:r.port,pathname:r.pathname,search:r.search}}ao.RequestError=class extends Error{constructor(r){super(r.message),this.name=\"RequestError\",Object.assign(this,r)}};ao.CacheError=class extends Error{constructor(r){super(r.message),this.name=\"CacheError\",Object.assign(this,r)}};c5.exports=ao});var f5=w((Bnt,g5)=>{\"use strict\";var tPe=[\"aborted\",\"complete\",\"headers\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"method\",\"rawHeaders\",\"rawTrailers\",\"setTimeout\",\"socket\",\"statusCode\",\"statusMessage\",\"trailers\",\"url\"];g5.exports=(r,e)=>{if(e._readableState.autoDestroy)throw new Error(\"The second stream must have the `autoDestroy` option set to `false`\");let t=new Set(Object.keys(r).concat(tPe)),i={};for(let n of t)n in e||(i[n]={get(){let s=r[n];return typeof s==\"function\"?s.bind(r):s},set(s){r[n]=s},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),r.once(\"aborted\",()=>{e.destroy(),e.emit(\"aborted\")}),r.once(\"close\",()=>{r.complete&&e.readable?e.once(\"end\",()=>{e.emit(\"close\")}):e.emit(\"close\")}),e}});var p5=w((bnt,h5)=>{\"use strict\";var{Transform:rPe,PassThrough:iPe}=J(\"stream\"),Mk=J(\"zlib\"),nPe=f5();h5.exports=r=>{let e=(r.headers[\"content-encoding\"]||\"\").toLowerCase();if(![\"gzip\",\"deflate\",\"br\"].includes(e))return r;let t=e===\"br\";if(t&&typeof Mk.createBrotliDecompress!=\"function\")return r.destroy(new Error(\"Brotli is not supported on Node.js < 12\")),r;let i=!0,n=new rPe({transform(a,l,c){i=!1,c(null,a)},flush(a){a()}}),s=new iPe({autoDestroy:!1,destroy(a,l){r.destroy(),l(a)}}),o=t?Mk.createBrotliDecompress():Mk.createUnzip();return o.once(\"error\",a=>{if(i&&!r.readable){s.end();return}s.destroy(a)}),nPe(r,s),r.pipe(n).pipe(o).pipe(s),s}});var Kk=w((Qnt,d5)=>{\"use strict\";var Ok=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,t){if(this.cache.set(e,t),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction==\"function\")for(let[i,n]of this.oldCache.entries())this.onEviction(i,n);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let t=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,t),t}}set(e,t){return this.cache.has(e)?this.cache.set(e,t):this._set(e,t),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[t]=e;this.cache.has(t)||(yield e)}}get size(){let e=0;for(let t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}};d5.exports=Ok});var Hk=w((Snt,I5)=>{\"use strict\";var sPe=J(\"events\"),oPe=J(\"tls\"),aPe=J(\"http2\"),APe=Kk(),on=Symbol(\"currentStreamsCount\"),C5=Symbol(\"request\"),Bs=Symbol(\"cachedOriginSet\"),Uf=Symbol(\"gracefullyClosing\"),lPe=[\"maxDeflateDynamicTableSize\",\"maxSessionMemory\",\"maxHeaderListPairs\",\"maxOutstandingPings\",\"maxReservedRemoteStreams\",\"maxSendHeaderBlockLength\",\"paddingStrategy\",\"localAddress\",\"path\",\"rejectUnauthorized\",\"minDHSize\",\"ca\",\"cert\",\"clientCertEngine\",\"ciphers\",\"key\",\"pfx\",\"servername\",\"minVersion\",\"maxVersion\",\"secureProtocol\",\"crl\",\"honorCipherOrder\",\"ecdhCurve\",\"dhparam\",\"secureOptions\",\"sessionIdContext\"],cPe=(r,e,t)=>{let i=0,n=r.length;for(;i<n;){let s=i+n>>>1;t(r[s],e)?i=s+1:n=s}return i},uPe=(r,e)=>r.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,Uk=(r,e)=>{for(let t of r)t[Bs].length<e[Bs].length&&t[Bs].every(i=>e[Bs].includes(i))&&t[on]+e[on]<=e.remoteSettings.maxConcurrentStreams&&E5(t)},gPe=(r,e)=>{for(let t of r)e[Bs].length<t[Bs].length&&e[Bs].every(i=>t[Bs].includes(i))&&e[on]+t[on]<=t.remoteSettings.maxConcurrentStreams&&E5(e)},m5=({agent:r,isFree:e})=>{let t={};for(let i in r.sessions){let s=r.sessions[i].filter(o=>{let a=o[zo.kCurrentStreamsCount]<o.remoteSettings.maxConcurrentStreams;return e?a:!a});s.length!==0&&(t[i]=s)}return t},E5=r=>{r[Uf]=!0,r[on]===0&&r.close()},zo=class extends sPe{constructor({timeout:e=6e4,maxSessions:t=1/0,maxFreeSessions:i=10,maxCachedTlsSessions:n=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=t,this.maxFreeSessions=i,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new APe({maxSize:n})}static normalizeOrigin(e,t){return typeof e==\"string\"&&(e=new URL(e)),t&&e.hostname!==t&&(e.hostname=t),e.origin}normalizeOptions(e){let t=\"\";if(e)for(let i of lPe)e[i]&&(t+=`:${e[i]}`);return t}_tryToCreateNewSession(e,t){if(!(e in this.queue)||!(t in this.queue[e]))return;let i=this.queue[e][t];this._sessionsCount<this.maxSessions&&!i.completed&&(i.completed=!0,i())}getSession(e,t,i){return new Promise((n,s)=>{Array.isArray(i)?(i=[...i],n()):i=[{resolve:n,reject:s}];let o=this.normalizeOptions(t),a=zo.normalizeOrigin(e,t&&t.servername);if(a===void 0){for(let{reject:u}of i)u(new TypeError(\"The `origin` argument needs to be a string or an URL object\"));return}if(o in this.sessions){let u=this.sessions[o],g=-1,f=-1,h;for(let p of u){let C=p.remoteSettings.maxConcurrentStreams;if(C<g)break;if(p[Bs].includes(a)){let y=p[on];if(y>=C||p[Uf]||p.destroyed)continue;h||(g=C),y>f&&(h=p,f=y)}}if(h){if(i.length!==1){for(let{reject:p}of i){let C=new Error(`Expected the length of listeners to be 1, got ${i.length}.\nPlease report this to https://github.com/szmarczak/http2-wrapper/`);p(C)}return}i[0].resolve(h);return}}if(o in this.queue){if(a in this.queue[o]){this.queue[o][a].listeners.push(...i),this._tryToCreateNewSession(o,a);return}}else this.queue[o]={};let l=()=>{o in this.queue&&this.queue[o][a]===c&&(delete this.queue[o][a],Object.keys(this.queue[o]).length===0&&delete this.queue[o])},c=()=>{let u=`${a}:${o}`,g=!1;try{let f=aPe.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(u),...t});f[on]=0,f[Uf]=!1;let h=()=>f[on]<f.remoteSettings.maxConcurrentStreams,p=!0;f.socket.once(\"session\",y=>{this.tlsSessionCache.set(u,y)}),f.once(\"error\",y=>{for(let{reject:B}of i)B(y);this.tlsSessionCache.delete(u)}),f.setTimeout(this.timeout,()=>{f.destroy()}),f.once(\"close\",()=>{if(g){p&&this._freeSessionsCount--,this._sessionsCount--;let y=this.sessions[o];y.splice(y.indexOf(f),1),y.length===0&&delete this.sessions[o]}else{let y=new Error(\"Session closed without receiving a SETTINGS frame\");y.code=\"HTTP2WRAPPER_NOSETTINGS\";for(let{reject:B}of i)B(y);l()}this._tryToCreateNewSession(o,a)});let C=()=>{if(!(!(o in this.queue)||!h())){for(let y of f[Bs])if(y in this.queue[o]){let{listeners:B}=this.queue[o][y];for(;B.length!==0&&h();)B.shift().resolve(f);let v=this.queue[o];if(v[y].listeners.length===0&&(delete v[y],Object.keys(v).length===0)){delete this.queue[o];break}if(!h())break}}};f.on(\"origin\",()=>{f[Bs]=f.originSet,h()&&(C(),Uk(this.sessions[o],f))}),f.once(\"remoteSettings\",()=>{if(f.ref(),f.unref(),this._sessionsCount++,c.destroyed){let y=new Error(\"Agent has been destroyed\");for(let B of i)B.reject(y);f.destroy();return}f[Bs]=f.originSet;{let y=this.sessions;if(o in y){let B=y[o];B.splice(cPe(B,f,uPe),0,f)}else y[o]=[f]}this._freeSessionsCount+=1,g=!0,this.emit(\"session\",f),C(),l(),f[on]===0&&this._freeSessionsCount>this.maxFreeSessions&&f.close(),i.length!==0&&(this.getSession(a,t,i),i.length=0),f.on(\"remoteSettings\",()=>{C(),Uk(this.sessions[o],f)})}),f[C5]=f.request,f.request=(y,B)=>{if(f[Uf])throw new Error(\"The session is gracefully closing. No new streams are allowed.\");let v=f[C5](y,B);return f.ref(),++f[on],f[on]===f.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,v.once(\"close\",()=>{if(p=h(),--f[on],!f.destroyed&&!f.closed&&(gPe(this.sessions[o],f),h()&&!f.closed)){p||(this._freeSessionsCount++,p=!0);let D=f[on]===0;D&&f.unref(),D&&(this._freeSessionsCount>this.maxFreeSessions||f[Uf])?f.close():(Uk(this.sessions[o],f),C())}}),v}}catch(f){for(let h of i)h.reject(f);l()}};c.listeners=i,c.completed=!1,c.destroyed=!1,this.queue[o][a]=c,this._tryToCreateNewSession(o,a)})}request(e,t,i,n){return new Promise((s,o)=>{this.getSession(e,t,[{reject:o,resolve:a=>{try{s(a.request(i,n))}catch(l){o(l)}}}])})}createConnection(e,t){return zo.connect(e,t)}static connect(e,t){t.ALPNProtocols=[\"h2\"];let i=e.port||443,n=e.hostname||e.host;return typeof t.servername>\"u\"&&(t.servername=n),oPe.connect(i,n,t)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let t of e)t[on]===0&&t.close()}destroy(e){for(let t of Object.values(this.sessions))for(let i of t)i.destroy(e);for(let t of Object.values(this.queue))for(let i of Object.values(t))i.destroyed=!0;this.queue={}}get freeSessions(){return m5({agent:this,isFree:!0})}get busySessions(){return m5({agent:this,isFree:!1})}};zo.kCurrentStreamsCount=on;zo.kGracefullyClosing=Uf;I5.exports={Agent:zo,globalAgent:new zo}});var Yk=w((vnt,y5)=>{\"use strict\";var{Readable:fPe}=J(\"stream\"),Gk=class extends fPe{constructor(e,t){super({highWaterMark:t,autoDestroy:!1}),this.statusCode=null,this.statusMessage=\"\",this.httpVersion=\"2.0\",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,t){return this.req.setTimeout(e,t),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners(\"data\"),this.resume())}_read(){this.req&&this.req._request.resume()}};y5.exports=Gk});var jk=w((xnt,w5)=>{\"use strict\";w5.exports=r=>{let e={protocol:r.protocol,hostname:typeof r.hostname==\"string\"&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return typeof r.port==\"string\"&&r.port.length!==0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var b5=w((Pnt,B5)=>{\"use strict\";B5.exports=(r,e,t)=>{for(let i of t)r.on(i,(...n)=>e.emit(i,...n))}});var S5=w((Dnt,Q5)=>{\"use strict\";Q5.exports=r=>{switch(r){case\":method\":case\":scheme\":case\":authority\":case\":path\":return!0;default:return!1}}});var x5=w((Rnt,v5)=>{\"use strict\";var Hf=(r,e,t)=>{v5.exports[e]=class extends r{constructor(...n){super(typeof t==\"string\"?t:t(n)),this.name=`${super.name} [${e}]`,this.code=e}}};Hf(TypeError,\"ERR_INVALID_ARG_TYPE\",r=>{let e=r[0].includes(\".\")?\"property\":\"argument\",t=r[1],i=Array.isArray(t);return i&&(t=`${t.slice(0,-1).join(\", \")} or ${t.slice(-1)}`),`The \"${r[0]}\" ${e} must be ${i?\"one of\":\"of\"} type ${t}. Received ${typeof r[2]}`});Hf(TypeError,\"ERR_INVALID_PROTOCOL\",r=>`Protocol \"${r[0]}\" not supported. Expected \"${r[1]}\"`);Hf(Error,\"ERR_HTTP_HEADERS_SENT\",r=>`Cannot ${r[0]} headers after they are sent to the client`);Hf(TypeError,\"ERR_INVALID_HTTP_TOKEN\",r=>`${r[0]} must be a valid HTTP token [${r[1]}]`);Hf(TypeError,\"ERR_HTTP_INVALID_HEADER_VALUE\",r=>`Invalid value \"${r[0]} for header \"${r[1]}\"`);Hf(TypeError,\"ERR_INVALID_CHAR\",r=>`Invalid character in ${r[0]} [${r[1]}]`)});var Vk=w((Fnt,T5)=>{\"use strict\";var hPe=J(\"http2\"),{Writable:pPe}=J(\"stream\"),{Agent:P5,globalAgent:dPe}=Hk(),CPe=Yk(),mPe=jk(),EPe=b5(),IPe=S5(),{ERR_INVALID_ARG_TYPE:qk,ERR_INVALID_PROTOCOL:yPe,ERR_HTTP_HEADERS_SENT:D5,ERR_INVALID_HTTP_TOKEN:wPe,ERR_HTTP_INVALID_HEADER_VALUE:BPe,ERR_INVALID_CHAR:bPe}=x5(),{HTTP2_HEADER_STATUS:k5,HTTP2_HEADER_METHOD:R5,HTTP2_HEADER_PATH:F5,HTTP2_METHOD_CONNECT:QPe}=hPe.constants,Ui=Symbol(\"headers\"),Jk=Symbol(\"origin\"),Wk=Symbol(\"session\"),N5=Symbol(\"options\"),$w=Symbol(\"flushedHeaders\"),EC=Symbol(\"jobs\"),SPe=/^[\\^`\\-\\w!#$%&*+.|~]+$/,vPe=/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/,zk=class extends pPe{constructor(e,t,i){super({autoDestroy:!1});let n=typeof e==\"string\"||e instanceof URL;if(n&&(e=mPe(e instanceof URL?e:new URL(e))),typeof t==\"function\"||t===void 0?(i=t,t=n?e:{...e}):t={...e,...t},t.h2session)this[Wk]=t.h2session;else if(t.agent===!1)this.agent=new P5({maxFreeSessions:0});else if(typeof t.agent>\"u\"||t.agent===null)typeof t.createConnection==\"function\"?(this.agent=new P5({maxFreeSessions:0}),this.agent.createConnection=t.createConnection):this.agent=dPe;else if(typeof t.agent.request==\"function\")this.agent=t.agent;else throw new qk(\"options.agent\",[\"Agent-like Object\",\"undefined\",\"false\"],t.agent);if(t.protocol&&t.protocol!==\"https:\")throw new yPe(t.protocol,\"https:\");let s=t.port||t.defaultPort||this.agent&&this.agent.defaultPort||443,o=t.hostname||t.host||\"localhost\";delete t.hostname,delete t.host,delete t.port;let{timeout:a}=t;if(t.timeout=void 0,this[Ui]=Object.create(null),this[EC]=[],this.socket=null,this.connection=null,this.method=t.method||\"GET\",this.path=t.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,t.headers)for(let[l,c]of Object.entries(t.headers))this.setHeader(l,c);t.auth&&!(\"authorization\"in this[Ui])&&(this[Ui].authorization=\"Basic \"+Buffer.from(t.auth).toString(\"base64\")),t.session=t.tlsSession,t.path=t.socketPath,this[N5]=t,s===443?(this[Jk]=`https://${o}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=o)):(this[Jk]=`https://${o}:${s}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=`${o}:${s}`)),a&&this.setTimeout(a),i&&this.once(\"response\",i),this[$w]=!1}get method(){return this[Ui][R5]}set method(e){e&&(this[Ui][R5]=e.toUpperCase())}get path(){return this[Ui][F5]}set path(e){e&&(this[Ui][F5]=e)}get _mustNotHaveABody(){return this.method===\"GET\"||this.method===\"HEAD\"||this.method===\"DELETE\"}_write(e,t,i){if(this._mustNotHaveABody){i(new Error(\"The GET, HEAD and DELETE methods must NOT have a body\"));return}this.flushHeaders();let n=()=>this._request.write(e,t,i);this._request?n():this[EC].push(n)}_final(e){if(this.destroyed)return;this.flushHeaders();let t=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?t():this[EC].push(t)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit(\"abort\")),this.aborted=!0,this.destroy())}_destroy(e,t){this.res&&this.res._dump(),this._request&&this._request.destroy(),t(e)}async flushHeaders(){if(this[$w]||this.destroyed)return;this[$w]=!0;let e=this.method===QPe,t=i=>{if(this._request=i,this.destroyed){i.destroy();return}e||EPe(i,this,[\"timeout\",\"continue\",\"close\",\"error\"]);let n=o=>(...a)=>{!this.writable&&!this.destroyed?o(...a):this.once(\"finish\",()=>{o(...a)})};i.once(\"response\",n((o,a,l)=>{let c=new CPe(this.socket,i.readableHighWaterMark);this.res=c,c.req=this,c.statusCode=o[k5],c.headers=o,c.rawHeaders=l,c.once(\"end\",()=>{this.aborted?(c.aborted=!0,c.emit(\"aborted\")):(c.complete=!0,c.socket=null,c.connection=null)}),e?(c.upgrade=!0,this.emit(\"connect\",c,i,Buffer.alloc(0))?this.emit(\"close\"):i.destroy()):(i.on(\"data\",u=>{!c._dumped&&!c.push(u)&&i.pause()}),i.once(\"end\",()=>{c.push(null)}),this.emit(\"response\",c)||c._dump())})),i.once(\"headers\",n(o=>this.emit(\"information\",{statusCode:o[k5]}))),i.once(\"trailers\",n((o,a,l)=>{let{res:c}=this;c.trailers=o,c.rawTrailers=l}));let{socket:s}=i.session;this.socket=s,this.connection=s;for(let o of this[EC])o();this.emit(\"socket\",this.socket)};if(this[Wk])try{t(this[Wk].request(this[Ui]))}catch(i){this.emit(\"error\",i)}else{this.reusedSocket=!0;try{t(await this.agent.request(this[Jk],this[N5],this[Ui]))}catch(i){this.emit(\"error\",i)}}}getHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);return this[Ui][e.toLowerCase()]}get headersSent(){return this[$w]}removeHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);if(this.headersSent)throw new D5(\"remove\");delete this[Ui][e.toLowerCase()]}setHeader(e,t){if(this.headersSent)throw new D5(\"set\");if(typeof e!=\"string\"||!SPe.test(e)&&!IPe(e))throw new wPe(\"Header name\",e);if(typeof t>\"u\")throw new BPe(t,e);if(vPe.test(t))throw new bPe(\"header content\",e);this[Ui][e.toLowerCase()]=t}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,t){let i=()=>this._request.setTimeout(e,t);return this._request?i():this[EC].push(i),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};T5.exports=zk});var M5=w((Nnt,L5)=>{\"use strict\";var xPe=J(\"tls\");L5.exports=(r={})=>new Promise((e,t)=>{let i=xPe.connect(r,()=>{r.resolveSocket?(i.off(\"error\",t),e({alpnProtocol:i.alpnProtocol,socket:i})):(i.destroy(),e({alpnProtocol:i.alpnProtocol}))});i.on(\"error\",t)})});var K5=w((Tnt,O5)=>{\"use strict\";var PPe=J(\"net\");O5.exports=r=>{let e=r.host,t=r.headers&&r.headers.host;return t&&(t.startsWith(\"[\")?t.indexOf(\"]\")===-1?e=t:e=t.slice(1,-1):e=t.split(\":\",1)[0]),PPe.isIP(e)?\"\":e}});var G5=w((Lnt,Zk)=>{\"use strict\";var U5=J(\"http\"),Xk=J(\"https\"),DPe=M5(),kPe=Kk(),RPe=Vk(),FPe=K5(),NPe=jk(),eB=new kPe({maxSize:100}),IC=new Map,H5=(r,e,t)=>{e._httpMessage={shouldKeepAlive:!0};let i=()=>{r.emit(\"free\",e,t)};e.on(\"free\",i);let n=()=>{r.removeSocket(e,t)};e.on(\"close\",n);let s=()=>{r.removeSocket(e,t),e.off(\"close\",n),e.off(\"free\",i),e.off(\"agentRemove\",s)};e.on(\"agentRemove\",s),r.emit(\"free\",e,t)},TPe=async r=>{let e=`${r.host}:${r.port}:${r.ALPNProtocols.sort()}`;if(!eB.has(e)){if(IC.has(e))return(await IC.get(e)).alpnProtocol;let{path:t,agent:i}=r;r.path=r.socketPath;let n=DPe(r);IC.set(e,n);try{let{socket:s,alpnProtocol:o}=await n;if(eB.set(e,o),r.path=t,o===\"h2\")s.destroy();else{let{globalAgent:a}=Xk,l=Xk.Agent.prototype.createConnection;i?i.createConnection===l?H5(i,s,r):s.destroy():a.createConnection===l?H5(a,s,r):s.destroy()}return IC.delete(e),o}catch(s){throw IC.delete(e),s}}return eB.get(e)};Zk.exports=async(r,e,t)=>{if((typeof r==\"string\"||r instanceof URL)&&(r=NPe(new URL(r))),typeof e==\"function\"&&(t=e,e=void 0),e={ALPNProtocols:[\"h2\",\"http/1.1\"],...r,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error(\"The `ALPNProtocols` option must be an Array with at least one entry\");e.protocol=e.protocol||\"https:\";let i=e.protocol===\"https:\";e.host=e.hostname||e.host||\"localhost\",e.session=e.tlsSession,e.servername=e.servername||FPe(e),e.port=e.port||(i?443:80),e._defaultAgent=i?Xk.globalAgent:U5.globalAgent;let n=e.agent;if(n){if(n.addRequest)throw new Error(\"The `options.agent` object can contain only `http`, `https` or `http2` properties\");e.agent=n[i?\"https\":\"http\"]}return i&&await TPe(e)===\"h2\"?(n&&(e.agent=n.http2),new RPe(e,t)):U5.request(e,t)};Zk.exports.protocolCache=eB});var j5=w((Mnt,Y5)=>{\"use strict\";var LPe=J(\"http2\"),MPe=Hk(),_k=Vk(),OPe=Yk(),KPe=G5(),UPe=(r,e,t)=>new _k(r,e,t),HPe=(r,e,t)=>{let i=new _k(r,e,t);return i.end(),i};Y5.exports={...LPe,ClientRequest:_k,IncomingMessage:OPe,...MPe,request:UPe,get:HPe,auto:KPe}});var eR=w($k=>{\"use strict\";Object.defineProperty($k,\"__esModule\",{value:!0});var q5=Ya();$k.default=r=>q5.default.nodeStream(r)&&q5.default.function_(r.getBoundary)});var V5=w(tR=>{\"use strict\";Object.defineProperty(tR,\"__esModule\",{value:!0});var W5=J(\"fs\"),z5=J(\"util\"),J5=Ya(),GPe=eR(),YPe=z5.promisify(W5.stat);tR.default=async(r,e)=>{if(e&&\"content-length\"in e)return Number(e[\"content-length\"]);if(!r)return 0;if(J5.default.string(r))return Buffer.byteLength(r);if(J5.default.buffer(r))return r.length;if(GPe.default(r))return z5.promisify(r.getLength.bind(r))();if(r instanceof W5.ReadStream){let{size:t}=await YPe(r.path);return t===0?void 0:t}}});var iR=w(rR=>{\"use strict\";Object.defineProperty(rR,\"__esModule\",{value:!0});function jPe(r,e,t){let i={};for(let n of t)i[n]=(...s)=>{e.emit(n,...s)},r.on(n,i[n]);return()=>{for(let n of t)r.off(n,i[n])}}rR.default=jPe});var X5=w(nR=>{\"use strict\";Object.defineProperty(nR,\"__esModule\",{value:!0});nR.default=()=>{let r=[];return{once(e,t,i){e.once(t,i),r.push({origin:e,event:t,fn:i})},unhandleAll(){for(let e of r){let{origin:t,event:i,fn:n}=e;t.removeListener(i,n)}r.length=0}}}});var _5=w(yC=>{\"use strict\";Object.defineProperty(yC,\"__esModule\",{value:!0});yC.TimeoutError=void 0;var qPe=J(\"net\"),JPe=X5(),Z5=Symbol(\"reentry\"),WPe=()=>{},tB=class extends Error{constructor(e,t){super(`Timeout awaiting '${t}' for ${e}ms`),this.event=t,this.name=\"TimeoutError\",this.code=\"ETIMEDOUT\"}};yC.TimeoutError=tB;yC.default=(r,e,t)=>{if(Z5 in r)return WPe;r[Z5]=!0;let i=[],{once:n,unhandleAll:s}=JPe.default(),o=(g,f,h)=>{var p;let C=setTimeout(f,g,g,h);(p=C.unref)===null||p===void 0||p.call(C);let y=()=>{clearTimeout(C)};return i.push(y),y},{host:a,hostname:l}=t,c=(g,f)=>{r.destroy(new tB(g,f))},u=()=>{for(let g of i)g();s()};if(r.once(\"error\",g=>{if(u(),r.listenerCount(\"error\")===0)throw g}),r.once(\"close\",u),n(r,\"response\",g=>{n(g,\"end\",u)}),typeof e.request<\"u\"&&o(e.request,c,\"request\"),typeof e.socket<\"u\"){let g=()=>{c(e.socket,\"socket\")};r.setTimeout(e.socket,g),i.push(()=>{r.removeListener(\"timeout\",g)})}return n(r,\"socket\",g=>{var f;let{socketPath:h}=r;if(g.connecting){let p=Boolean(h!=null?h:qPe.isIP((f=l!=null?l:a)!==null&&f!==void 0?f:\"\")!==0);if(typeof e.lookup<\"u\"&&!p&&typeof g.address().address>\"u\"){let C=o(e.lookup,c,\"lookup\");n(g,\"lookup\",C)}if(typeof e.connect<\"u\"){let C=()=>o(e.connect,c,\"connect\");p?n(g,\"connect\",C()):n(g,\"lookup\",y=>{y===null&&n(g,\"connect\",C())})}typeof e.secureConnect<\"u\"&&t.protocol===\"https:\"&&n(g,\"connect\",()=>{let C=o(e.secureConnect,c,\"secureConnect\");n(g,\"secureConnect\",C)})}if(typeof e.send<\"u\"){let p=()=>o(e.send,c,\"send\");g.connecting?n(g,\"connect\",()=>{n(r,\"upload-complete\",p())}):n(r,\"upload-complete\",p())}}),typeof e.response<\"u\"&&n(r,\"upload-complete\",()=>{let g=o(e.response,c,\"response\");n(r,\"response\",g)}),u}});var e6=w(sR=>{\"use strict\";Object.defineProperty(sR,\"__esModule\",{value:!0});var $5=Ya();sR.default=r=>{r=r;let e={protocol:r.protocol,hostname:$5.default.string(r.hostname)&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return $5.default.string(r.port)&&r.port.length>0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var t6=w(oR=>{\"use strict\";Object.defineProperty(oR,\"__esModule\",{value:!0});var zPe=J(\"url\"),VPe=[\"protocol\",\"host\",\"hostname\",\"port\",\"pathname\",\"search\"];oR.default=(r,e)=>{var t,i;if(e.path){if(e.pathname)throw new TypeError(\"Parameters `path` and `pathname` are mutually exclusive.\");if(e.search)throw new TypeError(\"Parameters `path` and `search` are mutually exclusive.\");if(e.searchParams)throw new TypeError(\"Parameters `path` and `searchParams` are mutually exclusive.\")}if(e.search&&e.searchParams)throw new TypeError(\"Parameters `search` and `searchParams` are mutually exclusive.\");if(!r){if(!e.protocol)throw new TypeError(\"No URL protocol specified\");r=`${e.protocol}//${(i=(t=e.hostname)!==null&&t!==void 0?t:e.host)!==null&&i!==void 0?i:\"\"}`}let n=new zPe.URL(r);if(e.path){let s=e.path.indexOf(\"?\");s===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,s),e.search=e.path.slice(s+1)),delete e.path}for(let s of VPe)e[s]&&(n[s]=e[s].toString());return n}});var r6=w(AR=>{\"use strict\";Object.defineProperty(AR,\"__esModule\",{value:!0});var aR=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,t){typeof e==\"object\"?this.weakMap.set(e,t):this.map.set(e,t)}get(e){return typeof e==\"object\"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e==\"object\"?this.weakMap.has(e):this.map.has(e)}};AR.default=aR});var cR=w(lR=>{\"use strict\";Object.defineProperty(lR,\"__esModule\",{value:!0});var XPe=async r=>{let e=[],t=0;for await(let i of r)e.push(i),t+=Buffer.byteLength(i);return Buffer.isBuffer(e[0])?Buffer.concat(e,t):Buffer.from(e.join(\"\"))};lR.default=XPe});var n6=w(Mc=>{\"use strict\";Object.defineProperty(Mc,\"__esModule\",{value:!0});Mc.dnsLookupIpVersionToFamily=Mc.isDnsLookupIpVersion=void 0;var i6={auto:0,ipv4:4,ipv6:6};Mc.isDnsLookupIpVersion=r=>r in i6;Mc.dnsLookupIpVersionToFamily=r=>{if(Mc.isDnsLookupIpVersion(r))return i6[r];throw new Error(\"Invalid DNS lookup IP version\")}});var uR=w(rB=>{\"use strict\";Object.defineProperty(rB,\"__esModule\",{value:!0});rB.isResponseOk=void 0;rB.isResponseOk=r=>{let{statusCode:e}=r,t=r.request.options.followRedirect?299:399;return e>=200&&e<=t||e===304}});var o6=w(gR=>{\"use strict\";Object.defineProperty(gR,\"__esModule\",{value:!0});var s6=new Set;gR.default=r=>{s6.has(r)||(s6.add(r),process.emitWarning(`Got: ${r}`,{type:\"DeprecationWarning\"}))}});var a6=w(fR=>{\"use strict\";Object.defineProperty(fR,\"__esModule\",{value:!0});var mr=Ya(),ZPe=(r,e)=>{if(mr.default.null_(r.encoding))throw new TypeError(\"To get a Buffer, set `options.responseType` to `buffer` instead\");mr.assert.any([mr.default.string,mr.default.undefined],r.encoding),mr.assert.any([mr.default.boolean,mr.default.undefined],r.resolveBodyOnly),mr.assert.any([mr.default.boolean,mr.default.undefined],r.methodRewriting),mr.assert.any([mr.default.boolean,mr.default.undefined],r.isStream),mr.assert.any([mr.default.string,mr.default.undefined],r.responseType),r.responseType===void 0&&(r.responseType=\"text\");let{retry:t}=r;if(e?r.retry={...e.retry}:r.retry={calculateDelay:i=>i.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},mr.default.object(t)?(r.retry={...r.retry,...t},r.retry.methods=[...new Set(r.retry.methods.map(i=>i.toUpperCase()))],r.retry.statusCodes=[...new Set(r.retry.statusCodes)],r.retry.errorCodes=[...new Set(r.retry.errorCodes)]):mr.default.number(t)&&(r.retry.limit=t),mr.default.undefined(r.retry.maxRetryAfter)&&(r.retry.maxRetryAfter=Math.min(...[r.timeout.request,r.timeout.connect].filter(mr.default.number))),mr.default.object(r.pagination)){e&&(r.pagination={...e.pagination,...r.pagination});let{pagination:i}=r;if(!mr.default.function_(i.transform))throw new Error(\"`options.pagination.transform` must be implemented\");if(!mr.default.function_(i.shouldContinue))throw new Error(\"`options.pagination.shouldContinue` must be implemented\");if(!mr.default.function_(i.filter))throw new TypeError(\"`options.pagination.filter` must be implemented\");if(!mr.default.function_(i.paginate))throw new Error(\"`options.pagination.paginate` must be implemented\")}return r.responseType===\"json\"&&r.headers.accept===void 0&&(r.headers.accept=\"application/json\"),r};fR.default=ZPe});var A6=w(wC=>{\"use strict\";Object.defineProperty(wC,\"__esModule\",{value:!0});wC.retryAfterStatusCodes=void 0;wC.retryAfterStatusCodes=new Set([413,429,503]);var _Pe=({attemptCount:r,retryOptions:e,error:t,retryAfter:i})=>{if(r>e.limit)return 0;let n=e.methods.includes(t.options.method),s=e.errorCodes.includes(t.code),o=t.response&&e.statusCodes.includes(t.response.statusCode);if(!n||!s&&!o)return 0;if(t.response){if(i)return e.maxRetryAfter===void 0||i>e.maxRetryAfter?0:i;if(t.response.statusCode===413)return 0}let a=Math.random()*100;return 2**(r-1)*1e3+a};wC.default=_Pe});var QC=w(Yt=>{\"use strict\";Object.defineProperty(Yt,\"__esModule\",{value:!0});Yt.UnsupportedProtocolError=Yt.ReadError=Yt.TimeoutError=Yt.UploadError=Yt.CacheError=Yt.HTTPError=Yt.MaxRedirectsError=Yt.RequestError=Yt.setNonEnumerableProperties=Yt.knownHookEvents=Yt.withoutBody=Yt.kIsNormalizedAlready=void 0;var l6=J(\"util\"),c6=J(\"stream\"),$Pe=J(\"fs\"),VA=J(\"url\"),u6=J(\"http\"),hR=J(\"http\"),eDe=J(\"https\"),tDe=Sz(),rDe=Fz(),g6=u5(),iDe=p5(),nDe=j5(),sDe=Zw(),Ee=Ya(),oDe=V5(),f6=eR(),aDe=iR(),h6=_5(),ADe=e6(),p6=t6(),lDe=r6(),cDe=cR(),d6=n6(),uDe=uR(),XA=o6(),gDe=a6(),fDe=A6(),pR,Pi=Symbol(\"request\"),sB=Symbol(\"response\"),Gf=Symbol(\"responseSize\"),Yf=Symbol(\"downloadedSize\"),jf=Symbol(\"bodySize\"),qf=Symbol(\"uploadedSize\"),iB=Symbol(\"serverResponsesPiped\"),C6=Symbol(\"unproxyEvents\"),m6=Symbol(\"isFromCache\"),dR=Symbol(\"cancelTimeouts\"),E6=Symbol(\"startedReading\"),Jf=Symbol(\"stopReading\"),nB=Symbol(\"triggerRead\"),ZA=Symbol(\"body\"),BC=Symbol(\"jobs\"),I6=Symbol(\"originalResponse\"),y6=Symbol(\"retryTimeout\");Yt.kIsNormalizedAlready=Symbol(\"isNormalizedAlready\");var hDe=Ee.default.string(process.versions.brotli);Yt.withoutBody=new Set([\"GET\",\"HEAD\"]);Yt.knownHookEvents=[\"init\",\"beforeRequest\",\"beforeRedirect\",\"beforeError\",\"beforeRetry\",\"afterResponse\"];function pDe(r){for(let e in r){let t=r[e];if(!Ee.default.string(t)&&!Ee.default.number(t)&&!Ee.default.boolean(t)&&!Ee.default.null_(t)&&!Ee.default.undefined(t))throw new TypeError(`The \\`searchParams\\` value '${String(t)}' must be a string, number, boolean or null`)}}function dDe(r){return Ee.default.object(r)&&!(\"statusCode\"in r)}var CR=new lDe.default,CDe=async r=>new Promise((e,t)=>{let i=n=>{t(n)};r.pending||e(),r.once(\"error\",i),r.once(\"ready\",()=>{r.off(\"error\",i),e()})}),mDe=new Set([300,301,302,303,304,307,308]),EDe=[\"context\",\"body\",\"json\",\"form\"];Yt.setNonEnumerableProperties=(r,e)=>{let t={};for(let i of r)if(!!i)for(let n of EDe)n in i&&(t[n]={writable:!0,configurable:!0,enumerable:!1,value:i[n]});Object.defineProperties(e,t)};var ei=class extends Error{constructor(e,t,i){var n;if(super(e),Error.captureStackTrace(this,this.constructor),this.name=\"RequestError\",this.code=t.code,i instanceof gB?(Object.defineProperty(this,\"request\",{enumerable:!1,value:i}),Object.defineProperty(this,\"response\",{enumerable:!1,value:i[sB]}),Object.defineProperty(this,\"options\",{enumerable:!1,value:i.options})):Object.defineProperty(this,\"options\",{enumerable:!1,value:i}),this.timings=(n=this.request)===null||n===void 0?void 0:n.timings,Ee.default.string(t.stack)&&Ee.default.string(this.stack)){let s=this.stack.indexOf(this.message)+this.message.length,o=this.stack.slice(s).split(`\n`).reverse(),a=t.stack.slice(t.stack.indexOf(t.message)+t.message.length).split(`\n`).reverse();for(;a.length!==0&&a[0]===o[0];)o.shift();this.stack=`${this.stack.slice(0,s)}${o.reverse().join(`\n`)}${a.reverse().join(`\n`)}`}}};Yt.RequestError=ei;var oB=class extends ei{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name=\"MaxRedirectsError\"}};Yt.MaxRedirectsError=oB;var aB=class extends ei{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name=\"HTTPError\"}};Yt.HTTPError=aB;var AB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"CacheError\"}};Yt.CacheError=AB;var lB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"UploadError\"}};Yt.UploadError=lB;var cB=class extends ei{constructor(e,t,i){super(e.message,e,i),this.name=\"TimeoutError\",this.event=e.event,this.timings=t}};Yt.TimeoutError=cB;var bC=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"ReadError\"}};Yt.ReadError=bC;var uB=class extends ei{constructor(e){super(`Unsupported protocol \"${e.url.protocol}\"`,{},e),this.name=\"UnsupportedProtocolError\"}};Yt.UnsupportedProtocolError=uB;var IDe=[\"socket\",\"connect\",\"continue\",\"information\",\"upgrade\",\"timeout\"],gB=class extends c6.Duplex{constructor(e,t={},i){super({autoDestroy:!1,highWaterMark:0}),this[Yf]=0,this[qf]=0,this.requestInitialized=!1,this[iB]=new Set,this.redirects=[],this[Jf]=!1,this[nB]=!1,this[BC]=[],this.retryCount=0,this._progressCallbacks=[];let n=()=>this._unlockWrite(),s=()=>this._lockWrite();this.on(\"pipe\",c=>{c.prependListener(\"data\",n),c.on(\"data\",s),c.prependListener(\"end\",n),c.on(\"end\",s)}),this.on(\"unpipe\",c=>{c.off(\"data\",n),c.off(\"data\",s),c.off(\"end\",n),c.off(\"end\",s)}),this.on(\"pipe\",c=>{c instanceof hR.IncomingMessage&&(this.options.headers={...c.headers,...this.options.headers})});let{json:o,body:a,form:l}=t;if((o||a||l)&&this._lockWrite(),Yt.kIsNormalizedAlready in t)this.options=t;else try{this.options=this.constructor.normalizeArguments(e,t,i)}catch(c){Ee.default.nodeStream(t.body)&&t.body.destroy(),this.destroy(c);return}(async()=>{var c;try{this.options.body instanceof $Pe.ReadStream&&await CDe(this.options.body);let{url:u}=this.options;if(!u)throw new TypeError(\"Missing `url` property\");if(this.requestUrl=u.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(c=this[Pi])===null||c===void 0||c.destroy();return}for(let g of this[BC])g();this[BC].length=0,this.requestInitialized=!0}catch(u){if(u instanceof ei){this._beforeError(u);return}this.destroyed||this.destroy(u)}})()}static normalizeArguments(e,t,i){var n,s,o,a,l;let c=t;if(Ee.default.object(e)&&!Ee.default.urlInstance(e))t={...i,...e,...t};else{if(e&&t&&t.url!==void 0)throw new TypeError(\"The `url` option is mutually exclusive with the `input` argument\");t={...i,...t},e!==void 0&&(t.url=e),Ee.default.urlInstance(t.url)&&(t.url=new VA.URL(t.url.toString()))}if(t.cache===!1&&(t.cache=void 0),t.dnsCache===!1&&(t.dnsCache=void 0),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.method),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.headers),Ee.assert.any([Ee.default.string,Ee.default.urlInstance,Ee.default.undefined],t.prefixUrl),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cookieJar),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.searchParams),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.cache),Ee.assert.any([Ee.default.object,Ee.default.number,Ee.default.undefined],t.timeout),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.context),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.hooks),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.decompress),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.ignoreInvalidCookies),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.followRedirect),Ee.assert.any([Ee.default.number,Ee.default.undefined],t.maxRedirects),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.throwHttpErrors),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.http2),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.allowGetBody),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.localAddress),Ee.assert.any([d6.isDnsLookupIpVersion,Ee.default.undefined],t.dnsLookupIpVersion),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.https),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.rejectUnauthorized),t.https&&(Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.https.rejectUnauthorized),Ee.assert.any([Ee.default.function_,Ee.default.undefined],t.https.checkServerIdentity),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificateAuthority),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.key),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificate),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.https.passphrase),Ee.assert.any([Ee.default.string,Ee.default.buffer,Ee.default.array,Ee.default.undefined],t.https.pfx)),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cacheOptions),Ee.default.string(t.method)?t.method=t.method.toUpperCase():t.method=\"GET\",t.headers===(i==null?void 0:i.headers)?t.headers={...t.headers}:t.headers=sDe({...i==null?void 0:i.headers,...t.headers}),\"slashes\"in t)throw new TypeError(\"The legacy `url.Url` has been deprecated. Use `URL` instead.\");if(\"auth\"in t)throw new TypeError(\"Parameter `auth` is deprecated. Use `username` / `password` instead.\");if(\"searchParams\"in t&&t.searchParams&&t.searchParams!==(i==null?void 0:i.searchParams)){let h;if(Ee.default.string(t.searchParams)||t.searchParams instanceof VA.URLSearchParams)h=new VA.URLSearchParams(t.searchParams);else{pDe(t.searchParams),h=new VA.URLSearchParams;for(let p in t.searchParams){let C=t.searchParams[p];C===null?h.append(p,\"\"):C!==void 0&&h.append(p,C)}}(n=i==null?void 0:i.searchParams)===null||n===void 0||n.forEach((p,C)=>{h.has(C)||h.append(C,p)}),t.searchParams=h}if(t.username=(s=t.username)!==null&&s!==void 0?s:\"\",t.password=(o=t.password)!==null&&o!==void 0?o:\"\",Ee.default.undefined(t.prefixUrl)?t.prefixUrl=(a=i==null?void 0:i.prefixUrl)!==null&&a!==void 0?a:\"\":(t.prefixUrl=t.prefixUrl.toString(),t.prefixUrl!==\"\"&&!t.prefixUrl.endsWith(\"/\")&&(t.prefixUrl+=\"/\")),Ee.default.string(t.url)){if(t.url.startsWith(\"/\"))throw new Error(\"`input` must not start with a slash when using `prefixUrl`\");t.url=p6.default(t.prefixUrl+t.url,t)}else(Ee.default.undefined(t.url)&&t.prefixUrl!==\"\"||t.protocol)&&(t.url=p6.default(t.prefixUrl,t));if(t.url){\"port\"in t&&delete t.port;let{prefixUrl:h}=t;Object.defineProperty(t,\"prefixUrl\",{set:C=>{let y=t.url;if(!y.href.startsWith(C))throw new Error(`Cannot change \\`prefixUrl\\` from ${h} to ${C}: ${y.href}`);t.url=new VA.URL(C+y.href.slice(h.length)),h=C},get:()=>h});let{protocol:p}=t.url;if(p===\"unix:\"&&(p=\"http:\",t.url=new VA.URL(`http://unix${t.url.pathname}${t.url.search}`)),t.searchParams&&(t.url.search=t.searchParams.toString()),p!==\"http:\"&&p!==\"https:\")throw new uB(t);t.username===\"\"?t.username=t.url.username:t.url.username=t.username,t.password===\"\"?t.password=t.url.password:t.url.password=t.password}let{cookieJar:u}=t;if(u){let{setCookie:h,getCookieString:p}=u;Ee.assert.function_(h),Ee.assert.function_(p),h.length===4&&p.length===0&&(h=l6.promisify(h.bind(t.cookieJar)),p=l6.promisify(p.bind(t.cookieJar)),t.cookieJar={setCookie:h,getCookieString:p})}let{cache:g}=t;if(g&&(CR.has(g)||CR.set(g,new g6((h,p)=>{let C=h[Pi](h,p);return Ee.default.promise(C)&&(C.once=(y,B)=>{if(y===\"error\")C.catch(B);else if(y===\"abort\")(async()=>{try{(await C).once(\"abort\",B)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${y}`);return C}),C},g))),t.cacheOptions={...t.cacheOptions},t.dnsCache===!0)pR||(pR=new rDe.default),t.dnsCache=pR;else if(!Ee.default.undefined(t.dnsCache)&&!t.dnsCache.lookup)throw new TypeError(`Parameter \\`dnsCache\\` must be a CacheableLookup instance or a boolean, got ${Ee.default(t.dnsCache)}`);Ee.default.number(t.timeout)?t.timeout={request:t.timeout}:i&&t.timeout!==i.timeout?t.timeout={...i.timeout,...t.timeout}:t.timeout={...t.timeout},t.context||(t.context={});let f=t.hooks===(i==null?void 0:i.hooks);t.hooks={...t.hooks};for(let h of Yt.knownHookEvents)if(h in t.hooks)if(Ee.default.array(t.hooks[h]))t.hooks[h]=[...t.hooks[h]];else throw new TypeError(`Parameter \\`${h}\\` must be an Array, got ${Ee.default(t.hooks[h])}`);else t.hooks[h]=[];if(i&&!f)for(let h of Yt.knownHookEvents)i.hooks[h].length>0&&(t.hooks[h]=[...i.hooks[h],...t.hooks[h]]);if(\"family\"in t&&XA.default('\"options.family\" was never documented, please use \"options.dnsLookupIpVersion\"'),i!=null&&i.https&&(t.https={...i.https,...t.https}),\"rejectUnauthorized\"in t&&XA.default('\"options.rejectUnauthorized\" is now deprecated, please use \"options.https.rejectUnauthorized\"'),\"checkServerIdentity\"in t&&XA.default('\"options.checkServerIdentity\" was never documented, please use \"options.https.checkServerIdentity\"'),\"ca\"in t&&XA.default('\"options.ca\" was never documented, please use \"options.https.certificateAuthority\"'),\"key\"in t&&XA.default('\"options.key\" was never documented, please use \"options.https.key\"'),\"cert\"in t&&XA.default('\"options.cert\" was never documented, please use \"options.https.certificate\"'),\"passphrase\"in t&&XA.default('\"options.passphrase\" was never documented, please use \"options.https.passphrase\"'),\"pfx\"in t&&XA.default('\"options.pfx\" was never documented, please use \"options.https.pfx\"'),\"followRedirects\"in t)throw new TypeError(\"The `followRedirects` option does not exist. Use `followRedirect` instead.\");if(t.agent){for(let h in t.agent)if(h!==\"http\"&&h!==\"https\"&&h!==\"http2\")throw new TypeError(`Expected the \\`options.agent\\` properties to be \\`http\\`, \\`https\\` or \\`http2\\`, got \\`${h}\\``)}return t.maxRedirects=(l=t.maxRedirects)!==null&&l!==void 0?l:0,Yt.setNonEnumerableProperties([i,c],t),gDe.default(t,i)}_lockWrite(){let e=()=>{throw new TypeError(\"The payload has been already provided\")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:t}=e,i=!Ee.default.undefined(e.form),n=!Ee.default.undefined(e.json),s=!Ee.default.undefined(e.body),o=i||n||s,a=Yt.withoutBody.has(e.method)&&!(e.method===\"GET\"&&e.allowGetBody);if(this._cannotHaveBody=a,o){if(a)throw new TypeError(`The \\`${e.method}\\` method cannot be used with a body`);if([s,i,n].filter(l=>l).length>1)throw new TypeError(\"The `body`, `json` and `form` options are mutually exclusive\");if(s&&!(e.body instanceof c6.Readable)&&!Ee.default.string(e.body)&&!Ee.default.buffer(e.body)&&!f6.default(e.body))throw new TypeError(\"The `body` option must be a stream.Readable, string or Buffer\");if(i&&!Ee.default.object(e.form))throw new TypeError(\"The `form` option must be an Object\");{let l=!Ee.default.string(t[\"content-type\"]);s?(f6.default(e.body)&&l&&(t[\"content-type\"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ZA]=e.body):i?(l&&(t[\"content-type\"]=\"application/x-www-form-urlencoded\"),this[ZA]=new VA.URLSearchParams(e.form).toString()):(l&&(t[\"content-type\"]=\"application/json\"),this[ZA]=e.stringifyJson(e.json));let c=await oDe.default(this[ZA],e.headers);Ee.default.undefined(t[\"content-length\"])&&Ee.default.undefined(t[\"transfer-encoding\"])&&!a&&!Ee.default.undefined(c)&&(t[\"content-length\"]=String(c))}}else a?this._lockWrite():this._unlockWrite();this[jf]=Number(t[\"content-length\"])||void 0}async _onResponseBase(e){let{options:t}=this,{url:i}=t;this[I6]=e,t.decompress&&(e=iDe(e));let n=e.statusCode,s=e;s.statusMessage=s.statusMessage?s.statusMessage:u6.STATUS_CODES[n],s.url=t.url.toString(),s.requestUrl=this.requestUrl,s.redirectUrls=this.redirects,s.request=this,s.isFromCache=e.fromCache||!1,s.ip=this.ip,s.retryCount=this.retryCount,this[m6]=s.isFromCache,this[Gf]=Number(e.headers[\"content-length\"])||void 0,this[sB]=e,e.once(\"end\",()=>{this[Gf]=this[Yf],this.emit(\"downloadProgress\",this.downloadProgress)}),e.once(\"error\",a=>{e.destroy(),this._beforeError(new bC(a,this))}),e.once(\"aborted\",()=>{this._beforeError(new bC({name:\"Error\",message:\"The server aborted pending request\",code:\"ECONNRESET\"},this))}),this.emit(\"downloadProgress\",this.downloadProgress);let o=e.headers[\"set-cookie\"];if(Ee.default.object(t.cookieJar)&&o){let a=o.map(async l=>t.cookieJar.setCookie(l,i.toString()));t.ignoreInvalidCookies&&(a=a.map(async l=>l.catch(()=>{})));try{await Promise.all(a)}catch(l){this._beforeError(l);return}}if(t.followRedirect&&e.headers.location&&mDe.has(n)){if(e.resume(),this[Pi]&&(this[dR](),delete this[Pi],this[C6]()),(n===303&&t.method!==\"GET\"&&t.method!==\"HEAD\"||!t.methodRewriting)&&(t.method=\"GET\",\"body\"in t&&delete t.body,\"json\"in t&&delete t.json,\"form\"in t&&delete t.form,this[ZA]=void 0,delete t.headers[\"content-length\"]),this.redirects.length>=t.maxRedirects){this._beforeError(new oB(this));return}try{let l=Buffer.from(e.headers.location,\"binary\").toString(),c=new VA.URL(l,i),u=c.toString();decodeURI(u),c.hostname!==i.hostname||c.port!==i.port?(\"host\"in t.headers&&delete t.headers.host,\"cookie\"in t.headers&&delete t.headers.cookie,\"authorization\"in t.headers&&delete t.headers.authorization,(t.username||t.password)&&(t.username=\"\",t.password=\"\")):(c.username=t.username,c.password=t.password),this.redirects.push(u),t.url=c;for(let g of t.hooks.beforeRedirect)await g(t,s);this.emit(\"redirect\",s,t),await this._makeRequest()}catch(l){this._beforeError(l);return}return}if(t.isStream&&t.throwHttpErrors&&!uDe.isResponseOk(s)){this._beforeError(new aB(s));return}e.on(\"readable\",()=>{this[nB]&&this._read()}),this.on(\"resume\",()=>{e.resume()}),this.on(\"pause\",()=>{e.pause()}),e.once(\"end\",()=>{this.push(null)}),this.emit(\"response\",e);for(let a of this[iB])if(!a.headersSent){for(let l in e.headers){let c=t.decompress?l!==\"content-encoding\":!0,u=e.headers[l];c&&a.setHeader(l,u)}a.statusCode=n}}async _onResponse(e){try{await this._onResponseBase(e)}catch(t){this._beforeError(t)}}_onRequest(e){let{options:t}=this,{timeout:i,url:n}=t;tDe.default(e),this[dR]=h6.default(e,i,n);let s=t.cache?\"cacheableResponse\":\"response\";e.once(s,l=>{this._onResponse(l)}),e.once(\"error\",l=>{var c;e.destroy(),(c=e.res)===null||c===void 0||c.removeAllListeners(\"end\"),l=l instanceof h6.TimeoutError?new cB(l,this.timings,this):new ei(l.message,l,this),this._beforeError(l)}),this[C6]=aDe.default(e,this,IDe),this[Pi]=e,this.emit(\"uploadProgress\",this.uploadProgress);let o=this[ZA],a=this.redirects.length===0?this:e;Ee.default.nodeStream(o)?(o.pipe(a),o.once(\"error\",l=>{this._beforeError(new lB(l,this))})):(this._unlockWrite(),Ee.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(a.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),a.end(),this._lockWrite())),this.emit(\"request\",e)}async _createCacheableRequest(e,t){return new Promise((i,n)=>{Object.assign(t,ADe.default(e)),delete t.url;let s,o=CR.get(t.cache)(t,async a=>{a._readableState.autoDestroy=!1,s&&(await s).emit(\"cacheableResponse\",a),i(a)});t.url=e,o.once(\"error\",n),o.once(\"request\",async a=>{s=a,i(s)})})}async _makeRequest(){var e,t,i,n,s;let{options:o}=this,{headers:a}=o;for(let B in a)if(Ee.default.undefined(a[B]))delete a[B];else if(Ee.default.null_(a[B]))throw new TypeError(`Use \\`undefined\\` instead of \\`null\\` to delete the \\`${B}\\` header`);if(o.decompress&&Ee.default.undefined(a[\"accept-encoding\"])&&(a[\"accept-encoding\"]=hDe?\"gzip, deflate, br\":\"gzip, deflate\"),o.cookieJar){let B=await o.cookieJar.getCookieString(o.url.toString());Ee.default.nonEmptyString(B)&&(o.headers.cookie=B)}for(let B of o.hooks.beforeRequest){let v=await B(o);if(!Ee.default.undefined(v)){o.request=()=>v;break}}o.body&&this[ZA]!==o.body&&(this[ZA]=o.body);let{agent:l,request:c,timeout:u,url:g}=o;if(o.dnsCache&&!(\"lookup\"in o)&&(o.lookup=o.dnsCache.lookup),g.hostname===\"unix\"){let B=/(?<socketPath>.+?):(?<path>.+)/.exec(`${g.pathname}${g.search}`);if(B!=null&&B.groups){let{socketPath:v,path:D}=B.groups;Object.assign(o,{socketPath:v,path:D,host:\"\"})}}let f=g.protocol===\"https:\",h;o.http2?h=nDe.auto:h=f?eDe.request:u6.request;let p=(e=o.request)!==null&&e!==void 0?e:h,C=o.cache?this._createCacheableRequest:p;l&&!o.http2&&(o.agent=l[f?\"https\":\"http\"]),o[Pi]=p,delete o.request,delete o.timeout;let y=o;if(y.shared=(t=o.cacheOptions)===null||t===void 0?void 0:t.shared,y.cacheHeuristic=(i=o.cacheOptions)===null||i===void 0?void 0:i.cacheHeuristic,y.immutableMinTimeToLive=(n=o.cacheOptions)===null||n===void 0?void 0:n.immutableMinTimeToLive,y.ignoreCargoCult=(s=o.cacheOptions)===null||s===void 0?void 0:s.ignoreCargoCult,o.dnsLookupIpVersion!==void 0)try{y.family=d6.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch{throw new Error(\"Invalid `dnsLookupIpVersion` option value\")}o.https&&(\"rejectUnauthorized\"in o.https&&(y.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(y.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(y.ca=o.https.certificateAuthority),o.https.certificate&&(y.cert=o.https.certificate),o.https.key&&(y.key=o.https.key),o.https.passphrase&&(y.passphrase=o.https.passphrase),o.https.pfx&&(y.pfx=o.https.pfx));try{let B=await C(g,y);Ee.default.undefined(B)&&(B=h(g,y)),o.request=c,o.timeout=u,o.agent=l,o.https&&(\"rejectUnauthorized\"in o.https&&delete y.rejectUnauthorized,o.https.checkServerIdentity&&delete y.checkServerIdentity,o.https.certificateAuthority&&delete y.ca,o.https.certificate&&delete y.cert,o.https.key&&delete y.key,o.https.passphrase&&delete y.passphrase,o.https.pfx&&delete y.pfx),dDe(B)?this._onRequest(B):this.writable?(this.once(\"finish\",()=>{this._onResponse(B)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(B)}catch(B){throw B instanceof g6.CacheError?new AB(B,this):new ei(B.message,B,this)}}async _error(e){try{for(let t of this.options.hooks.beforeError)e=await t(e)}catch(t){e=new ei(t.message,t,this)}this.destroy(e)}_beforeError(e){if(this[Jf])return;let{options:t}=this,i=this.retryCount+1;this[Jf]=!0,e instanceof ei||(e=new ei(e.message,e,this));let n=e,{response:s}=n;(async()=>{if(s&&!s.body){s.setEncoding(this._readableState.encoding);try{s.rawBody=await cDe.default(s),s.body=s.rawBody.toString()}catch{}}if(this.listenerCount(\"retry\")!==0){let o;try{let a;s&&\"retry-after\"in s.headers&&(a=Number(s.headers[\"retry-after\"]),Number.isNaN(a)?(a=Date.parse(s.headers[\"retry-after\"])-Date.now(),a<=0&&(a=1)):a*=1e3),o=await t.retry.calculateDelay({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:fDe.default({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:0})})}catch(a){this._error(new ei(a.message,a,this));return}if(o){let a=async()=>{try{for(let l of this.options.hooks.beforeRetry)await l(this.options,n,i)}catch(l){this._error(new ei(l.message,e,this));return}this.destroyed||(this.destroy(),this.emit(\"retry\",i,e))};this[y6]=setTimeout(a,o);return}}this._error(n)})()}_read(){this[nB]=!0;let e=this[sB];if(e&&!this[Jf]){e.readableLength&&(this[nB]=!1);let t;for(;(t=e.read())!==null;){this[Yf]+=t.length,this[E6]=!0;let i=this.downloadProgress;i.percent<1&&this.emit(\"downloadProgress\",i),this.push(t)}}}_write(e,t,i){let n=()=>{this._writeRequest(e,t,i)};this.requestInitialized?n():this[BC].push(n)}_writeRequest(e,t,i){this[Pi].destroyed||(this._progressCallbacks.push(()=>{this[qf]+=Buffer.byteLength(e,t);let n=this.uploadProgress;n.percent<1&&this.emit(\"uploadProgress\",n)}),this[Pi].write(e,t,n=>{!n&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),i(n)}))}_final(e){let t=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Pi in this)){e();return}if(this[Pi].destroyed){e();return}this[Pi].end(i=>{i||(this[jf]=this[qf],this.emit(\"uploadProgress\",this.uploadProgress),this[Pi].emit(\"upload-complete\")),e(i)})};this.requestInitialized?t():this[BC].push(t)}_destroy(e,t){var i;this[Jf]=!0,clearTimeout(this[y6]),Pi in this&&(this[dR](),!((i=this[sB])===null||i===void 0)&&i.complete||this[Pi].destroy()),e!==null&&!Ee.default.undefined(e)&&!(e instanceof ei)&&(e=new ei(e.message,e,this)),t(e)}get _isAboutToError(){return this[Jf]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,t,i;return((t=(e=this[Pi])===null||e===void 0?void 0:e.destroyed)!==null&&t!==void 0?t:this.destroyed)&&!(!((i=this[I6])===null||i===void 0)&&i.complete)}get socket(){var e,t;return(t=(e=this[Pi])===null||e===void 0?void 0:e.socket)!==null&&t!==void 0?t:void 0}get downloadProgress(){let e;return this[Gf]?e=this[Yf]/this[Gf]:this[Gf]===this[Yf]?e=1:e=0,{percent:e,transferred:this[Yf],total:this[Gf]}}get uploadProgress(){let e;return this[jf]?e=this[qf]/this[jf]:this[jf]===this[qf]?e=1:e=0,{percent:e,transferred:this[qf],total:this[jf]}}get timings(){var e;return(e=this[Pi])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[m6]}pipe(e,t){if(this[E6])throw new Error(\"Failed to pipe. The response has been emitted already.\");return e instanceof hR.ServerResponse&&this[iB].add(e),super.pipe(e,t)}unpipe(e){return e instanceof hR.ServerResponse&&this[iB].delete(e),super.unpipe(e),this}};Yt.default=gB});var SC=w(Ao=>{\"use strict\";var yDe=Ao&&Ao.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),wDe=Ao&&Ao.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&yDe(e,r,t)};Object.defineProperty(Ao,\"__esModule\",{value:!0});Ao.CancelError=Ao.ParseError=void 0;var w6=QC(),mR=class extends w6.RequestError{constructor(e,t){let{options:i}=t.request;super(`${e.message} in \"${i.url.toString()}\"`,e,t.request),this.name=\"ParseError\"}};Ao.ParseError=mR;var ER=class extends w6.RequestError{constructor(e){super(\"Promise was canceled\",{},e),this.name=\"CancelError\"}get isCanceled(){return!0}};Ao.CancelError=ER;wDe(QC(),Ao)});var b6=w(IR=>{\"use strict\";Object.defineProperty(IR,\"__esModule\",{value:!0});var B6=SC(),BDe=(r,e,t,i)=>{let{rawBody:n}=r;try{if(e===\"text\")return n.toString(i);if(e===\"json\")return n.length===0?\"\":t(n.toString());if(e===\"buffer\")return n;throw new B6.ParseError({message:`Unknown body type '${e}'`,name:\"Error\"},r)}catch(s){throw new B6.ParseError(s,r)}};IR.default=BDe});var yR=w(_A=>{\"use strict\";var bDe=_A&&_A.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),QDe=_A&&_A.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&bDe(e,r,t)};Object.defineProperty(_A,\"__esModule\",{value:!0});var SDe=J(\"events\"),vDe=Ya(),xDe=bz(),fB=SC(),Q6=b6(),S6=QC(),PDe=iR(),DDe=cR(),v6=uR(),kDe=[\"request\",\"response\",\"redirect\",\"uploadProgress\",\"downloadProgress\"];function x6(r){let e,t,i=new SDe.EventEmitter,n=new xDe((o,a,l)=>{let c=u=>{let g=new S6.default(void 0,r);g.retryCount=u,g._noPipe=!0,l(()=>g.destroy()),l.shouldReject=!1,l(()=>a(new fB.CancelError(g))),e=g,g.once(\"response\",async p=>{var C;if(p.retryCount=u,p.request.aborted)return;let y;try{y=await DDe.default(g),p.rawBody=y}catch{return}if(g._isAboutToError)return;let B=((C=p.headers[\"content-encoding\"])!==null&&C!==void 0?C:\"\").toLowerCase(),v=[\"gzip\",\"deflate\",\"br\"].includes(B),{options:D}=g;if(v&&!D.decompress)p.body=y;else try{p.body=Q6.default(p,D.responseType,D.parseJson,D.encoding)}catch(T){if(p.body=y.toString(),v6.isResponseOk(p)){g._beforeError(T);return}}try{for(let[T,H]of D.hooks.afterResponse.entries())p=await H(p,async j=>{let $=S6.default.normalizeArguments(void 0,{...j,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},D);$.hooks.afterResponse=$.hooks.afterResponse.slice(0,T);for(let W of $.hooks.beforeRetry)await W($);let V=x6($);return l(()=>{V.catch(()=>{}),V.cancel()}),V})}catch(T){g._beforeError(new fB.RequestError(T.message,T,g));return}if(!v6.isResponseOk(p)){g._beforeError(new fB.HTTPError(p));return}t=p,o(g.options.resolveBodyOnly?p.body:p)});let f=p=>{if(n.isCanceled)return;let{options:C}=g;if(p instanceof fB.HTTPError&&!C.throwHttpErrors){let{response:y}=p;o(g.options.resolveBodyOnly?y.body:y);return}a(p)};g.once(\"error\",f);let h=g.options.body;g.once(\"retry\",(p,C)=>{var y,B;if(h===((y=C.request)===null||y===void 0?void 0:y.options.body)&&vDe.default.nodeStream((B=C.request)===null||B===void 0?void 0:B.options.body)){f(C);return}c(p)}),PDe.default(g,i,kDe)};c(0)});n.on=(o,a)=>(i.on(o,a),n);let s=o=>{let a=(async()=>{await n;let{options:l}=t.request;return Q6.default(t,o,l.parseJson,l.encoding)})();return Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)),a};return n.json=()=>{let{headers:o}=e.options;return!e.writableFinished&&o.accept===void 0&&(o.accept=\"application/json\"),s(\"json\")},n.buffer=()=>s(\"buffer\"),n.text=()=>s(\"text\"),n}_A.default=x6;QDe(SC(),_A)});var P6=w(wR=>{\"use strict\";Object.defineProperty(wR,\"__esModule\",{value:!0});var RDe=SC();function FDe(r,...e){let t=(async()=>{if(r instanceof RDe.RequestError)try{for(let n of e)if(n)for(let s of n)r=await s(r)}catch(n){r=n}throw r})(),i=()=>t;return t.json=i,t.text=i,t.buffer=i,t.on=i,t}wR.default=FDe});var R6=w(BR=>{\"use strict\";Object.defineProperty(BR,\"__esModule\",{value:!0});var D6=Ya();function k6(r){for(let e of Object.values(r))(D6.default.plainObject(e)||D6.default.array(e))&&k6(e);return Object.freeze(r)}BR.default=k6});var N6=w(F6=>{\"use strict\";Object.defineProperty(F6,\"__esModule\",{value:!0})});var bR=w(Qs=>{\"use strict\";var NDe=Qs&&Qs.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),TDe=Qs&&Qs.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&NDe(e,r,t)};Object.defineProperty(Qs,\"__esModule\",{value:!0});Qs.defaultHandler=void 0;var T6=Ya(),bs=yR(),LDe=P6(),pB=QC(),MDe=R6(),ODe={RequestError:bs.RequestError,CacheError:bs.CacheError,ReadError:bs.ReadError,HTTPError:bs.HTTPError,MaxRedirectsError:bs.MaxRedirectsError,TimeoutError:bs.TimeoutError,ParseError:bs.ParseError,CancelError:bs.CancelError,UnsupportedProtocolError:bs.UnsupportedProtocolError,UploadError:bs.UploadError},KDe=async r=>new Promise(e=>{setTimeout(e,r)}),{normalizeArguments:hB}=pB.default,L6=(...r)=>{let e;for(let t of r)e=hB(void 0,t,e);return e},UDe=r=>r.isStream?new pB.default(void 0,r):bs.default(r),HDe=r=>\"defaults\"in r&&\"options\"in r.defaults,GDe=[\"get\",\"post\",\"put\",\"patch\",\"head\",\"delete\"];Qs.defaultHandler=(r,e)=>e(r);var M6=(r,e)=>{if(r)for(let t of r)t(e)},O6=r=>{r._rawHandlers=r.handlers,r.handlers=r.handlers.map(i=>(n,s)=>{let o,a=i(n,l=>(o=s(l),o));if(a!==o&&!n.isStream&&o){let l=a,{then:c,catch:u,finally:g}=l;Object.setPrototypeOf(l,Object.getPrototypeOf(o)),Object.defineProperties(l,Object.getOwnPropertyDescriptors(o)),l.then=c,l.catch=u,l.finally=g}return a});let e=(i,n={},s)=>{var o,a;let l=0,c=u=>r.handlers[l++](u,l===r.handlers.length?UDe:c);if(T6.default.plainObject(i)){let u={...i,...n};pB.setNonEnumerableProperties([i,n],u),n=u,i=void 0}try{let u;try{M6(r.options.hooks.init,n),M6((o=n.hooks)===null||o===void 0?void 0:o.init,n)}catch(f){u=f}let g=hB(i,n,s!=null?s:r.options);if(g[pB.kIsNormalizedAlready]=!0,u)throw new bs.RequestError(u.message,u,g);return c(g)}catch(u){if(n.isStream)throw u;return LDe.default(u,r.options.hooks.beforeError,(a=n.hooks)===null||a===void 0?void 0:a.beforeError)}};e.extend=(...i)=>{let n=[r.options],s=[...r._rawHandlers],o;for(let a of i)HDe(a)?(n.push(a.defaults.options),s.push(...a.defaults._rawHandlers),o=a.defaults.mutableDefaults):(n.push(a),\"handlers\"in a&&s.push(...a.handlers),o=a.mutableDefaults);return s=s.filter(a=>a!==Qs.defaultHandler),s.length===0&&s.push(Qs.defaultHandler),O6({options:L6(...n),handlers:s,mutableDefaults:Boolean(o)})};let t=async function*(i,n){let s=hB(i,n,r.options);s.resolveBodyOnly=!1;let o=s.pagination;if(!T6.default.object(o))throw new TypeError(\"`options.pagination` must be implemented\");let a=[],{countLimit:l}=o,c=0;for(;c<o.requestLimit;){c!==0&&await KDe(o.backoff);let u=await e(void 0,void 0,s),g=await o.transform(u),f=[];for(let p of g)if(o.filter(p,a,f)&&(!o.shouldContinue(p,a,f)||(yield p,o.stackAllItems&&a.push(p),f.push(p),--l<=0)))return;let h=o.paginate(u,a,f);if(h===!1)return;h===u.request.options?s=u.request.options:h!==void 0&&(s=hB(void 0,h,s)),c++}};e.paginate=t,e.paginate.all=async(i,n)=>{let s=[];for await(let o of t(i,n))s.push(o);return s},e.paginate.each=t,e.stream=(i,n)=>e(i,{...n,isStream:!0});for(let i of GDe)e[i]=(n,s)=>e(n,{...s,method:i}),e.stream[i]=(n,s)=>e(n,{...s,method:i,isStream:!0});return Object.assign(e,ODe),Object.defineProperty(e,\"defaults\",{value:r.mutableDefaults?r:MDe.default(r),writable:r.mutableDefaults,configurable:r.mutableDefaults,enumerable:!0}),e.mergeOptions=L6,e};Qs.default=O6;TDe(N6(),Qs)});var CB=w((ja,dB)=>{\"use strict\";var YDe=ja&&ja.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),K6=ja&&ja.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&YDe(e,r,t)};Object.defineProperty(ja,\"__esModule\",{value:!0});var jDe=J(\"url\"),U6=bR(),qDe={options:{method:\"GET\",retry:{limit:2,methods:[\"GET\",\"PUT\",\"HEAD\",\"DELETE\",\"OPTIONS\",\"TRACE\"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:[\"ETIMEDOUT\",\"ECONNRESET\",\"EADDRINUSE\",\"ECONNREFUSED\",\"EPIPE\",\"ENOTFOUND\",\"ENETUNREACH\",\"EAI_AGAIN\"],maxRetryAfter:void 0,calculateDelay:({computedValue:r})=>r},timeout:{},headers:{\"user-agent\":\"got (https://github.com/sindresorhus/got)\"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:\"text\",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:\"\",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:r=>r.request.options.responseType===\"json\"?r.body:JSON.parse(r.body),paginate:r=>{if(!Reflect.has(r.headers,\"link\"))return!1;let e=r.headers.link.split(\",\"),t;for(let i of e){let n=i.split(\";\");if(n[1].includes(\"next\")){t=n[0].trimStart().trim(),t=t.slice(1,-1);break}}return t?{url:new jDe.URL(t)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:r=>JSON.parse(r),stringifyJson:r=>JSON.stringify(r),cacheOptions:{}},handlers:[U6.defaultHandler],mutableDefaults:!1},QR=U6.default(qDe);ja.default=QR;dB.exports=QR;dB.exports.default=QR;dB.exports.__esModule=!0;K6(bR(),ja);K6(yR(),ja)});var j6=w(Wf=>{\"use strict\";var ost=J(\"net\"),JDe=J(\"tls\"),SR=J(\"http\"),H6=J(\"https\"),WDe=J(\"events\"),ast=J(\"assert\"),zDe=J(\"util\");Wf.httpOverHttp=VDe;Wf.httpsOverHttp=XDe;Wf.httpOverHttps=ZDe;Wf.httpsOverHttps=_De;function VDe(r){var e=new qa(r);return e.request=SR.request,e}function XDe(r){var e=new qa(r);return e.request=SR.request,e.createSocket=G6,e.defaultPort=443,e}function ZDe(r){var e=new qa(r);return e.request=H6.request,e}function _De(r){var e=new qa(r);return e.request=H6.request,e.createSocket=G6,e.defaultPort=443,e}function qa(r){var e=this;e.options=r||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||SR.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on(\"free\",function(i,n,s,o){for(var a=Y6(n,s,o),l=0,c=e.requests.length;l<c;++l){var u=e.requests[l];if(u.host===a.host&&u.port===a.port){e.requests.splice(l,1),u.request.onSocket(i);return}}i.destroy(),e.removeSocket(i)})}zDe.inherits(qa,WDe.EventEmitter);qa.prototype.addRequest=function(e,t,i,n){var s=this,o=vR({request:e},s.options,Y6(t,i,n));if(s.sockets.length>=this.maxSockets){s.requests.push(o);return}s.createSocket(o,function(a){a.on(\"free\",l),a.on(\"close\",c),a.on(\"agentRemove\",c),e.onSocket(a);function l(){s.emit(\"free\",a,o)}function c(u){s.removeSocket(a),a.removeListener(\"free\",l),a.removeListener(\"close\",c),a.removeListener(\"agentRemove\",c)}})};qa.prototype.createSocket=function(e,t){var i=this,n={};i.sockets.push(n);var s=vR({},i.proxyOptions,{method:\"CONNECT\",path:e.host+\":\"+e.port,agent:!1,headers:{host:e.host+\":\"+e.port}});e.localAddress&&(s.localAddress=e.localAddress),s.proxyAuth&&(s.headers=s.headers||{},s.headers[\"Proxy-Authorization\"]=\"Basic \"+new Buffer(s.proxyAuth).toString(\"base64\")),$A(\"making CONNECT request\");var o=i.request(s);o.useChunkedEncodingByDefault=!1,o.once(\"response\",a),o.once(\"upgrade\",l),o.once(\"connect\",c),o.once(\"error\",u),o.end();function a(g){g.upgrade=!0}function l(g,f,h){process.nextTick(function(){c(g,f,h)})}function c(g,f,h){if(o.removeAllListeners(),f.removeAllListeners(),g.statusCode!==200){$A(\"tunneling socket could not be established, statusCode=%d\",g.statusCode),f.destroy();var p=new Error(\"tunneling socket could not be established, statusCode=\"+g.statusCode);p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}if(h.length>0){$A(\"got illegal response body from proxy\"),f.destroy();var p=new Error(\"got illegal response body from proxy\");p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}return $A(\"tunneling connection has established\"),i.sockets[i.sockets.indexOf(n)]=f,t(f)}function u(g){o.removeAllListeners(),$A(`tunneling socket could not be established, cause=%s\n`,g.message,g.stack);var f=new Error(\"tunneling socket could not be established, cause=\"+g.message);f.code=\"ECONNRESET\",e.request.emit(\"error\",f),i.removeSocket(n)}};qa.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var i=this.requests.shift();i&&this.createSocket(i,function(n){i.request.onSocket(n)})}};function G6(r,e){var t=this;qa.prototype.createSocket.call(t,r,function(i){var n=r.request.getHeader(\"host\"),s=vR({},t.options,{socket:i,servername:n?n.replace(/:.*$/,\"\"):r.host}),o=JDe.connect(0,s);t.sockets[t.sockets.indexOf(i)]=o,e(o)})}function Y6(r,e,t){return typeof r==\"string\"?{host:r,port:e,localAddress:t}:r}function vR(r){for(var e=1,t=arguments.length;e<t;++e){var i=arguments[e];if(typeof i==\"object\")for(var n=Object.keys(i),s=0,o=n.length;s<o;++s){var a=n[s];i[a]!==void 0&&(r[a]=i[a])}}return r}var $A;process.env.NODE_DEBUG&&/\\btunnel\\b/.test(process.env.NODE_DEBUG)?$A=function(){var r=Array.prototype.slice.call(arguments);typeof r[0]==\"string\"?r[0]=\"TUNNEL: \"+r[0]:r.unshift(\"TUNNEL:\"),console.error.apply(console,r)}:$A=function(){};Wf.debug=$A});var J6=w((lst,q6)=>{q6.exports=j6()});var iV=w((IB,FR)=>{var rV=Object.assign({},J(\"fs\")),RR=function(){var r=typeof document<\"u\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<\"u\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e<\"u\"?e:{},i,n;t.ready=new Promise(function(d,E){i=d,n=E});var s={},o;for(o in t)t.hasOwnProperty(o)&&(s[o]=t[o]);var a=[],l=\"./this.program\",c=function(d,E){throw E},u=!1,g=!0,f=\"\";function h(d){return t.locateFile?t.locateFile(d,f):f+d}var p,C,y,B;g&&(u?f=J(\"path\").dirname(f)+\"/\":f=__dirname+\"/\",p=function(E,I){var k=Ca(E);return k?I?k:k.toString():(y||(y=rV),B||(B=J(\"path\")),E=B.normalize(E),y.readFileSync(E,I?null:\"utf8\"))},C=function(E){var I=p(E,!0);return I.buffer||(I=new Uint8Array(I)),re(I.buffer),I},process.argv.length>1&&(l=process.argv[1].replace(/\\\\/g,\"/\")),a=process.argv.slice(2),c=function(d){process.exit(d)},t.inspect=function(){return\"[Emscripten Module object]\"});var v=t.print||console.log.bind(console),D=t.printErr||console.warn.bind(console);for(o in s)s.hasOwnProperty(o)&&(t[o]=s[o]);s=null,t.arguments&&(a=t.arguments),t.thisProgram&&(l=t.thisProgram),t.quit&&(c=t.quit);var T=16;function H(d,E){return E||(E=T),Math.ceil(d/E)*E}var j=0,$=function(d){j=d},V;t.wasmBinary&&(V=t.wasmBinary);var W=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&wr(\"no native wasm support detected\");function _(d,E,I){switch(E=E||\"i8\",E.charAt(E.length-1)===\"*\"&&(E=\"i32\"),E){case\"i1\":return ne[d>>0];case\"i8\":return ne[d>>0];case\"i16\":return he[d>>1];case\"i32\":return de[d>>2];case\"i64\":return de[d>>2];case\"float\":return Pt[d>>2];case\"double\":return It[d>>3];default:wr(\"invalid type for getValue: \"+E)}return null}var A,Ae=!1,ge;function re(d,E){d||wr(\"Assertion failed: \"+E)}function M(d){var E=t[\"_\"+d];return re(E,\"Cannot call unknown function \"+d+\", make sure it is exported\"),E}function F(d,E,I,k,L){var Z={string:function(it){var Et=0;if(it!=null&&it!==0){var be=(it.length<<2)+1;Et=b(be),oe(it,Et,be)}return Et},array:function(it){var Et=b(it.length);return fe(it,Et),Et}};function te(it){return E===\"string\"?Fe(it):E===\"boolean\"?Boolean(it):it}var we=M(d),me=[],Je=0;if(k)for(var nt=0;nt<k.length;nt++){var wt=Z[I[nt]];wt?(Je===0&&(Je=YE()),me[nt]=wt(k[nt])):me[nt]=k[nt]}var lt=we.apply(null,me);return lt=te(lt),Je!==0&&jE(Je),lt}function ue(d,E,I,k){I=I||[];var L=I.every(function(te){return te===\"number\"}),Z=E!==\"string\";return Z&&L&&!k?M(d):function(){return F(d,E,I,arguments,k)}}var pe=typeof TextDecoder<\"u\"?new TextDecoder(\"utf8\"):void 0;function ke(d,E,I){for(var k=E+I,L=E;d[L]&&!(L>=k);)++L;if(L-E>16&&d.subarray&&pe)return pe.decode(d.subarray(E,L));for(var Z=\"\";E<L;){var te=d[E++];if(!(te&128)){Z+=String.fromCharCode(te);continue}var we=d[E++]&63;if((te&224)==192){Z+=String.fromCharCode((te&31)<<6|we);continue}var me=d[E++]&63;if((te&240)==224?te=(te&15)<<12|we<<6|me:te=(te&7)<<18|we<<12|me<<6|d[E++]&63,te<65536)Z+=String.fromCharCode(te);else{var Je=te-65536;Z+=String.fromCharCode(55296|Je>>10,56320|Je&1023)}}return Z}function Fe(d,E){return d?ke(Y,d,E):\"\"}function Ne(d,E,I,k){if(!(k>0))return 0;for(var L=I,Z=I+k-1,te=0;te<d.length;++te){var we=d.charCodeAt(te);if(we>=55296&&we<=57343){var me=d.charCodeAt(++te);we=65536+((we&1023)<<10)|me&1023}if(we<=127){if(I>=Z)break;E[I++]=we}else if(we<=2047){if(I+1>=Z)break;E[I++]=192|we>>6,E[I++]=128|we&63}else if(we<=65535){if(I+2>=Z)break;E[I++]=224|we>>12,E[I++]=128|we>>6&63,E[I++]=128|we&63}else{if(I+3>=Z)break;E[I++]=240|we>>18,E[I++]=128|we>>12&63,E[I++]=128|we>>6&63,E[I++]=128|we&63}}return E[I]=0,I-L}function oe(d,E,I){return Ne(d,Y,E,I)}function le(d){for(var E=0,I=0;I<d.length;++I){var k=d.charCodeAt(I);k>=55296&&k<=57343&&(k=65536+((k&1023)<<10)|d.charCodeAt(++I)&1023),k<=127?++E:k<=2047?E+=2:k<=65535?E+=3:E+=4}return E}function Be(d){var E=le(d)+1,I=dt(E);return I&&Ne(d,ne,I,E),I}function fe(d,E){ne.set(d,E)}function ae(d,E){return d%E>0&&(d+=E-d%E),d}var qe,ne,Y,he,ie,de,_e,Pt,It;function Mr(d){qe=d,t.HEAP8=ne=new Int8Array(d),t.HEAP16=he=new Int16Array(d),t.HEAP32=de=new Int32Array(d),t.HEAPU8=Y=new Uint8Array(d),t.HEAPU16=ie=new Uint16Array(d),t.HEAPU32=_e=new Uint32Array(d),t.HEAPF32=Pt=new Float32Array(d),t.HEAPF64=It=new Float64Array(d)}var ii=t.INITIAL_MEMORY||16777216,gi,hr=[],fi=[],ni=[],Ks=!1;function pr(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)fa(t.preRun.shift());wo(hr)}function Ii(){Ks=!0,!t.noFSInit&&!S.init.initialized&&S.init(),ns.init(),wo(fi)}function rs(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)cg(t.postRun.shift());wo(ni)}function fa(d){hr.unshift(d)}function dA(d){fi.unshift(d)}function cg(d){ni.unshift(d)}var is=0,CA=null,ha=null;function wp(d){return d}function mA(d){is++,t.monitorRunDependencies&&t.monitorRunDependencies(is)}function EA(d){if(is--,t.monitorRunDependencies&&t.monitorRunDependencies(is),is==0&&(CA!==null&&(clearInterval(CA),CA=null),ha)){var E=ha;ha=null,E()}}t.preloadedImages={},t.preloadedAudios={};function wr(d){t.onAbort&&t.onAbort(d),d+=\"\",D(d),Ae=!0,ge=1,d=\"abort(\"+d+\"). Build with -s ASSERTIONS=1 for more info.\";var E=new WebAssembly.RuntimeError(d);throw n(E),E}var Tl=\"data:application/octet-stream;base64,\";function ug(d){return d.startsWith(Tl)}var yo=\"data:application/octet-stream;base64,AGFzbQEAAAABlAInYAF/AX9gA39/fwF/YAF/AGACf38Bf2ACf38AYAV/f39/fwF/YAR/f39/AX9gA39/fwBgBH9+f38Bf2AAAX9gBX9/f35/AX5gA39+fwF/YAF/AX5gAn9+AX9gBH9/fn8BfmADf35/AX5gA39/fgF/YAR/f35/AX9gBn9/f39/fwF/YAR/f39/AGADf39+AX5gAn5/AX9gA398fwBgBH9/f38BfmADf39/AX5gBn98f39/fwF/YAV/f35/fwF/YAV/fn9/fwF/YAV/f39/fwBgAn9+AGACf38BfmACf3wAYAh/fn5/f39+fwF/YAV/f39+fwBgAABgBX5+f35/AX5gBX9/f39/AX5gAnx/AXxgAn9+AX4CeRQBYQFhAAIBYQFiAAABYQFjAAMBYQFkAAYBYQFlAAEBYQFmAAABYQFnAAYBYQFoAAABYQFpAAMBYQFqAAMBYQFrAAMBYQFsAAEBYQFtAAABYQFuAAUBYQFvAAEBYQFwAAMBYQFxAAEBYQFyAAABYQFzAAMBYQF0AAADggKAAgcCAgQAAQECAgANBA4EBwICAhwLEw0AFA0dAAAMDAIHHgwQAgIDAwICAQAIAAcIFBUEBgAADAAECAgDAQYAAgIBBgAfFwEBAwITAiAPBgIFEQMFAxgBCAIBAAAHBQEYABoSAQIABwQDIREIAyIGAAEBAwMAIwUbASQHAQsVAQMABQMEAA0bFw0BBAALCwMDDAwAAwAHJQMBAAgaAQECBQMBAgMDAAcHBwICAgImEQsICAsECQoJAgAAAAAAAAkFAAUFBQEGAwYGBgUSBgYBARIBAAIJBgABDgABAQ8ACQEEGQkJCQAAAAMECgoBAQIQAAAAAgEDAwAEAQoFAA4ACQAEBQFwAR8fBQcBAYACgIACBgkBfwFB0KDBAgsHvgI8AXUCAAF2AIABAXcAkwIBeADjAQF5APEBAXoA0QEBQQDQAQFCAM8BAUMAzgEBRADMAQFFAMsBAUYAyQEBRwCSAgFIAJECAUkAjwIBSgCKAgFLAOkBAUwA4gEBTQDhAQFOADwBTwD8AQFQAPkBAVEA+AEBUgDwAQFTAPoBAVQA4AEBVQAVAVYAGAFXAMcBAVgAzQEBWQDfAQFaAN4BAV8A3QEBJADkAQJhYQDcAQJiYQDbAQJjYQDaAQJkYQDZAQJlYQDYAQJmYQDXAQJnYQDqAQJoYQCcAQJpYQDWAQJqYQDVAQJrYQDUAQJsYQAvAm1hABsCbmEAygECb2EASAJwYQEAAnFhAGcCcmEA0wECc2EA6AECdGEA0gECdWEA9wECdmEA9gECd2EA9QECeGEA5wECeWEA5gECemEA5QEJQQEAQQELHsgBkAKNAo4CjAKLArcBiQKIAocChgKFAoQCgwKCAoECgAL/Af4B/QH7AVv0AfMB8gHvAe4B7QHsAesBCu+QCYACQAEBfyMAQRBrIgMgADYCDCADIAE2AgggAyACNgIEIAMoAgwEQCADKAIMIAMoAgg2AgAgAygCDCADKAIENgIECwvMDAEHfwJAIABFDQAgAEEIayIDIABBBGsoAgAiAUF4cSIAaiEFAkAgAUEBcQ0AIAFBA3FFDQEgAyADKAIAIgFrIgNB9JsBKAIASQ0BIAAgAWohACADQfibASgCAEcEQCABQf8BTQRAIAMoAggiAiABQQN2IgRBA3RBjJwBakYaIAIgAygCDCIBRgRAQeSbAUHkmwEoAgBBfiAEd3E2AgAMAwsgAiABNgIMIAEgAjYCCAwCCyADKAIYIQYCQCADIAMoAgwiAUcEQCADKAIIIgIgATYCDCABIAI2AggMAQsCQCADQRRqIgIoAgAiBA0AIANBEGoiAigCACIEDQBBACEBDAELA0AgAiEHIAQiAUEUaiICKAIAIgQNACABQRBqIQIgASgCECIEDQALIAdBADYCAAsgBkUNAQJAIAMgAygCHCICQQJ0QZSeAWoiBCgCAEYEQCAEIAE2AgAgAQ0BQeibAUHomwEoAgBBfiACd3E2AgAMAwsgBkEQQRQgBigCECADRhtqIAE2AgAgAUUNAgsgASAGNgIYIAMoAhAiAgRAIAEgAjYCECACIAE2AhgLIAMoAhQiAkUNASABIAI2AhQgAiABNgIYDAELIAUoAgQiAUEDcUEDRw0AQeybASAANgIAIAUgAUF+cTYCBCADIABBAXI2AgQgACADaiAANgIADwsgAyAFTw0AIAUoAgQiAUEBcUUNAAJAIAFBAnFFBEAgBUH8mwEoAgBGBEBB/JsBIAM2AgBB8JsBQfCbASgCACAAaiIANgIAIAMgAEEBcjYCBCADQfibASgCAEcNA0HsmwFBADYCAEH4mwFBADYCAA8LIAVB+JsBKAIARgRAQfibASADNgIAQeybAUHsmwEoAgAgAGoiADYCACADIABBAXI2AgQgACADaiAANgIADwsgAUF4cSAAaiEAAkAgAUH/AU0EQCAFKAIIIgIgAUEDdiIEQQN0QYycAWpGGiACIAUoAgwiAUYEQEHkmwFB5JsBKAIAQX4gBHdxNgIADAILIAIgATYCDCABIAI2AggMAQsgBSgCGCEGAkAgBSAFKAIMIgFHBEAgBSgCCCICQfSbASgCAEkaIAIgATYCDCABIAI2AggMAQsCQCAFQRRqIgIoAgAiBA0AIAVBEGoiAigCACIEDQBBACEBDAELA0AgAiEHIAQiAUEUaiICKAIAIgQNACABQRBqIQIgASgCECIEDQALIAdBADYCAAsgBkUNAAJAIAUgBSgCHCICQQJ0QZSeAWoiBCgCAEYEQCAEIAE2AgAgAQ0BQeibAUHomwEoAgBBfiACd3E2AgAMAgsgBkEQQRQgBigCECAFRhtqIAE2AgAgAUUNAQsgASAGNgIYIAUoAhAiAgRAIAEgAjYCECACIAE2AhgLIAUoAhQiAkUNACABIAI2AhQgAiABNgIYCyADIABBAXI2AgQgACADaiAANgIAIANB+JsBKAIARw0BQeybASAANgIADwsgBSABQX5xNgIEIAMgAEEBcjYCBCAAIANqIAA2AgALIABB/wFNBEAgAEEDdiIBQQN0QYycAWohAAJ/QeSbASgCACICQQEgAXQiAXFFBEBB5JsBIAEgAnI2AgAgAAwBCyAAKAIICyECIAAgAzYCCCACIAM2AgwgAyAANgIMIAMgAjYCCA8LQR8hAiADQgA3AhAgAEH///8HTQRAIABBCHYiASABQYD+P2pBEHZBCHEiAXQiAiACQYDgH2pBEHZBBHEiAnQiBCAEQYCAD2pBEHZBAnEiBHRBD3YgASACciAEcmsiAUEBdCAAIAFBFWp2QQFxckEcaiECCyADIAI2AhwgAkECdEGUngFqIQECQAJAAkBB6JsBKAIAIgRBASACdCIHcUUEQEHomwEgBCAHcjYCACABIAM2AgAgAyABNgIYDAELIABBAEEZIAJBAXZrIAJBH0YbdCECIAEoAgAhAQNAIAEiBCgCBEF4cSAARg0CIAJBHXYhASACQQF0IQIgBCABQQRxaiIHQRBqKAIAIgENAAsgByADNgIQIAMgBDYCGAsgAyADNgIMIAMgAzYCCAwBCyAEKAIIIgAgAzYCDCAEIAM2AgggA0EANgIYIAMgBDYCDCADIAA2AggLQYScAUGEnAEoAgBBAWsiAEF/IAAbNgIACwtCAQF/IwBBEGsiASQAIAEgADYCDCABKAIMBEAgASgCDC0AAUEBcQRAIAEoAgwoAgQQFQsgASgCDBAVCyABQRBqJAALQwEBfyMAQRBrIgIkACACIAA2AgwgAiABNgIIIAIoAgwCfyMAQRBrIgAgAigCCDYCDCAAKAIMQQxqCxBFIAJBEGokAAuiLgEMfyMAQRBrIgwkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQfQBTQRAQeSbASgCACIFQRAgAEELakF4cSAAQQtJGyIIQQN2IgJ2IgFBA3EEQCABQX9zQQFxIAJqIgNBA3QiAUGUnAFqKAIAIgRBCGohAAJAIAQoAggiAiABQYycAWoiAUYEQEHkmwEgBUF+IAN3cTYCAAwBCyACIAE2AgwgASACNgIICyAEIANBA3QiAUEDcjYCBCABIARqIgEgASgCBEEBcjYCBAwNCyAIQeybASgCACIKTQ0BIAEEQAJAQQIgAnQiAEEAIABrciABIAJ0cSIAQQAgAGtxQQFrIgAgAEEMdkEQcSICdiIBQQV2QQhxIgAgAnIgASAAdiIBQQJ2QQRxIgByIAEgAHYiAUEBdkECcSIAciABIAB2IgFBAXZBAXEiAHIgASAAdmoiA0EDdCIAQZScAWooAgAiBCgCCCIBIABBjJwBaiIARgRAQeSbASAFQX4gA3dxIgU2AgAMAQsgASAANgIMIAAgATYCCAsgBEEIaiEAIAQgCEEDcjYCBCAEIAhqIgIgA0EDdCIBIAhrIgNBAXI2AgQgASAEaiADNgIAIAoEQCAKQQN2IgFBA3RBjJwBaiEHQfibASgCACEEAn8gBUEBIAF0IgFxRQRAQeSbASABIAVyNgIAIAcMAQsgBygCCAshASAHIAQ2AgggASAENgIMIAQgBzYCDCAEIAE2AggLQfibASACNgIAQeybASADNgIADA0LQeibASgCACIGRQ0BIAZBACAGa3FBAWsiACAAQQx2QRBxIgJ2IgFBBXZBCHEiACACciABIAB2IgFBAnZBBHEiAHIgASAAdiIBQQF2QQJxIgByIAEgAHYiAUEBdkEBcSIAciABIAB2akECdEGUngFqKAIAIgEoAgRBeHEgCGshAyABIQIDQAJAIAIoAhAiAEUEQCACKAIUIgBFDQELIAAoAgRBeHEgCGsiAiADIAIgA0kiAhshAyAAIAEgAhshASAAIQIMAQsLIAEgCGoiCSABTQ0CIAEoAhghCyABIAEoAgwiBEcEQCABKAIIIgBB9JsBKAIASRogACAENgIMIAQgADYCCAwMCyABQRRqIgIoAgAiAEUEQCABKAIQIgBFDQQgAUEQaiECCwNAIAIhByAAIgRBFGoiAigCACIADQAgBEEQaiECIAQoAhAiAA0ACyAHQQA2AgAMCwtBfyEIIABBv39LDQAgAEELaiIAQXhxIQhB6JsBKAIAIglFDQBBACAIayEDAkACQAJAAn9BACAIQYACSQ0AGkEfIAhB////B0sNABogAEEIdiIAIABBgP4/akEQdkEIcSICdCIAIABBgOAfakEQdkEEcSIBdCIAIABBgIAPakEQdkECcSIAdEEPdiABIAJyIAByayIAQQF0IAggAEEVanZBAXFyQRxqCyIFQQJ0QZSeAWooAgAiAkUEQEEAIQAMAQtBACEAIAhBAEEZIAVBAXZrIAVBH0YbdCEBA0ACQCACKAIEQXhxIAhrIgcgA08NACACIQQgByIDDQBBACEDIAIhAAwDCyAAIAIoAhQiByAHIAIgAUEddkEEcWooAhAiAkYbIAAgBxshACABQQF0IQEgAg0ACwsgACAEckUEQEECIAV0IgBBACAAa3IgCXEiAEUNAyAAQQAgAGtxQQFrIgAgAEEMdkEQcSICdiIBQQV2QQhxIgAgAnIgASAAdiIBQQJ2QQRxIgByIAEgAHYiAUEBdkECcSIAciABIAB2IgFBAXZBAXEiAHIgASAAdmpBAnRBlJ4BaigCACEACyAARQ0BCwNAIAAoAgRBeHEgCGsiASADSSECIAEgAyACGyEDIAAgBCACGyEEIAAoAhAiAQR/IAEFIAAoAhQLIgANAAsLIARFDQAgA0HsmwEoAgAgCGtPDQAgBCAIaiIGIARNDQEgBCgCGCEFIAQgBCgCDCIBRwRAIAQoAggiAEH0mwEoAgBJGiAAIAE2AgwgASAANgIIDAoLIARBFGoiAigCACIARQRAIAQoAhAiAEUNBCAEQRBqIQILA0AgAiEHIAAiAUEUaiICKAIAIgANACABQRBqIQIgASgCECIADQALIAdBADYCAAwJCyAIQeybASgCACICTQRAQfibASgCACEDAkAgAiAIayIBQRBPBEBB7JsBIAE2AgBB+JsBIAMgCGoiADYCACAAIAFBAXI2AgQgAiADaiABNgIAIAMgCEEDcjYCBAwBC0H4mwFBADYCAEHsmwFBADYCACADIAJBA3I2AgQgAiADaiIAIAAoAgRBAXI2AgQLIANBCGohAAwLCyAIQfCbASgCACIGSQRAQfCbASAGIAhrIgE2AgBB/JsBQfybASgCACICIAhqIgA2AgAgACABQQFyNgIEIAIgCEEDcjYCBCACQQhqIQAMCwtBACEAIAhBL2oiCQJ/QbyfASgCAARAQcSfASgCAAwBC0HInwFCfzcCAEHAnwFCgKCAgICABDcCAEG8nwEgDEEMakFwcUHYqtWqBXM2AgBB0J8BQQA2AgBBoJ8BQQA2AgBBgCALIgFqIgVBACABayIHcSICIAhNDQpBnJ8BKAIAIgQEQEGUnwEoAgAiAyACaiIBIANNDQsgASAESw0LC0GgnwEtAABBBHENBQJAAkBB/JsBKAIAIgMEQEGknwEhAANAIAMgACgCACIBTwRAIAEgACgCBGogA0sNAwsgACgCCCIADQALC0EAED4iAUF/Rg0GIAIhBUHAnwEoAgAiA0EBayIAIAFxBEAgAiABayAAIAFqQQAgA2txaiEFCyAFIAhNDQYgBUH+////B0sNBkGcnwEoAgAiBARAQZSfASgCACIDIAVqIgAgA00NByAAIARLDQcLIAUQPiIAIAFHDQEMCAsgBSAGayAHcSIFQf7///8HSw0FIAUQPiIBIAAoAgAgACgCBGpGDQQgASEACwJAIABBf0YNACAIQTBqIAVNDQBBxJ8BKAIAIgEgCSAFa2pBACABa3EiAUH+////B0sEQCAAIQEMCAsgARA+QX9HBEAgASAFaiEFIAAhAQwIC0EAIAVrED4aDAULIAAiAUF/Rw0GDAQLAAtBACEEDAcLQQAhAQwFCyABQX9HDQILQaCfAUGgnwEoAgBBBHI2AgALIAJB/v///wdLDQEgAhA+IQFBABA+IQAgAUF/Rg0BIABBf0YNASAAIAFNDQEgACABayIFIAhBKGpNDQELQZSfAUGUnwEoAgAgBWoiADYCAEGYnwEoAgAgAEkEQEGYnwEgADYCAAsCQAJAAkBB/JsBKAIAIgcEQEGknwEhAANAIAEgACgCACIDIAAoAgQiAmpGDQIgACgCCCIADQALDAILQfSbASgCACIAQQAgACABTRtFBEBB9JsBIAE2AgALQQAhAEGonwEgBTYCAEGknwEgATYCAEGEnAFBfzYCAEGInAFBvJ8BKAIANgIAQbCfAUEANgIAA0AgAEEDdCIDQZScAWogA0GMnAFqIgI2AgAgA0GYnAFqIAI2AgAgAEEBaiIAQSBHDQALQfCbASAFQShrIgNBeCABa0EHcUEAIAFBCGpBB3EbIgBrIgI2AgBB/JsBIAAgAWoiADYCACAAIAJBAXI2AgQgASADakEoNgIEQYCcAUHMnwEoAgA2AgAMAgsgAC0ADEEIcQ0AIAMgB0sNACABIAdNDQAgACACIAVqNgIEQfybASAHQXggB2tBB3FBACAHQQhqQQdxGyIAaiICNgIAQfCbAUHwmwEoAgAgBWoiASAAayIANgIAIAIgAEEBcjYCBCABIAdqQSg2AgRBgJwBQcyfASgCADYCAAwBC0H0mwEoAgAgAUsEQEH0mwEgATYCAAsgASAFaiECQaSfASEAAkACQAJAAkACQAJAA0AgAiAAKAIARwRAIAAoAggiAA0BDAILCyAALQAMQQhxRQ0BC0GknwEhAANAIAcgACgCACICTwRAIAIgACgCBGoiBCAHSw0DCyAAKAIIIQAMAAsACyAAIAE2AgAgACAAKAIEIAVqNgIEIAFBeCABa0EHcUEAIAFBCGpBB3EbaiIJIAhBA3I2AgQgAkF4IAJrQQdxQQAgAkEIakEHcRtqIgUgCCAJaiIGayECIAUgB0YEQEH8mwEgBjYCAEHwmwFB8JsBKAIAIAJqIgA2AgAgBiAAQQFyNgIEDAMLIAVB+JsBKAIARgRAQfibASAGNgIAQeybAUHsmwEoAgAgAmoiADYCACAGIABBAXI2AgQgACAGaiAANgIADAMLIAUoAgQiAEEDcUEBRgRAIABBeHEhBwJAIABB/wFNBEAgBSgCCCIDIABBA3YiAEEDdEGMnAFqRhogAyAFKAIMIgFGBEBB5JsBQeSbASgCAEF+IAB3cTYCAAwCCyADIAE2AgwgASADNgIIDAELIAUoAhghCAJAIAUgBSgCDCIBRwRAIAUoAggiACABNgIMIAEgADYCCAwBCwJAIAVBFGoiACgCACIDDQAgBUEQaiIAKAIAIgMNAEEAIQEMAQsDQCAAIQQgAyIBQRRqIgAoAgAiAw0AIAFBEGohACABKAIQIgMNAAsgBEEANgIACyAIRQ0AAkAgBSAFKAIcIgNBAnRBlJ4BaiIAKAIARgRAIAAgATYCACABDQFB6JsBQeibASgCAEF+IAN3cTYCAAwCCyAIQRBBFCAIKAIQIAVGG2ogATYCACABRQ0BCyABIAg2AhggBSgCECIABEAgASAANgIQIAAgATYCGAsgBSgCFCIARQ0AIAEgADYCFCAAIAE2AhgLIAUgB2ohBSACIAdqIQILIAUgBSgCBEF+cTYCBCAGIAJBAXI2AgQgAiAGaiACNgIAIAJB/wFNBEAgAkEDdiIAQQN0QYycAWohAgJ/QeSbASgCACIBQQEgAHQiAHFFBEBB5JsBIAAgAXI2AgAgAgwBCyACKAIICyEAIAIgBjYCCCAAIAY2AgwgBiACNgIMIAYgADYCCAwDC0EfIQAgAkH///8HTQRAIAJBCHYiACAAQYD+P2pBEHZBCHEiA3QiACAAQYDgH2pBEHZBBHEiAXQiACAAQYCAD2pBEHZBAnEiAHRBD3YgASADciAAcmsiAEEBdCACIABBFWp2QQFxckEcaiEACyAGIAA2AhwgBkIANwIQIABBAnRBlJ4BaiEEAkBB6JsBKAIAIgNBASAAdCIBcUUEQEHomwEgASADcjYCACAEIAY2AgAgBiAENgIYDAELIAJBAEEZIABBAXZrIABBH0YbdCEAIAQoAgAhAQNAIAEiAygCBEF4cSACRg0DIABBHXYhASAAQQF0IQAgAyABQQRxaiIEKAIQIgENAAsgBCAGNgIQIAYgAzYCGAsgBiAGNgIMIAYgBjYCCAwCC0HwmwEgBUEoayIDQXggAWtBB3FBACABQQhqQQdxGyIAayICNgIAQfybASAAIAFqIgA2AgAgACACQQFyNgIEIAEgA2pBKDYCBEGAnAFBzJ8BKAIANgIAIAcgBEEnIARrQQdxQQAgBEEna0EHcRtqQS9rIgAgACAHQRBqSRsiAkEbNgIEIAJBrJ8BKQIANwIQIAJBpJ8BKQIANwIIQayfASACQQhqNgIAQaifASAFNgIAQaSfASABNgIAQbCfAUEANgIAIAJBGGohAANAIABBBzYCBCAAQQhqIQEgAEEEaiEAIAEgBEkNAAsgAiAHRg0DIAIgAigCBEF+cTYCBCAHIAIgB2siBEEBcjYCBCACIAQ2AgAgBEH/AU0EQCAEQQN2IgBBA3RBjJwBaiECAn9B5JsBKAIAIgFBASAAdCIAcUUEQEHkmwEgACABcjYCACACDAELIAIoAggLIQAgAiAHNgIIIAAgBzYCDCAHIAI2AgwgByAANgIIDAQLQR8hACAHQgA3AhAgBEH///8HTQRAIARBCHYiACAAQYD+P2pBEHZBCHEiAnQiACAAQYDgH2pBEHZBBHEiAXQiACAAQYCAD2pBEHZBAnEiAHRBD3YgASACciAAcmsiAEEBdCAEIABBFWp2QQFxckEcaiEACyAHIAA2AhwgAEECdEGUngFqIQMCQEHomwEoAgAiAkEBIAB0IgFxRQRAQeibASABIAJyNgIAIAMgBzYCACAHIAM2AhgMAQsgBEEAQRkgAEEBdmsgAEEfRht0IQAgAygCACEBA0AgASICKAIEQXhxIARGDQQgAEEddiEBIABBAXQhACACIAFBBHFqIgMoAhAiAQ0ACyADIAc2AhAgByACNgIYCyAHIAc2AgwgByAHNgIIDAMLIAMoAggiACAGNgIMIAMgBjYCCCAGQQA2AhggBiADNgIMIAYgADYCCAsgCUEIaiEADAULIAIoAggiACAHNgIMIAIgBzYCCCAHQQA2AhggByACNgIMIAcgADYCCAtB8JsBKAIAIgAgCE0NAEHwmwEgACAIayIBNgIAQfybAUH8mwEoAgAiAiAIaiIANgIAIAAgAUEBcjYCBCACIAhBA3I2AgQgAkEIaiEADAMLQbSbAUEwNgIAQQAhAAwCCwJAIAVFDQACQCAEKAIcIgJBAnRBlJ4BaiIAKAIAIARGBEAgACABNgIAIAENAUHomwEgCUF+IAJ3cSIJNgIADAILIAVBEEEUIAUoAhAgBEYbaiABNgIAIAFFDQELIAEgBTYCGCAEKAIQIgAEQCABIAA2AhAgACABNgIYCyAEKAIUIgBFDQAgASAANgIUIAAgATYCGAsCQCADQQ9NBEAgBCADIAhqIgBBA3I2AgQgACAEaiIAIAAoAgRBAXI2AgQMAQsgBCAIQQNyNgIEIAYgA0EBcjYCBCADIAZqIAM2AgAgA0H/AU0EQCADQQN2IgBBA3RBjJwBaiECAn9B5JsBKAIAIgFBASAAdCIAcUUEQEHkmwEgACABcjYCACACDAELIAIoAggLIQAgAiAGNgIIIAAgBjYCDCAGIAI2AgwgBiAANgIIDAELQR8hACADQf///wdNBEAgA0EIdiIAIABBgP4/akEQdkEIcSICdCIAIABBgOAfakEQdkEEcSIBdCIAIABBgIAPakEQdkECcSIAdEEPdiABIAJyIAByayIAQQF0IAMgAEEVanZBAXFyQRxqIQALIAYgADYCHCAGQgA3AhAgAEECdEGUngFqIQICQAJAIAlBASAAdCIBcUUEQEHomwEgASAJcjYCACACIAY2AgAgBiACNgIYDAELIANBAEEZIABBAXZrIABBH0YbdCEAIAIoAgAhCANAIAgiASgCBEF4cSADRg0CIABBHXYhAiAAQQF0IQAgASACQQRxaiICKAIQIggNAAsgAiAGNgIQIAYgATYCGAsgBiAGNgIMIAYgBjYCCAwBCyABKAIIIgAgBjYCDCABIAY2AgggBkEANgIYIAYgATYCDCAGIAA2AggLIARBCGohAAwBCwJAIAtFDQACQCABKAIcIgJBAnRBlJ4BaiIAKAIAIAFGBEAgACAENgIAIAQNAUHomwEgBkF+IAJ3cTYCAAwCCyALQRBBFCALKAIQIAFGG2ogBDYCACAERQ0BCyAEIAs2AhggASgCECIABEAgBCAANgIQIAAgBDYCGAsgASgCFCIARQ0AIAQgADYCFCAAIAQ2AhgLAkAgA0EPTQRAIAEgAyAIaiIAQQNyNgIEIAAgAWoiACAAKAIEQQFyNgIEDAELIAEgCEEDcjYCBCAJIANBAXI2AgQgAyAJaiADNgIAIAoEQCAKQQN2IgBBA3RBjJwBaiEEQfibASgCACECAn9BASAAdCIAIAVxRQRAQeSbASAAIAVyNgIAIAQMAQsgBCgCCAshACAEIAI2AgggACACNgIMIAIgBDYCDCACIAA2AggLQfibASAJNgIAQeybASADNgIACyABQQhqIQALIAxBEGokACAAC4MEAQN/IAJBgARPBEAgACABIAIQCxogAA8LIAAgAmohAwJAIAAgAXNBA3FFBEACQCAAQQNxRQRAIAAhAgwBCyACQQFIBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICQQNxRQ0BIAIgA0kNAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAvBGAECfyMAQRBrIgQkACAEIAA2AgwgBCABNgIIIAQgAjYCBCAEKAIMIQAgBCgCCCECIAQoAgQhAyMAQSBrIgEkACABIAA2AhggASACNgIUIAEgAzYCEAJAIAEoAhRFBEAgAUEANgIcDAELIAFBATYCDCABLQAMBEAgASgCFCECIAEoAhAhAyMAQSBrIgAgASgCGDYCHCAAIAI2AhggACADNgIUIAAgACgCHDYCECAAIAAoAhBBf3M2AhADQCAAKAIUBH8gACgCGEEDcUEARwVBAAtBAXEEQCAAKAIQIQIgACAAKAIYIgNBAWo2AhggACADLQAAIAJzQf8BcUECdEGgGWooAgAgACgCEEEIdnM2AhAgACAAKAIUQQFrNgIUDAELCyAAIAAoAhg2AgwDQCAAKAIUQSBPBEAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGgGWooAgAgACgCEEEQdkH/AXFBAnRBoCFqKAIAIAAoAhBB/wFxQQJ0QaAxaigCACAAKAIQQQh2Qf8BcUECdEGgKWooAgBzc3M2AhAgACAAKAIUQSBrNgIUDAELCwNAIAAoAhRBBE8EQCAAIAAoAgwiAkEEajYCDCAAIAIoAgAgACgCEHM2AhAgACAAKAIQQRh2QQJ0QaAZaigCACAAKAIQQRB2Qf8BcUECdEGgIWooAgAgACgCEEH/AXFBAnRBoDFqKAIAIAAoAhBBCHZB/wFxQQJ0QaApaigCAHNzczYCECAAIAAoAhRBBGs2AhQMAQsLIAAgACgCDDYCGCAAKAIUBEADQCAAKAIQIQIgACAAKAIYIgNBAWo2AhggACADLQAAIAJzQf8BcUECdEGgGWooAgAgACgCEEEIdnM2AhAgACAAKAIUQQFrIgI2AhQgAg0ACwsgACAAKAIQQX9zNgIQIAEgACgCEDYCHAwBCyABKAIUIQIgASgCECEDIwBBIGsiACABKAIYNgIcIAAgAjYCGCAAIAM2AhQgACAAKAIcQQh2QYD+A3EgACgCHEEYdmogACgCHEGA/gNxQQh0aiAAKAIcQf8BcUEYdGo2AhAgACAAKAIQQX9zNgIQA0AgACgCFAR/IAAoAhhBA3FBAEcFQQALQQFxBEAgACgCEEEYdiECIAAgACgCGCIDQQFqNgIYIAAgAy0AACACc0ECdEGgOWooAgAgACgCEEEIdHM2AhAgACAAKAIUQQFrNgIUDAELCyAAIAAoAhg2AgwDQCAAKAIUQSBPBEAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIMIgJBBGo2AgwgACACKAIAIAAoAhBzNgIQIAAgACgCEEEYdkECdEGg0QBqKAIAIAAoAhBBEHZB/wFxQQJ0QaDJAGooAgAgACgCEEH/AXFBAnRBoDlqKAIAIAAoAhBBCHZB/wFxQQJ0QaDBAGooAgBzc3M2AhAgACAAKAIUQSBrNgIUDAELCwNAIAAoAhRBBE8EQCAAIAAoAgwiAkEEajYCDCAAIAIoAgAgACgCEHM2AhAgACAAKAIQQRh2QQJ0QaDRAGooAgAgACgCEEEQdkH/AXFBAnRBoMkAaigCACAAKAIQQf8BcUECdEGgOWooAgAgACgCEEEIdkH/AXFBAnRBoMEAaigCAHNzczYCECAAIAAoAhRBBGs2AhQMAQsLIAAgACgCDDYCGCAAKAIUBEADQCAAKAIQQRh2IQIgACAAKAIYIgNBAWo2AhggACADLQAAIAJzQQJ0QaA5aigCACAAKAIQQQh0czYCECAAIAAoAhRBAWsiAjYCFCACDQALCyAAIAAoAhBBf3M2AhAgASAAKAIQQQh2QYD+A3EgACgCEEEYdmogACgCEEGA/gNxQQh0aiAAKAIQQf8BcUEYdGo2AhwLIAEoAhwhACABQSBqJAAgBEEQaiQAIAAL7AIBAn8jAEEQayIBJAAgASAANgIMAkAgASgCDEUNACABKAIMKAIwBEAgASgCDCIAIAAoAjBBAWs2AjALIAEoAgwoAjANACABKAIMKAIgBEAgASgCDEEBNgIgIAEoAgwQLxoLIAEoAgwoAiRBAUYEQCABKAIMEGILAkAgASgCDCgCLEUNACABKAIMLQAoQQFxDQAgASgCDCECIwBBEGsiACABKAIMKAIsNgIMIAAgAjYCCCAAQQA2AgQDQCAAKAIEIAAoAgwoAkRJBEAgACgCDCgCTCAAKAIEQQJ0aigCACAAKAIIRgRAIAAoAgwoAkwgACgCBEECdGogACgCDCgCTCAAKAIMKAJEQQFrQQJ0aigCADYCACAAKAIMIgAgACgCREEBazYCRAUgACAAKAIEQQFqNgIEDAILCwsLIAEoAgxBAEIAQQUQIBogASgCDCgCAARAIAEoAgwoAgAQGwsgASgCDBAVCyABQRBqJAALnwIBAn8jAEEQayIBJAAgASAANgIMIAEgASgCDCgCHDYCBCABKAIEIQIjAEEQayIAJAAgACACNgIMIAAoAgwQvAEgAEEQaiQAIAEgASgCBCgCFDYCCCABKAIIIAEoAgwoAhBLBEAgASABKAIMKAIQNgIICwJAIAEoAghFDQAgASgCDCgCDCABKAIEKAIQIAEoAggQGRogASgCDCIAIAEoAgggACgCDGo2AgwgASgCBCIAIAEoAgggACgCEGo2AhAgASgCDCIAIAEoAgggACgCFGo2AhQgASgCDCIAIAAoAhAgASgCCGs2AhAgASgCBCIAIAAoAhQgASgCCGs2AhQgASgCBCgCFA0AIAEoAgQgASgCBCgCCDYCEAsgAUEQaiQAC2ABAX8jAEEQayIBJAAgASAANgIIIAEgASgCCEICEB42AgQCQCABKAIERQRAIAFBADsBDgwBCyABIAEoAgQtAAAgASgCBC0AAUEIdGo7AQ4LIAEvAQ4hACABQRBqJAAgAAvpAQEBfyMAQSBrIgIkACACIAA2AhwgAiABNwMQIAIpAxAhASMAQSBrIgAgAigCHDYCGCAAIAE3AxACQAJAAkAgACgCGC0AAEEBcUUNACAAKQMQIAAoAhgpAxAgACkDEHxWDQAgACgCGCkDCCAAKAIYKQMQIAApAxB8Wg0BCyAAKAIYQQA6AAAgAEEANgIcDAELIAAgACgCGCgCBCAAKAIYKQMQp2o2AgwgACAAKAIMNgIcCyACIAAoAhw2AgwgAigCDARAIAIoAhwiACACKQMQIAApAxB8NwMQCyACKAIMIQAgAkEgaiQAIAALbwEBfyMAQRBrIgIkACACIAA2AgggAiABOwEGIAIgAigCCEICEB42AgACQCACKAIARQRAIAJBfzYCDAwBCyACKAIAIAIvAQY6AAAgAigCACACLwEGQQh2OgABIAJBADYCDAsgAigCDBogAkEQaiQAC7YCAQF/IwBBMGsiBCQAIAQgADYCJCAEIAE2AiAgBCACNwMYIAQgAzYCFAJAIAQoAiQpAxhCASAEKAIUrYaDUARAIAQoAiRBDGpBHEEAEBQgBEJ/NwMoDAELAkAgBCgCJCgCAEUEQCAEIAQoAiQoAgggBCgCICAEKQMYIAQoAhQgBCgCJCgCBBEOADcDCAwBCyAEIAQoAiQoAgAgBCgCJCgCCCAEKAIgIAQpAxggBCgCFCAEKAIkKAIEEQoANwMICyAEKQMIQgBTBEACQCAEKAIUQQRGDQAgBCgCFEEORg0AAkAgBCgCJCAEQghBBBAgQgBTBEAgBCgCJEEMakEUQQAQFAwBCyAEKAIkQQxqIAQoAgAgBCgCBBAUCwsLIAQgBCkDCDcDKAsgBCkDKCECIARBMGokACACC48BAQF/IwBBEGsiAiQAIAIgADYCCCACIAE2AgQgAiACKAIIQgQQHjYCAAJAIAIoAgBFBEAgAkF/NgIMDAELIAIoAgAgAigCBDoAACACKAIAIAIoAgRBCHY6AAEgAigCACACKAIEQRB2OgACIAIoAgAgAigCBEEYdjoAAyACQQA2AgwLIAIoAgwaIAJBEGokAAsXACAALQAAQSBxRQRAIAEgAiAAEHEaCwtQAQF/IwBBEGsiASQAIAEgADYCDANAIAEoAgwEQCABIAEoAgwoAgA2AgggASgCDCgCDBAVIAEoAgwQFSABIAEoAgg2AgwMAQsLIAFBEGokAAs+AQF/IwBBEGsiASQAIAEgADYCDCABKAIMBEAgASgCDCgCABAVIAEoAgwoAgwQFSABKAIMEBULIAFBEGokAAt9AQF/IwBBEGsiASQAIAEgADYCDCABKAIMBEAgAUIANwMAA0AgASkDACABKAIMKQMIWkUEQCABKAIMKAIAIAEpAwCnQQR0ahB3IAEgASkDAEIBfDcDAAwBCwsgASgCDCgCABAVIAEoAgwoAigQJCABKAIMEBULIAFBEGokAAtuAQF/IwBBgAJrIgUkAAJAIARBgMAEcQ0AIAIgA0wNACAFIAFB/wFxIAIgA2siAkGAAiACQYACSSIBGxAzIAFFBEADQCAAIAVBgAIQIiACQYACayICQf8BSw0ACwsgACAFIAIQIgsgBUGAAmokAAvRAQEBfyMAQTBrIgMkACADIAA2AiggAyABNwMgIAMgAjYCHAJAIAMoAigtAChBAXEEQCADQX82AiwMAQsCQCADKAIoKAIgBEAgAygCHEUNASADKAIcQQFGDQEgAygCHEECRg0BCyADKAIoQQxqQRJBABAUIANBfzYCLAwBCyADIAMpAyA3AwggAyADKAIcNgIQIAMoAiggA0EIakIQQQYQIEIAUwRAIANBfzYCLAwBCyADKAIoQQA6ADQgA0EANgIsCyADKAIsIQAgA0EwaiQAIAALmBcBAn8jAEEwayIEJAAgBCAANgIsIAQgATYCKCAEIAI2AiQgBCADNgIgIARBADYCFAJAIAQoAiwoAoQBQQBKBEAgBCgCLCgCACgCLEECRgRAIwBBEGsiACAEKAIsNgIIIABB/4D/n382AgQgAEEANgIAAkADQCAAKAIAQR9MBEACQCAAKAIEQQFxRQ0AIAAoAghBlAFqIAAoAgBBAnRqLwEARQ0AIABBADYCDAwDCyAAIAAoAgBBAWo2AgAgACAAKAIEQQF2NgIEDAELCwJAAkAgACgCCC8BuAENACAAKAIILwG8AQ0AIAAoAggvAcgBRQ0BCyAAQQE2AgwMAQsgAEEgNgIAA0AgACgCAEGAAkgEQCAAKAIIQZQBaiAAKAIAQQJ0ai8BAARAIABBATYCDAwDBSAAIAAoAgBBAWo2AgAMAgsACwsgAEEANgIMCyAAKAIMIQAgBCgCLCgCACAANgIsCyAEKAIsIAQoAixBmBZqEHogBCgCLCAEKAIsQaQWahB6IAQoAiwhASMAQRBrIgAkACAAIAE2AgwgACgCDCAAKAIMQZQBaiAAKAIMKAKcFhC6ASAAKAIMIAAoAgxBiBNqIAAoAgwoAqgWELoBIAAoAgwgACgCDEGwFmoQeiAAQRI2AggDQAJAIAAoAghBA0gNACAAKAIMQfwUaiAAKAIILQDgbEECdGovAQINACAAIAAoAghBAWs2AggMAQsLIAAoAgwiASABKAKoLSAAKAIIQQNsQRFqajYCqC0gACgCCCEBIABBEGokACAEIAE2AhQgBCAEKAIsKAKoLUEKakEDdjYCHCAEIAQoAiwoAqwtQQpqQQN2NgIYIAQoAhggBCgCHE0EQCAEIAQoAhg2AhwLDAELIAQgBCgCJEEFaiIANgIYIAQgADYCHAsCQAJAIAQoAhwgBCgCJEEEakkNACAEKAIoRQ0AIAQoAiwgBCgCKCAEKAIkIAQoAiAQXQwBCwJAAkAgBCgCLCgCiAFBBEcEQCAEKAIYIAQoAhxHDQELIARBAzYCEAJAIAQoAiwoArwtQRAgBCgCEGtKBEAgBCAEKAIgQQJqNgIMIAQoAiwiACAALwG4LSAEKAIMQf//A3EgBCgCLCgCvC10cjsBuC0gBCgCLC8BuC1B/wFxIQEgBCgCLCgCCCECIAQoAiwiAygCFCEAIAMgAEEBajYCFCAAIAJqIAE6AAAgBCgCLC8BuC1BCHYhASAEKAIsKAIIIQIgBCgCLCIDKAIUIQAgAyAAQQFqNgIUIAAgAmogAToAACAEKAIsIAQoAgxB//8DcUEQIAQoAiwoArwta3U7AbgtIAQoAiwiACAAKAK8LSAEKAIQQRBrajYCvC0MAQsgBCgCLCIAIAAvAbgtIAQoAiBBAmpB//8DcSAEKAIsKAK8LXRyOwG4LSAEKAIsIgAgBCgCECAAKAK8LWo2ArwtCyAEKAIsQZDgAEGQ6QAQuwEMAQsgBEEDNgIIAkAgBCgCLCgCvC1BECAEKAIIa0oEQCAEIAQoAiBBBGo2AgQgBCgCLCIAIAAvAbgtIAQoAgRB//8DcSAEKAIsKAK8LXRyOwG4LSAEKAIsLwG4LUH/AXEhASAEKAIsKAIIIQIgBCgCLCIDKAIUIQAgAyAAQQFqNgIUIAAgAmogAToAACAEKAIsLwG4LUEIdiEBIAQoAiwoAgghAiAEKAIsIgMoAhQhACADIABBAWo2AhQgACACaiABOgAAIAQoAiwgBCgCBEH//wNxQRAgBCgCLCgCvC1rdTsBuC0gBCgCLCIAIAAoArwtIAQoAghBEGtqNgK8LQwBCyAEKAIsIgAgAC8BuC0gBCgCIEEEakH//wNxIAQoAiwoArwtdHI7AbgtIAQoAiwiACAEKAIIIAAoArwtajYCvC0LIAQoAiwhASAEKAIsKAKcFkEBaiECIAQoAiwoAqgWQQFqIQMgBCgCFEEBaiEFIwBBQGoiACQAIAAgATYCPCAAIAI2AjggACADNgI0IAAgBTYCMCAAQQU2AigCQCAAKAI8KAK8LUEQIAAoAihrSgRAIAAgACgCOEGBAms2AiQgACgCPCIBIAEvAbgtIAAoAiRB//8DcSAAKAI8KAK8LXRyOwG4LSAAKAI8LwG4LUH/AXEhAiAAKAI8KAIIIQMgACgCPCIFKAIUIQEgBSABQQFqNgIUIAEgA2ogAjoAACAAKAI8LwG4LUEIdiECIAAoAjwoAgghAyAAKAI8IgUoAhQhASAFIAFBAWo2AhQgASADaiACOgAAIAAoAjwgACgCJEH//wNxQRAgACgCPCgCvC1rdTsBuC0gACgCPCIBIAEoArwtIAAoAihBEGtqNgK8LQwBCyAAKAI8IgEgAS8BuC0gACgCOEGBAmtB//8DcSAAKAI8KAK8LXRyOwG4LSAAKAI8IgEgACgCKCABKAK8LWo2ArwtCyAAQQU2AiACQCAAKAI8KAK8LUEQIAAoAiBrSgRAIAAgACgCNEEBazYCHCAAKAI8IgEgAS8BuC0gACgCHEH//wNxIAAoAjwoArwtdHI7AbgtIAAoAjwvAbgtQf8BcSECIAAoAjwoAgghAyAAKAI8IgUoAhQhASAFIAFBAWo2AhQgASADaiACOgAAIAAoAjwvAbgtQQh2IQIgACgCPCgCCCEDIAAoAjwiBSgCFCEBIAUgAUEBajYCFCABIANqIAI6AAAgACgCPCAAKAIcQf//A3FBECAAKAI8KAK8LWt1OwG4LSAAKAI8IgEgASgCvC0gACgCIEEQa2o2ArwtDAELIAAoAjwiASABLwG4LSAAKAI0QQFrQf//A3EgACgCPCgCvC10cjsBuC0gACgCPCIBIAAoAiAgASgCvC1qNgK8LQsgAEEENgIYAkAgACgCPCgCvC1BECAAKAIYa0oEQCAAIAAoAjBBBGs2AhQgACgCPCIBIAEvAbgtIAAoAhRB//8DcSAAKAI8KAK8LXRyOwG4LSAAKAI8LwG4LUH/AXEhAiAAKAI8KAIIIQMgACgCPCIFKAIUIQEgBSABQQFqNgIUIAEgA2ogAjoAACAAKAI8LwG4LUEIdiECIAAoAjwoAgghAyAAKAI8IgUoAhQhASAFIAFBAWo2AhQgASADaiACOgAAIAAoAjwgACgCFEH//wNxQRAgACgCPCgCvC1rdTsBuC0gACgCPCIBIAEoArwtIAAoAhhBEGtqNgK8LQwBCyAAKAI8IgEgAS8BuC0gACgCMEEEa0H//wNxIAAoAjwoArwtdHI7AbgtIAAoAjwiASAAKAIYIAEoArwtajYCvC0LIABBADYCLANAIAAoAiwgACgCMEgEQCAAQQM2AhACQCAAKAI8KAK8LUEQIAAoAhBrSgRAIAAgACgCPEH8FGogACgCLC0A4GxBAnRqLwECNgIMIAAoAjwiASABLwG4LSAAKAIMQf//A3EgACgCPCgCvC10cjsBuC0gACgCPC8BuC1B/wFxIQIgACgCPCgCCCEDIAAoAjwiBSgCFCEBIAUgAUEBajYCFCABIANqIAI6AAAgACgCPC8BuC1BCHYhAiAAKAI8KAIIIQMgACgCPCIFKAIUIQEgBSABQQFqNgIUIAEgA2ogAjoAACAAKAI8IAAoAgxB//8DcUEQIAAoAjwoArwta3U7AbgtIAAoAjwiASABKAK8LSAAKAIQQRBrajYCvC0MAQsgACgCPCIBIAEvAbgtIAAoAjxB/BRqIAAoAiwtAOBsQQJ0ai8BAiAAKAI8KAK8LXRyOwG4LSAAKAI8IgEgACgCECABKAK8LWo2ArwtCyAAIAAoAixBAWo2AiwMAQsLIAAoAjwgACgCPEGUAWogACgCOEEBaxC5ASAAKAI8IAAoAjxBiBNqIAAoAjRBAWsQuQEgAEFAayQAIAQoAiwgBCgCLEGUAWogBCgCLEGIE2oQuwELCyAEKAIsEL4BIAQoAiAEQCAEKAIsEL0BCyAEQTBqJAAL1AEBAX8jAEEgayICJAAgAiAANgIYIAIgATcDECACIAIoAhhFOgAPAkAgAigCGEUEQCACIAIpAxCnEBgiADYCGCAARQRAIAJBADYCHAwCCwsgAkEYEBgiADYCCCAARQRAIAItAA9BAXEEQCACKAIYEBULIAJBADYCHAwBCyACKAIIQQE6AAAgAigCCCACKAIYNgIEIAIoAgggAikDEDcDCCACKAIIQgA3AxAgAigCCCACLQAPQQFxOgABIAIgAigCCDYCHAsgAigCHCEAIAJBIGokACAAC3gBAX8jAEEQayIBJAAgASAANgIIIAEgASgCCEIEEB42AgQCQCABKAIERQRAIAFBADYCDAwBCyABIAEoAgQtAAAgASgCBC0AASABKAIELQACIAEoAgQtAANBCHRqQQh0akEIdGo2AgwLIAEoAgwhACABQRBqJAAgAAuHAwEBfyMAQTBrIgMkACADIAA2AiQgAyABNgIgIAMgAjcDGAJAIAMoAiQtAChBAXEEQCADQn83AygMAQsCQAJAIAMoAiQoAiBFDQAgAykDGEL///////////8AVg0AIAMpAxhQDQEgAygCIA0BCyADKAIkQQxqQRJBABAUIANCfzcDKAwBCyADKAIkLQA1QQFxBEAgA0J/NwMoDAELAn8jAEEQayIAIAMoAiQ2AgwgACgCDC0ANEEBcQsEQCADQgA3AygMAQsgAykDGFAEQCADQgA3AygMAQsgA0IANwMQA0AgAykDECADKQMYVARAIAMgAygCJCADKAIgIAMpAxCnaiADKQMYIAMpAxB9QQEQICICNwMIIAJCAFMEQCADKAIkQQE6ADUgAykDEFAEQCADQn83AygMBAsgAyADKQMQNwMoDAMLIAMpAwhQBEAgAygCJEEBOgA0BSADIAMpAwggAykDEHw3AxAMAgsLCyADIAMpAxA3AygLIAMpAyghAiADQTBqJAAgAgthAQF/IwBBEGsiAiAANgIIIAIgATcDAAJAIAIpAwAgAigCCCkDCFYEQCACKAIIQQA6AAAgAkF/NgIMDAELIAIoAghBAToAACACKAIIIAIpAwA3AxAgAkEANgIMCyACKAIMC+8BAQF/IwBBIGsiAiQAIAIgADYCGCACIAE3AxAgAiACKAIYQggQHjYCDAJAIAIoAgxFBEAgAkF/NgIcDAELIAIoAgwgAikDEEL/AYM8AAAgAigCDCACKQMQQgiIQv8BgzwAASACKAIMIAIpAxBCEIhC/wGDPAACIAIoAgwgAikDEEIYiEL/AYM8AAMgAigCDCACKQMQQiCIQv8BgzwABCACKAIMIAIpAxBCKIhC/wGDPAAFIAIoAgwgAikDEEIwiEL/AYM8AAYgAigCDCACKQMQQjiIQv8BgzwAByACQQA2AhwLIAIoAhwaIAJBIGokAAt/AQN/IAAhAQJAIABBA3EEQANAIAEtAABFDQIgAUEBaiIBQQNxDQALCwNAIAEiAkEEaiEBIAIoAgAiA0F/cyADQYGChAhrcUGAgYKEeHFFDQALIANB/wFxRQRAIAIgAGsPCwNAIAItAAEhAyACQQFqIgEhAiADDQALCyABIABrC6YBAQF/IwBBEGsiASQAIAEgADYCCAJAIAEoAggoAiBFBEAgASgCCEEMakESQQAQFCABQX82AgwMAQsgASgCCCIAIAAoAiBBAWs2AiAgASgCCCgCIEUEQCABKAIIQQBCAEECECAaIAEoAggoAgAEQCABKAIIKAIAEC9BAEgEQCABKAIIQQxqQRRBABAUCwsLIAFBADYCDAsgASgCDCEAIAFBEGokACAACzYBAX8jAEEQayIBIAA2AgwCfiABKAIMLQAAQQFxBEAgASgCDCkDCCABKAIMKQMQfQwBC0IACwuyAQIBfwF+IwBBEGsiASQAIAEgADYCBCABIAEoAgRCCBAeNgIAAkAgASgCAEUEQCABQgA3AwgMAQsgASABKAIALQAArSABKAIALQAHrUI4hiABKAIALQAGrUIwhnwgASgCAC0ABa1CKIZ8IAEoAgAtAAStQiCGfCABKAIALQADrUIYhnwgASgCAC0AAq1CEIZ8IAEoAgAtAAGtQgiGfHw3AwgLIAEpAwghAiABQRBqJAAgAgvcAQEBfyMAQRBrIgEkACABIAA2AgwgASgCDARAIAEoAgwoAigEQCABKAIMKAIoQQA2AiggASgCDCgCKEIANwMgIAEoAgwCfiABKAIMKQMYIAEoAgwpAyBWBEAgASgCDCkDGAwBCyABKAIMKQMgCzcDGAsgASABKAIMKQMYNwMAA0AgASkDACABKAIMKQMIWkUEQCABKAIMKAIAIAEpAwCnQQR0aigCABAVIAEgASkDAEIBfDcDAAwBCwsgASgCDCgCABAVIAEoAgwoAgQQFSABKAIMEBULIAFBEGokAAvwAgICfwF+AkAgAkUNACAAIAJqIgNBAWsgAToAACAAIAE6AAAgAkEDSQ0AIANBAmsgAToAACAAIAE6AAEgA0EDayABOgAAIAAgAToAAiACQQdJDQAgA0EEayABOgAAIAAgAToAAyACQQlJDQAgAEEAIABrQQNxIgRqIgMgAUH/AXFBgYKECGwiADYCACADIAIgBGtBfHEiAmoiAUEEayAANgIAIAJBCUkNACADIAA2AgggAyAANgIEIAFBCGsgADYCACABQQxrIAA2AgAgAkEZSQ0AIAMgADYCGCADIAA2AhQgAyAANgIQIAMgADYCDCABQRBrIAA2AgAgAUEUayAANgIAIAFBGGsgADYCACABQRxrIAA2AgAgAiADQQRxQRhyIgFrIgJBIEkNACAArUKBgICAEH4hBSABIANqIQEDQCABIAU3AxggASAFNwMQIAEgBTcDCCABIAU3AwAgAUEgaiEBIAJBIGsiAkEfSw0ACwsLawEBfyMAQSBrIgIgADYCHCACQgEgAigCHK2GNwMQIAJBDGogATYCAANAIAIgAigCDCIAQQRqNgIMIAIgACgCADYCCCACKAIIQQBIRQRAIAIgAikDEEIBIAIoAgithoQ3AxAMAQsLIAIpAxALYAIBfwF+IwBBEGsiASQAIAEgADYCBAJAIAEoAgQoAiRBAUcEQCABKAIEQQxqQRJBABAUIAFCfzcDCAwBCyABIAEoAgRBAEIAQQ0QIDcDCAsgASkDCCECIAFBEGokACACC6UCAQJ/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNwMIIAMoAhgoAgAhASADKAIUIQQgAykDCCECIwBBIGsiACQAIAAgATYCFCAAIAQ2AhAgACACNwMIAkACQCAAKAIUKAIkQQFGBEAgACkDCEL///////////8AWA0BCyAAKAIUQQxqQRJBABAUIABCfzcDGAwBCyAAIAAoAhQgACgCECAAKQMIQQsQIDcDGAsgACkDGCECIABBIGokACADIAI3AwACQCACQgBTBEAgAygCGEEIaiADKAIYKAIAEBcgA0F/NgIcDAELIAMpAwAgAykDCFIEQCADKAIYQQhqQQZBGxAUIANBfzYCHAwBCyADQQA2AhwLIAMoAhwhACADQSBqJAAgAAsxAQF/IwBBEGsiASQAIAEgADYCDCABKAIMBEAgASgCDBBSIAEoAgwQFQsgAUEQaiQACy8BAX8jAEEQayIBJAAgASAANgIMIAEoAgwoAggQFSABKAIMQQA2AgggAUEQaiQAC80BAQF/IwBBEGsiAiQAIAIgADYCCCACIAE2AgQCQCACKAIILQAoQQFxBEAgAkF/NgIMDAELIAIoAgRFBEAgAigCCEEMakESQQAQFCACQX82AgwMAQsgAigCBBA7IAIoAggoAgAEQCACKAIIKAIAIAIoAgQQOUEASARAIAIoAghBDGogAigCCCgCABAXIAJBfzYCDAwCCwsgAigCCCACKAIEQjhBAxAgQgBTBEAgAkF/NgIMDAELIAJBADYCDAsgAigCDCEAIAJBEGokACAAC98EAQF/IwBBIGsiAiAANgIYIAIgATYCFAJAIAIoAhhFBEAgAkEBNgIcDAELIAIgAigCGCgCADYCDAJAIAIoAhgoAggEQCACIAIoAhgoAgg2AhAMAQsgAkEBNgIQIAJBADYCCANAAkAgAigCCCACKAIYLwEETw0AAkAgAigCDCACKAIIai0AAEEfSwRAIAIoAgwgAigCCGotAABBgAFJDQELIAIoAgwgAigCCGotAABBDUYNACACKAIMIAIoAghqLQAAQQpGDQAgAigCDCACKAIIai0AAEEJRgRADAELIAJBAzYCEAJAIAIoAgwgAigCCGotAABB4AFxQcABRgRAIAJBATYCAAwBCwJAIAIoAgwgAigCCGotAABB8AFxQeABRgRAIAJBAjYCAAwBCwJAIAIoAgwgAigCCGotAABB+AFxQfABRgRAIAJBAzYCAAwBCyACQQQ2AhAMBAsLCyACKAIYLwEEIAIoAgggAigCAGpNBEAgAkEENgIQDAILIAJBATYCBANAIAIoAgQgAigCAE0EQCACKAIMIAIoAgggAigCBGpqLQAAQcABcUGAAUcEQCACQQQ2AhAMBgUgAiACKAIEQQFqNgIEDAILAAsLIAIgAigCACACKAIIajYCCAsgAiACKAIIQQFqNgIIDAELCwsgAigCGCACKAIQNgIIIAIoAhQEQAJAIAIoAhRBAkcNACACKAIQQQNHDQAgAkECNgIQIAIoAhhBAjYCCAsCQCACKAIUIAIoAhBGDQAgAigCEEEBRg0AIAJBBTYCHAwCCwsgAiACKAIQNgIcCyACKAIcC2oBAX8jAEEQayIBIAA2AgwgASgCDEIANwMAIAEoAgxBADYCCCABKAIMQn83AxAgASgCDEEANgIsIAEoAgxBfzYCKCABKAIMQgA3AxggASgCDEIANwMgIAEoAgxBADsBMCABKAIMQQA7ATILjQUBA38jAEEQayIBJAAgASAANgIMIAEoAgwEQCABKAIMKAIABEAgASgCDCgCABAvGiABKAIMKAIAEBsLIAEoAgwoAhwQFSABKAIMKAIgECQgASgCDCgCJBAkIAEoAgwoAlAhAiMAQRBrIgAkACAAIAI2AgwgACgCDARAIAAoAgwoAhAEQCAAQQA2AggDQCAAKAIIIAAoAgwoAgBJBEAgACgCDCgCECAAKAIIQQJ0aigCAARAIAAoAgwoAhAgACgCCEECdGooAgAhAyMAQRBrIgIkACACIAM2AgwDQCACKAIMBEAgAiACKAIMKAIYNgIIIAIoAgwQFSACIAIoAgg2AgwMAQsLIAJBEGokAAsgACAAKAIIQQFqNgIIDAELCyAAKAIMKAIQEBULIAAoAgwQFQsgAEEQaiQAIAEoAgwoAkAEQCABQgA3AwADQCABKQMAIAEoAgwpAzBUBEAgASgCDCgCQCABKQMAp0EEdGoQdyABIAEpAwBCAXw3AwAMAQsLIAEoAgwoAkAQFQsgAUIANwMAA0AgASkDACABKAIMKAJErVQEQCABKAIMKAJMIAEpAwCnQQJ0aigCACECIwBBEGsiACQAIAAgAjYCDCAAKAIMQQE6ACgCfyMAQRBrIgIgACgCDEEMajYCDCACKAIMKAIARQsEQCAAKAIMQQxqQQhBABAUCyAAQRBqJAAgASABKQMAQgF8NwMADAELCyABKAIMKAJMEBUgASgCDCgCVCECIwBBEGsiACQAIAAgAjYCDCAAKAIMBEAgACgCDCgCCARAIAAoAgwoAgwgACgCDCgCCBECAAsgACgCDBAVCyAAQRBqJAAgASgCDEEIahA4IAEoAgwQFQsgAUEQaiQAC48OAQF/IwBBEGsiAyQAIAMgADYCDCADIAE2AgggAyACNgIEIAMoAgghASADKAIEIQIjAEEgayIAIAMoAgw2AhggACABNgIUIAAgAjYCECAAIAAoAhhBEHY2AgwgACAAKAIYQf//A3E2AhgCQCAAKAIQQQFGBEAgACAAKAIULQAAIAAoAhhqNgIYIAAoAhhB8f8DTwRAIAAgACgCGEHx/wNrNgIYCyAAIAAoAhggACgCDGo2AgwgACgCDEHx/wNPBEAgACAAKAIMQfH/A2s2AgwLIAAgACgCGCAAKAIMQRB0cjYCHAwBCyAAKAIURQRAIABBATYCHAwBCyAAKAIQQRBJBEADQCAAIAAoAhAiAUEBazYCECABBEAgACAAKAIUIgFBAWo2AhQgACABLQAAIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDAwBCwsgACgCGEHx/wNPBEAgACAAKAIYQfH/A2s2AhgLIAAgACgCDEHx/wNwNgIMIAAgACgCGCAAKAIMQRB0cjYCHAwBCwNAIAAoAhBBsCtPBEAgACAAKAIQQbArazYCECAAQdsCNgIIA0AgACAAKAIULQAAIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAEgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAgAEUEQCAEQQA2AhwMAQsgBCgCDEEANgIAIAQoAgwgBCgCEDYCBCAEKAIMIAQvARo7AQggBCgCDCAELwEYOwEKAkAgBC8BGARAIAQoAhQhASAELwEYIQIjAEEgayIAJAAgACABNgIYIAAgAjYCFCAAQQA2AhACQCAAKAIURQRAIABBADYCHAwBCyAAIAAoAhQQGDYCDCAAKAIMRQRAIAAoAhBBDkEAEBQgAEEANgIcDAELIAAoAgwgACgCGCAAKAIUEBkaIAAgACgCDDYCHAsgACgCHCEBIABBIGokACABIQAgBCgCDCAANgIMIABFBEAgBCgCDBAVIARBADYCHAwDCwwBCyAEKAIMQQA2AgwLIAQgBCgCDDYCHAsgBCgCHCEAIARBIGokACAAC5EBAQV/IAAoAkxBAE4hAyAAKAIAQQFxIgRFBEAgACgCNCIBBEAgASAAKAI4NgI4CyAAKAI4IgIEQCACIAE2AjQLIABBrKABKAIARgRAQaygASACNgIACwsgABClASEBIAAgACgCDBEAACECIAAoAmAiBQRAIAUQFQsCQCAERQRAIAAQFQwBCyADRQ0ACyABIAJyC/kBAQF/IwBBIGsiAiQAIAIgADYCHCACIAE5AxACQCACKAIcRQ0AIAICfAJ8IAIrAxBEAAAAAAAAAABkBEAgAisDEAwBC0QAAAAAAAAAAAtEAAAAAAAA8D9jBEACfCACKwMQRAAAAAAAAAAAZARAIAIrAxAMAQtEAAAAAAAAAAALDAELRAAAAAAAAPA/CyACKAIcKwMoIAIoAhwrAyChoiACKAIcKwMgoDkDCCACKAIcKwMQIAIrAwggAigCHCsDGKFjRQ0AIAIoAhwoAgAgAisDCCACKAIcKAIMIAIoAhwoAgQRFgAgAigCHCACKwMIOQMYCyACQSBqJAAL4QUCAn8BfiMAQTBrIgQkACAEIAA2AiQgBCABNgIgIAQgAjYCHCAEIAM2AhgCQCAEKAIkRQRAIARCfzcDKAwBCyAEKAIgRQRAIAQoAhhBEkEAEBQgBEJ/NwMoDAELIAQoAhxBgyBxBEAgBEEVQRYgBCgCHEEBcRs2AhQgBEIANwMAA0AgBCkDACAEKAIkKQMwVARAIAQgBCgCJCAEKQMAIAQoAhwgBCgCGBBNNgIQIAQoAhAEQCAEKAIcQQJxBEAgBAJ/IAQoAhAiARAuQQFqIQADQEEAIABFDQEaIAEgAEEBayIAaiICLQAAQS9HDQALIAILNgIMIAQoAgwEQCAEIAQoAgxBAWo2AhALCyAEKAIgIAQoAhAgBCgCFBEDAEUEQCMAQRBrIgAgBCgCGDYCDCAAKAIMBEAgACgCDEEANgIAIAAoAgxBADYCBAsgBCAEKQMANwMoDAULCyAEIAQpAwBCAXw3AwAMAQsLIAQoAhhBCUEAEBQgBEJ/NwMoDAELIAQoAiQoAlAhASAEKAIgIQIgBCgCHCEDIAQoAhghBSMAQTBrIgAkACAAIAE2AiQgACACNgIgIAAgAzYCHCAAIAU2AhgCQAJAIAAoAiQEQCAAKAIgDQELIAAoAhhBEkEAEBQgAEJ/NwMoDAELIAAoAiQpAwhCAFIEQCAAIAAoAiAQczYCFCAAIAAoAhQgACgCJCgCAHA2AhAgACAAKAIkKAIQIAAoAhBBAnRqKAIANgIMA0ACQCAAKAIMRQ0AIAAoAiAgACgCDCgCABBbBEAgACAAKAIMKAIYNgIMDAIFIAAoAhxBCHEEQCAAKAIMKQMIQn9SBEAgACAAKAIMKQMINwMoDAYLDAILIAAoAgwpAxBCf1IEQCAAIAAoAgwpAxA3AygMBQsLCwsLIAAoAhhBCUEAEBQgAEJ/NwMoCyAAKQMoIQYgAEEwaiQAIAQgBjcDKAsgBCkDKCEGIARBMGokACAGC9QDAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQAkACQCADKAIYBEAgAygCFA0BCyADKAIQQRJBABAUIANBADoAHwwBCyADKAIYKQMIQgBSBEAgAyADKAIUEHM2AgwgAyADKAIMIAMoAhgoAgBwNgIIIANBADYCACADIAMoAhgoAhAgAygCCEECdGooAgA2AgQDQCADKAIEBEACQCADKAIEKAIcIAMoAgxHDQAgAygCFCADKAIEKAIAEFsNAAJAIAMoAgQpAwhCf1EEQAJAIAMoAgAEQCADKAIAIAMoAgQoAhg2AhgMAQsgAygCGCgCECADKAIIQQJ0aiADKAIEKAIYNgIACyADKAIEEBUgAygCGCIAIAApAwhCAX03AwgCQCADKAIYIgApAwi6IAAoAgC4RHsUrkfheoQ/omNFDQAgAygCGCgCAEGAAk0NACADKAIYIAMoAhgoAgBBAXYgAygCEBBaQQFxRQRAIANBADoAHwwICwsMAQsgAygCBEJ/NwMQCyADQQE6AB8MBAsgAyADKAIENgIAIAMgAygCBCgCGDYCBAwBCwsLIAMoAhBBCUEAEBQgA0EAOgAfCyADLQAfQQFxIQAgA0EgaiQAIAAL3wIBAX8jAEEwayIDJAAgAyAANgIoIAMgATYCJCADIAI2AiACQCADKAIkIAMoAigoAgBGBEAgA0EBOgAvDAELIAMgAygCJEEEEH8iADYCHCAARQRAIAMoAiBBDkEAEBQgA0EAOgAvDAELIAMoAigpAwhCAFIEQCADQQA2AhgDQCADKAIYIAMoAigoAgBPRQRAIAMgAygCKCgCECADKAIYQQJ0aigCADYCFANAIAMoAhQEQCADIAMoAhQoAhg2AhAgAyADKAIUKAIcIAMoAiRwNgIMIAMoAhQgAygCHCADKAIMQQJ0aigCADYCGCADKAIcIAMoAgxBAnRqIAMoAhQ2AgAgAyADKAIQNgIUDAELCyADIAMoAhhBAWo2AhgMAQsLCyADKAIoKAIQEBUgAygCKCADKAIcNgIQIAMoAiggAygCJDYCACADQQE6AC8LIAMtAC9BAXEhACADQTBqJAAgAAtNAQJ/IAEtAAAhAgJAIAAtAAAiA0UNACACIANHDQADQCABLQABIQIgAC0AASIDRQ0BIAFBAWohASAAQQFqIQAgAiADRg0ACwsgAyACawvRCQECfyMAQSBrIgEkACABIAA2AhwgASABKAIcKAIsNgIQA0AgASABKAIcKAI8IAEoAhwoAnRrIAEoAhwoAmxrNgIUIAEoAhwoAmwgASgCECABKAIcKAIsQYYCa2pPBEAgASgCHCgCOCABKAIcKAI4IAEoAhBqIAEoAhAgASgCFGsQGRogASgCHCIAIAAoAnAgASgCEGs2AnAgASgCHCIAIAAoAmwgASgCEGs2AmwgASgCHCIAIAAoAlwgASgCEGs2AlwjAEEgayIAIAEoAhw2AhwgACAAKAIcKAIsNgIMIAAgACgCHCgCTDYCGCAAIAAoAhwoAkQgACgCGEEBdGo2AhADQCAAIAAoAhBBAmsiAjYCECAAIAIvAQA2AhQgACgCEAJ/IAAoAhQgACgCDE8EQCAAKAIUIAAoAgxrDAELQQALOwEAIAAgACgCGEEBayICNgIYIAINAAsgACAAKAIMNgIYIAAgACgCHCgCQCAAKAIYQQF0ajYCEANAIAAgACgCEEECayICNgIQIAAgAi8BADYCFCAAKAIQAn8gACgCFCAAKAIMTwRAIAAoAhQgACgCDGsMAQtBAAs7AQAgACAAKAIYQQFrIgI2AhggAg0ACyABIAEoAhAgASgCFGo2AhQLIAEoAhwoAgAoAgQEQCABIAEoAhwoAgAgASgCHCgCdCABKAIcKAI4IAEoAhwoAmxqaiABKAIUEHY2AhggASgCHCIAIAEoAhggACgCdGo2AnQgASgCHCgCdCABKAIcKAK0LWpBA08EQCABIAEoAhwoAmwgASgCHCgCtC1rNgIMIAEoAhwgASgCHCgCOCABKAIMai0AADYCSCABKAIcIAEoAhwoAlQgASgCHCgCOCABKAIMQQFqai0AACABKAIcKAJIIAEoAhwoAlh0c3E2AkgDQCABKAIcKAK0LQRAIAEoAhwgASgCHCgCVCABKAIcKAI4IAEoAgxBAmpqLQAAIAEoAhwoAkggASgCHCgCWHRzcTYCSCABKAIcKAJAIAEoAgwgASgCHCgCNHFBAXRqIAEoAhwoAkQgASgCHCgCSEEBdGovAQA7AQAgASgCHCgCRCABKAIcKAJIQQF0aiABKAIMOwEAIAEgASgCDEEBajYCDCABKAIcIgAgACgCtC1BAWs2ArQtIAEoAhwoAnQgASgCHCgCtC1qQQNPDQELCwsgASgCHCgCdEGGAkkEfyABKAIcKAIAKAIEQQBHBUEAC0EBcQ0BCwsgASgCHCgCwC0gASgCHCgCPEkEQCABIAEoAhwoAmwgASgCHCgCdGo2AggCQCABKAIcKALALSABKAIISQRAIAEgASgCHCgCPCABKAIIazYCBCABKAIEQYICSwRAIAFBggI2AgQLIAEoAhwoAjggASgCCGpBACABKAIEEDMgASgCHCABKAIIIAEoAgRqNgLALQwBCyABKAIcKALALSABKAIIQYICakkEQCABIAEoAghBggJqIAEoAhwoAsAtazYCBCABKAIEIAEoAhwoAjwgASgCHCgCwC1rSwRAIAEgASgCHCgCPCABKAIcKALALWs2AgQLIAEoAhwoAjggASgCHCgCwC1qQQAgASgCBBAzIAEoAhwiACABKAIEIAAoAsAtajYCwC0LCwsgAUEgaiQAC4YFAQF/IwBBIGsiBCQAIAQgADYCHCAEIAE2AhggBCACNgIUIAQgAzYCECAEQQM2AgwCQCAEKAIcKAK8LUEQIAQoAgxrSgRAIAQgBCgCEDYCCCAEKAIcIgAgAC8BuC0gBCgCCEH//wNxIAQoAhwoArwtdHI7AbgtIAQoAhwvAbgtQf8BcSEBIAQoAhwoAgghAiAEKAIcIgMoAhQhACADIABBAWo2AhQgACACaiABOgAAIAQoAhwvAbgtQQh2IQEgBCgCHCgCCCECIAQoAhwiAygCFCEAIAMgAEEBajYCFCAAIAJqIAE6AAAgBCgCHCAEKAIIQf//A3FBECAEKAIcKAK8LWt1OwG4LSAEKAIcIgAgACgCvC0gBCgCDEEQa2o2ArwtDAELIAQoAhwiACAALwG4LSAEKAIQQf//A3EgBCgCHCgCvC10cjsBuC0gBCgCHCIAIAQoAgwgACgCvC1qNgK8LQsgBCgCHBC9ASAEKAIUQf8BcSEBIAQoAhwoAgghAiAEKAIcIgMoAhQhACADIABBAWo2AhQgACACaiABOgAAIAQoAhRB//8DcUEIdiEBIAQoAhwoAgghAiAEKAIcIgMoAhQhACADIABBAWo2AhQgACACaiABOgAAIAQoAhRBf3NB/wFxIQEgBCgCHCgCCCECIAQoAhwiAygCFCEAIAMgAEEBajYCFCAAIAJqIAE6AAAgBCgCFEF/c0H//wNxQQh2IQEgBCgCHCgCCCECIAQoAhwiAygCFCEAIAMgAEEBajYCFCAAIAJqIAE6AAAgBCgCHCgCCCAEKAIcKAIUaiAEKAIYIAQoAhQQGRogBCgCHCIAIAQoAhQgACgCFGo2AhQgBEEgaiQAC6sBAQF/IwBBEGsiASQAIAEgADYCDCABKAIMKAIIBEAgASgCDCgCCBAbIAEoAgxBADYCCAsCQCABKAIMKAIERQ0AIAEoAgwoAgQoAgBBAXFFDQAgASgCDCgCBCgCEEF+Rw0AIAEoAgwoAgQiACAAKAIAQX5xNgIAIAEoAgwoAgQoAgBFBEAgASgCDCgCBBA3IAEoAgxBADYCBAsLIAEoAgxBADoADCABQRBqJAAL8QMBAX8jAEHQAGsiCCQAIAggADYCSCAIIAE3A0AgCCACNwM4IAggAzYCNCAIIAQ6ADMgCCAFNgIsIAggBjcDICAIIAc2AhwCQAJAAkAgCCgCSEUNACAIKQNAIAgpA0AgCCkDOHxWDQAgCCgCLA0BIAgpAyBQDQELIAgoAhxBEkEAEBQgCEEANgJMDAELIAhBgAEQGCIANgIYIABFBEAgCCgCHEEOQQAQFCAIQQA2AkwMAQsgCCgCGCAIKQNANwMAIAgoAhggCCkDQCAIKQM4fDcDCCAIKAIYQShqEDsgCCgCGCAILQAzOgBgIAgoAhggCCgCLDYCECAIKAIYIAgpAyA3AxgjAEEQayIAIAgoAhhB5ABqNgIMIAAoAgxBADYCACAAKAIMQQA2AgQgACgCDEEANgIIIwBBEGsiACAIKAJINgIMIAAoAgwpAxhC/4EBgyEBIAhBfzYCCCAIQQc2AgQgCEEONgIAQRAgCBA0IAGEIQEgCCgCGCABNwNwIAgoAhggCCgCGCkDcELAAINCAFI6AHggCCgCNARAIAgoAhhBKGogCCgCNCAIKAIcEIQBQQBIBEAgCCgCGBAVIAhBADYCTAwCCwsgCCAIKAJIQQEgCCgCGCAIKAIcEIEBNgJMCyAIKAJMIQAgCEHQAGokACAAC9MEAQJ/IwBBMGsiAyQAIAMgADYCJCADIAE3AxggAyACNgIUAkAgAygCJCgCQCADKQMYp0EEdGooAgBFBEAgAygCFEEUQQAQFCADQgA3AygMAQsgAyADKAIkKAJAIAMpAxinQQR0aigCACkDSDcDCCADKAIkKAIAIAMpAwhBABAnQQBIBEAgAygCFCADKAIkKAIAEBcgA0IANwMoDAELIAMoAiQoAgAhAiADKAIUIQQjAEEwayIAJAAgACACNgIoIABBgAI7ASYgACAENgIgIAAgAC8BJkGAAnFBAEc6ABsgAEEeQS4gAC0AG0EBcRs2AhwCQCAAKAIoQRpBHCAALQAbQQFxG6xBARAnQQBIBEAgACgCICAAKAIoEBcgAEF/NgIsDAELIAAgACgCKEEEQQYgAC0AG0EBcRusIABBDmogACgCIBBCIgI2AgggAkUEQCAAQX82AiwMAQsgAEEANgIUA0AgACgCFEECQQMgAC0AG0EBcRtIBEAgACAAKAIIEB1B//8DcSAAKAIcajYCHCAAIAAoAhRBAWo2AhQMAQsLIAAoAggQR0EBcUUEQCAAKAIgQRRBABAUIAAoAggQFiAAQX82AiwMAQsgACgCCBAWIAAgACgCHDYCLAsgACgCLCECIABBMGokACADIAIiADYCBCAAQQBIBEAgA0IANwMoDAELIAMpAwggAygCBK18Qv///////////wBWBEAgAygCFEEEQRYQFCADQgA3AygMAQsgAyADKQMIIAMoAgStfDcDKAsgAykDKCEBIANBMGokACABC20BAX8jAEEgayIEJAAgBCAANgIYIAQgATYCFCAEIAI2AhAgBCADNgIMAkAgBCgCGEUEQCAEQQA2AhwMAQsgBCAEKAIUIAQoAhAgBCgCDCAEKAIYQQhqEIEBNgIcCyAEKAIcIQAgBEEgaiQAIAALVQEBfyMAQRBrIgEkACABIAA2AgwCQAJAIAEoAgwoAiRBAUYNACABKAIMKAIkQQJGDQAMAQsgASgCDEEAQgBBChAgGiABKAIMQQA2AiQLIAFBEGokAAv/AgEBfyMAQTBrIgUkACAFIAA2AiggBSABNgIkIAUgAjYCICAFIAM6AB8gBSAENgIYAkACQCAFKAIgDQAgBS0AH0EBcQ0AIAVBADYCLAwBCyAFIAUoAiAgBS0AH0EBcWoQGDYCFCAFKAIURQRAIAUoAhhBDkEAEBQgBUEANgIsDAELAkAgBSgCKARAIAUgBSgCKCAFKAIgrRAeNgIQIAUoAhBFBEAgBSgCGEEOQQAQFCAFKAIUEBUgBUEANgIsDAMLIAUoAhQgBSgCECAFKAIgEBkaDAELIAUoAiQgBSgCFCAFKAIgrSAFKAIYEGRBAEgEQCAFKAIUEBUgBUEANgIsDAILCyAFLQAfQQFxBEAgBSgCFCAFKAIgakEAOgAAIAUgBSgCFDYCDANAIAUoAgwgBSgCFCAFKAIgakkEQCAFKAIMLQAARQRAIAUoAgxBIDoAAAsgBSAFKAIMQQFqNgIMDAELCwsgBSAFKAIUNgIsCyAFKAIsIQAgBUEwaiQAIAALwgEBAX8jAEEwayIEJAAgBCAANgIoIAQgATYCJCAEIAI3AxggBCADNgIUAkAgBCkDGEL///////////8AVgRAIAQoAhRBFEEAEBQgBEF/NgIsDAELIAQgBCgCKCAEKAIkIAQpAxgQKyICNwMIIAJCAFMEQCAEKAIUIAQoAigQFyAEQX82AiwMAQsgBCkDCCAEKQMYUwRAIAQoAhRBEUEAEBQgBEF/NgIsDAELIARBADYCLAsgBCgCLCEAIARBMGokACAAC3cBAX8jAEEQayICIAA2AgggAiABNgIEAkACQAJAIAIoAggpAyhC/////w9aDQAgAigCCCkDIEL/////D1oNACACKAIEQYAEcUUNASACKAIIKQNIQv////8PVA0BCyACQQE6AA8MAQsgAkEAOgAPCyACLQAPQQFxC/4BAQF/IwBBIGsiBSQAIAUgADYCGCAFIAE2AhQgBSACOwESIAVBADsBECAFIAM2AgwgBSAENgIIIAVBADYCBAJAA0AgBSgCGARAAkAgBSgCGC8BCCAFLwESRw0AIAUoAhgoAgQgBSgCDHFBgAZxRQ0AIAUoAgQgBS8BEEgEQCAFIAUoAgRBAWo2AgQMAQsgBSgCFARAIAUoAhQgBSgCGC8BCjsBAAsgBSgCGC8BCgRAIAUgBSgCGCgCDDYCHAwECyAFQZAVNgIcDAMLIAUgBSgCGCgCADYCGAwBCwsgBSgCCEEJQQAQFCAFQQA2AhwLIAUoAhwhACAFQSBqJAAgAAumAQEBfyMAQRBrIgIkACACIAA2AgggAiABNgIEAkAgAigCCC0AKEEBcQRAIAJBfzYCDAwBCyACKAIIKAIABEAgAigCCCgCACACKAIEEGdBAEgEQCACKAIIQQxqIAIoAggoAgAQFyACQX82AgwMAgsLIAIoAgggAkEEakIEQRMQIEIAUwRAIAJBfzYCDAwBCyACQQA2AgwLIAIoAgwhACACQRBqJAAgAAuNCAIBfwF+IwBBkAFrIgMkACADIAA2AoQBIAMgATYCgAEgAyACNgJ8IAMQUwJAIAMoAoABKQMIQgBSBEAgAyADKAKAASgCACgCACkDSDcDYCADIAMoAoABKAIAKAIAKQNINwNoDAELIANCADcDYCADQgA3A2gLIANCADcDcAJAA0AgAykDcCADKAKAASkDCFQEQCADKAKAASgCACADKQNwp0EEdGooAgApA0ggAykDaFQEQCADIAMoAoABKAIAIAMpA3CnQQR0aigCACkDSDcDaAsgAykDaCADKAKAASkDIFYEQCADKAJ8QRNBABAUIANCfzcDiAEMAwsgAyADKAKAASgCACADKQNwp0EEdGooAgApA0ggAygCgAEoAgAgAykDcKdBBHRqKAIAKQMgfCADKAKAASgCACADKQNwp0EEdGooAgAoAjAQUUH//wNxrXxCHnw3A1ggAykDWCADKQNgVgRAIAMgAykDWDcDYAsgAykDYCADKAKAASkDIFYEQCADKAJ8QRNBABAUIANCfzcDiAEMAwsgAygChAEoAgAgAygCgAEoAgAgAykDcKdBBHRqKAIAKQNIQQAQJ0EASARAIAMoAnwgAygChAEoAgAQFyADQn83A4gBDAMLIAMgAygChAEoAgBBAEEBIAMoAnwQjAFCf1EEQCADEFIgA0J/NwOIAQwDCwJ/IAMoAoABKAIAIAMpA3CnQQR0aigCACEBIwBBEGsiACQAIAAgATYCCCAAIAM2AgQCQAJAAkAgACgCCC8BCiAAKAIELwEKSA0AIAAoAggoAhAgACgCBCgCEEcNACAAKAIIKAIUIAAoAgQoAhRHDQAgACgCCCgCMCAAKAIEKAIwEIYBDQELIABBfzYCDAwBCwJAAkAgACgCCCgCGCAAKAIEKAIYRw0AIAAoAggpAyAgACgCBCkDIFINACAAKAIIKQMoIAAoAgQpAyhRDQELAkACQCAAKAIELwEMQQhxRQ0AIAAoAgQoAhgNACAAKAIEKQMgQgBSDQAgACgCBCkDKFANAQsgAEF/NgIMDAILCyAAQQA2AgwLIAAoAgwhASAAQRBqJAAgAQsEQCADKAJ8QRVBABAUIAMQUiADQn83A4gBDAMFIAMoAoABKAIAIAMpA3CnQQR0aigCACgCNCADKAI0EJUBIQAgAygCgAEoAgAgAykDcKdBBHRqKAIAIAA2AjQgAygCgAEoAgAgAykDcKdBBHRqKAIAQQE6AAQgA0EANgI0IAMQUiADIAMpA3BCAXw3A3AMAgsACwsgAwJ+IAMpA2AgAykDaH1C////////////AFQEQCADKQNgIAMpA2h9DAELQv///////////wALNwOIAQsgAykDiAEhBCADQZABaiQAIAQL1AQBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAygCECEBIwBBEGsiACQAIAAgATYCCCAAQdgAEBg2AgQCQCAAKAIERQRAIAAoAghBDkEAEBQgAEEANgIMDAELIAAoAgghAiMAQRBrIgEkACABIAI2AgggAUEYEBgiAjYCBAJAIAJFBEAgASgCCEEOQQAQFCABQQA2AgwMAQsgASgCBEEANgIAIAEoAgRCADcDCCABKAIEQQA2AhAgASABKAIENgIMCyABKAIMIQIgAUEQaiQAIAAoAgQgAjYCUCACRQRAIAAoAgQQFSAAQQA2AgwMAQsgACgCBEEANgIAIAAoAgRBADYCBCMAQRBrIgEgACgCBEEIajYCDCABKAIMQQA2AgAgASgCDEEANgIEIAEoAgxBADYCCCAAKAIEQQA2AhggACgCBEEANgIUIAAoAgRBADYCHCAAKAIEQQA2AiQgACgCBEEANgIgIAAoAgRBADoAKCAAKAIEQgA3AzggACgCBEIANwMwIAAoAgRBADYCQCAAKAIEQQA2AkggACgCBEEANgJEIAAoAgRBADYCTCAAKAIEQQA2AlQgACAAKAIENgIMCyAAKAIMIQEgAEEQaiQAIAMgASIANgIMAkAgAEUEQCADQQA2AhwMAQsgAygCDCADKAIYNgIAIAMoAgwgAygCFDYCBCADKAIUQRBxBEAgAygCDCIAIAAoAhRBAnI2AhQgAygCDCIAIAAoAhhBAnI2AhgLIAMgAygCDDYCHAsgAygCHCEAIANBIGokACAAC9UBAQF/IwBBIGsiBCQAIAQgADYCGCAEIAE3AxAgBCACNgIMIAQgAzYCCAJAAkAgBCkDEEL///////////8AVwRAIAQpAxBCgICAgICAgICAf1kNAQsgBCgCCEEEQT0QFCAEQX82AhwMAQsCfyAEKQMQIQEgBCgCDCEAIAQoAhgiAigCTEF/TARAIAIgASAAEKABDAELIAIgASAAEKABC0EASARAIAQoAghBBEG0mwEoAgAQFCAEQX82AhwMAQsgBEEANgIcCyAEKAIcIQAgBEEgaiQAIAALJABBACAAEAUiACAAQRtGGyIABH9BtJsBIAA2AgBBAAVBAAsaC3ABAX8jAEEQayIDJAAgAwJ/IAFBwABxRQRAQQAgAUGAgIQCcUGAgIQCRw0BGgsgAyACQQRqNgIMIAIoAgALNgIAIAAgAUGAgAJyIAMQECIAQYFgTwRAQbSbAUEAIABrNgIAQX8hAAsgA0EQaiQAIAALMwEBfwJ/IAAQByIBQWFGBEAgABARIQELIAFBgWBPCwR/QbSbAUEAIAFrNgIAQX8FIAELC2kBAn8CQCAAKAIUIAAoAhxNDQAgAEEAQQAgACgCJBEBABogACgCFA0AQX8PCyAAKAIEIgEgACgCCCICSQRAIAAgASACa6xBASAAKAIoEQ8AGgsgAEEANgIcIABCADcDECAAQgA3AgRBAAvaAwEGfyMAQRBrIgUkACAFIAI2AgwjAEGgAWsiBCQAIARBCGpBkIcBQZABEBkaIAQgADYCNCAEIAA2AhwgBEF+IABrIgNB/////wcgA0H/////B0kbIgY2AjggBCAAIAZqIgA2AiQgBCAANgIYIARBCGohACMAQdABayIDJAAgAyACNgLMASADQaABakEAQSgQMyADIAMoAswBNgLIAQJAQQAgASADQcgBaiADQdAAaiADQaABahBwQQBIDQAgACgCTEEATiEHIAAoAgAhAiAALABKQQBMBEAgACACQV9xNgIACyACQSBxIQgCfyAAKAIwBEAgACABIANByAFqIANB0ABqIANBoAFqEHAMAQsgAEHQADYCMCAAIANB0ABqNgIQIAAgAzYCHCAAIAM2AhQgACgCLCECIAAgAzYCLCAAIAEgA0HIAWogA0HQAGogA0GgAWoQcCACRQ0AGiAAQQBBACAAKAIkEQEAGiAAQQA2AjAgACACNgIsIABBADYCHCAAQQA2AhAgACgCFBogAEEANgIUQQALGiAAIAAoAgAgCHI2AgAgB0UNAAsgA0HQAWokACAGBEAgBCgCHCIAIAAgBCgCGEZrQQA6AAALIARBoAFqJAAgBUEQaiQAC4wSAg9/AX4jAEHQAGsiBSQAIAUgATYCTCAFQTdqIRMgBUE4aiEQQQAhAQNAAkAgDUEASA0AQf////8HIA1rIAFIBEBBtJsBQT02AgBBfyENDAELIAEgDWohDQsgBSgCTCIHIQECQAJAAkACQAJAAkACQAJAIAUCfwJAIActAAAiBgRAA0ACQAJAIAZB/wFxIgZFBEAgASEGDAELIAZBJUcNASABIQYDQCABLQABQSVHDQEgBSABQQJqIgg2AkwgBkEBaiEGIAEtAAIhDiAIIQEgDkElRg0ACwsgBiAHayEBIAAEQCAAIAcgARAiCyABDQ0gBSgCTCEBIAUoAkwsAAFBMGtBCk8NAyABLQACQSRHDQMgASwAAUEwayEPQQEhESABQQNqDAQLIAUgAUEBaiIINgJMIAEtAAEhBiAIIQEMAAsACyANIQsgAA0IIBFFDQJBASEBA0AgBCABQQJ0aigCACIABEAgAyABQQN0aiAAIAIQqAFBASELIAFBAWoiAUEKRw0BDAoLC0EBIQsgAUEKTw0IA0AgBCABQQJ0aigCAA0IIAFBAWoiAUEKRw0ACwwIC0F/IQ8gAUEBagsiATYCTEEAIQgCQCABLAAAIgxBIGsiBkEfSw0AQQEgBnQiBkGJ0QRxRQ0AA0ACQCAFIAFBAWoiCDYCTCABLAABIgxBIGsiAUEgTw0AQQEgAXQiAUGJ0QRxRQ0AIAEgBnIhBiAIIQEMAQsLIAghASAGIQgLAkAgDEEqRgRAIAUCfwJAIAEsAAFBMGtBCk8NACAFKAJMIgEtAAJBJEcNACABLAABQQJ0IARqQcABa0EKNgIAIAEsAAFBA3QgA2pBgANrKAIAIQpBASERIAFBA2oMAQsgEQ0IQQAhEUEAIQogAARAIAIgAigCACIBQQRqNgIAIAEoAgAhCgsgBSgCTEEBagsiATYCTCAKQX9KDQFBACAKayEKIAhBgMAAciEIDAELIAVBzABqEKcBIgpBAEgNBiAFKAJMIQELQX8hCQJAIAEtAABBLkcNACABLQABQSpGBEACQCABLAACQTBrQQpPDQAgBSgCTCIBLQADQSRHDQAgASwAAkECdCAEakHAAWtBCjYCACABLAACQQN0IANqQYADaygCACEJIAUgAUEEaiIBNgJMDAILIBENByAABH8gAiACKAIAIgFBBGo2AgAgASgCAAVBAAshCSAFIAUoAkxBAmoiATYCTAwBCyAFIAFBAWo2AkwgBUHMAGoQpwEhCSAFKAJMIQELQQAhBgNAIAYhEkF/IQsgASwAAEHBAGtBOUsNByAFIAFBAWoiDDYCTCABLAAAIQYgDCEBIAYgEkE6bGpB74IBai0AACIGQQFrQQhJDQALIAZBE0YNAiAGRQ0GIA9BAE4EQCAEIA9BAnRqIAY2AgAgBSADIA9BA3RqKQMANwNADAQLIAANAQtBACELDAULIAVBQGsgBiACEKgBIAUoAkwhDAwCCyAPQX9KDQMLQQAhASAARQ0ECyAIQf//e3EiDiAIIAhBgMAAcRshBkEAIQtBpAghDyAQIQgCQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQCAMQQFrLAAAIgFBX3EgASABQQ9xQQNGGyABIBIbIgFB2ABrDiEEEhISEhISEhIOEg8GDg4OEgYSEhISAgUDEhIJEgESEgQACwJAIAFBwQBrDgcOEgsSDg4OAAsgAUHTAEYNCQwRCyAFKQNAIRRBpAgMBQtBACEBAkACQAJAAkACQAJAAkAgEkH/AXEOCAABAgMEFwUGFwsgBSgCQCANNgIADBYLIAUoAkAgDTYCAAwVCyAFKAJAIA2sNwMADBQLIAUoAkAgDTsBAAwTCyAFKAJAIA06AAAMEgsgBSgCQCANNgIADBELIAUoAkAgDaw3AwAMEAsgCUEIIAlBCEsbIQkgBkEIciEGQfgAIQELIBAhByABQSBxIQ4gBSkDQCIUUEUEQANAIAdBAWsiByAUp0EPcUGAhwFqLQAAIA5yOgAAIBRCD1YhDCAUQgSIIRQgDA0ACwsgBSkDQFANAyAGQQhxRQ0DIAFBBHZBpAhqIQ9BAiELDAMLIBAhASAFKQNAIhRQRQRAA0AgAUEBayIBIBSnQQdxQTByOgAAIBRCB1YhByAUQgOIIRQgBw0ACwsgASEHIAZBCHFFDQIgCSAQIAdrIgFBAWogASAJSBshCQwCCyAFKQNAIhRCf1cEQCAFQgAgFH0iFDcDQEEBIQtBpAgMAQsgBkGAEHEEQEEBIQtBpQgMAQtBpghBpAggBkEBcSILGwshDyAUIBAQRCEHCyAGQf//e3EgBiAJQX9KGyEGAkAgBSkDQCIUQgBSDQAgCQ0AQQAhCSAQIQcMCgsgCSAUUCAQIAdraiIBIAEgCUgbIQkMCQsgBSgCQCIBQdgSIAEbIgdBACAJEKsBIgEgByAJaiABGyEIIA4hBiABIAdrIAkgARshCQwICyAJBEAgBSgCQAwCC0EAIQEgAEEgIApBACAGECYMAgsgBUEANgIMIAUgBSkDQD4CCCAFIAVBCGo2AkBBfyEJIAVBCGoLIQhBACEBAkADQCAIKAIAIgdFDQECQCAFQQRqIAcQqgEiB0EASCIODQAgByAJIAFrSw0AIAhBBGohCCAJIAEgB2oiAUsNAQwCCwtBfyELIA4NBQsgAEEgIAogASAGECYgAUUEQEEAIQEMAQtBACEIIAUoAkAhDANAIAwoAgAiB0UNASAFQQRqIAcQqgEiByAIaiIIIAFKDQEgACAFQQRqIAcQIiAMQQRqIQwgASAISw0ACwsgAEEgIAogASAGQYDAAHMQJiAKIAEgASAKSBshAQwFCyAAIAUrA0AgCiAJIAYgAUEXERkAIQEMBAsgBSAFKQNAPAA3QQEhCSATIQcgDiEGDAILQX8hCwsgBUHQAGokACALDwsgAEEgIAsgCCAHayIOIAkgCSAOSBsiDGoiCCAKIAggCkobIgEgCCAGECYgACAPIAsQIiAAQTAgASAIIAZBgIAEcxAmIABBMCAMIA5BABAmIAAgByAOECIgAEEgIAEgCCAGQYDAAHMQJgwACwALkAIBA38CQCABIAIoAhAiBAR/IAQFQQAhBAJ/IAIgAi0ASiIDQQFrIANyOgBKIAIoAgAiA0EIcQRAIAIgA0EgcjYCAEF/DAELIAJCADcCBCACIAIoAiwiAzYCHCACIAM2AhQgAiADIAIoAjBqNgIQQQALDQEgAigCEAsgAigCFCIFa0sEQCACIAAgASACKAIkEQEADwsCfyACLABLQX9KBEAgASEEA0AgASAEIgNFDQIaIAAgA0EBayIEai0AAEEKRw0ACyACIAAgAyACKAIkEQEAIgQgA0kNAiAAIANqIQAgAigCFCEFIAEgA2sMAQsgAQshBCAFIAAgBBAZGiACIAIoAhQgBGo2AhQgASEECyAEC0gCAX8BfiMAQRBrIgMkACADIAA2AgwgAyABNgIIIAMgAjYCBCADKAIMIAMoAgggAygCBCADKAIMQQhqEFghBCADQRBqJAAgBAt3AQF/IwBBEGsiASAANgIIIAFChSo3AwACQCABKAIIRQRAIAFBADYCDAwBCwNAIAEoAggtAAAEQCABIAEoAggtAACtIAEpAwBCIX58Qv////8PgzcDACABIAEoAghBAWo2AggMAQsLIAEgASkDAD4CDAsgASgCDAuHBQEBfyMAQTBrIgUkACAFIAA2AiggBSABNgIkIAUgAjcDGCAFIAM2AhQgBSAENgIQAkACQAJAIAUoAihFDQAgBSgCJEUNACAFKQMYQv///////////wBYDQELIAUoAhBBEkEAEBQgBUEAOgAvDAELIAUoAigoAgBFBEAgBSgCKEGAAiAFKAIQEFpBAXFFBEAgBUEAOgAvDAILCyAFIAUoAiQQczYCDCAFIAUoAgwgBSgCKCgCAHA2AgggBSAFKAIoKAIQIAUoAghBAnRqKAIANgIEA0ACQCAFKAIERQ0AAkAgBSgCBCgCHCAFKAIMRw0AIAUoAiQgBSgCBCgCABBbDQACQAJAIAUoAhRBCHEEQCAFKAIEKQMIQn9SDQELIAUoAgQpAxBCf1ENAQsgBSgCEEEKQQAQFCAFQQA6AC8MBAsMAQsgBSAFKAIEKAIYNgIEDAELCyAFKAIERQRAIAVBIBAYIgA2AgQgAEUEQCAFKAIQQQ5BABAUIAVBADoALwwCCyAFKAIEIAUoAiQ2AgAgBSgCBCAFKAIoKAIQIAUoAghBAnRqKAIANgIYIAUoAigoAhAgBSgCCEECdGogBSgCBDYCACAFKAIEIAUoAgw2AhwgBSgCBEJ/NwMIIAUoAigiACAAKQMIQgF8NwMIAkAgBSgCKCIAKQMIuiAAKAIAuEQAAAAAAADoP6JkRQ0AIAUoAigoAgBBgICAgHhPDQAgBSgCKCAFKAIoKAIAQQF0IAUoAhAQWkEBcUUEQCAFQQA6AC8MAwsLCyAFKAIUQQhxBEAgBSgCBCAFKQMYNwMICyAFKAIEIAUpAxg3AxAgBUEBOgAvCyAFLQAvQQFxIQAgBUEwaiQAIAAL1BEBAX8jAEGwAWsiBiQAIAYgADYCqAEgBiABNgKkASAGIAI2AqABIAYgAzYCnAEgBiAENgKYASAGIAU2ApQBIAZBADYCkAEDQCAGKAKQAUEPS0UEQCAGQSBqIAYoApABQQF0akEAOwEAIAYgBigCkAFBAWo2ApABDAELCyAGQQA2AowBA0AgBigCjAEgBigCoAFPRQRAIAZBIGogBigCpAEgBigCjAFBAXRqLwEAQQF0aiIAIAAvAQBBAWo7AQAgBiAGKAKMAUEBajYCjAEMAQsLIAYgBigCmAEoAgA2AoABIAZBDzYChAEDQAJAIAYoAoQBQQFJDQAgBkEgaiAGKAKEAUEBdGovAQANACAGIAYoAoQBQQFrNgKEAQwBCwsgBigCgAEgBigChAFLBEAgBiAGKAKEATYCgAELAkAgBigChAFFBEAgBkHAADoAWCAGQQE6AFkgBkEAOwFaIAYoApwBIgEoAgAhACABIABBBGo2AgAgACAGQdgAaigBADYBACAGKAKcASIBKAIAIQAgASAAQQRqNgIAIAAgBkHYAGooAQA2AQAgBigCmAFBATYCACAGQQA2AqwBDAELIAZBATYCiAEDQAJAIAYoAogBIAYoAoQBTw0AIAZBIGogBigCiAFBAXRqLwEADQAgBiAGKAKIAUEBajYCiAEMAQsLIAYoAoABIAYoAogBSQRAIAYgBigCiAE2AoABCyAGQQE2AnQgBkEBNgKQAQNAIAYoApABQQ9NBEAgBiAGKAJ0QQF0NgJ0IAYgBigCdCAGQSBqIAYoApABQQF0ai8BAGs2AnQgBigCdEEASARAIAZBfzYCrAEMAwUgBiAGKAKQAUEBajYCkAEMAgsACwsCQCAGKAJ0QQBMDQAgBigCqAEEQCAGKAKEAUEBRg0BCyAGQX82AqwBDAELIAZBADsBAiAGQQE2ApABA0AgBigCkAFBD09FBEAgBigCkAFBAWpBAXQgBmogBigCkAFBAXQgBmovAQAgBkEgaiAGKAKQAUEBdGovAQBqOwEAIAYgBigCkAFBAWo2ApABDAELCyAGQQA2AowBA0AgBigCjAEgBigCoAFJBEAgBigCpAEgBigCjAFBAXRqLwEABEAgBigClAEhASAGKAKkASAGKAKMASICQQF0ai8BAEEBdCAGaiIDLwEAIQAgAyAAQQFqOwEAIABB//8DcUEBdCABaiACOwEACyAGIAYoAowBQQFqNgKMAQwBCwsCQAJAAkACQCAGKAKoAQ4CAAECCyAGIAYoApQBIgA2AkwgBiAANgJQIAZBFDYCSAwCCyAGQYDwADYCUCAGQcDwADYCTCAGQYECNgJIDAELIAZBgPEANgJQIAZBwPEANgJMIAZBADYCSAsgBkEANgJsIAZBADYCjAEgBiAGKAKIATYCkAEgBiAGKAKcASgCADYCVCAGIAYoAoABNgJ8IAZBADYCeCAGQX82AmAgBkEBIAYoAoABdDYCcCAGIAYoAnBBAWs2AlwCQAJAIAYoAqgBQQFGBEAgBigCcEHUBksNAQsgBigCqAFBAkcNASAGKAJwQdAETQ0BCyAGQQE2AqwBDAELA0AgBiAGKAKQASAGKAJ4azoAWQJAIAYoAkggBigClAEgBigCjAFBAXRqLwEAQQFqSwRAIAZBADoAWCAGIAYoApQBIAYoAowBQQF0ai8BADsBWgwBCwJAIAYoApQBIAYoAowBQQF0ai8BACAGKAJITwRAIAYgBigCTCAGKAKUASAGKAKMAUEBdGovAQAgBigCSGtBAXRqLwEAOgBYIAYgBigCUCAGKAKUASAGKAKMAUEBdGovAQAgBigCSGtBAXRqLwEAOwFaDAELIAZB4AA6AFggBkEAOwFaCwsgBkEBIAYoApABIAYoAnhrdDYCaCAGQQEgBigCfHQ2AmQgBiAGKAJkNgKIAQNAIAYgBigCZCAGKAJoazYCZCAGKAJUIAYoAmQgBigCbCAGKAJ4dmpBAnRqIAZB2ABqKAEANgEAIAYoAmQNAAsgBkEBIAYoApABQQFrdDYCaANAIAYoAmwgBigCaHEEQCAGIAYoAmhBAXY2AmgMAQsLAkAgBigCaARAIAYgBigCbCAGKAJoQQFrcTYCbCAGIAYoAmggBigCbGo2AmwMAQsgBkEANgJsCyAGIAYoAowBQQFqNgKMASAGQSBqIAYoApABQQF0aiIBLwEAQQFrIQAgASAAOwEAAkAgAEH//wNxRQRAIAYoApABIAYoAoQBRg0BIAYgBigCpAEgBigClAEgBigCjAFBAXRqLwEAQQF0ai8BADYCkAELAkAgBigCkAEgBigCgAFNDQAgBigCYCAGKAJsIAYoAlxxRg0AIAYoAnhFBEAgBiAGKAKAATYCeAsgBiAGKAJUIAYoAogBQQJ0ajYCVCAGIAYoApABIAYoAnhrNgJ8IAZBASAGKAJ8dDYCdANAAkAgBigChAEgBigCfCAGKAJ4ak0NACAGIAYoAnQgBkEgaiAGKAJ8IAYoAnhqQQF0ai8BAGs2AnQgBigCdEEATA0AIAYgBigCfEEBajYCfCAGIAYoAnRBAXQ2AnQMAQsLIAYgBigCcEEBIAYoAnx0ajYCcAJAAkAgBigCqAFBAUYEQCAGKAJwQdQGSw0BCyAGKAKoAUECRw0BIAYoAnBB0ARNDQELIAZBATYCrAEMBAsgBiAGKAJsIAYoAlxxNgJgIAYoApwBKAIAIAYoAmBBAnRqIAYoAnw6AAAgBigCnAEoAgAgBigCYEECdGogBigCgAE6AAEgBigCnAEoAgAgBigCYEECdGogBigCVCAGKAKcASgCAGtBAnU7AQILDAELCyAGKAJsBEAgBkHAADoAWCAGIAYoApABIAYoAnhrOgBZIAZBADsBWiAGKAJUIAYoAmxBAnRqIAZB2ABqKAEANgEACyAGKAKcASIAIAAoAgAgBigCcEECdGo2AgAgBigCmAEgBigCgAE2AgAgBkEANgKsAQsgBigCrAEhACAGQbABaiQAIAALsQIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADKAIYKAIENgIMIAMoAgwgAygCEEsEQCADIAMoAhA2AgwLAkAgAygCDEUEQCADQQA2AhwMAQsgAygCGCIAIAAoAgQgAygCDGs2AgQgAygCFCADKAIYKAIAIAMoAgwQGRoCQCADKAIYKAIcKAIYQQFGBEAgAygCGCgCMCADKAIUIAMoAgwQPSEAIAMoAhggADYCMAwBCyADKAIYKAIcKAIYQQJGBEAgAygCGCgCMCADKAIUIAMoAgwQGiEAIAMoAhggADYCMAsLIAMoAhgiACADKAIMIAAoAgBqNgIAIAMoAhgiACADKAIMIAAoAghqNgIIIAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzYBAX8jAEEQayIBJAAgASAANgIMIAEoAgwQXiABKAIMKAIAEDcgASgCDCgCBBA3IAFBEGokAAvtAQEBfyMAQRBrIgEgADYCCAJAAkACQCABKAIIRQ0AIAEoAggoAiBFDQAgASgCCCgCJA0BCyABQQE2AgwMAQsgASABKAIIKAIcNgIEAkACQCABKAIERQ0AIAEoAgQoAgAgASgCCEcNACABKAIEKAIEQSpGDQEgASgCBCgCBEE5Rg0BIAEoAgQoAgRBxQBGDQEgASgCBCgCBEHJAEYNASABKAIEKAIEQdsARg0BIAEoAgQoAgRB5wBGDQEgASgCBCgCBEHxAEYNASABKAIEKAIEQZoFRg0BCyABQQE2AgwMAQsgAUEANgIMCyABKAIMC9IEAQF/IwBBIGsiAyAANgIcIAMgATYCGCADIAI2AhQgAyADKAIcQdwWaiADKAIUQQJ0aigCADYCECADIAMoAhRBAXQ2AgwDQAJAIAMoAgwgAygCHCgC0ChKDQACQCADKAIMIAMoAhwoAtAoTg0AIAMoAhggAygCHCADKAIMQQJ0akHgFmooAgBBAnRqLwEAIAMoAhggAygCHEHcFmogAygCDEECdGooAgBBAnRqLwEATgRAIAMoAhggAygCHCADKAIMQQJ0akHgFmooAgBBAnRqLwEAIAMoAhggAygCHEHcFmogAygCDEECdGooAgBBAnRqLwEARw0BIAMoAhwgAygCDEECdGpB4BZqKAIAIAMoAhxB2Chqai0AACADKAIcQdwWaiADKAIMQQJ0aigCACADKAIcQdgoamotAABKDQELIAMgAygCDEEBajYCDAsgAygCGCADKAIQQQJ0ai8BACADKAIYIAMoAhxB3BZqIAMoAgxBAnRqKAIAQQJ0ai8BAEgNAAJAIAMoAhggAygCEEECdGovAQAgAygCGCADKAIcQdwWaiADKAIMQQJ0aigCAEECdGovAQBHDQAgAygCECADKAIcQdgoamotAAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyAB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AG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=\";ug(yo)||(yo=h(yo));function gg(d){try{if(d==yo&&V)return new Uint8Array(V);var E=Ca(d);if(E)return E;if(C)return C(d);throw\"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)\"}catch(I){wr(I)}}function Bp(d,E){var I,k,L;try{L=gg(d),k=new WebAssembly.Module(L),I=new WebAssembly.Instance(k,E)}catch(te){var Z=te.toString();throw D(\"failed to compile wasm module: \"+Z),(Z.includes(\"imported Memory\")||Z.includes(\"memory import\"))&&D(\"Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).\"),te}return[I,k]}function bp(){var d={a:ma};function E(L,Z){var te=L.exports;t.asm=te,A=t.asm.u,Mr(A.buffer),gi=t.asm.pa,dA(t.asm.v),EA(\"wasm-instantiate\")}if(mA(\"wasm-instantiate\"),t.instantiateWasm)try{var I=t.instantiateWasm(d,E);return I}catch(L){return D(\"Module.instantiateWasm callback failed with error: \"+L),!1}var k=Bp(yo,d);return E(k[0]),t.asm}var vr,se;function wo(d){for(;d.length>0;){var E=d.shift();if(typeof E==\"function\"){E(t);continue}var I=E.func;typeof I==\"number\"?E.arg===void 0?gi.get(I)():gi.get(I)(E.arg):I(E.arg===void 0?null:E.arg)}}function Fn(d,E){var I=new Date(de[d>>2]*1e3);de[E>>2]=I.getUTCSeconds(),de[E+4>>2]=I.getUTCMinutes(),de[E+8>>2]=I.getUTCHours(),de[E+12>>2]=I.getUTCDate(),de[E+16>>2]=I.getUTCMonth(),de[E+20>>2]=I.getUTCFullYear()-1900,de[E+24>>2]=I.getUTCDay(),de[E+36>>2]=0,de[E+32>>2]=0;var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[E+28>>2]=L,Fn.GMTString||(Fn.GMTString=Be(\"GMT\")),de[E+40>>2]=Fn.GMTString,E}function fg(d,E){return Fn(d,E)}var bt={splitPath:function(d){var E=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return E.exec(d).slice(1)},normalizeArray:function(d,E){for(var I=0,k=d.length-1;k>=0;k--){var L=d[k];L===\".\"?d.splice(k,1):L===\"..\"?(d.splice(k,1),I++):I&&(d.splice(k,1),I--)}if(E)for(;I;I--)d.unshift(\"..\");return d},normalize:function(d){var E=d.charAt(0)===\"/\",I=d.substr(-1)===\"/\";return d=bt.normalizeArray(d.split(\"/\").filter(function(k){return!!k}),!E).join(\"/\"),!d&&!E&&(d=\".\"),d&&I&&(d+=\"/\"),(E?\"/\":\"\")+d},dirname:function(d){var E=bt.splitPath(d),I=E[0],k=E[1];return!I&&!k?\".\":(k&&(k=k.substr(0,k.length-1)),I+k)},basename:function(d){if(d===\"/\")return\"/\";d=bt.normalize(d),d=d.replace(/\\/$/,\"\");var E=d.lastIndexOf(\"/\");return E===-1?d:d.substr(E+1)},extname:function(d){return bt.splitPath(d)[3]},join:function(){var d=Array.prototype.slice.call(arguments,0);return bt.normalize(d.join(\"/\"))},join2:function(d,E){return bt.normalize(d+\"/\"+E)}};function Ll(){if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\"){var d=new Uint8Array(1);return function(){return crypto.getRandomValues(d),d[0]}}else if(g)try{var E=J(\"crypto\");return function(){return E.randomBytes(1)[0]}}catch{}return function(){wr(\"randomDevice\")}}var Nn={resolve:function(){for(var d=\"\",E=!1,I=arguments.length-1;I>=-1&&!E;I--){var k=I>=0?arguments[I]:S.cwd();if(typeof k!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!k)return\"\";d=k+\"/\"+d,E=k.charAt(0)===\"/\"}return d=bt.normalizeArray(d.split(\"/\").filter(function(L){return!!L}),!E).join(\"/\"),(E?\"/\":\"\")+d||\".\"},relative:function(d,E){d=Nn.resolve(d).substr(1),E=Nn.resolve(E).substr(1);function I(Je){for(var nt=0;nt<Je.length&&Je[nt]===\"\";nt++);for(var wt=Je.length-1;wt>=0&&Je[wt]===\"\";wt--);return nt>wt?[]:Je.slice(nt,wt-nt+1)}for(var k=I(d.split(\"/\")),L=I(E.split(\"/\")),Z=Math.min(k.length,L.length),te=Z,we=0;we<Z;we++)if(k[we]!==L[we]){te=we;break}for(var me=[],we=te;we<k.length;we++)me.push(\"..\");return me=me.concat(L.slice(te)),me.join(\"/\")}},ns={ttys:[],init:function(){},shutdown:function(){},register:function(d,E){ns.ttys[d]={input:[],output:[],ops:E},S.registerDevice(d,ns.stream_ops)},stream_ops:{open:function(d){var E=ns.ttys[d.node.rdev];if(!E)throw new S.ErrnoError(43);d.tty=E,d.seekable=!1},close:function(d){d.tty.ops.flush(d.tty)},flush:function(d){d.tty.ops.flush(d.tty)},read:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.get_char)throw new S.ErrnoError(60);for(var Z=0,te=0;te<k;te++){var we;try{we=d.tty.ops.get_char(d.tty)}catch{throw new S.ErrnoError(29)}if(we===void 0&&Z===0)throw new S.ErrnoError(6);if(we==null)break;Z++,E[I+te]=we}return Z&&(d.node.timestamp=Date.now()),Z},write:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.put_char)throw new S.ErrnoError(60);try{for(var Z=0;Z<k;Z++)d.tty.ops.put_char(d.tty,E[I+Z])}catch{throw new S.ErrnoError(29)}return k&&(d.node.timestamp=Date.now()),Z}},default_tty_ops:{get_char:function(d){if(!d.input.length){var E=null;if(g){var I=256,k=Buffer.alloc?Buffer.alloc(I):new Buffer(I),L=0;try{L=y.readSync(process.stdin.fd,k,0,I,null)}catch(Z){if(Z.toString().includes(\"EOF\"))L=0;else throw Z}L>0?E=k.slice(0,L).toString(\"utf-8\"):E=null}else typeof window<\"u\"&&typeof window.prompt==\"function\"?(E=window.prompt(\"Input: \"),E!==null&&(E+=`\n`)):typeof readline==\"function\"&&(E=readline(),E!==null&&(E+=`\n`));if(!E)return null;d.input=yA(E,!0)}return d.input.shift()},put_char:function(d,E){E===null||E===10?(v(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(v(ke(d.output,0)),d.output=[])}},default_tty1_ops:{put_char:function(d,E){E===null||E===10?(D(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(D(ke(d.output,0)),d.output=[])}}};function ss(d){for(var E=H(d,65536),I=dt(E);d<E;)ne[I+d++]=0;return I}var gt={ops_table:null,mount:function(d){return gt.createNode(null,\"/\",16895,0)},createNode:function(d,E,I,k){if(S.isBlkdev(I)||S.isFIFO(I))throw new S.ErrnoError(63);gt.ops_table||(gt.ops_table={dir:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,lookup:gt.node_ops.lookup,mknod:gt.node_ops.mknod,rename:gt.node_ops.rename,unlink:gt.node_ops.unlink,rmdir:gt.node_ops.rmdir,readdir:gt.node_ops.readdir,symlink:gt.node_ops.symlink},stream:{llseek:gt.stream_ops.llseek}},file:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:{llseek:gt.stream_ops.llseek,read:gt.stream_ops.read,write:gt.stream_ops.write,allocate:gt.stream_ops.allocate,mmap:gt.stream_ops.mmap,msync:gt.stream_ops.msync}},link:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,readlink:gt.node_ops.readlink},stream:{}},chrdev:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:S.chrdev_stream_ops}});var L=S.createNode(d,E,I,k);return S.isDir(L.mode)?(L.node_ops=gt.ops_table.dir.node,L.stream_ops=gt.ops_table.dir.stream,L.contents={}):S.isFile(L.mode)?(L.node_ops=gt.ops_table.file.node,L.stream_ops=gt.ops_table.file.stream,L.usedBytes=0,L.contents=null):S.isLink(L.mode)?(L.node_ops=gt.ops_table.link.node,L.stream_ops=gt.ops_table.link.stream):S.isChrdev(L.mode)&&(L.node_ops=gt.ops_table.chrdev.node,L.stream_ops=gt.ops_table.chrdev.stream),L.timestamp=Date.now(),d&&(d.contents[E]=L,d.timestamp=L.timestamp),L},getFileDataAsTypedArray:function(d){return d.contents?d.contents.subarray?d.contents.subarray(0,d.usedBytes):new Uint8Array(d.contents):new Uint8Array(0)},expandFileStorage:function(d,E){var I=d.contents?d.contents.length:0;if(!(I>=E)){var k=1024*1024;E=Math.max(E,I*(I<k?2:1.125)>>>0),I!=0&&(E=Math.max(E,256));var L=d.contents;d.contents=new Uint8Array(E),d.usedBytes>0&&d.contents.set(L.subarray(0,d.usedBytes),0)}},resizeFileStorage:function(d,E){if(d.usedBytes!=E)if(E==0)d.contents=null,d.usedBytes=0;else{var I=d.contents;d.contents=new Uint8Array(E),I&&d.contents.set(I.subarray(0,Math.min(E,d.usedBytes))),d.usedBytes=E}},node_ops:{getattr:function(d){var E={};return E.dev=S.isChrdev(d.mode)?d.id:1,E.ino=d.id,E.mode=d.mode,E.nlink=1,E.uid=0,E.gid=0,E.rdev=d.rdev,S.isDir(d.mode)?E.size=4096:S.isFile(d.mode)?E.size=d.usedBytes:S.isLink(d.mode)?E.size=d.link.length:E.size=0,E.atime=new Date(d.timestamp),E.mtime=new Date(d.timestamp),E.ctime=new Date(d.timestamp),E.blksize=4096,E.blocks=Math.ceil(E.size/E.blksize),E},setattr:function(d,E){E.mode!==void 0&&(d.mode=E.mode),E.timestamp!==void 0&&(d.timestamp=E.timestamp),E.size!==void 0&&gt.resizeFileStorage(d,E.size)},lookup:function(d,E){throw S.genericErrors[44]},mknod:function(d,E,I,k){return gt.createNode(d,E,I,k)},rename:function(d,E,I){if(S.isDir(d.mode)){var k;try{k=S.lookupNode(E,I)}catch{}if(k)for(var L in k.contents)throw new S.ErrnoError(55)}delete d.parent.contents[d.name],d.parent.timestamp=Date.now(),d.name=I,E.contents[I]=d,E.timestamp=d.parent.timestamp,d.parent=E},unlink:function(d,E){delete d.contents[E],d.timestamp=Date.now()},rmdir:function(d,E){var I=S.lookupNode(d,E);for(var k in I.contents)throw new S.ErrnoError(55);delete d.contents[E],d.timestamp=Date.now()},readdir:function(d){var E=[\".\",\"..\"];for(var I in d.contents)!d.contents.hasOwnProperty(I)||E.push(I);return E},symlink:function(d,E,I){var k=gt.createNode(d,E,41471,0);return k.link=I,k},readlink:function(d){if(!S.isLink(d.mode))throw new S.ErrnoError(28);return d.link}},stream_ops:{read:function(d,E,I,k,L){var Z=d.node.contents;if(L>=d.node.usedBytes)return 0;var te=Math.min(d.node.usedBytes-L,k);if(te>8&&Z.subarray)E.set(Z.subarray(L,L+te),I);else for(var we=0;we<te;we++)E[I+we]=Z[L+we];return te},write:function(d,E,I,k,L,Z){if(E.buffer===ne.buffer&&(Z=!1),!k)return 0;var te=d.node;if(te.timestamp=Date.now(),E.subarray&&(!te.contents||te.contents.subarray)){if(Z)return te.contents=E.subarray(I,I+k),te.usedBytes=k,k;if(te.usedBytes===0&&L===0)return te.contents=E.slice(I,I+k),te.usedBytes=k,k;if(L+k<=te.usedBytes)return te.contents.set(E.subarray(I,I+k),L),k}if(gt.expandFileStorage(te,L+k),te.contents.subarray&&E.subarray)te.contents.set(E.subarray(I,I+k),L);else for(var we=0;we<k;we++)te.contents[L+we]=E[I+we];return te.usedBytes=Math.max(te.usedBytes,L+k),k},llseek:function(d,E,I){var k=E;if(I===1?k+=d.position:I===2&&S.isFile(d.node.mode)&&(k+=d.node.usedBytes),k<0)throw new S.ErrnoError(28);return k},allocate:function(d,E,I){gt.expandFileStorage(d.node,E+I),d.node.usedBytes=Math.max(d.node.usedBytes,E+I)},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te,we,me=d.node.contents;if(!(Z&2)&&me.buffer===qe)we=!1,te=me.byteOffset;else{if((k>0||k+I<me.length)&&(me.subarray?me=me.subarray(k,k+I):me=Array.prototype.slice.call(me,k,k+I)),we=!0,te=ss(I),!te)throw new S.ErrnoError(48);ne.set(me,te)}return{ptr:te,allocated:we}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=gt.stream_ops.write(d,E,0,k,I,!1);return 0}}},Bo={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},At={isWindows:!1,staticInit:function(){At.isWindows=!!process.platform.match(/^win/);var d={fs:Le.constants};d.fs&&(d=d.fs),At.flagsForNodeMap={1024:d.O_APPEND,64:d.O_CREAT,128:d.O_EXCL,256:d.O_NOCTTY,0:d.O_RDONLY,2:d.O_RDWR,4096:d.O_SYNC,512:d.O_TRUNC,1:d.O_WRONLY}},bufferFrom:function(d){return Buffer.alloc?Buffer.from(d):new Buffer(d)},convertNodeCode:function(d){var E=d.code;return Bo[E]},mount:function(d){return At.createNode(null,\"/\",At.getMode(d.opts.root),0)},createNode:function(d,E,I,k){if(!S.isDir(I)&&!S.isFile(I)&&!S.isLink(I))throw new S.ErrnoError(28);var L=S.createNode(d,E,I);return L.node_ops=At.node_ops,L.stream_ops=At.stream_ops,L},getMode:function(d){var E;try{E=Le.lstatSync(d),At.isWindows&&(E.mode=E.mode|(E.mode&292)>>2)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}return E.mode},realPath:function(d){for(var E=[];d.parent!==d;)E.push(d.name),d=d.parent;return E.push(d.mount.opts.root),E.reverse(),bt.join.apply(null,E)},flagsForNode:function(d){d&=-2097153,d&=-2049,d&=-32769,d&=-524289;var E=0;for(var I in At.flagsForNodeMap)d&I&&(E|=At.flagsForNodeMap[I],d^=I);if(d)throw new S.ErrnoError(28);return E},node_ops:{getattr:function(d){var E=At.realPath(d),I;try{I=Le.lstatSync(E)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}return At.isWindows&&!I.blksize&&(I.blksize=4096),At.isWindows&&!I.blocks&&(I.blocks=(I.size+I.blksize-1)/I.blksize|0),{dev:I.dev,ino:I.ino,mode:I.mode,nlink:I.nlink,uid:I.uid,gid:I.gid,rdev:I.rdev,size:I.size,atime:I.atime,mtime:I.mtime,ctime:I.ctime,blksize:I.blksize,blocks:I.blocks}},setattr:function(d,E){var I=At.realPath(d);try{if(E.mode!==void 0&&(Le.chmodSync(I,E.mode),d.mode=E.mode),E.timestamp!==void 0){var k=new Date(E.timestamp);Le.utimesSync(I,k,k)}E.size!==void 0&&Le.truncateSync(I,E.size)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},lookup:function(d,E){var I=bt.join2(At.realPath(d),E),k=At.getMode(I);return At.createNode(d,E,k)},mknod:function(d,E,I,k){var L=At.createNode(d,E,I,k),Z=At.realPath(L);try{S.isDir(L.mode)?Le.mkdirSync(Z,L.mode):Le.writeFileSync(Z,\"\",{mode:L.mode})}catch(te){throw te.code?new S.ErrnoError(At.convertNodeCode(te)):te}return L},rename:function(d,E,I){var k=At.realPath(d),L=bt.join2(At.realPath(E),I);try{Le.renameSync(k,L)}catch(Z){throw Z.code?new S.ErrnoError(At.convertNodeCode(Z)):Z}d.name=I},unlink:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.unlinkSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},rmdir:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.rmdirSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},readdir:function(d){var E=At.realPath(d);try{return Le.readdirSync(E)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},symlink:function(d,E,I){var k=bt.join2(At.realPath(d),E);try{Le.symlinkSync(I,k)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},readlink:function(d){var E=At.realPath(d);try{return E=Le.readlinkSync(E),E=dg.relative(dg.resolve(d.mount.opts.root),E),E}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}}},stream_ops:{open:function(d){var E=At.realPath(d.node);try{S.isFile(d.node.mode)&&(d.nfd=Le.openSync(E,At.flagsForNode(d.flags)))}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},close:function(d){try{S.isFile(d.node.mode)&&d.nfd&&Le.closeSync(d.nfd)}catch(E){throw E.code?new S.ErrnoError(At.convertNodeCode(E)):E}},read:function(d,E,I,k,L){if(k===0)return 0;try{return Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},write:function(d,E,I,k,L){try{return Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},llseek:function(d,E,I){var k=E;if(I===1)k+=d.position;else if(I===2&&S.isFile(d.node.mode))try{var L=Le.fstatSync(d.nfd);k+=L.size}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}if(k<0)throw new S.ErrnoError(28);return k},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te=ss(I);return At.stream_ops.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=At.stream_ops.write(d,E,0,k,I,!1);return 0}}},ln={lookupPath:function(d){return{path:d,node:{mode:At.getMode(d)}}},createStandardStreams:function(){S.streams[0]={fd:0,nfd:0,position:0,path:\"\",flags:0,tty:!0,seekable:!1};for(var d=1;d<3;d++)S.streams[d]={fd:d,nfd:d,position:0,path:\"\",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(d,E){S.isDir(d)?Le.mkdirSync(d,E):Le.writeFileSync(d,\"\",{mode:E})},mkdir:function(){Le.mkdirSync.apply(void 0,arguments)},symlink:function(){Le.symlinkSync.apply(void 0,arguments)},rename:function(){Le.renameSync.apply(void 0,arguments)},rmdir:function(){Le.rmdirSync.apply(void 0,arguments)},readdir:function(){Le.readdirSync.apply(void 0,arguments)},unlink:function(){Le.unlinkSync.apply(void 0,arguments)},readlink:function(){return Le.readlinkSync.apply(void 0,arguments)},stat:function(){return Le.statSync.apply(void 0,arguments)},lstat:function(){return Le.lstatSync.apply(void 0,arguments)},chmod:function(){Le.chmodSync.apply(void 0,arguments)},fchmod:function(){Le.fchmodSync.apply(void 0,arguments)},chown:function(){Le.chownSync.apply(void 0,arguments)},fchown:function(){Le.fchownSync.apply(void 0,arguments)},truncate:function(){Le.truncateSync.apply(void 0,arguments)},ftruncate:function(d,E){if(E<0)throw new S.ErrnoError(28);Le.ftruncateSync.apply(void 0,arguments)},utime:function(){Le.utimesSync.apply(void 0,arguments)},open:function(d,E,I,k){typeof E==\"string\"&&(E=Hs.modeStringToFlags(E));var L=Le.openSync(d,At.flagsForNode(E),I),Z=k!=null?k:S.nextfd(L),te={fd:Z,nfd:L,position:0,path:d,flags:E,seekable:!0};return S.streams[Z]=te,te},close:function(d){d.stream_ops||Le.closeSync(d.nfd),S.closeStream(d.fd)},llseek:function(d,E,I){if(d.stream_ops)return Hs.llseek(d,E,I);var k=E;if(I===1)k+=d.position;else if(I===2)k+=Le.fstatSync(d.nfd).size;else if(I!==0)throw new S.ErrnoError(Bo.EINVAL);if(k<0)throw new S.ErrnoError(Bo.EINVAL);return d.position=k,k},read:function(d,E,I,k,L){if(d.stream_ops)return Hs.read(d,E,I,k,L);var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L){if(d.stream_ops)return Hs.write(d,E,I,k,L);d.flags&+\"1024\"&&S.llseek(d,0,+\"2\");var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},allocate:function(){throw new S.ErrnoError(Bo.EOPNOTSUPP)},mmap:function(d,E,I,k,L,Z){if(d.stream_ops)return Hs.mmap(d,E,I,k,L,Z);if(E!==0)throw new S.ErrnoError(28);var te=ss(I);return S.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){return d.stream_ops?Hs.msync(d,E,I,k,L):(L&2||S.write(d,E,0,k,I),0)},munmap:function(){return 0},ioctl:function(){throw new S.ErrnoError(Bo.ENOTTY)}},S={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(d,E){if(d=Nn.resolve(S.cwd(),d),E=E||{},!d)return{path:\"\",node:null};var I={follow_mount:!0,recurse_count:0};for(var k in I)E[k]===void 0&&(E[k]=I[k]);if(E.recurse_count>8)throw new S.ErrnoError(32);for(var L=bt.normalizeArray(d.split(\"/\").filter(function(lt){return!!lt}),!1),Z=S.root,te=\"/\",we=0;we<L.length;we++){var me=we===L.length-1;if(me&&E.parent)break;if(Z=S.lookupNode(Z,L[we]),te=bt.join2(te,L[we]),S.isMountpoint(Z)&&(!me||me&&E.follow_mount)&&(Z=Z.mounted.root),!me||E.follow)for(var Je=0;S.isLink(Z.mode);){var nt=S.readlink(te);te=Nn.resolve(bt.dirname(te),nt);var wt=S.lookupPath(te,{recurse_count:E.recurse_count});if(Z=wt.node,Je++>40)throw new S.ErrnoError(32)}}return{path:te,node:Z}},getPath:function(d){for(var E;;){if(S.isRoot(d)){var I=d.mount.mountpoint;return E?I[I.length-1]!==\"/\"?I+\"/\"+E:I+E:I}E=E?d.name+\"/\"+E:d.name,d=d.parent}},hashName:function(d,E){for(var I=0,k=0;k<E.length;k++)I=(I<<5)-I+E.charCodeAt(k)|0;return(d+I>>>0)%S.nameTable.length},hashAddNode:function(d){var E=S.hashName(d.parent.id,d.name);d.name_next=S.nameTable[E],S.nameTable[E]=d},hashRemoveNode:function(d){var E=S.hashName(d.parent.id,d.name);if(S.nameTable[E]===d)S.nameTable[E]=d.name_next;else for(var I=S.nameTable[E];I;){if(I.name_next===d){I.name_next=d.name_next;break}I=I.name_next}},lookupNode:function(d,E){var I=S.mayLookup(d);if(I)throw new S.ErrnoError(I,d);for(var k=S.hashName(d.id,E),L=S.nameTable[k];L;L=L.name_next){var Z=L.name;if(L.parent.id===d.id&&Z===E)return L}return S.lookup(d,E)},createNode:function(d,E,I,k){var L=new S.FSNode(d,E,I,k);return S.hashAddNode(L),L},destroyNode:function(d){S.hashRemoveNode(d)},isRoot:function(d){return d===d.parent},isMountpoint:function(d){return!!d.mounted},isFile:function(d){return(d&61440)===32768},isDir:function(d){return(d&61440)===16384},isLink:function(d){return(d&61440)===40960},isChrdev:function(d){return(d&61440)===8192},isBlkdev:function(d){return(d&61440)===24576},isFIFO:function(d){return(d&61440)===4096},isSocket:function(d){return(d&49152)===49152},flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:function(d){var E=S.flagModes[d];if(typeof E>\"u\")throw new Error(\"Unknown file open mode: \"+d);return E},flagsToPermissionString:function(d){var E=[\"r\",\"w\",\"rw\"][d&3];return d&512&&(E+=\"w\"),E},nodePermissions:function(d,E){return S.ignorePermissions?0:E.includes(\"r\")&&!(d.mode&292)||E.includes(\"w\")&&!(d.mode&146)||E.includes(\"x\")&&!(d.mode&73)?2:0},mayLookup:function(d){var E=S.nodePermissions(d,\"x\");return E||(d.node_ops.lookup?0:2)},mayCreate:function(d,E){try{var I=S.lookupNode(d,E);return 20}catch{}return S.nodePermissions(d,\"wx\")},mayDelete:function(d,E,I){var k;try{k=S.lookupNode(d,E)}catch(Z){return Z.errno}var L=S.nodePermissions(d,\"wx\");if(L)return L;if(I){if(!S.isDir(k.mode))return 54;if(S.isRoot(k)||S.getPath(k)===S.cwd())return 10}else if(S.isDir(k.mode))return 31;return 0},mayOpen:function(d,E){return d?S.isLink(d.mode)?32:S.isDir(d.mode)&&(S.flagsToPermissionString(E)!==\"r\"||E&512)?31:S.nodePermissions(d,S.flagsToPermissionString(E)):44},MAX_OPEN_FDS:4096,nextfd:function(d,E){d=d||0,E=E||S.MAX_OPEN_FDS;for(var I=d;I<=E;I++)if(!S.streams[I])return I;throw new S.ErrnoError(33)},getStream:function(d){return S.streams[d]},createStream:function(d,E,I){S.FSStream||(S.FSStream=function(){},S.FSStream.prototype={object:{get:function(){return this.node},set:function(te){this.node=te}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}});var k=new S.FSStream;for(var L in d)k[L]=d[L];d=k;var Z=S.nextfd(E,I);return d.fd=Z,S.streams[Z]=d,d},closeStream:function(d){S.streams[d]=null},chrdev_stream_ops:{open:function(d){var E=S.getDevice(d.node.rdev);d.stream_ops=E.stream_ops,d.stream_ops.open&&d.stream_ops.open(d)},llseek:function(){throw new S.ErrnoError(70)}},major:function(d){return d>>8},minor:function(d){return d&255},makedev:function(d,E){return d<<8|E},registerDevice:function(d,E){S.devices[d]={stream_ops:E}},getDevice:function(d){return S.devices[d]},getMounts:function(d){for(var E=[],I=[d];I.length;){var k=I.pop();E.push(k),I.push.apply(I,k.mounts)}return E},syncfs:function(d,E){typeof d==\"function\"&&(E=d,d=!1),S.syncFSRequests++,S.syncFSRequests>1&&D(\"warning: \"+S.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var I=S.getMounts(S.root.mount),k=0;function L(te){return S.syncFSRequests--,E(te)}function Z(te){if(te)return Z.errored?void 0:(Z.errored=!0,L(te));++k>=I.length&&L(null)}I.forEach(function(te){if(!te.type.syncfs)return Z(null);te.type.syncfs(te,d,Z)})},mount:function(d,E,I){var k=I===\"/\",L=!I,Z;if(k&&S.root)throw new S.ErrnoError(10);if(!k&&!L){var te=S.lookupPath(I,{follow_mount:!1});if(I=te.path,Z=te.node,S.isMountpoint(Z))throw new S.ErrnoError(10);if(!S.isDir(Z.mode))throw new S.ErrnoError(54)}var we={type:d,opts:E,mountpoint:I,mounts:[]},me=d.mount(we);return me.mount=we,we.root=me,k?S.root=me:Z&&(Z.mounted=we,Z.mount&&Z.mount.mounts.push(we)),me},unmount:function(d){var E=S.lookupPath(d,{follow_mount:!1});if(!S.isMountpoint(E.node))throw new S.ErrnoError(28);var I=E.node,k=I.mounted,L=S.getMounts(k);Object.keys(S.nameTable).forEach(function(te){for(var we=S.nameTable[te];we;){var me=we.name_next;L.includes(we.mount)&&S.destroyNode(we),we=me}}),I.mounted=null;var Z=I.mount.mounts.indexOf(k);I.mount.mounts.splice(Z,1)},lookup:function(d,E){return d.node_ops.lookup(d,E)},mknod:function(d,E,I){var k=S.lookupPath(d,{parent:!0}),L=k.node,Z=bt.basename(d);if(!Z||Z===\".\"||Z===\"..\")throw new S.ErrnoError(28);var te=S.mayCreate(L,Z);if(te)throw new S.ErrnoError(te);if(!L.node_ops.mknod)throw new S.ErrnoError(63);return L.node_ops.mknod(L,Z,E,I)},create:function(d,E){return E=E!==void 0?E:438,E&=4095,E|=32768,S.mknod(d,E,0)},mkdir:function(d,E){return E=E!==void 0?E:511,E&=1023,E|=16384,S.mknod(d,E,0)},mkdirTree:function(d,E){for(var I=d.split(\"/\"),k=\"\",L=0;L<I.length;++L)if(!!I[L]){k+=\"/\"+I[L];try{S.mkdir(k,E)}catch(Z){if(Z.errno!=20)throw Z}}},mkdev:function(d,E,I){return typeof I>\"u\"&&(I=E,E=438),E|=8192,S.mknod(d,E,I)},symlink:function(d,E){if(!Nn.resolve(d))throw new S.ErrnoError(44);var I=S.lookupPath(E,{parent:!0}),k=I.node;if(!k)throw new S.ErrnoError(44);var L=bt.basename(E),Z=S.mayCreate(k,L);if(Z)throw new S.ErrnoError(Z);if(!k.node_ops.symlink)throw new S.ErrnoError(63);return k.node_ops.symlink(k,L,d)},rename:function(d,E){var I=bt.dirname(d),k=bt.dirname(E),L=bt.basename(d),Z=bt.basename(E),te,we,me;if(te=S.lookupPath(d,{parent:!0}),we=te.node,te=S.lookupPath(E,{parent:!0}),me=te.node,!we||!me)throw new S.ErrnoError(44);if(we.mount!==me.mount)throw new S.ErrnoError(75);var Je=S.lookupNode(we,L),nt=Nn.relative(d,k);if(nt.charAt(0)!==\".\")throw new S.ErrnoError(28);if(nt=Nn.relative(E,I),nt.charAt(0)!==\".\")throw new S.ErrnoError(55);var wt;try{wt=S.lookupNode(me,Z)}catch{}if(Je!==wt){var lt=S.isDir(Je.mode),it=S.mayDelete(we,L,lt);if(it)throw new S.ErrnoError(it);if(it=wt?S.mayDelete(me,Z,lt):S.mayCreate(me,Z),it)throw new S.ErrnoError(it);if(!we.node_ops.rename)throw new S.ErrnoError(63);if(S.isMountpoint(Je)||wt&&S.isMountpoint(wt))throw new S.ErrnoError(10);if(me!==we&&(it=S.nodePermissions(we,\"w\"),it))throw new S.ErrnoError(it);try{S.trackingDelegate.willMovePath&&S.trackingDelegate.willMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['willMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}S.hashRemoveNode(Je);try{we.node_ops.rename(Je,me,Z)}catch(Et){throw Et}finally{S.hashAddNode(Je)}try{S.trackingDelegate.onMovePath&&S.trackingDelegate.onMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['onMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}}},rmdir:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!0);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.rmdir)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.rmdir(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readdir:function(d){var E=S.lookupPath(d,{follow:!0}),I=E.node;if(!I.node_ops.readdir)throw new S.ErrnoError(54);return I.node_ops.readdir(I)},unlink:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!1);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.unlink)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.unlink(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readlink:function(d){var E=S.lookupPath(d),I=E.node;if(!I)throw new S.ErrnoError(44);if(!I.node_ops.readlink)throw new S.ErrnoError(28);return Nn.resolve(S.getPath(I.parent),I.node_ops.readlink(I))},stat:function(d,E){var I=S.lookupPath(d,{follow:!E}),k=I.node;if(!k)throw new S.ErrnoError(44);if(!k.node_ops.getattr)throw new S.ErrnoError(63);return k.node_ops.getattr(k)},lstat:function(d){return S.stat(d,!0)},chmod:function(d,E,I){var k;if(typeof d==\"string\"){var L=S.lookupPath(d,{follow:!I});k=L.node}else k=d;if(!k.node_ops.setattr)throw new S.ErrnoError(63);k.node_ops.setattr(k,{mode:E&4095|k.mode&-4096,timestamp:Date.now()})},lchmod:function(d,E){S.chmod(d,E,!0)},fchmod:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);S.chmod(I.node,E)},chown:function(d,E,I,k){var L;if(typeof d==\"string\"){var Z=S.lookupPath(d,{follow:!k});L=Z.node}else L=d;if(!L.node_ops.setattr)throw new S.ErrnoError(63);L.node_ops.setattr(L,{timestamp:Date.now()})},lchown:function(d,E,I){S.chown(d,E,I,!0)},fchown:function(d,E,I){var k=S.getStream(d);if(!k)throw new S.ErrnoError(8);S.chown(k.node,E,I)},truncate:function(d,E){if(E<0)throw new S.ErrnoError(28);var I;if(typeof d==\"string\"){var k=S.lookupPath(d,{follow:!0});I=k.node}else I=d;if(!I.node_ops.setattr)throw new S.ErrnoError(63);if(S.isDir(I.mode))throw new S.ErrnoError(31);if(!S.isFile(I.mode))throw new S.ErrnoError(28);var L=S.nodePermissions(I,\"w\");if(L)throw new S.ErrnoError(L);I.node_ops.setattr(I,{size:E,timestamp:Date.now()})},ftruncate:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);if((I.flags&2097155)===0)throw new S.ErrnoError(28);S.truncate(I.node,E)},utime:function(d,E,I){var k=S.lookupPath(d,{follow:!0}),L=k.node;L.node_ops.setattr(L,{timestamp:Math.max(E,I)})},open:function(d,E,I,k,L){if(d===\"\")throw new S.ErrnoError(44);E=typeof E==\"string\"?S.modeStringToFlags(E):E,I=typeof I>\"u\"?438:I,E&64?I=I&4095|32768:I=0;var Z;if(typeof d==\"object\")Z=d;else{d=bt.normalize(d);try{var te=S.lookupPath(d,{follow:!(E&131072)});Z=te.node}catch{}}var we=!1;if(E&64)if(Z){if(E&128)throw new S.ErrnoError(20)}else Z=S.mknod(d,I,0),we=!0;if(!Z)throw new S.ErrnoError(44);if(S.isChrdev(Z.mode)&&(E&=-513),E&65536&&!S.isDir(Z.mode))throw new S.ErrnoError(54);if(!we){var me=S.mayOpen(Z,E);if(me)throw new S.ErrnoError(me)}E&512&&S.truncate(Z,0),E&=-131713;var Je=S.createStream({node:Z,path:S.getPath(Z),flags:E,seekable:!0,position:0,stream_ops:Z.stream_ops,ungotten:[],error:!1},k,L);Je.stream_ops.open&&Je.stream_ops.open(Je),t.logReadFiles&&!(E&1)&&(S.readFiles||(S.readFiles={}),d in S.readFiles||(S.readFiles[d]=1,D(\"FS.trackingDelegate error on read file: \"+d)));try{if(S.trackingDelegate.onOpenFile){var nt=0;(E&2097155)!==1&&(nt|=S.tracking.openFlags.READ),(E&2097155)!==0&&(nt|=S.tracking.openFlags.WRITE),S.trackingDelegate.onOpenFile(d,nt)}}catch(wt){D(\"FS.trackingDelegate['onOpenFile']('\"+d+\"', flags) threw an exception: \"+wt.message)}return Je},close:function(d){if(S.isClosed(d))throw new S.ErrnoError(8);d.getdents&&(d.getdents=null);try{d.stream_ops.close&&d.stream_ops.close(d)}catch(E){throw E}finally{S.closeStream(d.fd)}d.fd=null},isClosed:function(d){return d.fd===null},llseek:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(!d.seekable||!d.stream_ops.llseek)throw new S.ErrnoError(70);if(I!=0&&I!=1&&I!=2)throw new S.ErrnoError(28);return d.position=d.stream_ops.llseek(d,E,I),d.ungotten=[],d.position},read:function(d,E,I,k,L){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===1)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.read)throw new S.ErrnoError(28);var Z=typeof L<\"u\";if(!Z)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var te=d.stream_ops.read(d,E,I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L,Z){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.write)throw new S.ErrnoError(28);d.seekable&&d.flags&1024&&S.llseek(d,0,2);var te=typeof L<\"u\";if(!te)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var we=d.stream_ops.write(d,E,I,k,L,Z);te||(d.position+=we);try{d.path&&S.trackingDelegate.onWriteToFile&&S.trackingDelegate.onWriteToFile(d.path)}catch(me){D(\"FS.trackingDelegate['onWriteToFile']('\"+d.path+\"') threw an exception: \"+me.message)}return we},allocate:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(E<0||I<=0)throw new S.ErrnoError(28);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(!S.isFile(d.node.mode)&&!S.isDir(d.node.mode))throw new S.ErrnoError(43);if(!d.stream_ops.allocate)throw new S.ErrnoError(138);d.stream_ops.allocate(d,E,I)},mmap:function(d,E,I,k,L,Z){if((L&2)!==0&&(Z&2)===0&&(d.flags&2097155)!==2)throw new S.ErrnoError(2);if((d.flags&2097155)===1)throw new S.ErrnoError(2);if(!d.stream_ops.mmap)throw new S.ErrnoError(43);return d.stream_ops.mmap(d,E,I,k,L,Z)},msync:function(d,E,I,k,L){return!d||!d.stream_ops.msync?0:d.stream_ops.msync(d,E,I,k,L)},munmap:function(d){return 0},ioctl:function(d,E,I){if(!d.stream_ops.ioctl)throw new S.ErrnoError(59);return d.stream_ops.ioctl(d,E,I)},readFile:function(d,E){if(E=E||{},E.flags=E.flags||0,E.encoding=E.encoding||\"binary\",E.encoding!==\"utf8\"&&E.encoding!==\"binary\")throw new Error('Invalid encoding type \"'+E.encoding+'\"');var I,k=S.open(d,E.flags),L=S.stat(d),Z=L.size,te=new Uint8Array(Z);return S.read(k,te,0,Z,0),E.encoding===\"utf8\"?I=ke(te,0):E.encoding===\"binary\"&&(I=te),S.close(k),I},writeFile:function(d,E,I){I=I||{},I.flags=I.flags||577;var k=S.open(d,I.flags,I.mode);if(typeof E==\"string\"){var L=new Uint8Array(le(E)+1),Z=Ne(E,L,0,L.length);S.write(k,L,0,Z,void 0,I.canOwn)}else if(ArrayBuffer.isView(E))S.write(k,E,0,E.byteLength,void 0,I.canOwn);else throw new Error(\"Unsupported data type\");S.close(k)},cwd:function(){return S.currentPath},chdir:function(d){var E=S.lookupPath(d,{follow:!0});if(E.node===null)throw new S.ErrnoError(44);if(!S.isDir(E.node.mode))throw new S.ErrnoError(54);var I=S.nodePermissions(E.node,\"x\");if(I)throw new S.ErrnoError(I);S.currentPath=E.path},createDefaultDirectories:function(){S.mkdir(\"/tmp\"),S.mkdir(\"/home\"),S.mkdir(\"/home/web_user\")},createDefaultDevices:function(){S.mkdir(\"/dev\"),S.registerDevice(S.makedev(1,3),{read:function(){return 0},write:function(E,I,k,L,Z){return L}}),S.mkdev(\"/dev/null\",S.makedev(1,3)),ns.register(S.makedev(5,0),ns.default_tty_ops),ns.register(S.makedev(6,0),ns.default_tty1_ops),S.mkdev(\"/dev/tty\",S.makedev(5,0)),S.mkdev(\"/dev/tty1\",S.makedev(6,0));var d=Ll();S.createDevice(\"/dev\",\"random\",d),S.createDevice(\"/dev\",\"urandom\",d),S.mkdir(\"/dev/shm\"),S.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:function(){S.mkdir(\"/proc\");var d=S.mkdir(\"/proc/self\");S.mkdir(\"/proc/self/fd\"),S.mount({mount:function(){var E=S.createNode(d,\"fd\",16895,73);return E.node_ops={lookup:function(I,k){var L=+k,Z=S.getStream(L);if(!Z)throw new S.ErrnoError(8);var te={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function(){return Z.path}}};return te.parent=te,te}},E}},{},\"/proc/self/fd\")},createStandardStreams:function(){t.stdin?S.createDevice(\"/dev\",\"stdin\",t.stdin):S.symlink(\"/dev/tty\",\"/dev/stdin\"),t.stdout?S.createDevice(\"/dev\",\"stdout\",null,t.stdout):S.symlink(\"/dev/tty\",\"/dev/stdout\"),t.stderr?S.createDevice(\"/dev\",\"stderr\",null,t.stderr):S.symlink(\"/dev/tty1\",\"/dev/stderr\");var d=S.open(\"/dev/stdin\",0),E=S.open(\"/dev/stdout\",1),I=S.open(\"/dev/stderr\",1)},ensureErrnoError:function(){S.ErrnoError||(S.ErrnoError=function(E,I){this.node=I,this.setErrno=function(k){this.errno=k},this.setErrno(E),this.message=\"FS error\"},S.ErrnoError.prototype=new Error,S.ErrnoError.prototype.constructor=S.ErrnoError,[44].forEach(function(d){S.genericErrors[d]=new S.ErrnoError(d),S.genericErrors[d].stack=\"<generic error, no stack>\"}))},staticInit:function(){S.ensureErrnoError(),S.nameTable=new Array(4096),S.mount(gt,{},\"/\"),S.createDefaultDirectories(),S.createDefaultDevices(),S.createSpecialDirectories(),S.filesystems={MEMFS:gt,NODEFS:At}},init:function(d,E,I){S.init.initialized=!0,S.ensureErrnoError(),t.stdin=d||t.stdin,t.stdout=E||t.stdout,t.stderr=I||t.stderr,S.createStandardStreams()},quit:function(){S.init.initialized=!1;var d=t._fflush;d&&d(0);for(var E=0;E<S.streams.length;E++){var I=S.streams[E];!I||S.close(I)}},getMode:function(d,E){var I=0;return d&&(I|=365),E&&(I|=146),I},findObject:function(d,E){var I=S.analyzePath(d,E);return I.exists?I.object:null},analyzePath:function(d,E){try{var I=S.lookupPath(d,{follow:!E});d=I.path}catch{}var k={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var I=S.lookupPath(d,{parent:!0});k.parentExists=!0,k.parentPath=I.path,k.parentObject=I.node,k.name=bt.basename(d),I=S.lookupPath(d,{follow:!E}),k.exists=!0,k.path=I.path,k.object=I.node,k.name=I.node.name,k.isRoot=I.path===\"/\"}catch(L){k.error=L.errno}return k},createPath:function(d,E,I,k){d=typeof d==\"string\"?d:S.getPath(d);for(var L=E.split(\"/\").reverse();L.length;){var Z=L.pop();if(!!Z){var te=bt.join2(d,Z);try{S.mkdir(te)}catch{}d=te}}return te},createFile:function(d,E,I,k,L){var Z=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),te=S.getMode(k,L);return S.create(Z,te)},createDataFile:function(d,E,I,k,L,Z){var te=E?bt.join2(typeof d==\"string\"?d:S.getPath(d),E):d,we=S.getMode(k,L),me=S.create(te,we);if(I){if(typeof I==\"string\"){for(var Je=new Array(I.length),nt=0,wt=I.length;nt<wt;++nt)Je[nt]=I.charCodeAt(nt);I=Je}S.chmod(me,we|146);var lt=S.open(me,577);S.write(lt,I,0,I.length,0,Z),S.close(lt),S.chmod(me,we)}return me},createDevice:function(d,E,I,k){var L=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),Z=S.getMode(!!I,!!k);S.createDevice.major||(S.createDevice.major=64);var te=S.makedev(S.createDevice.major++,0);return S.registerDevice(te,{open:function(we){we.seekable=!1},close:function(we){k&&k.buffer&&k.buffer.length&&k(10)},read:function(we,me,Je,nt,wt){for(var lt=0,it=0;it<nt;it++){var Et;try{Et=I()}catch{throw new S.ErrnoError(29)}if(Et===void 0&&lt===0)throw new S.ErrnoError(6);if(Et==null)break;lt++,me[Je+it]=Et}return lt&&(we.node.timestamp=Date.now()),lt},write:function(we,me,Je,nt,wt){for(var lt=0;lt<nt;lt++)try{k(me[Je+lt])}catch{throw new S.ErrnoError(29)}return nt&&(we.node.timestamp=Date.now()),lt}}),S.mkdev(L,Z,te)},forceLoadFile:function(d){if(d.isDevice||d.isFolder||d.link||d.contents)return!0;if(typeof XMLHttpRequest<\"u\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(p)try{d.contents=yA(p(d.url),!0),d.usedBytes=d.contents.length}catch{throw new S.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile:function(d,E,I,k,L){function Z(){this.lengthKnown=!1,this.chunks=[]}if(Z.prototype.get=function(lt){if(!(lt>this.length-1||lt<0)){var it=lt%this.chunkSize,Et=lt/this.chunkSize|0;return this.getter(Et)[it]}},Z.prototype.setDataGetter=function(lt){this.getter=lt},Z.prototype.cacheLength=function(){var lt=new XMLHttpRequest;if(lt.open(\"HEAD\",I,!1),lt.send(null),!(lt.status>=200&&lt.status<300||lt.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+lt.status);var it=Number(lt.getResponseHeader(\"Content-length\")),Et,be=(Et=lt.getResponseHeader(\"Accept-Ranges\"))&&Et===\"bytes\",Mn=(Et=lt.getResponseHeader(\"Content-Encoding\"))&&Et===\"gzip\",Ri=1024*1024;be||(Ri=it);var SA=function(os,Ea){if(os>Ea)throw new Error(\"invalid range (\"+os+\", \"+Ea+\") or no bytes requested!\");if(Ea>it-1)throw new Error(\"only \"+it+\" bytes available! programmer error!\");var Kr=new XMLHttpRequest;if(Kr.open(\"GET\",I,!1),it!==Ri&&Kr.setRequestHeader(\"Range\",\"bytes=\"+os+\"-\"+Ea),typeof Uint8Array<\"u\"&&(Kr.responseType=\"arraybuffer\"),Kr.overrideMimeType&&Kr.overrideMimeType(\"text/plain; charset=x-user-defined\"),Kr.send(null),!(Kr.status>=200&&Kr.status<300||Kr.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+Kr.status);return Kr.response!==void 0?new Uint8Array(Kr.response||[]):yA(Kr.responseText||\"\",!0)},Or=this;Or.setDataGetter(function(os){var Ea=os*Ri,Kr=(os+1)*Ri-1;if(Kr=Math.min(Kr,it-1),typeof Or.chunks[os]>\"u\"&&(Or.chunks[os]=SA(Ea,Kr)),typeof Or.chunks[os]>\"u\")throw new Error(\"doXHR failed!\");return Or.chunks[os]}),(Mn||!it)&&(Ri=it=1,it=this.getter(0).length,Ri=it,v(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=it,this._chunkSize=Ri,this.lengthKnown=!0},typeof XMLHttpRequest<\"u\"){if(!u)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var te=new Z;Object.defineProperties(te,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var we={isDevice:!1,contents:te}}else var we={isDevice:!1,url:I};var me=S.createFile(d,E,we,k,L);we.contents?me.contents=we.contents:we.url&&(me.contents=null,me.url=we.url),Object.defineProperties(me,{usedBytes:{get:function(){return this.contents.length}}});var Je={},nt=Object.keys(me.stream_ops);return nt.forEach(function(wt){var lt=me.stream_ops[wt];Je[wt]=function(){return S.forceLoadFile(me),lt.apply(null,arguments)}}),Je.read=function(lt,it,Et,be,Mn){S.forceLoadFile(me);var Ri=lt.node.contents;if(Mn>=Ri.length)return 0;var SA=Math.min(Ri.length-Mn,be);if(Ri.slice)for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri[Mn+Or];else for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri.get(Mn+Or);return SA},me.stream_ops=Je,me},createPreloadedFile:function(d,E,I,k,L,Z,te,we,me,Je){Browser.init();var nt=E?Nn.resolve(bt.join2(d,E)):d,wt=\"cp \"+nt;function lt(it){function Et(Mn){Je&&Je(),we||S.createDataFile(d,E,Mn,k,L,me),Z&&Z(),EA(wt)}var be=!1;t.preloadPlugins.forEach(function(Mn){be||Mn.canHandle(nt)&&(Mn.handle(it,nt,Et,function(){te&&te(),EA(wt)}),be=!0)}),be||Et(it)}mA(wt),typeof I==\"string\"?Browser.asyncLoad(I,function(it){lt(it)},te):lt(I)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return\"EM_FS_\"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=function(){v(\"creating db\");var te=L.result;te.createObjectStore(S.DB_STORE_NAME)},L.onsuccess=function(){var te=L.result,we=te.transaction([S.DB_STORE_NAME],\"readwrite\"),me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.put(S.analyzePath(it).object.contents,it);Et.onsuccess=function(){Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I},loadFilesFromDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=I,L.onsuccess=function(){var te=L.result;try{var we=te.transaction([S.DB_STORE_NAME],\"readonly\")}catch(it){I(it);return}var me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.get(it);Et.onsuccess=function(){S.analyzePath(it).exists&&S.unlink(it),S.createDataFile(bt.dirname(it),bt.basename(it),Et.result,!0,!0,!0),Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I}},Lt={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(d,E,I){if(E[0]===\"/\")return E;var k;if(d===-100)k=S.cwd();else{var L=S.getStream(d);if(!L)throw new S.ErrnoError(8);k=L.path}if(E.length==0){if(!I)throw new S.ErrnoError(44);return k}return bt.join2(k,E)},doStat:function(d,E,I){try{var k=d(E)}catch(L){if(L&&L.node&&bt.normalize(E)!==bt.normalize(S.getPath(L.node)))return-54;throw L}return de[I>>2]=k.dev,de[I+4>>2]=0,de[I+8>>2]=k.ino,de[I+12>>2]=k.mode,de[I+16>>2]=k.nlink,de[I+20>>2]=k.uid,de[I+24>>2]=k.gid,de[I+28>>2]=k.rdev,de[I+32>>2]=0,se=[k.size>>>0,(vr=k.size,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+40>>2]=se[0],de[I+44>>2]=se[1],de[I+48>>2]=4096,de[I+52>>2]=k.blocks,de[I+56>>2]=k.atime.getTime()/1e3|0,de[I+60>>2]=0,de[I+64>>2]=k.mtime.getTime()/1e3|0,de[I+68>>2]=0,de[I+72>>2]=k.ctime.getTime()/1e3|0,de[I+76>>2]=0,se=[k.ino>>>0,(vr=k.ino,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+80>>2]=se[0],de[I+84>>2]=se[1],0},doMsync:function(d,E,I,k,L){var Z=Y.slice(d,d+I);S.msync(E,Z,L,I,k)},doMkdir:function(d,E){return d=bt.normalize(d),d[d.length-1]===\"/\"&&(d=d.substr(0,d.length-1)),S.mkdir(d,E,0),0},doMknod:function(d,E,I){switch(E&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return S.mknod(d,E,I),0},doReadlink:function(d,E,I){if(I<=0)return-28;var k=S.readlink(d),L=Math.min(I,le(k)),Z=ne[E+L];return oe(k,E,I+1),ne[E+L]=Z,L},doAccess:function(d,E){if(E&-8)return-28;var I,k=S.lookupPath(d,{follow:!0});if(I=k.node,!I)return-44;var L=\"\";return E&4&&(L+=\"r\"),E&2&&(L+=\"w\"),E&1&&(L+=\"x\"),L&&S.nodePermissions(I,L)?-2:0},doDup:function(d,E,I){var k=S.getStream(I);return k&&S.close(k),S.open(d,E,0,I,I).fd},doReadv:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.read(d,ne,te,we,k);if(me<0)return-1;if(L+=me,me<we)break}return L},doWritev:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.write(d,ne,te,we,k);if(me<0)return-1;L+=me}return L},varargs:void 0,get:function(){Lt.varargs+=4;var d=de[Lt.varargs-4>>2];return d},getStr:function(d){var E=Fe(d);return E},getStreamFromFD:function(d){var E=S.getStream(d);if(!E)throw new S.ErrnoError(8);return E},get64:function(d,E){return d}};function hg(d,E){try{return d=Lt.getStr(d),S.chmod(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function Ml(d){return de[Ft()>>2]=d,d}function Qp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 0:{var L=Lt.get();if(L<0)return-28;var Z;return Z=S.open(k.path,k.flags,0,L),Z.fd}case 1:case 2:return 0;case 3:return k.flags;case 4:{var L=Lt.get();return k.flags|=L,0}case 12:{var L=Lt.get(),te=0;return he[L+te>>1]=2,0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Ml(28),-1;default:return-28}}catch(we){return(typeof S>\"u\"||!(we instanceof S.ErrnoError))&&wr(we),-we.errno}}function Sp(d,E){try{var I=Lt.getStreamFromFD(d);return Lt.doStat(S.stat,I.path,E)}catch(k){return(typeof S>\"u\"||!(k instanceof S.ErrnoError))&&wr(k),-k.errno}}function vp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 21509:case 21505:return k.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return k.tty?0:-59;case 21519:{if(!k.tty)return-59;var L=Lt.get();return de[L>>2]=0,0}case 21520:return k.tty?-28:-59;case 21531:{var L=Lt.get();return S.ioctl(k,E,L)}case 21523:return k.tty?0:-59;case 21524:return k.tty?0:-59;default:wr(\"bad ioctl syscall \"+E)}}catch(Z){return(typeof S>\"u\"||!(Z instanceof S.ErrnoError))&&wr(Z),-Z.errno}}function xp(d,E,I){Lt.varargs=I;try{var k=Lt.getStr(d),L=I?Lt.get():0,Z=S.open(k,E,L);return Z.fd}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),-te.errno}}function Pp(d,E){try{return d=Lt.getStr(d),E=Lt.getStr(E),S.rename(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function G(d){try{return d=Lt.getStr(d),S.rmdir(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function yt(d,E){try{return d=Lt.getStr(d),Lt.doStat(S.stat,d,E)}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function IA(d){try{return d=Lt.getStr(d),S.unlink(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function zi(d,E,I){Y.copyWithin(d,E,E+I)}function Ol(d){try{return A.grow(d-qe.byteLength+65535>>>16),Mr(A.buffer),1}catch{}}function Xe(d){var E=Y.length;d=d>>>0;var I=2147483648;if(d>I)return!1;for(var k=1;k<=4;k*=2){var L=E*(1+.2/k);L=Math.min(L,d+100663296);var Z=Math.min(I,ae(Math.max(d,L),65536)),te=Ol(Z);if(te)return!0}return!1}function pa(d){try{var E=Lt.getStreamFromFD(d);return S.close(E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),I.errno}}function pg(d,E){try{var I=Lt.getStreamFromFD(d),k=I.tty?2:S.isDir(I.mode)?3:S.isLink(I.mode)?7:4;return ne[E>>0]=k,0}catch(L){return(typeof S>\"u\"||!(L instanceof S.ErrnoError))&&wr(L),L.errno}}function ME(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doReadv(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function Dp(d,E,I,k,L){try{var Z=Lt.getStreamFromFD(d),te=4294967296,we=I*te+(E>>>0),me=9007199254740992;return we<=-me||we>=me?-61:(S.llseek(Z,we,k),se=[Z.position>>>0,(vr=Z.position,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[L>>2]=se[0],de[L+4>>2]=se[1],Z.getdents&&we===0&&k===0&&(Z.getdents=null),0)}catch(Je){return(typeof S>\"u\"||!(Je instanceof S.ErrnoError))&&wr(Je),Je.errno}}function OE(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doWritev(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function ar(d){$(d)}function Tn(d){var E=Date.now()/1e3|0;return d&&(de[d>>2]=E),E}function Kl(){if(Kl.called)return;Kl.called=!0;var d=new Date().getFullYear(),E=new Date(d,0,1),I=new Date(d,6,1),k=E.getTimezoneOffset(),L=I.getTimezoneOffset(),Z=Math.max(k,L);de[iS()>>2]=Z*60,de[rS()>>2]=Number(k!=L);function te(wt){var lt=wt.toTimeString().match(/\\(([A-Za-z ]+)\\)$/);return lt?lt[1]:\"GMT\"}var we=te(E),me=te(I),Je=Be(we),nt=Be(me);L<k?(de[wg()>>2]=Je,de[wg()+4>>2]=nt):(de[wg()>>2]=nt,de[wg()+4>>2]=Je)}function kp(d){Kl();var E=Date.UTC(de[d+20>>2]+1900,de[d+16>>2],de[d+12>>2],de[d+8>>2],de[d+4>>2],de[d>>2],0),I=new Date(E);de[d+24>>2]=I.getUTCDay();var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[d+28>>2]=L,I.getTime()/1e3|0}var Us=function(d,E,I,k){d||(d=this),this.parent=d,this.mount=d.mount,this.mounted=null,this.id=S.nextInode++,this.name=E,this.mode=I,this.node_ops={},this.stream_ops={},this.rdev=k},da=365,cn=146;if(Object.defineProperties(Us.prototype,{read:{get:function(){return(this.mode&da)===da},set:function(d){d?this.mode|=da:this.mode&=~da}},write:{get:function(){return(this.mode&cn)===cn},set:function(d){d?this.mode|=cn:this.mode&=~cn}},isFolder:{get:function(){return S.isDir(this.mode)}},isDevice:{get:function(){return S.isChrdev(this.mode)}}}),S.FSNode=Us,S.staticInit(),g){var Le=rV,dg=J(\"path\");At.staticInit()}if(g){var Ul=function(d){return function(){try{return d.apply(this,arguments)}catch(E){throw E.code?new S.ErrnoError(Bo[E.code]):E}}},Hs=Object.assign({},S);for(var Hl in ln)S[Hl]=Ul(ln[Hl])}else throw new Error(\"NODERAWFS is currently only supported on Node.js environment.\");function yA(d,E,I){var k=I>0?I:le(d)+1,L=new Array(k),Z=Ne(d,L,0,L.length);return E&&(L.length=Z),L}var Cg=typeof atob==\"function\"?atob:function(d){var E=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",I=\"\",k,L,Z,te,we,me,Je,nt=0;d=d.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do te=E.indexOf(d.charAt(nt++)),we=E.indexOf(d.charAt(nt++)),me=E.indexOf(d.charAt(nt++)),Je=E.indexOf(d.charAt(nt++)),k=te<<2|we>>4,L=(we&15)<<4|me>>2,Z=(me&3)<<6|Je,I=I+String.fromCharCode(k),me!==64&&(I=I+String.fromCharCode(L)),Je!==64&&(I=I+String.fromCharCode(Z));while(nt<d.length);return I};function mg(d){if(typeof g==\"boolean\"&&g){var E;try{E=Buffer.from(d,\"base64\")}catch{E=new Buffer(d,\"base64\")}return new Uint8Array(E.buffer,E.byteOffset,E.byteLength)}try{for(var I=Cg(d),k=new Uint8Array(I.length),L=0;L<I.length;++L)k[L]=I.charCodeAt(L);return k}catch{throw new Error(\"Converting base64 string to bytes failed.\")}}function Ca(d){if(!!ug(d))return mg(d.slice(Tl.length))}var ma={s:fg,p:hg,e:Qp,k:Sp,o:vp,q:xp,i:Pp,r:G,c:yt,h:IA,l:zi,m:Xe,f:pa,j:pg,g:ME,n:Dp,d:OE,a:ar,b:Tn,t:kp},rt=bp(),bo=t.___wasm_call_ctors=rt.v,wA=t._zip_ext_count_symlinks=rt.w,Gl=t._zip_file_get_external_attributes=rt.x,Gs=t._zipstruct_stat=rt.y,Yl=t._zipstruct_statS=rt.z,KE=t._zipstruct_stat_name=rt.A,Rp=t._zipstruct_stat_index=rt.B,Eg=t._zipstruct_stat_size=rt.C,Fp=t._zipstruct_stat_mtime=rt.D,UE=t._zipstruct_stat_crc=rt.E,jl=t._zipstruct_error=rt.F,HE=t._zipstruct_errorS=rt.G,Ig=t._zipstruct_error_code_zip=rt.H,BA=t._zipstruct_stat_comp_size=rt.I,Rr=t._zipstruct_stat_comp_method=rt.J,GE=t._zip_close=rt.K,Ys=t._zip_delete=rt.L,js=t._zip_dir_add=rt.M,yg=t._zip_discard=rt.N,bA=t._zip_error_init_with_code=rt.O,R=t._zip_get_error=rt.P,q=t._zip_file_get_error=rt.Q,Ce=t._zip_error_strerror=rt.R,Ke=t._zip_fclose=rt.S,Re=t._zip_file_add=rt.T,ze=t._free=rt.U,dt=t._malloc=rt.V,Ft=t.___errno_location=rt.W,Ln=t._zip_source_error=rt.X,JQ=t._zip_source_seek=rt.Y,k1=t._zip_file_set_external_attributes=rt.Z,R1=t._zip_file_set_mtime=rt._,WQ=t._zip_fopen=rt.$,F1=t._zip_fopen_index=rt.aa,N1=t._zip_fread=rt.ba,zQ=t._zip_get_name=rt.ca,T1=t._zip_get_num_entries=rt.da,L1=t._zip_source_read=rt.ea,VQ=t._zip_name_locate=rt.fa,M1=t._zip_open=rt.ga,O1=t._zip_open_from_source=rt.ha,XQ=t._zip_set_file_compression=rt.ia,K1=t._zip_source_buffer=rt.ja,U1=t._zip_source_buffer_create=rt.ka,H1=t._zip_source_close=rt.la,G1=t._zip_source_free=rt.ma,ZQ=t._zip_source_keep=rt.na,_Q=t._zip_source_open=rt.oa,$Q=t._zip_source_set_mtime=rt.qa,eS=t._zip_source_tell=rt.ra,tS=t._zip_stat=rt.sa,Y1=t._zip_stat_index=rt.ta,wg=t.__get_tzname=rt.ua,rS=t.__get_daylight=rt.va,iS=t.__get_timezone=rt.wa,YE=t.stackSave=rt.xa,jE=t.stackRestore=rt.ya,b=t.stackAlloc=rt.za;t.cwrap=ue,t.getValue=_;var Oe;ha=function d(){Oe||QA(),Oe||(ha=d)};function QA(d){if(d=d||a,is>0||(pr(),is>0))return;function E(){Oe||(Oe=!0,t.calledRun=!0,!Ae&&(Ii(),i(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),rs()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),E()},1)):E()}if(t.run=QA,t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return QA(),e}}();typeof IB==\"object\"&&typeof FR==\"object\"?FR.exports=RR:typeof define==\"function\"&&define.amd?define([],function(){return RR}):typeof IB==\"object\"&&(IB.createModule=RR)});var vV=w((jst,SV)=>{function dke(r,e){for(var t=-1,i=r==null?0:r.length,n=Array(i);++t<i;)n[t]=e(r[t],t,r);return n}SV.exports=dke});var vs=w((qst,xV)=>{var Cke=Array.isArray;xV.exports=Cke});var NV=w((Jst,FV)=>{var PV=Rc(),mke=vV(),Eke=vs(),Ike=gC(),yke=1/0,DV=PV?PV.prototype:void 0,kV=DV?DV.toString:void 0;function RV(r){if(typeof r==\"string\")return r;if(Eke(r))return mke(r,RV)+\"\";if(Ike(r))return kV?kV.call(r):\"\";var e=r+\"\";return e==\"0\"&&1/r==-yke?\"-0\":e}FV.exports=RV});var Vf=w((Wst,TV)=>{var wke=NV();function Bke(r){return r==null?\"\":wke(r)}TV.exports=Bke});var HR=w((zst,LV)=>{function bke(r,e,t){var i=-1,n=r.length;e<0&&(e=-e>n?0:n+e),t=t>n?n:t,t<0&&(t+=n),n=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(n);++i<n;)s[i]=r[i+e];return s}LV.exports=bke});var OV=w((Vst,MV)=>{var Qke=HR();function Ske(r,e,t){var i=r.length;return t=t===void 0?i:t,!e&&t>=i?r:Qke(r,e,t)}MV.exports=Ske});var GR=w((Xst,KV)=>{var vke=\"\\\\ud800-\\\\udfff\",xke=\"\\\\u0300-\\\\u036f\",Pke=\"\\\\ufe20-\\\\ufe2f\",Dke=\"\\\\u20d0-\\\\u20ff\",kke=xke+Pke+Dke,Rke=\"\\\\ufe0e\\\\ufe0f\",Fke=\"\\\\u200d\",Nke=RegExp(\"[\"+Fke+vke+kke+Rke+\"]\");function Tke(r){return Nke.test(r)}KV.exports=Tke});var HV=w((Zst,UV)=>{function Lke(r){return r.split(\"\")}UV.exports=Lke});var VV=w((_st,zV)=>{var GV=\"\\\\ud800-\\\\udfff\",Mke=\"\\\\u0300-\\\\u036f\",Oke=\"\\\\ufe20-\\\\ufe2f\",Kke=\"\\\\u20d0-\\\\u20ff\",Uke=Mke+Oke+Kke,Hke=\"\\\\ufe0e\\\\ufe0f\",Gke=\"[\"+GV+\"]\",YR=\"[\"+Uke+\"]\",jR=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Yke=\"(?:\"+YR+\"|\"+jR+\")\",YV=\"[^\"+GV+\"]\",jV=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",qV=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",jke=\"\\\\u200d\",JV=Yke+\"?\",WV=\"[\"+Hke+\"]?\",qke=\"(?:\"+jke+\"(?:\"+[YV,jV,qV].join(\"|\")+\")\"+WV+JV+\")*\",Jke=WV+JV+qke,Wke=\"(?:\"+[YV+YR+\"?\",YR,jV,qV,Gke].join(\"|\")+\")\",zke=RegExp(jR+\"(?=\"+jR+\")|\"+Wke+Jke,\"g\");function Vke(r){return r.match(zke)||[]}zV.exports=Vke});var ZV=w(($st,XV)=>{var Xke=HV(),Zke=GR(),_ke=VV();function $ke(r){return Zke(r)?_ke(r):Xke(r)}XV.exports=$ke});var $V=w((eot,_V)=>{var eRe=OV(),tRe=GR(),rRe=ZV(),iRe=Vf();function nRe(r){return function(e){e=iRe(e);var t=tRe(e)?rRe(e):void 0,i=t?t[0]:e.charAt(0),n=t?eRe(t,1).join(\"\"):e.slice(1);return i[r]()+n}}_V.exports=nRe});var t9=w((tot,e9)=>{var sRe=$V(),oRe=sRe(\"toUpperCase\");e9.exports=oRe});var PB=w((rot,r9)=>{var aRe=Vf(),ARe=t9();function lRe(r){return ARe(aRe(r).toLowerCase())}r9.exports=lRe});var i9=w((iot,DB)=>{function cRe(){var r=0,e=1,t=2,i=3,n=4,s=5,o=6,a=7,l=8,c=9,u=10,g=11,f=12,h=13,p=14,C=15,y=16,B=17,v=0,D=1,T=2,H=3,j=4;function $(A,Ae){return 55296<=A.charCodeAt(Ae)&&A.charCodeAt(Ae)<=56319&&56320<=A.charCodeAt(Ae+1)&&A.charCodeAt(Ae+1)<=57343}function V(A,Ae){Ae===void 0&&(Ae=0);var ge=A.charCodeAt(Ae);if(55296<=ge&&ge<=56319&&Ae<A.length-1){var re=ge,M=A.charCodeAt(Ae+1);return 56320<=M&&M<=57343?(re-55296)*1024+(M-56320)+65536:re}if(56320<=ge&&ge<=57343&&Ae>=1){var re=A.charCodeAt(Ae-1),M=ge;return 55296<=re&&re<=56319?(re-55296)*1024+(M-56320)+65536:M}return ge}function W(A,Ae,ge){var re=[A].concat(Ae).concat([ge]),M=re[re.length-2],F=ge,ue=re.lastIndexOf(p);if(ue>1&&re.slice(1,ue).every(function(Fe){return Fe==i})&&[i,h,B].indexOf(A)==-1)return T;var pe=re.lastIndexOf(n);if(pe>0&&re.slice(1,pe).every(function(Fe){return Fe==n})&&[f,n].indexOf(M)==-1)return re.filter(function(Fe){return Fe==n}).length%2==1?H:j;if(M==r&&F==e)return v;if(M==t||M==r||M==e)return F==p&&Ae.every(function(Fe){return Fe==i})?T:D;if(F==t||F==r||F==e)return D;if(M==o&&(F==o||F==a||F==c||F==u))return v;if((M==c||M==a)&&(F==a||F==l))return v;if((M==u||M==l)&&F==l)return v;if(F==i||F==C)return v;if(F==s)return v;if(M==f)return v;var ke=re.indexOf(i)!=-1?re.lastIndexOf(i)-1:re.length-2;return[h,B].indexOf(re[ke])!=-1&&re.slice(ke+1,-1).every(function(Fe){return Fe==i})&&F==p||M==C&&[y,B].indexOf(F)!=-1?v:Ae.indexOf(n)!=-1?T:M==n&&F==n?v:D}this.nextBreak=function(A,Ae){if(Ae===void 0&&(Ae=0),Ae<0)return 0;if(Ae>=A.length-1)return A.length;for(var ge=_(V(A,Ae)),re=[],M=Ae+1;M<A.length;M++)if(!$(A,M-1)){var F=_(V(A,M));if(W(ge,re,F))return M;re.push(F)}return A.length},this.splitGraphemes=function(A){for(var Ae=[],ge=0,re;(re=this.nextBreak(A,ge))<A.length;)Ae.push(A.slice(ge,re)),ge=re;return ge<A.length&&Ae.push(A.slice(ge)),Ae},this.iterateGraphemes=function(A){var Ae=0,ge={next:function(){var re,M;return(M=this.nextBreak(A,Ae))<A.length?(re=A.slice(Ae,M),Ae=M,{value:re,done:!1}):Ae<A.length?(re=A.slice(Ae),Ae=A.length,{value:re,done:!1}):{value:void 0,done:!0}}.bind(this)};return typeof Symbol<\"u\"&&Symbol.iterator&&(ge[Symbol.iterator]=function(){return ge}),ge},this.countGraphemes=function(A){for(var Ae=0,ge=0,re;(re=this.nextBreak(A,ge))<A.length;)ge=re,Ae++;return ge<A.length&&Ae++,Ae};function _(A){return 1536<=A&&A<=1541||A==1757||A==1807||A==2274||A==3406||A==69821||70082<=A&&A<=70083||A==72250||72326<=A&&A<=72329||A==73030?f:A==13?r:A==10?e:0<=A&&A<=9||11<=A&&A<=12||14<=A&&A<=31||127<=A&&A<=159||A==173||A==1564||A==6158||A==8203||8206<=A&&A<=8207||A==8232||A==8233||8234<=A&&A<=8238||8288<=A&&A<=8292||A==8293||8294<=A&&A<=8303||55296<=A&&A<=57343||A==65279||65520<=A&&A<=65528||65529<=A&&A<=65531||113824<=A&&A<=113827||119155<=A&&A<=119162||A==917504||A==917505||917506<=A&&A<=917535||917632<=A&&A<=917759||918e3<=A&&A<=921599?t:768<=A&&A<=879||1155<=A&&A<=1159||1160<=A&&A<=1161||1425<=A&&A<=1469||A==1471||1473<=A&&A<=1474||1476<=A&&A<=1477||A==1479||1552<=A&&A<=1562||1611<=A&&A<=1631||A==1648||1750<=A&&A<=1756||1759<=A&&A<=1764||1767<=A&&A<=1768||1770<=A&&A<=1773||A==1809||1840<=A&&A<=1866||1958<=A&&A<=1968||2027<=A&&A<=2035||2070<=A&&A<=2073||2075<=A&&A<=2083||2085<=A&&A<=2087||2089<=A&&A<=2093||2137<=A&&A<=2139||2260<=A&&A<=2273||2275<=A&&A<=2306||A==2362||A==2364||2369<=A&&A<=2376||A==2381||2385<=A&&A<=2391||2402<=A&&A<=2403||A==2433||A==2492||A==2494||2497<=A&&A<=2500||A==2509||A==2519||2530<=A&&A<=2531||2561<=A&&A<=2562||A==2620||2625<=A&&A<=2626||2631<=A&&A<=2632||2635<=A&&A<=2637||A==2641||2672<=A&&A<=2673||A==2677||2689<=A&&A<=2690||A==2748||2753<=A&&A<=2757||2759<=A&&A<=2760||A==2765||2786<=A&&A<=2787||2810<=A&&A<=2815||A==2817||A==2876||A==2878||A==2879||2881<=A&&A<=2884||A==2893||A==2902||A==2903||2914<=A&&A<=2915||A==2946||A==3006||A==3008||A==3021||A==3031||A==3072||3134<=A&&A<=3136||3142<=A&&A<=3144||3146<=A&&A<=3149||3157<=A&&A<=3158||3170<=A&&A<=3171||A==3201||A==3260||A==3263||A==3266||A==3270||3276<=A&&A<=3277||3285<=A&&A<=3286||3298<=A&&A<=3299||3328<=A&&A<=3329||3387<=A&&A<=3388||A==3390||3393<=A&&A<=3396||A==3405||A==3415||3426<=A&&A<=3427||A==3530||A==3535||3538<=A&&A<=3540||A==3542||A==3551||A==3633||3636<=A&&A<=3642||3655<=A&&A<=3662||A==3761||3764<=A&&A<=3769||3771<=A&&A<=3772||3784<=A&&A<=3789||3864<=A&&A<=3865||A==3893||A==3895||A==3897||3953<=A&&A<=3966||3968<=A&&A<=3972||3974<=A&&A<=3975||3981<=A&&A<=3991||3993<=A&&A<=4028||A==4038||4141<=A&&A<=4144||4146<=A&&A<=4151||4153<=A&&A<=4154||4157<=A&&A<=4158||4184<=A&&A<=4185||4190<=A&&A<=4192||4209<=A&&A<=4212||A==4226||4229<=A&&A<=4230||A==4237||A==4253||4957<=A&&A<=4959||5906<=A&&A<=5908||5938<=A&&A<=5940||5970<=A&&A<=5971||6002<=A&&A<=6003||6068<=A&&A<=6069||6071<=A&&A<=6077||A==6086||6089<=A&&A<=6099||A==6109||6155<=A&&A<=6157||6277<=A&&A<=6278||A==6313||6432<=A&&A<=6434||6439<=A&&A<=6440||A==6450||6457<=A&&A<=6459||6679<=A&&A<=6680||A==6683||A==6742||6744<=A&&A<=6750||A==6752||A==6754||6757<=A&&A<=6764||6771<=A&&A<=6780||A==6783||6832<=A&&A<=6845||A==6846||6912<=A&&A<=6915||A==6964||6966<=A&&A<=6970||A==6972||A==6978||7019<=A&&A<=7027||7040<=A&&A<=7041||7074<=A&&A<=7077||7080<=A&&A<=7081||7083<=A&&A<=7085||A==7142||7144<=A&&A<=7145||A==7149||7151<=A&&A<=7153||7212<=A&&A<=7219||7222<=A&&A<=7223||7376<=A&&A<=7378||7380<=A&&A<=7392||7394<=A&&A<=7400||A==7405||A==7412||7416<=A&&A<=7417||7616<=A&&A<=7673||7675<=A&&A<=7679||A==8204||8400<=A&&A<=8412||8413<=A&&A<=8416||A==8417||8418<=A&&A<=8420||8421<=A&&A<=8432||11503<=A&&A<=11505||A==11647||11744<=A&&A<=11775||12330<=A&&A<=12333||12334<=A&&A<=12335||12441<=A&&A<=12442||A==42607||42608<=A&&A<=42610||42612<=A&&A<=42621||42654<=A&&A<=42655||42736<=A&&A<=42737||A==43010||A==43014||A==43019||43045<=A&&A<=43046||43204<=A&&A<=43205||43232<=A&&A<=43249||43302<=A&&A<=43309||43335<=A&&A<=43345||43392<=A&&A<=43394||A==43443||43446<=A&&A<=43449||A==43452||A==43493||43561<=A&&A<=43566||43569<=A&&A<=43570||43573<=A&&A<=43574||A==43587||A==43596||A==43644||A==43696||43698<=A&&A<=43700||43703<=A&&A<=43704||43710<=A&&A<=43711||A==43713||43756<=A&&A<=43757||A==43766||A==44005||A==44008||A==44013||A==64286||65024<=A&&A<=65039||65056<=A&&A<=65071||65438<=A&&A<=65439||A==66045||A==66272||66422<=A&&A<=66426||68097<=A&&A<=68099||68101<=A&&A<=68102||68108<=A&&A<=68111||68152<=A&&A<=68154||A==68159||68325<=A&&A<=68326||A==69633||69688<=A&&A<=69702||69759<=A&&A<=69761||69811<=A&&A<=69814||69817<=A&&A<=69818||69888<=A&&A<=69890||69927<=A&&A<=69931||69933<=A&&A<=69940||A==70003||70016<=A&&A<=70017||70070<=A&&A<=70078||70090<=A&&A<=70092||70191<=A&&A<=70193||A==70196||70198<=A&&A<=70199||A==70206||A==70367||70371<=A&&A<=70378||70400<=A&&A<=70401||A==70460||A==70462||A==70464||A==70487||70502<=A&&A<=70508||70512<=A&&A<=70516||70712<=A&&A<=70719||70722<=A&&A<=70724||A==70726||A==70832||70835<=A&&A<=70840||A==70842||A==70845||70847<=A&&A<=70848||70850<=A&&A<=70851||A==71087||71090<=A&&A<=71093||71100<=A&&A<=71101||71103<=A&&A<=71104||71132<=A&&A<=71133||71219<=A&&A<=71226||A==71229||71231<=A&&A<=71232||A==71339||A==71341||71344<=A&&A<=71349||A==71351||71453<=A&&A<=71455||71458<=A&&A<=71461||71463<=A&&A<=71467||72193<=A&&A<=72198||72201<=A&&A<=72202||72243<=A&&A<=72248||72251<=A&&A<=72254||A==72263||72273<=A&&A<=72278||72281<=A&&A<=72283||72330<=A&&A<=72342||72344<=A&&A<=72345||72752<=A&&A<=72758||72760<=A&&A<=72765||A==72767||72850<=A&&A<=72871||72874<=A&&A<=72880||72882<=A&&A<=72883||72885<=A&&A<=72886||73009<=A&&A<=73014||A==73018||73020<=A&&A<=73021||73023<=A&&A<=73029||A==73031||92912<=A&&A<=92916||92976<=A&&A<=92982||94095<=A&&A<=94098||113821<=A&&A<=113822||A==119141||119143<=A&&A<=119145||119150<=A&&A<=119154||119163<=A&&A<=119170||119173<=A&&A<=119179||119210<=A&&A<=119213||119362<=A&&A<=119364||121344<=A&&A<=121398||121403<=A&&A<=121452||A==121461||A==121476||121499<=A&&A<=121503||121505<=A&&A<=121519||122880<=A&&A<=122886||122888<=A&&A<=122904||122907<=A&&A<=122913||122915<=A&&A<=122916||122918<=A&&A<=122922||125136<=A&&A<=125142||125252<=A&&A<=125258||917536<=A&&A<=917631||917760<=A&&A<=917999?i:127462<=A&&A<=127487?n:A==2307||A==2363||2366<=A&&A<=2368||2377<=A&&A<=2380||2382<=A&&A<=2383||2434<=A&&A<=2435||2495<=A&&A<=2496||2503<=A&&A<=2504||2507<=A&&A<=2508||A==2563||2622<=A&&A<=2624||A==2691||2750<=A&&A<=2752||A==2761||2763<=A&&A<=2764||2818<=A&&A<=2819||A==2880||2887<=A&&A<=2888||2891<=A&&A<=2892||A==3007||3009<=A&&A<=3010||3014<=A&&A<=3016||3018<=A&&A<=3020||3073<=A&&A<=3075||3137<=A&&A<=3140||3202<=A&&A<=3203||A==3262||3264<=A&&A<=3265||3267<=A&&A<=3268||3271<=A&&A<=3272||3274<=A&&A<=3275||3330<=A&&A<=3331||3391<=A&&A<=3392||3398<=A&&A<=3400||3402<=A&&A<=3404||3458<=A&&A<=3459||3536<=A&&A<=3537||3544<=A&&A<=3550||3570<=A&&A<=3571||A==3635||A==3763||3902<=A&&A<=3903||A==3967||A==4145||4155<=A&&A<=4156||4182<=A&&A<=4183||A==4228||A==6070||6078<=A&&A<=6085||6087<=A&&A<=6088||6435<=A&&A<=6438||6441<=A&&A<=6443||6448<=A&&A<=6449||6451<=A&&A<=6456||6681<=A&&A<=6682||A==6741||A==6743||6765<=A&&A<=6770||A==6916||A==6965||A==6971||6973<=A&&A<=6977||6979<=A&&A<=6980||A==7042||A==7073||7078<=A&&A<=7079||A==7082||A==7143||7146<=A&&A<=7148||A==7150||7154<=A&&A<=7155||7204<=A&&A<=7211||7220<=A&&A<=7221||A==7393||7410<=A&&A<=7411||A==7415||43043<=A&&A<=43044||A==43047||43136<=A&&A<=43137||43188<=A&&A<=43203||43346<=A&&A<=43347||A==43395||43444<=A&&A<=43445||43450<=A&&A<=43451||43453<=A&&A<=43456||43567<=A&&A<=43568||43571<=A&&A<=43572||A==43597||A==43755||43758<=A&&A<=43759||A==43765||44003<=A&&A<=44004||44006<=A&&A<=44007||44009<=A&&A<=44010||A==44012||A==69632||A==69634||A==69762||69808<=A&&A<=69810||69815<=A&&A<=69816||A==69932||A==70018||70067<=A&&A<=70069||70079<=A&&A<=70080||70188<=A&&A<=70190||70194<=A&&A<=70195||A==70197||70368<=A&&A<=70370||70402<=A&&A<=70403||A==70463||70465<=A&&A<=70468||70471<=A&&A<=70472||70475<=A&&A<=70477||70498<=A&&A<=70499||70709<=A&&A<=70711||70720<=A&&A<=70721||A==70725||70833<=A&&A<=70834||A==70841||70843<=A&&A<=70844||A==70846||A==70849||71088<=A&&A<=71089||71096<=A&&A<=71099||A==71102||71216<=A&&A<=71218||71227<=A&&A<=71228||A==71230||A==71340||71342<=A&&A<=71343||A==71350||71456<=A&&A<=71457||A==71462||72199<=A&&A<=72200||A==72249||72279<=A&&A<=72280||A==72343||A==72751||A==72766||A==72873||A==72881||A==72884||94033<=A&&A<=94078||A==119142||A==119149?s:4352<=A&&A<=4447||43360<=A&&A<=43388?o:4448<=A&&A<=4519||55216<=A&&A<=55238?a:4520<=A&&A<=4607||55243<=A&&A<=55291?l:A==44032||A==44060||A==44088||A==44116||A==44144||A==44172||A==44200||A==44228||A==44256||A==44284||A==44312||A==44340||A==44368||A==44396||A==44424||A==44452||A==44480||A==44508||A==44536||A==44564||A==44592||A==44620||A==44648||A==44676||A==44704||A==44732||A==44760||A==44788||A==44816||A==44844||A==44872||A==44900||A==44928||A==44956||A==44984||A==45012||A==45040||A==45068||A==45096||A==45124||A==45152||A==45180||A==45208||A==45236||A==45264||A==45292||A==45320||A==45348||A==45376||A==45404||A==45432||A==45460||A==45488||A==45516||A==45544||A==45572||A==45600||A==45628||A==45656||A==45684||A==45712||A==45740||A==45768||A==45796||A==45824||A==45852||A==45880||A==45908||A==45936||A==45964||A==45992||A==46020||A==46048||A==46076||A==46104||A==46132||A==46160||A==46188||A==46216||A==46244||A==46272||A==46300||A==46328||A==46356||A==46384||A==46412||A==46440||A==46468||A==46496||A==46524||A==46552||A==46580||A==46608||A==46636||A==46664||A==46692||A==46720||A==46748||A==46776||A==46804||A==46832||A==46860||A==46888||A==46916||A==46944||A==46972||A==47e3||A==47028||A==47056||A==47084||A==47112||A==47140||A==47168||A==47196||A==47224||A==47252||A==47280||A==47308||A==47336||A==47364||A==47392||A==47420||A==47448||A==47476||A==47504||A==47532||A==47560||A==47588||A==47616||A==47644||A==47672||A==47700||A==47728||A==47756||A==47784||A==47812||A==47840||A==47868||A==47896||A==47924||A==47952||A==47980||A==48008||A==48036||A==48064||A==48092||A==48120||A==48148||A==48176||A==48204||A==48232||A==48260||A==48288||A==48316||A==48344||A==48372||A==48400||A==48428||A==48456||A==48484||A==48512||A==48540||A==48568||A==48596||A==48624||A==48652||A==48680||A==48708||A==48736||A==48764||A==48792||A==48820||A==48848||A==48876||A==48904||A==48932||A==48960||A==48988||A==49016||A==49044||A==49072||A==49100||A==49128||A==49156||A==49184||A==49212||A==49240||A==49268||A==49296||A==49324||A==49352||A==49380||A==49408||A==49436||A==49464||A==49492||A==49520||A==49548||A==49576||A==49604||A==49632||A==49660||A==49688||A==49716||A==49744||A==49772||A==49800||A==49828||A==49856||A==49884||A==49912||A==49940||A==49968||A==49996||A==50024||A==50052||A==50080||A==50108||A==50136||A==50164||A==50192||A==50220||A==50248||A==50276||A==50304||A==50332||A==50360||A==50388||A==50416||A==50444||A==50472||A==50500||A==50528||A==50556||A==50584||A==50612||A==50640||A==50668||A==50696||A==50724||A==50752||A==50780||A==50808||A==50836||A==50864||A==50892||A==50920||A==50948||A==50976||A==51004||A==51032||A==51060||A==51088||A==51116||A==51144||A==51172||A==51200||A==51228||A==51256||A==51284||A==51312||A==51340||A==51368||A==51396||A==51424||A==51452||A==51480||A==51508||A==51536||A==51564||A==51592||A==51620||A==51648||A==51676||A==51704||A==51732||A==51760||A==51788||A==51816||A==51844||A==51872||A==51900||A==51928||A==51956||A==51984||A==52012||A==52040||A==52068||A==52096||A==52124||A==52152||A==52180||A==52208||A==52236||A==52264||A==52292||A==52320||A==52348||A==52376||A==52404||A==52432||A==52460||A==52488||A==52516||A==52544||A==52572||A==52600||A==52628||A==52656||A==52684||A==52712||A==52740||A==52768||A==52796||A==52824||A==52852||A==52880||A==52908||A==52936||A==52964||A==52992||A==53020||A==53048||A==53076||A==53104||A==53132||A==53160||A==53188||A==53216||A==53244||A==53272||A==53300||A==53328||A==53356||A==53384||A==53412||A==53440||A==53468||A==53496||A==53524||A==53552||A==53580||A==53608||A==53636||A==53664||A==53692||A==53720||A==53748||A==53776||A==53804||A==53832||A==53860||A==53888||A==53916||A==53944||A==53972||A==54e3||A==54028||A==54056||A==54084||A==54112||A==54140||A==54168||A==54196||A==54224||A==54252||A==54280||A==54308||A==54336||A==54364||A==54392||A==54420||A==54448||A==54476||A==54504||A==54532||A==54560||A==54588||A==54616||A==54644||A==54672||A==54700||A==54728||A==54756||A==54784||A==54812||A==54840||A==54868||A==54896||A==54924||A==54952||A==54980||A==55008||A==55036||A==55064||A==55092||A==55120||A==55148||A==55176?c:44033<=A&&A<=44059||44061<=A&&A<=44087||44089<=A&&A<=44115||44117<=A&&A<=44143||44145<=A&&A<=44171||44173<=A&&A<=44199||44201<=A&&A<=44227||44229<=A&&A<=44255||44257<=A&&A<=44283||44285<=A&&A<=44311||44313<=A&&A<=44339||44341<=A&&A<=44367||44369<=A&&A<=44395||44397<=A&&A<=44423||44425<=A&&A<=44451||44453<=A&&A<=44479||44481<=A&&A<=44507||44509<=A&&A<=44535||44537<=A&&A<=44563||44565<=A&&A<=44591||44593<=A&&A<=44619||44621<=A&&A<=44647||44649<=A&&A<=44675||44677<=A&&A<=44703||44705<=A&&A<=44731||44733<=A&&A<=44759||44761<=A&&A<=44787||44789<=A&&A<=44815||44817<=A&&A<=44843||44845<=A&&A<=44871||44873<=A&&A<=44899||44901<=A&&A<=44927||44929<=A&&A<=44955||44957<=A&&A<=44983||44985<=A&&A<=45011||45013<=A&&A<=45039||45041<=A&&A<=45067||45069<=A&&A<=45095||45097<=A&&A<=45123||45125<=A&&A<=45151||45153<=A&&A<=45179||45181<=A&&A<=45207||45209<=A&&A<=45235||45237<=A&&A<=45263||45265<=A&&A<=45291||45293<=A&&A<=45319||45321<=A&&A<=45347||45349<=A&&A<=45375||45377<=A&&A<=45403||45405<=A&&A<=45431||45433<=A&&A<=45459||45461<=A&&A<=45487||45489<=A&&A<=45515||45517<=A&&A<=45543||45545<=A&&A<=45571||45573<=A&&A<=45599||45601<=A&&A<=45627||45629<=A&&A<=45655||45657<=A&&A<=45683||45685<=A&&A<=45711||45713<=A&&A<=45739||45741<=A&&A<=45767||45769<=A&&A<=45795||45797<=A&&A<=45823||45825<=A&&A<=45851||45853<=A&&A<=45879||45881<=A&&A<=45907||45909<=A&&A<=45935||45937<=A&&A<=45963||45965<=A&&A<=45991||45993<=A&&A<=46019||46021<=A&&A<=46047||46049<=A&&A<=46075||46077<=A&&A<=46103||46105<=A&&A<=46131||46133<=A&&A<=46159||46161<=A&&A<=46187||46189<=A&&A<=46215||46217<=A&&A<=46243||46245<=A&&A<=46271||46273<=A&&A<=46299||46301<=A&&A<=46327||46329<=A&&A<=46355||46357<=A&&A<=46383||46385<=A&&A<=46411||46413<=A&&A<=46439||46441<=A&&A<=46467||46469<=A&&A<=46495||46497<=A&&A<=46523||46525<=A&&A<=46551||46553<=A&&A<=46579||46581<=A&&A<=46607||46609<=A&&A<=46635||46637<=A&&A<=46663||46665<=A&&A<=46691||46693<=A&&A<=46719||46721<=A&&A<=46747||46749<=A&&A<=46775||46777<=A&&A<=46803||46805<=A&&A<=46831||46833<=A&&A<=46859||46861<=A&&A<=46887||46889<=A&&A<=46915||46917<=A&&A<=46943||46945<=A&&A<=46971||46973<=A&&A<=46999||47001<=A&&A<=47027||47029<=A&&A<=47055||47057<=A&&A<=47083||47085<=A&&A<=47111||47113<=A&&A<=47139||47141<=A&&A<=47167||47169<=A&&A<=47195||47197<=A&&A<=47223||47225<=A&&A<=47251||47253<=A&&A<=47279||47281<=A&&A<=47307||47309<=A&&A<=47335||47337<=A&&A<=47363||47365<=A&&A<=47391||47393<=A&&A<=47419||47421<=A&&A<=47447||47449<=A&&A<=47475||47477<=A&&A<=47503||47505<=A&&A<=47531||47533<=A&&A<=47559||47561<=A&&A<=47587||47589<=A&&A<=47615||47617<=A&&A<=47643||47645<=A&&A<=47671||47673<=A&&A<=47699||47701<=A&&A<=47727||47729<=A&&A<=47755||47757<=A&&A<=47783||47785<=A&&A<=47811||47813<=A&&A<=47839||47841<=A&&A<=47867||47869<=A&&A<=47895||47897<=A&&A<=47923||47925<=A&&A<=47951||47953<=A&&A<=47979||47981<=A&&A<=48007||48009<=A&&A<=48035||48037<=A&&A<=48063||48065<=A&&A<=48091||48093<=A&&A<=48119||48121<=A&&A<=48147||48149<=A&&A<=48175||48177<=A&&A<=48203||48205<=A&&A<=48231||48233<=A&&A<=48259||48261<=A&&A<=48287||48289<=A&&A<=48315||48317<=A&&A<=48343||48345<=A&&A<=48371||48373<=A&&A<=48399||48401<=A&&A<=48427||48429<=A&&A<=48455||48457<=A&&A<=48483||48485<=A&&A<=48511||48513<=A&&A<=48539||48541<=A&&A<=48567||48569<=A&&A<=48595||48597<=A&&A<=48623||48625<=A&&A<=48651||48653<=A&&A<=48679||48681<=A&&A<=48707||48709<=A&&A<=48735||48737<=A&&A<=48763||48765<=A&&A<=48791||48793<=A&&A<=48819||48821<=A&&A<=48847||48849<=A&&A<=48875||48877<=A&&A<=48903||48905<=A&&A<=48931||48933<=A&&A<=48959||48961<=A&&A<=48987||48989<=A&&A<=49015||49017<=A&&A<=49043||49045<=A&&A<=49071||49073<=A&&A<=49099||49101<=A&&A<=49127||49129<=A&&A<=49155||49157<=A&&A<=49183||49185<=A&&A<=49211||49213<=A&&A<=49239||49241<=A&&A<=49267||49269<=A&&A<=49295||49297<=A&&A<=49323||49325<=A&&A<=49351||49353<=A&&A<=49379||49381<=A&&A<=49407||49409<=A&&A<=49435||49437<=A&&A<=49463||49465<=A&&A<=49491||49493<=A&&A<=49519||49521<=A&&A<=49547||49549<=A&&A<=49575||49577<=A&&A<=49603||49605<=A&&A<=49631||49633<=A&&A<=49659||49661<=A&&A<=49687||49689<=A&&A<=49715||49717<=A&&A<=49743||49745<=A&&A<=49771||49773<=A&&A<=49799||49801<=A&&A<=49827||49829<=A&&A<=49855||49857<=A&&A<=49883||49885<=A&&A<=49911||49913<=A&&A<=49939||49941<=A&&A<=49967||49969<=A&&A<=49995||49997<=A&&A<=50023||50025<=A&&A<=50051||50053<=A&&A<=50079||50081<=A&&A<=50107||50109<=A&&A<=50135||50137<=A&&A<=50163||50165<=A&&A<=50191||50193<=A&&A<=50219||50221<=A&&A<=50247||50249<=A&&A<=50275||50277<=A&&A<=50303||50305<=A&&A<=50331||50333<=A&&A<=50359||50361<=A&&A<=50387||50389<=A&&A<=50415||50417<=A&&A<=50443||50445<=A&&A<=50471||50473<=A&&A<=50499||50501<=A&&A<=50527||50529<=A&&A<=50555||50557<=A&&A<=50583||50585<=A&&A<=50611||50613<=A&&A<=50639||50641<=A&&A<=50667||50669<=A&&A<=50695||50697<=A&&A<=50723||50725<=A&&A<=50751||50753<=A&&A<=50779||50781<=A&&A<=50807||50809<=A&&A<=50835||50837<=A&&A<=50863||50865<=A&&A<=50891||50893<=A&&A<=50919||50921<=A&&A<=50947||50949<=A&&A<=50975||50977<=A&&A<=51003||51005<=A&&A<=51031||51033<=A&&A<=51059||51061<=A&&A<=51087||51089<=A&&A<=51115||51117<=A&&A<=51143||51145<=A&&A<=51171||51173<=A&&A<=51199||51201<=A&&A<=51227||51229<=A&&A<=51255||51257<=A&&A<=51283||51285<=A&&A<=51311||51313<=A&&A<=51339||51341<=A&&A<=51367||51369<=A&&A<=51395||51397<=A&&A<=51423||51425<=A&&A<=51451||51453<=A&&A<=51479||51481<=A&&A<=51507||51509<=A&&A<=51535||51537<=A&&A<=51563||51565<=A&&A<=51591||51593<=A&&A<=51619||51621<=A&&A<=51647||51649<=A&&A<=51675||51677<=A&&A<=51703||51705<=A&&A<=51731||51733<=A&&A<=51759||51761<=A&&A<=51787||51789<=A&&A<=51815||51817<=A&&A<=51843||51845<=A&&A<=51871||51873<=A&&A<=51899||51901<=A&&A<=51927||51929<=A&&A<=51955||51957<=A&&A<=51983||51985<=A&&A<=52011||52013<=A&&A<=52039||52041<=A&&A<=52067||52069<=A&&A<=52095||52097<=A&&A<=52123||52125<=A&&A<=52151||52153<=A&&A<=52179||52181<=A&&A<=52207||52209<=A&&A<=52235||52237<=A&&A<=52263||52265<=A&&A<=52291||52293<=A&&A<=52319||52321<=A&&A<=52347||52349<=A&&A<=52375||52377<=A&&A<=52403||52405<=A&&A<=52431||52433<=A&&A<=52459||52461<=A&&A<=52487||52489<=A&&A<=52515||52517<=A&&A<=52543||52545<=A&&A<=52571||52573<=A&&A<=52599||52601<=A&&A<=52627||52629<=A&&A<=52655||52657<=A&&A<=52683||52685<=A&&A<=52711||52713<=A&&A<=52739||52741<=A&&A<=52767||52769<=A&&A<=52795||52797<=A&&A<=52823||52825<=A&&A<=52851||52853<=A&&A<=52879||52881<=A&&A<=52907||52909<=A&&A<=52935||52937<=A&&A<=52963||52965<=A&&A<=52991||52993<=A&&A<=53019||53021<=A&&A<=53047||53049<=A&&A<=53075||53077<=A&&A<=53103||53105<=A&&A<=53131||53133<=A&&A<=53159||53161<=A&&A<=53187||53189<=A&&A<=53215||53217<=A&&A<=53243||53245<=A&&A<=53271||53273<=A&&A<=53299||53301<=A&&A<=53327||53329<=A&&A<=53355||53357<=A&&A<=53383||53385<=A&&A<=53411||53413<=A&&A<=53439||53441<=A&&A<=53467||53469<=A&&A<=53495||53497<=A&&A<=53523||53525<=A&&A<=53551||53553<=A&&A<=53579||53581<=A&&A<=53607||53609<=A&&A<=53635||53637<=A&&A<=53663||53665<=A&&A<=53691||53693<=A&&A<=53719||53721<=A&&A<=53747||53749<=A&&A<=53775||53777<=A&&A<=53803||53805<=A&&A<=53831||53833<=A&&A<=53859||53861<=A&&A<=53887||53889<=A&&A<=53915||53917<=A&&A<=53943||53945<=A&&A<=53971||53973<=A&&A<=53999||54001<=A&&A<=54027||54029<=A&&A<=54055||54057<=A&&A<=54083||54085<=A&&A<=54111||54113<=A&&A<=54139||54141<=A&&A<=54167||54169<=A&&A<=54195||54197<=A&&A<=54223||54225<=A&&A<=54251||54253<=A&&A<=54279||54281<=A&&A<=54307||54309<=A&&A<=54335||54337<=A&&A<=54363||54365<=A&&A<=54391||54393<=A&&A<=54419||54421<=A&&A<=54447||54449<=A&&A<=54475||54477<=A&&A<=54503||54505<=A&&A<=54531||54533<=A&&A<=54559||54561<=A&&A<=54587||54589<=A&&A<=54615||54617<=A&&A<=54643||54645<=A&&A<=54671||54673<=A&&A<=54699||54701<=A&&A<=54727||54729<=A&&A<=54755||54757<=A&&A<=54783||54785<=A&&A<=54811||54813<=A&&A<=54839||54841<=A&&A<=54867||54869<=A&&A<=54895||54897<=A&&A<=54923||54925<=A&&A<=54951||54953<=A&&A<=54979||54981<=A&&A<=55007||55009<=A&&A<=55035||55037<=A&&A<=55063||55065<=A&&A<=55091||55093<=A&&A<=55119||55121<=A&&A<=55147||55149<=A&&A<=55175||55177<=A&&A<=55203?u:A==9757||A==9977||9994<=A&&A<=9997||A==127877||127938<=A&&A<=127940||A==127943||127946<=A&&A<=127948||128066<=A&&A<=128067||128070<=A&&A<=128080||A==128110||128112<=A&&A<=128120||A==128124||128129<=A&&A<=128131||128133<=A&&A<=128135||A==128170||128372<=A&&A<=128373||A==128378||A==128400||128405<=A&&A<=128406||128581<=A&&A<=128583||128587<=A&&A<=128591||A==128675||128692<=A&&A<=128694||A==128704||A==128716||129304<=A&&A<=129308||129310<=A&&A<=129311||A==129318||129328<=A&&A<=129337||129341<=A&&A<=129342||129489<=A&&A<=129501?h:127995<=A&&A<=127999?p:A==8205?C:A==9792||A==9794||9877<=A&&A<=9878||A==9992||A==10084||A==127752||A==127806||A==127859||A==127891||A==127908||A==127912||A==127979||A==127981||A==128139||128187<=A&&A<=128188||A==128295||A==128300||A==128488||A==128640||A==128658?y:128102<=A&&A<=128105?B:g}return this}typeof DB<\"u\"&&DB.exports&&(DB.exports=cRe)});var s9=w((not,n9)=>{var uRe=/^(.*?)(\\x1b\\[[^m]+m|\\x1b\\]8;;.*?(\\x1b\\\\|\\u0007))/,kB;function gRe(){if(kB)return kB;if(typeof Intl.Segmenter<\"u\"){let r=new Intl.Segmenter(\"en\",{granularity:\"grapheme\"});return kB=e=>Array.from(r.segment(e),({segment:t})=>t)}else{let r=i9(),e=new r;return kB=t=>e.splitGraphemes(t)}}n9.exports=(r,e=0,t=r.length)=>{if(e<0||t<0)throw new RangeError(\"Negative indices aren't supported by this implementation\");let i=t-e,n=\"\",s=0,o=0;for(;r.length>0;){let a=r.match(uRe)||[r,r,void 0],l=gRe()(a[1]),c=Math.min(e-s,l.length);l=l.slice(c);let u=Math.min(i-o,l.length);n+=l.slice(0,u).join(\"\"),s+=c,o+=u,typeof a[2]<\"u\"&&(n+=a[2]),r=r.slice(a[0].length)}return n}});var Xf=w((bot,y9)=>{\"use strict\";var I9=new Map([[\"C\",\"cwd\"],[\"f\",\"file\"],[\"z\",\"gzip\"],[\"P\",\"preservePaths\"],[\"U\",\"unlink\"],[\"strip-components\",\"strip\"],[\"stripComponents\",\"strip\"],[\"keep-newer\",\"newer\"],[\"keepNewer\",\"newer\"],[\"keep-newer-files\",\"newer\"],[\"keepNewerFiles\",\"newer\"],[\"k\",\"keep\"],[\"keep-existing\",\"keep\"],[\"keepExisting\",\"keep\"],[\"m\",\"noMtime\"],[\"no-mtime\",\"noMtime\"],[\"p\",\"preserveOwner\"],[\"L\",\"follow\"],[\"h\",\"follow\"]]);y9.exports=r=>r?Object.keys(r).map(e=>[I9.has(e)?I9.get(e):e,r[e]]).reduce((e,t)=>(e[t[0]]=t[1],e),Object.create(null)):{}});var _f=w((Qot,D9)=>{\"use strict\";var w9=typeof process==\"object\"&&process?process:{stdout:null,stderr:null},QRe=J(\"events\"),B9=J(\"stream\"),b9=J(\"string_decoder\").StringDecoder,Wa=Symbol(\"EOF\"),za=Symbol(\"maybeEmitEnd\"),rl=Symbol(\"emittedEnd\"),MB=Symbol(\"emittingEnd\"),NC=Symbol(\"emittedError\"),OB=Symbol(\"closed\"),Q9=Symbol(\"read\"),KB=Symbol(\"flush\"),S9=Symbol(\"flushChunk\"),xn=Symbol(\"encoding\"),Va=Symbol(\"decoder\"),UB=Symbol(\"flowing\"),TC=Symbol(\"paused\"),Zf=Symbol(\"resume\"),Ci=Symbol(\"bufferLength\"),XR=Symbol(\"bufferPush\"),ZR=Symbol(\"bufferShift\"),Hi=Symbol(\"objectMode\"),Gi=Symbol(\"destroyed\"),_R=Symbol(\"emitData\"),v9=Symbol(\"emitEnd\"),$R=Symbol(\"emitEnd2\"),Xa=Symbol(\"async\"),LC=r=>Promise.resolve().then(r),x9=global._MP_NO_ITERATOR_SYMBOLS_!==\"1\",SRe=x9&&Symbol.asyncIterator||Symbol(\"asyncIterator not implemented\"),vRe=x9&&Symbol.iterator||Symbol(\"iterator not implemented\"),xRe=r=>r===\"end\"||r===\"finish\"||r===\"prefinish\",PRe=r=>r instanceof ArrayBuffer||typeof r==\"object\"&&r.constructor&&r.constructor.name===\"ArrayBuffer\"&&r.byteLength>=0,DRe=r=>!Buffer.isBuffer(r)&&ArrayBuffer.isView(r),HB=class{constructor(e,t,i){this.src=e,this.dest=t,this.opts=i,this.ondrain=()=>e[Zf](),t.on(\"drain\",this.ondrain)}unpipe(){this.dest.removeListener(\"drain\",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},eF=class extends HB{unpipe(){this.src.removeListener(\"error\",this.proxyErrors),super.unpipe()}constructor(e,t,i){super(e,t,i),this.proxyErrors=n=>t.emit(\"error\",n),e.on(\"error\",this.proxyErrors)}};D9.exports=class P9 extends B9{constructor(e){super(),this[UB]=!1,this[TC]=!1,this.pipes=[],this.buffer=[],this[Hi]=e&&e.objectMode||!1,this[Hi]?this[xn]=null:this[xn]=e&&e.encoding||null,this[xn]===\"buffer\"&&(this[xn]=null),this[Xa]=e&&!!e.async||!1,this[Va]=this[xn]?new b9(this[xn]):null,this[Wa]=!1,this[rl]=!1,this[MB]=!1,this[OB]=!1,this[NC]=null,this.writable=!0,this.readable=!0,this[Ci]=0,this[Gi]=!1}get bufferLength(){return this[Ci]}get encoding(){return this[xn]}set encoding(e){if(this[Hi])throw new Error(\"cannot set encoding in objectMode\");if(this[xn]&&e!==this[xn]&&(this[Va]&&this[Va].lastNeed||this[Ci]))throw new Error(\"cannot change encoding\");this[xn]!==e&&(this[Va]=e?new b9(e):null,this.buffer.length&&(this.buffer=this.buffer.map(t=>this[Va].write(t)))),this[xn]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Hi]}set objectMode(e){this[Hi]=this[Hi]||!!e}get async(){return this[Xa]}set async(e){this[Xa]=this[Xa]||!!e}write(e,t,i){if(this[Wa])throw new Error(\"write after end\");if(this[Gi])return this.emit(\"error\",Object.assign(new Error(\"Cannot call write after a stream was destroyed\"),{code:\"ERR_STREAM_DESTROYED\"})),!0;typeof t==\"function\"&&(i=t,t=\"utf8\"),t||(t=\"utf8\");let n=this[Xa]?LC:s=>s();return!this[Hi]&&!Buffer.isBuffer(e)&&(DRe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):PRe(e)?e=Buffer.from(e):typeof e!=\"string\"&&(this.objectMode=!0)),this[Hi]?(this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):e.length?(typeof e==\"string\"&&!(t===this[xn]&&!this[Va].lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[xn]&&(e=this[Va].write(e)),this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):(this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing)}read(e){if(this[Gi])return null;if(this[Ci]===0||e===0||e>this[Ci])return this[za](),null;this[Hi]&&(e=null),this.buffer.length>1&&!this[Hi]&&(this.encoding?this.buffer=[this.buffer.join(\"\")]:this.buffer=[Buffer.concat(this.buffer,this[Ci])]);let t=this[Q9](e||null,this.buffer[0]);return this[za](),t}[Q9](e,t){return e===t.length||e===null?this[ZR]():(this.buffer[0]=t.slice(e),t=t.slice(0,e),this[Ci]-=e),this.emit(\"data\",t),!this.buffer.length&&!this[Wa]&&this.emit(\"drain\"),t}end(e,t,i){return typeof e==\"function\"&&(i=e,e=null),typeof t==\"function\"&&(i=t,t=\"utf8\"),e&&this.write(e,t),i&&this.once(\"end\",i),this[Wa]=!0,this.writable=!1,(this.flowing||!this[TC])&&this[za](),this}[Zf](){this[Gi]||(this[TC]=!1,this[UB]=!0,this.emit(\"resume\"),this.buffer.length?this[KB]():this[Wa]?this[za]():this.emit(\"drain\"))}resume(){return this[Zf]()}pause(){this[UB]=!1,this[TC]=!0}get destroyed(){return this[Gi]}get flowing(){return this[UB]}get paused(){return this[TC]}[XR](e){this[Hi]?this[Ci]+=1:this[Ci]+=e.length,this.buffer.push(e)}[ZR](){return this.buffer.length&&(this[Hi]?this[Ci]-=1:this[Ci]-=this.buffer[0].length),this.buffer.shift()}[KB](e){do;while(this[S9](this[ZR]()));!e&&!this.buffer.length&&!this[Wa]&&this.emit(\"drain\")}[S9](e){return e?(this.emit(\"data\",e),this.flowing):!1}pipe(e,t){if(this[Gi])return;let i=this[rl];return t=t||{},e===w9.stdout||e===w9.stderr?t.end=!1:t.end=t.end!==!1,t.proxyErrors=!!t.proxyErrors,i?t.end&&e.end():(this.pipes.push(t.proxyErrors?new eF(this,e,t):new HB(this,e,t)),this[Xa]?LC(()=>this[Zf]()):this[Zf]()),e}unpipe(e){let t=this.pipes.find(i=>i.dest===e);t&&(this.pipes.splice(this.pipes.indexOf(t),1),t.unpipe())}addListener(e,t){return this.on(e,t)}on(e,t){let i=super.on(e,t);return e===\"data\"&&!this.pipes.length&&!this.flowing?this[Zf]():e===\"readable\"&&this[Ci]!==0?super.emit(\"readable\"):xRe(e)&&this[rl]?(super.emit(e),this.removeAllListeners(e)):e===\"error\"&&this[NC]&&(this[Xa]?LC(()=>t.call(this,this[NC])):t.call(this,this[NC])),i}get emittedEnd(){return this[rl]}[za](){!this[MB]&&!this[rl]&&!this[Gi]&&this.buffer.length===0&&this[Wa]&&(this[MB]=!0,this.emit(\"end\"),this.emit(\"prefinish\"),this.emit(\"finish\"),this[OB]&&this.emit(\"close\"),this[MB]=!1)}emit(e,t,...i){if(e!==\"error\"&&e!==\"close\"&&e!==Gi&&this[Gi])return;if(e===\"data\")return t?this[Xa]?LC(()=>this[_R](t)):this[_R](t):!1;if(e===\"end\")return this[v9]();if(e===\"close\"){if(this[OB]=!0,!this[rl]&&!this[Gi])return;let s=super.emit(\"close\");return this.removeAllListeners(\"close\"),s}else if(e===\"error\"){this[NC]=t;let s=super.emit(\"error\",t);return this[za](),s}else if(e===\"resume\"){let s=super.emit(\"resume\");return this[za](),s}else if(e===\"finish\"||e===\"prefinish\"){let s=super.emit(e);return this.removeAllListeners(e),s}let n=super.emit(e,t,...i);return this[za](),n}[_R](e){for(let i of this.pipes)i.dest.write(e)===!1&&this.pause();let t=super.emit(\"data\",e);return this[za](),t}[v9](){this[rl]||(this[rl]=!0,this.readable=!1,this[Xa]?LC(()=>this[$R]()):this[$R]())}[$R](){if(this[Va]){let t=this[Va].end();if(t){for(let i of this.pipes)i.dest.write(t);super.emit(\"data\",t)}}for(let t of this.pipes)t.end();let e=super.emit(\"end\");return this.removeAllListeners(\"end\"),e}collect(){let e=[];this[Hi]||(e.dataLength=0);let t=this.promise();return this.on(\"data\",i=>{e.push(i),this[Hi]||(e.dataLength+=i.length)}),t.then(()=>e)}concat(){return this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this.collect().then(e=>this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this[xn]?e.join(\"\"):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,t)=>{this.on(Gi,()=>t(new Error(\"stream destroyed\"))),this.on(\"error\",i=>t(i)),this.on(\"end\",()=>e())})}[SRe](){return{next:()=>{let t=this.read();if(t!==null)return Promise.resolve({done:!1,value:t});if(this[Wa])return Promise.resolve({done:!0});let i=null,n=null,s=c=>{this.removeListener(\"data\",o),this.removeListener(\"end\",a),n(c)},o=c=>{this.removeListener(\"error\",s),this.removeListener(\"end\",a),this.pause(),i({value:c,done:!!this[Wa]})},a=()=>{this.removeListener(\"error\",s),this.removeListener(\"data\",o),i({done:!0})},l=()=>s(new Error(\"stream destroyed\"));return new Promise((c,u)=>{n=u,i=c,this.once(Gi,l),this.once(\"error\",s),this.once(\"end\",a),this.once(\"data\",o)})}}}[vRe](){return{next:()=>{let t=this.read();return{value:t,done:t===null}}}}destroy(e){return this[Gi]?(e?this.emit(\"error\",e):this.emit(Gi),this):(this[Gi]=!0,this.buffer.length=0,this[Ci]=0,typeof this.close==\"function\"&&!this[OB]&&this.close(),e?this.emit(\"error\",e):this.emit(Gi),this)}static isStream(e){return!!e&&(e instanceof P9||e instanceof B9||e instanceof QRe&&(typeof e.pipe==\"function\"||typeof e.write==\"function\"&&typeof e.end==\"function\"))}}});var R9=w((Sot,k9)=>{var kRe=J(\"zlib\").constants||{ZLIB_VERNUM:4736};k9.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},kRe))});var dF=w(Xn=>{\"use strict\";var sF=J(\"assert\"),il=J(\"buffer\").Buffer,T9=J(\"zlib\"),Uc=Xn.constants=R9(),RRe=_f(),F9=il.concat,Hc=Symbol(\"_superWrite\"),eh=class extends Error{constructor(e){super(\"zlib: \"+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code=\"ZLIB_ERROR\"),this.message=\"zlib: \"+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return\"ZlibError\"}},FRe=Symbol(\"opts\"),MC=Symbol(\"flushFlag\"),N9=Symbol(\"finishFlushFlag\"),pF=Symbol(\"fullFlushFlag\"),cr=Symbol(\"handle\"),GB=Symbol(\"onError\"),$f=Symbol(\"sawError\"),tF=Symbol(\"level\"),rF=Symbol(\"strategy\"),iF=Symbol(\"ended\"),vot=Symbol(\"_defaultFullFlush\"),YB=class extends RRe{constructor(e,t){if(!e||typeof e!=\"object\")throw new TypeError(\"invalid options for ZlibBase constructor\");super(e),this[$f]=!1,this[iF]=!1,this[FRe]=e,this[MC]=e.flush,this[N9]=e.finishFlush;try{this[cr]=new T9[t](e)}catch(i){throw new eh(i)}this[GB]=i=>{this[$f]||(this[$f]=!0,this.close(),this.emit(\"error\",i))},this[cr].on(\"error\",i=>this[GB](new eh(i))),this.once(\"end\",()=>this.close)}close(){this[cr]&&(this[cr].close(),this[cr]=null,this.emit(\"close\"))}reset(){if(!this[$f])return sF(this[cr],\"zlib binding closed\"),this[cr].reset()}flush(e){this.ended||(typeof e!=\"number\"&&(e=this[pF]),this.write(Object.assign(il.alloc(0),{[MC]:e})))}end(e,t,i){return e&&this.write(e,t),this.flush(this[N9]),this[iF]=!0,super.end(null,null,i)}get ended(){return this[iF]}write(e,t,i){if(typeof t==\"function\"&&(i=t,t=\"utf8\"),typeof e==\"string\"&&(e=il.from(e,t)),this[$f])return;sF(this[cr],\"zlib binding closed\");let n=this[cr]._handle,s=n.close;n.close=()=>{};let o=this[cr].close;this[cr].close=()=>{},il.concat=c=>c;let a;try{let c=typeof e[MC]==\"number\"?e[MC]:this[MC];a=this[cr]._processChunk(e,c),il.concat=F9}catch(c){il.concat=F9,this[GB](new eh(c))}finally{this[cr]&&(this[cr]._handle=n,n.close=s,this[cr].close=o,this[cr].removeAllListeners(\"error\"))}this[cr]&&this[cr].on(\"error\",c=>this[GB](new eh(c)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[Hc](il.from(a[0]));for(let c=1;c<a.length;c++)l=this[Hc](a[c])}else l=this[Hc](il.from(a));return i&&i(),l}[Hc](e){return super.write(e)}},Za=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.Z_NO_FLUSH,e.finishFlush=e.finishFlush||Uc.Z_FINISH,super(e,t),this[pF]=Uc.Z_FULL_FLUSH,this[tF]=e.level,this[rF]=e.strategy}params(e,t){if(!this[$f]){if(!this[cr])throw new Error(\"cannot switch params when binding is closed\");if(!this[cr].params)throw new Error(\"not supported in this implementation\");if(this[tF]!==e||this[rF]!==t){this.flush(Uc.Z_SYNC_FLUSH),sF(this[cr],\"zlib binding closed\");let i=this[cr].flush;this[cr].flush=(n,s)=>{this.flush(n),s()};try{this[cr].params(e,t)}finally{this[cr].flush=i}this[cr]&&(this[tF]=e,this[rF]=t)}}}},oF=class extends Za{constructor(e){super(e,\"Deflate\")}},aF=class extends Za{constructor(e){super(e,\"Inflate\")}},nF=Symbol(\"_portable\"),AF=class extends Za{constructor(e){super(e,\"Gzip\"),this[nF]=e&&!!e.portable}[Hc](e){return this[nF]?(this[nF]=!1,e[9]=255,super[Hc](e)):super[Hc](e)}},lF=class extends Za{constructor(e){super(e,\"Gunzip\")}},cF=class extends Za{constructor(e){super(e,\"DeflateRaw\")}},uF=class extends Za{constructor(e){super(e,\"InflateRaw\")}},gF=class extends Za{constructor(e){super(e,\"Unzip\")}},jB=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Uc.BROTLI_OPERATION_FINISH,super(e,t),this[pF]=Uc.BROTLI_OPERATION_FLUSH}},fF=class extends jB{constructor(e){super(e,\"BrotliCompress\")}},hF=class extends jB{constructor(e){super(e,\"BrotliDecompress\")}};Xn.Deflate=oF;Xn.Inflate=aF;Xn.Gzip=AF;Xn.Gunzip=lF;Xn.DeflateRaw=cF;Xn.InflateRaw=uF;Xn.Unzip=gF;typeof T9.BrotliCompress==\"function\"?(Xn.BrotliCompress=fF,Xn.BrotliDecompress=hF):Xn.BrotliCompress=Xn.BrotliDecompress=class{constructor(){throw new Error(\"Brotli is not supported in this version of Node.js\")}}});var th=w((Dot,L9)=>{var NRe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;L9.exports=NRe!==\"win32\"?r=>r:r=>r&&r.replace(/\\\\/g,\"/\")});var qB=w((Rot,M9)=>{\"use strict\";var TRe=_f(),CF=th(),mF=Symbol(\"slurp\");M9.exports=class extends TRe{constructor(e,t,i){switch(super(),this.pause(),this.extended=t,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case\"File\":case\"OldFile\":case\"Link\":case\"SymbolicLink\":case\"CharacterDevice\":case\"BlockDevice\":case\"Directory\":case\"FIFO\":case\"ContiguousFile\":case\"GNUDumpDir\":break;case\"NextFileHasLongLinkpath\":case\"NextFileHasLongPath\":case\"OldGnuLongPath\":case\"GlobalExtendedHeader\":case\"ExtendedHeader\":case\"OldExtendedHeader\":this.meta=!0;break;default:this.ignore=!0}this.path=CF(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=CF(e.linkpath),this.uname=e.uname,this.gname=e.gname,t&&this[mF](t),i&&this[mF](i,!0)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");let i=this.remain,n=this.blockRemain;return this.remain=Math.max(0,i-t),this.blockRemain=Math.max(0,n-t),this.ignore?!0:i>=t?super.write(e):super.write(e.slice(0,i))}[mF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=i===\"path\"||i===\"linkpath\"?CF(e[i]):e[i])}}});var EF=w(JB=>{\"use strict\";JB.name=new Map([[\"0\",\"File\"],[\"\",\"OldFile\"],[\"1\",\"Link\"],[\"2\",\"SymbolicLink\"],[\"3\",\"CharacterDevice\"],[\"4\",\"BlockDevice\"],[\"5\",\"Directory\"],[\"6\",\"FIFO\"],[\"7\",\"ContiguousFile\"],[\"g\",\"GlobalExtendedHeader\"],[\"x\",\"ExtendedHeader\"],[\"A\",\"SolarisACL\"],[\"D\",\"GNUDumpDir\"],[\"I\",\"Inode\"],[\"K\",\"NextFileHasLongLinkpath\"],[\"L\",\"NextFileHasLongPath\"],[\"M\",\"ContinuationFile\"],[\"N\",\"OldGnuLongPath\"],[\"S\",\"SparseFile\"],[\"V\",\"TapeVolumeHeader\"],[\"X\",\"OldExtendedHeader\"]]);JB.code=new Map(Array.from(JB.name).map(r=>[r[1],r[0]]))});var H9=w((Not,U9)=>{\"use strict\";var LRe=(r,e)=>{if(Number.isSafeInteger(r))r<0?ORe(r,e):MRe(r,e);else throw Error(\"cannot encode number outside of javascript safe integer range\");return e},MRe=(r,e)=>{e[0]=128;for(var t=e.length;t>1;t--)e[t-1]=r&255,r=Math.floor(r/256)},ORe=(r,e)=>{e[0]=255;var t=!1;r=r*-1;for(var i=e.length;i>1;i--){var n=r&255;r=Math.floor(r/256),t?e[i-1]=O9(n):n===0?e[i-1]=0:(t=!0,e[i-1]=K9(n))}},KRe=r=>{let e=r[0],t=e===128?HRe(r.slice(1,r.length)):e===255?URe(r):null;if(t===null)throw Error(\"invalid base256 encoding\");if(!Number.isSafeInteger(t))throw Error(\"parsed number outside of javascript safe integer range\");return t},URe=r=>{for(var e=r.length,t=0,i=!1,n=e-1;n>-1;n--){var s=r[n],o;i?o=O9(s):s===0?o=s:(i=!0,o=K9(s)),o!==0&&(t-=o*Math.pow(256,e-n-1))}return t},HRe=r=>{for(var e=r.length,t=0,i=e-1;i>-1;i--){var n=r[i];n!==0&&(t+=n*Math.pow(256,e-i-1))}return t},O9=r=>(255^r)&255,K9=r=>(255^r)+1&255;U9.exports={encode:LRe,parse:KRe}});var ih=w((Tot,Y9)=>{\"use strict\";var IF=EF(),rh=J(\"path\").posix,G9=H9(),yF=Symbol(\"slurp\"),Zn=Symbol(\"type\"),bF=class{constructor(e,t,i,n){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Zn]=\"0\",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,t||0,i,n):e&&this.set(e)}decode(e,t,i,n){if(t||(t=0),!e||!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");if(this.path=Gc(e,t,100),this.mode=nl(e,t+100,8),this.uid=nl(e,t+108,8),this.gid=nl(e,t+116,8),this.size=nl(e,t+124,12),this.mtime=wF(e,t+136,12),this.cksum=nl(e,t+148,12),this[yF](i),this[yF](n,!0),this[Zn]=Gc(e,t+156,1),this[Zn]===\"\"&&(this[Zn]=\"0\"),this[Zn]===\"0\"&&this.path.substr(-1)===\"/\"&&(this[Zn]=\"5\"),this[Zn]===\"5\"&&(this.size=0),this.linkpath=Gc(e,t+157,100),e.slice(t+257,t+265).toString()===\"ustar\\x0000\")if(this.uname=Gc(e,t+265,32),this.gname=Gc(e,t+297,32),this.devmaj=nl(e,t+329,8),this.devmin=nl(e,t+337,8),e[t+475]!==0){let o=Gc(e,t+345,155);this.path=o+\"/\"+this.path}else{let o=Gc(e,t+345,130);o&&(this.path=o+\"/\"+this.path),this.atime=wF(e,t+476,12),this.ctime=wF(e,t+488,12)}let s=8*32;for(let o=t;o<t+148;o++)s+=e[o];for(let o=t+156;o<t+512;o++)s+=e[o];this.cksumValid=s===this.cksum,this.cksum===null&&s===8*32&&(this.nullBlock=!0)}[yF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=e[i])}encode(e,t){if(e||(e=this.block=Buffer.alloc(512),t=0),t||(t=0),!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");let i=this.ctime||this.atime?130:155,n=GRe(this.path||\"\",i),s=n[0],o=n[1];this.needPax=n[2],this.needPax=Yc(e,t,100,s)||this.needPax,this.needPax=sl(e,t+100,8,this.mode)||this.needPax,this.needPax=sl(e,t+108,8,this.uid)||this.needPax,this.needPax=sl(e,t+116,8,this.gid)||this.needPax,this.needPax=sl(e,t+124,12,this.size)||this.needPax,this.needPax=BF(e,t+136,12,this.mtime)||this.needPax,e[t+156]=this[Zn].charCodeAt(0),this.needPax=Yc(e,t+157,100,this.linkpath)||this.needPax,e.write(\"ustar\\x0000\",t+257,8),this.needPax=Yc(e,t+265,32,this.uname)||this.needPax,this.needPax=Yc(e,t+297,32,this.gname)||this.needPax,this.needPax=sl(e,t+329,8,this.devmaj)||this.needPax,this.needPax=sl(e,t+337,8,this.devmin)||this.needPax,this.needPax=Yc(e,t+345,i,o)||this.needPax,e[t+475]!==0?this.needPax=Yc(e,t+345,155,o)||this.needPax:(this.needPax=Yc(e,t+345,130,o)||this.needPax,this.needPax=BF(e,t+476,12,this.atime)||this.needPax,this.needPax=BF(e,t+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=t;l<t+148;l++)a+=e[l];for(let l=t+156;l<t+512;l++)a+=e[l];return this.cksum=a,sl(e,t+148,8,this.cksum),this.cksumValid=!0,this.needPax}set(e){for(let t in e)e[t]!==null&&e[t]!==void 0&&(this[t]=e[t])}get type(){return IF.name.get(this[Zn])||this[Zn]}get typeKey(){return this[Zn]}set type(e){IF.code.has(e)?this[Zn]=IF.code.get(e):this[Zn]=e}},GRe=(r,e)=>{let i=r,n=\"\",s,o=rh.parse(r).root||\".\";if(Buffer.byteLength(i)<100)s=[i,n,!1];else{n=rh.dirname(i),i=rh.basename(i);do Buffer.byteLength(i)<=100&&Buffer.byteLength(n)<=e?s=[i,n,!1]:Buffer.byteLength(i)>100&&Buffer.byteLength(n)<=e?s=[i.substr(0,100-1),n,!0]:(i=rh.join(rh.basename(n),i),n=rh.dirname(n));while(n!==o&&!s);s||(s=[r.substr(0,100-1),\"\",!0])}return s},Gc=(r,e,t)=>r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*/,\"\"),wF=(r,e,t)=>YRe(nl(r,e,t)),YRe=r=>r===null?null:new Date(r*1e3),nl=(r,e,t)=>r[e]&128?G9.parse(r.slice(e,e+t)):qRe(r,e,t),jRe=r=>isNaN(r)?null:r,qRe=(r,e,t)=>jRe(parseInt(r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*$/,\"\").trim(),8)),JRe={12:8589934591,8:2097151},sl=(r,e,t,i)=>i===null?!1:i>JRe[t]||i<0?(G9.encode(i,r.slice(e,e+t)),!0):(WRe(r,e,t,i),!1),WRe=(r,e,t,i)=>r.write(zRe(i,t),e,t,\"ascii\"),zRe=(r,e)=>VRe(Math.floor(r).toString(8),e),VRe=(r,e)=>(r.length===e-1?r:new Array(e-r.length-1).join(\"0\")+r+\" \")+\"\\0\",BF=(r,e,t,i)=>i===null?!1:sl(r,e,t,i.getTime()/1e3),XRe=new Array(156).join(\"\\0\"),Yc=(r,e,t,i)=>i===null?!1:(r.write(i+XRe,e,t,\"utf8\"),i.length!==Buffer.byteLength(i)||i.length>t);Y9.exports=bF});var WB=w((Lot,j9)=>{\"use strict\";var ZRe=ih(),_Re=J(\"path\"),OC=class{constructor(e,t){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=t||!1}encode(){let e=this.encodeBody();if(e===\"\")return null;let t=Buffer.byteLength(e),i=512*Math.ceil(1+t/512),n=Buffer.allocUnsafe(i);for(let s=0;s<512;s++)n[s]=0;new ZRe({path:(\"PaxHeader/\"+_Re.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:t,mtime:this.mtime||null,type:this.global?\"GlobalExtendedHeader\":\"ExtendedHeader\",linkpath:\"\",uname:this.uname||\"\",gname:this.gname||\"\",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(n),n.write(e,512,t,\"utf8\");for(let s=t+512;s<n.length;s++)n[s]=0;return n}encodeBody(){return this.encodeField(\"path\")+this.encodeField(\"ctime\")+this.encodeField(\"atime\")+this.encodeField(\"dev\")+this.encodeField(\"ino\")+this.encodeField(\"nlink\")+this.encodeField(\"charset\")+this.encodeField(\"comment\")+this.encodeField(\"gid\")+this.encodeField(\"gname\")+this.encodeField(\"linkpath\")+this.encodeField(\"mtime\")+this.encodeField(\"size\")+this.encodeField(\"uid\")+this.encodeField(\"uname\")}encodeField(e){if(this[e]===null||this[e]===void 0)return\"\";let t=this[e]instanceof Date?this[e].getTime()/1e3:this[e],i=\" \"+(e===\"dev\"||e===\"ino\"||e===\"nlink\"?\"SCHILY.\":\"\")+e+\"=\"+t+`\n`,n=Buffer.byteLength(i),s=Math.floor(Math.log(n)/Math.log(10))+1;return n+s>=Math.pow(10,s)&&(s+=1),s+n+i}};OC.parse=(r,e,t)=>new OC($Re(eFe(r),e),t);var $Re=(r,e)=>e?Object.keys(r).reduce((t,i)=>(t[i]=r[i],t),e):r,eFe=r=>r.replace(/\\n$/,\"\").split(`\n`).reduce(tFe,Object.create(null)),tFe=(r,e)=>{let t=parseInt(e,10);if(t!==Buffer.byteLength(e)+1)return r;e=e.substr((t+\" \").length);let i=e.split(\"=\"),n=i.shift().replace(/^SCHILY\\.(dev|ino|nlink)/,\"$1\");if(!n)return r;let s=i.join(\"=\");return r[n]=/^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(n)?new Date(s*1e3):/^[0-9]+$/.test(s)?+s:s,r};j9.exports=OC});var nh=w((Mot,q9)=>{q9.exports=r=>{let e=r.length-1,t=-1;for(;e>-1&&r.charAt(e)===\"/\";)t=e,e--;return t===-1?r:r.slice(0,t)}});var zB=w((Oot,J9)=>{\"use strict\";J9.exports=r=>class extends r{warn(e,t,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=t instanceof Error&&t.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(t instanceof Error&&(i=Object.assign(t,i),t=t.message),this.emit(\"warn\",i.tarCode,t,i)):t instanceof Error?this.emit(\"error\",Object.assign(t,i)):this.emit(\"error\",Object.assign(new Error(`${e}: ${t}`),i))}}});var SF=w((Uot,W9)=>{\"use strict\";var VB=[\"|\",\"<\",\">\",\"?\",\":\"],QF=VB.map(r=>String.fromCharCode(61440+r.charCodeAt(0))),rFe=new Map(VB.map((r,e)=>[r,QF[e]])),iFe=new Map(QF.map((r,e)=>[r,VB[e]]));W9.exports={encode:r=>VB.reduce((e,t)=>e.split(t).join(rFe.get(t)),r),decode:r=>QF.reduce((e,t)=>e.split(t).join(iFe.get(t)),r)}});var vF=w((Hot,V9)=>{var{isAbsolute:nFe,parse:z9}=J(\"path\").win32;V9.exports=r=>{let e=\"\",t=z9(r);for(;nFe(r)||t.root;){let i=r.charAt(0)===\"/\"&&r.slice(0,4)!==\"//?/\"?\"/\":t.root;r=r.substr(i.length),e+=i,t=z9(r)}return[e,r]}});var Z9=w((Got,X9)=>{\"use strict\";X9.exports=(r,e,t)=>(r&=4095,t&&(r=(r|384)&-19),e&&(r&256&&(r|=64),r&32&&(r|=8),r&4&&(r|=1)),r)});var MF=w((qot,uX)=>{\"use strict\";var nX=_f(),sX=WB(),oX=ih(),Zo=J(\"fs\"),_9=J(\"path\"),Xo=th(),sFe=nh(),aX=(r,e)=>e?(r=Xo(r).replace(/^\\.(\\/|$)/,\"\"),sFe(e)+\"/\"+r):Xo(r),oFe=16*1024*1024,$9=Symbol(\"process\"),eX=Symbol(\"file\"),tX=Symbol(\"directory\"),PF=Symbol(\"symlink\"),rX=Symbol(\"hardlink\"),KC=Symbol(\"header\"),XB=Symbol(\"read\"),DF=Symbol(\"lstat\"),ZB=Symbol(\"onlstat\"),kF=Symbol(\"onread\"),RF=Symbol(\"onreadlink\"),FF=Symbol(\"openfile\"),NF=Symbol(\"onopenfile\"),ol=Symbol(\"close\"),_B=Symbol(\"mode\"),TF=Symbol(\"awaitDrain\"),xF=Symbol(\"ondrain\"),_o=Symbol(\"prefix\"),iX=Symbol(\"hadError\"),AX=zB(),aFe=SF(),lX=vF(),cX=Z9(),$B=AX(class extends nX{constructor(e,t){if(t=t||{},super(t),typeof e!=\"string\")throw new TypeError(\"path is required\");this.path=Xo(e),this.portable=!!t.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||\"\",this.maxReadSize=t.maxReadSize||oFe,this.linkCache=t.linkCache||new Map,this.statCache=t.statCache||new Map,this.preservePaths=!!t.preservePaths,this.cwd=Xo(t.cwd||process.cwd()),this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.mtime=t.mtime||null,this.prefix=t.prefix?Xo(t.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.win32=!!t.win32||process.platform===\"win32\",this.win32&&(this.path=aFe.decode(this.path.replace(/\\\\/g,\"/\")),e=e.replace(/\\\\/g,\"/\")),this.absolute=Xo(t.absolute||_9.resolve(this.cwd,e)),this.path===\"\"&&(this.path=\"./\"),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[ZB](this.statCache.get(this.absolute)):this[DF]()}emit(e,...t){return e===\"error\"&&(this[iX]=!0),super.emit(e,...t)}[DF](){Zo.lstat(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[ZB](t)})}[ZB](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=lFe(e),this.emit(\"stat\",e),this[$9]()}[$9](){switch(this.type){case\"File\":return this[eX]();case\"Directory\":return this[tX]();case\"SymbolicLink\":return this[PF]();default:return this.end()}}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}[_o](e){return aX(e,this.prefix)}[KC](){this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this[_B](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:\"\",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[tX](){this.path.substr(-1)!==\"/\"&&(this.path+=\"/\"),this.stat.size=0,this[KC](),this.end()}[PF](){Zo.readlink(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[RF](t)})}[RF](e){this.linkpath=Xo(e),this[KC](),this.end()}[rX](e){this.type=\"Link\",this.linkpath=Xo(_9.relative(this.cwd,e)),this.stat.size=0,this[KC](),this.end()}[eX](){if(this.stat.nlink>1){let e=this.stat.dev+\":\"+this.stat.ino;if(this.linkCache.has(e)){let t=this.linkCache.get(e);if(t.indexOf(this.cwd)===0)return this[rX](t)}this.linkCache.set(e,this.absolute)}if(this[KC](),this.stat.size===0)return this.end();this[FF]()}[FF](){Zo.open(this.absolute,\"r\",(e,t)=>{if(e)return this.emit(\"error\",e);this[NF](t)})}[NF](e){if(this.fd=e,this[iX])return this[ol]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let t=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(t),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[XB]()}[XB](){let{fd:e,buf:t,offset:i,length:n,pos:s}=this;Zo.read(e,t,i,n,s,(o,a)=>{if(o)return this[ol](()=>this.emit(\"error\",o));this[kF](a)})}[ol](e){Zo.close(this.fd,e)}[kF](e){if(e<=0&&this.remain>0){let n=new Error(\"encountered unexpected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e>this.remain){let n=new Error(\"did not encounter expected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e===this.remain)for(let n=e;n<this.length&&e<this.blockRemain;n++)this.buf[n+this.offset]=0,e++,this.remain++;let t=this.offset===0&&e===this.buf.length?this.buf:this.buf.slice(this.offset,this.offset+e);this.write(t)?this[xF]():this[TF](()=>this[xF]())}[TF](e){this.once(\"drain\",e)}write(e){if(this.blockRemain<e.length){let t=new Error(\"writing more data than expected\");return t.path=this.absolute,this.emit(\"error\",t)}return this.remain-=e.length,this.blockRemain-=e.length,this.pos+=e.length,this.offset+=e.length,super.write(e)}[xF](){if(!this.remain)return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),this[ol](e=>e?this.emit(\"error\",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[XB]()}}),LF=class extends $B{[DF](){this[ZB](Zo.lstatSync(this.absolute))}[PF](){this[RF](Zo.readlinkSync(this.absolute))}[FF](){this[NF](Zo.openSync(this.absolute,\"r\"))}[XB](){let e=!0;try{let{fd:t,buf:i,offset:n,length:s,pos:o}=this,a=Zo.readSync(t,i,n,s,o);this[kF](a),e=!1}finally{if(e)try{this[ol](()=>{})}catch{}}}[TF](e){e()}[ol](e){Zo.closeSync(this.fd),e()}},AFe=AX(class extends nX{constructor(e,t){t=t||{},super(t),this.preservePaths=!!t.preservePaths,this.portable=!!t.portable,this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.readEntry=e,this.type=e.type,this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.prefix=t.prefix||null,this.path=Xo(e.path),this.mode=this[_B](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:t.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=Xo(e.linkpath),typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[_o](e){return aX(e,this.prefix)}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");return this.blockRemain-=t,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});$B.Sync=LF;$B.Tar=AFe;var lFe=r=>r.isFile()?\"File\":r.isDirectory()?\"Directory\":r.isSymbolicLink()?\"SymbolicLink\":\"Unsupported\";uX.exports=$B});var A0=w((Wot,mX)=>{\"use strict\";var o0=class{constructor(e,t){this.path=e||\"./\",this.absolute=t,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},cFe=_f(),uFe=dF(),gFe=qB(),JF=MF(),fFe=JF.Sync,hFe=JF.Tar,pFe=WI(),gX=Buffer.alloc(1024),r0=Symbol(\"onStat\"),e0=Symbol(\"ended\"),$o=Symbol(\"queue\"),sh=Symbol(\"current\"),jc=Symbol(\"process\"),t0=Symbol(\"processing\"),fX=Symbol(\"processJob\"),ea=Symbol(\"jobs\"),OF=Symbol(\"jobDone\"),i0=Symbol(\"addFSEntry\"),hX=Symbol(\"addTarEntry\"),GF=Symbol(\"stat\"),YF=Symbol(\"readdir\"),n0=Symbol(\"onreaddir\"),s0=Symbol(\"pipe\"),pX=Symbol(\"entry\"),KF=Symbol(\"entryOpt\"),jF=Symbol(\"writeEntryClass\"),CX=Symbol(\"write\"),UF=Symbol(\"ondrain\"),a0=J(\"fs\"),dX=J(\"path\"),dFe=zB(),HF=th(),WF=dFe(class extends cFe{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||\"\",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=HF(e.prefix||\"\"),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[jF]=JF,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!=\"object\"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new uFe.Gzip(e.gzip),this.zip.on(\"data\",t=>super.write(t)),this.zip.on(\"end\",t=>super.end()),this.zip.on(\"drain\",t=>this[UF]()),this.on(\"resume\",t=>this.zip.resume())):this.on(\"drain\",this[UF]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter==\"function\"?e.filter:t=>!0,this[$o]=new pFe,this[ea]=0,this.jobs=+e.jobs||4,this[t0]=!1,this[e0]=!1}[CX](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[e0]=!0,this[jc](),this}write(e){if(this[e0])throw new Error(\"write after end\");return e instanceof gFe?this[hX](e):this[i0](e),this.flowing}[hX](e){let t=HF(dX.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let i=new o0(e.path,t,!1);i.entry=new hFe(e,this[KF](i)),i.entry.on(\"end\",n=>this[OF](i)),this[ea]+=1,this[$o].push(i)}this[jc]()}[i0](e){let t=HF(dX.resolve(this.cwd,e));this[$o].push(new o0(e,t)),this[jc]()}[GF](e){e.pending=!0,this[ea]+=1;let t=this.follow?\"stat\":\"lstat\";a0[t](e.absolute,(i,n)=>{e.pending=!1,this[ea]-=1,i?this.emit(\"error\",i):this[r0](e,n)})}[r0](e,t){this.statCache.set(e.absolute,t),e.stat=t,this.filter(e.path,t)||(e.ignore=!0),this[jc]()}[YF](e){e.pending=!0,this[ea]+=1,a0.readdir(e.absolute,(t,i)=>{if(e.pending=!1,this[ea]-=1,t)return this.emit(\"error\",t);this[n0](e,i)})}[n0](e,t){this.readdirCache.set(e.absolute,t),e.readdir=t,this[jc]()}[jc](){if(!this[t0]){this[t0]=!0;for(let e=this[$o].head;e!==null&&this[ea]<this.jobs;e=e.next)if(this[fX](e.value),e.value.ignore){let t=e.next;this[$o].removeNode(e),e.next=t}this[t0]=!1,this[e0]&&!this[$o].length&&this[ea]===0&&(this.zip?this.zip.end(gX):(super.write(gX),super.end()))}}get[sh](){return this[$o]&&this[$o].head&&this[$o].head.value}[OF](e){this[$o].shift(),this[ea]-=1,this[jc]()}[fX](e){if(!e.pending){if(e.entry){e===this[sh]&&!e.piped&&this[s0](e);return}if(e.stat||(this.statCache.has(e.absolute)?this[r0](e,this.statCache.get(e.absolute)):this[GF](e)),!!e.stat&&!e.ignore&&!(!this.noDirRecurse&&e.stat.isDirectory()&&!e.readdir&&(this.readdirCache.has(e.absolute)?this[n0](e,this.readdirCache.get(e.absolute)):this[YF](e),!e.readdir))){if(e.entry=this[pX](e),!e.entry){e.ignore=!0;return}e===this[sh]&&!e.piped&&this[s0](e)}}}[KF](e){return{onwarn:(t,i,n)=>this.warn(t,i,n),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[pX](e){this[ea]+=1;try{return new this[jF](e.path,this[KF](e)).on(\"end\",()=>this[OF](e)).on(\"error\",t=>this.emit(\"error\",t))}catch(t){this.emit(\"error\",t)}}[UF](){this[sh]&&this[sh].entry&&this[sh].entry.resume()}[s0](e){e.piped=!0,e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)});let t=e.entry,i=this.zip;i?t.on(\"data\",n=>{i.write(n)||t.pause()}):t.on(\"data\",n=>{super.write(n)||t.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),qF=class extends WF{constructor(e){super(e),this[jF]=fFe}pause(){}resume(){}[GF](e){let t=this.follow?\"statSync\":\"lstatSync\";this[r0](e,a0[t](e.absolute))}[YF](e,t){this[n0](e,a0.readdirSync(e.absolute))}[s0](e){let t=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)}),i?t.on(\"data\",n=>{i.write(n)}):t.on(\"data\",n=>{super[CX](n)})}};WF.Sync=qF;mX.exports=WF});var fh=w(HC=>{\"use strict\";var CFe=_f(),mFe=J(\"events\").EventEmitter,Pn=J(\"fs\"),XF=Pn.writev;if(!XF){let r=process.binding(\"fs\"),e=r.FSReqWrap||r.FSReqCallback;XF=(t,i,n,s)=>{let o=(l,c)=>s(l,c,i),a=new e;a.oncomplete=o,r.writeBuffers(t,i,n,a)}}var uh=Symbol(\"_autoClose\"),lo=Symbol(\"_close\"),UC=Symbol(\"_ended\"),rr=Symbol(\"_fd\"),EX=Symbol(\"_finished\"),Al=Symbol(\"_flags\"),zF=Symbol(\"_flush\"),ZF=Symbol(\"_handleChunk\"),_F=Symbol(\"_makeBuf\"),f0=Symbol(\"_mode\"),l0=Symbol(\"_needDrain\"),lh=Symbol(\"_onerror\"),gh=Symbol(\"_onopen\"),VF=Symbol(\"_onread\"),ah=Symbol(\"_onwrite\"),ll=Symbol(\"_open\"),_a=Symbol(\"_path\"),qc=Symbol(\"_pos\"),ta=Symbol(\"_queue\"),Ah=Symbol(\"_read\"),IX=Symbol(\"_readSize\"),al=Symbol(\"_reading\"),c0=Symbol(\"_remain\"),yX=Symbol(\"_size\"),u0=Symbol(\"_write\"),oh=Symbol(\"_writing\"),g0=Symbol(\"_defaultFlag\"),ch=Symbol(\"_errored\"),h0=class extends CFe{constructor(e,t){if(t=t||{},super(t),this.readable=!0,this.writable=!1,typeof e!=\"string\")throw new TypeError(\"path must be a string\");this[ch]=!1,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[_a]=e,this[IX]=t.readSize||16*1024*1024,this[al]=!1,this[yX]=typeof t.size==\"number\"?t.size:1/0,this[c0]=this[yX],this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0,typeof this[rr]==\"number\"?this[Ah]():this[ll]()}get fd(){return this[rr]}get path(){return this[_a]}write(){throw new TypeError(\"this is a readable stream\")}end(){throw new TypeError(\"this is a readable stream\")}[ll](){Pn.open(this[_a],\"r\",(e,t)=>this[gh](e,t))}[gh](e,t){e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[Ah]())}[_F](){return Buffer.allocUnsafe(Math.min(this[IX],this[c0]))}[Ah](){if(!this[al]){this[al]=!0;let e=this[_F]();if(e.length===0)return process.nextTick(()=>this[VF](null,0,e));Pn.read(this[rr],e,0,e.length,null,(t,i,n)=>this[VF](t,i,n))}}[VF](e,t,i){this[al]=!1,e?this[lh](e):this[ZF](t,i)&&this[Ah]()}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}[lh](e){this[al]=!0,this[lo](),this.emit(\"error\",e)}[ZF](e,t){let i=!1;return this[c0]-=e,e>0&&(i=super.write(e<t.length?t.slice(0,e):t)),(e===0||this[c0]<=0)&&(i=!1,this[lo](),super.end()),i}emit(e,t){switch(e){case\"prefinish\":case\"finish\":break;case\"drain\":typeof this[rr]==\"number\"&&this[Ah]();break;case\"error\":return this[ch]?void 0:(this[ch]=!0,super.emit(e,t));default:return super.emit(e,t)}}},$F=class extends h0{[ll](){let e=!0;try{this[gh](null,Pn.openSync(this[_a],\"r\")),e=!1}finally{e&&this[lo]()}}[Ah](){let e=!0;try{if(!this[al]){this[al]=!0;do{let t=this[_F](),i=t.length===0?0:Pn.readSync(this[rr],t,0,t.length,null);if(!this[ZF](i,t))break}while(!0);this[al]=!1}e=!1}finally{e&&this[lo]()}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}},p0=class extends mFe{constructor(e,t){t=t||{},super(t),this.readable=!1,this.writable=!0,this[ch]=!1,this[oh]=!1,this[UC]=!1,this[l0]=!1,this[ta]=[],this[_a]=e,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[f0]=t.mode===void 0?438:t.mode,this[qc]=typeof t.start==\"number\"?t.start:null,this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0;let i=this[qc]!==null?\"r+\":\"w\";this[g0]=t.flags===void 0,this[Al]=this[g0]?i:t.flags,this[rr]===null&&this[ll]()}emit(e,t){if(e===\"error\"){if(this[ch])return;this[ch]=!0}return super.emit(e,t)}get fd(){return this[rr]}get path(){return this[_a]}[lh](e){this[lo](),this[oh]=!0,this.emit(\"error\",e)}[ll](){Pn.open(this[_a],this[Al],this[f0],(e,t)=>this[gh](e,t))}[gh](e,t){this[g0]&&this[Al]===\"r+\"&&e&&e.code===\"ENOENT\"?(this[Al]=\"w\",this[ll]()):e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[zF]())}end(e,t){return e&&this.write(e,t),this[UC]=!0,!this[oh]&&!this[ta].length&&typeof this[rr]==\"number\"&&this[ah](null,0),this}write(e,t){return typeof e==\"string\"&&(e=Buffer.from(e,t)),this[UC]?(this.emit(\"error\",new Error(\"write() after end()\")),!1):this[rr]===null||this[oh]||this[ta].length?(this[ta].push(e),this[l0]=!0,!1):(this[oh]=!0,this[u0](e),!0)}[u0](e){Pn.write(this[rr],e,0,e.length,this[qc],(t,i)=>this[ah](t,i))}[ah](e,t){e?this[lh](e):(this[qc]!==null&&(this[qc]+=t),this[ta].length?this[zF]():(this[oh]=!1,this[UC]&&!this[EX]?(this[EX]=!0,this[lo](),this.emit(\"finish\")):this[l0]&&(this[l0]=!1,this.emit(\"drain\"))))}[zF](){if(this[ta].length===0)this[UC]&&this[ah](null,0);else if(this[ta].length===1)this[u0](this[ta].pop());else{let e=this[ta];this[ta]=[],XF(this[rr],e,this[qc],(t,i)=>this[ah](t,i))}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}},eN=class extends p0{[ll](){let e;if(this[g0]&&this[Al]===\"r+\")try{e=Pn.openSync(this[_a],this[Al],this[f0])}catch(t){if(t.code===\"ENOENT\")return this[Al]=\"w\",this[ll]();throw t}else e=Pn.openSync(this[_a],this[Al],this[f0]);this[gh](null,e)}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}[u0](e){let t=!0;try{this[ah](null,Pn.writeSync(this[rr],e,0,e.length,this[qc])),t=!1}finally{if(t)try{this[lo]()}catch{}}}};HC.ReadStream=h0;HC.ReadStreamSync=$F;HC.WriteStream=p0;HC.WriteStreamSync=eN});var w0=w((Xot,xX)=>{\"use strict\";var EFe=zB(),IFe=ih(),yFe=J(\"events\"),wFe=WI(),BFe=1024*1024,bFe=qB(),wX=WB(),QFe=dF(),tN=Buffer.from([31,139]),xs=Symbol(\"state\"),Jc=Symbol(\"writeEntry\"),$a=Symbol(\"readEntry\"),rN=Symbol(\"nextEntry\"),BX=Symbol(\"processEntry\"),Ps=Symbol(\"extendedHeader\"),GC=Symbol(\"globalExtendedHeader\"),cl=Symbol(\"meta\"),bX=Symbol(\"emitMeta\"),Er=Symbol(\"buffer\"),eA=Symbol(\"queue\"),Wc=Symbol(\"ended\"),QX=Symbol(\"emittedEnd\"),zc=Symbol(\"emit\"),Dn=Symbol(\"unzip\"),d0=Symbol(\"consumeChunk\"),C0=Symbol(\"consumeChunkSub\"),iN=Symbol(\"consumeBody\"),SX=Symbol(\"consumeMeta\"),vX=Symbol(\"consumeHeader\"),m0=Symbol(\"consuming\"),nN=Symbol(\"bufferConcat\"),sN=Symbol(\"maybeEnd\"),YC=Symbol(\"writing\"),ul=Symbol(\"aborted\"),E0=Symbol(\"onDone\"),Vc=Symbol(\"sawValidEntry\"),I0=Symbol(\"sawNullBlock\"),y0=Symbol(\"sawEOF\"),SFe=r=>!0;xX.exports=EFe(class extends yFe{constructor(e){e=e||{},super(e),this.file=e.file||\"\",this[Vc]=null,this.on(E0,t=>{(this[xs]===\"begin\"||this[Vc]===!1)&&this.warn(\"TAR_BAD_ARCHIVE\",\"Unrecognized archive format\")}),e.ondone?this.on(E0,e.ondone):this.on(E0,t=>{this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||BFe,this.filter=typeof e.filter==\"function\"?e.filter:SFe,this.writable=!0,this.readable=!1,this[eA]=new wFe,this[Er]=null,this[$a]=null,this[Jc]=null,this[xs]=\"begin\",this[cl]=\"\",this[Ps]=null,this[GC]=null,this[Wc]=!1,this[Dn]=null,this[ul]=!1,this[I0]=!1,this[y0]=!1,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),typeof e.onentry==\"function\"&&this.on(\"entry\",e.onentry)}[vX](e,t){this[Vc]===null&&(this[Vc]=!1);let i;try{i=new IFe(e,t,this[Ps],this[GC])}catch(n){return this.warn(\"TAR_ENTRY_INVALID\",n)}if(i.nullBlock)this[I0]?(this[y0]=!0,this[xs]===\"begin\"&&(this[xs]=\"header\"),this[zc](\"eof\")):(this[I0]=!0,this[zc](\"nullBlock\"));else if(this[I0]=!1,!i.cksumValid)this.warn(\"TAR_ENTRY_INVALID\",\"checksum failure\",{header:i});else if(!i.path)this.warn(\"TAR_ENTRY_INVALID\",\"path is required\",{header:i});else{let n=i.type;if(/^(Symbolic)?Link$/.test(n)&&!i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath required\",{header:i});else if(!/^(Symbolic)?Link$/.test(n)&&i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath forbidden\",{header:i});else{let s=this[Jc]=new bFe(i,this[Ps],this[GC]);if(!this[Vc])if(s.remain){let o=()=>{s.invalid||(this[Vc]=!0)};s.on(\"end\",o)}else this[Vc]=!0;s.meta?s.size>this.maxMetaEntrySize?(s.ignore=!0,this[zc](\"ignoredEntry\",s),this[xs]=\"ignore\",s.resume()):s.size>0&&(this[cl]=\"\",s.on(\"data\",o=>this[cl]+=o),this[xs]=\"meta\"):(this[Ps]=null,s.ignore=s.ignore||!this.filter(s.path,s),s.ignore?(this[zc](\"ignoredEntry\",s),this[xs]=s.remain?\"ignore\":\"header\",s.resume()):(s.remain?this[xs]=\"body\":(this[xs]=\"header\",s.end()),this[$a]?this[eA].push(s):(this[eA].push(s),this[rN]())))}}}[BX](e){let t=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[$a]=e,this.emit(\"entry\",e),e.emittedEnd||(e.on(\"end\",i=>this[rN]()),t=!1)):(this[$a]=null,t=!1),t}[rN](){do;while(this[BX](this[eA].shift()));if(!this[eA].length){let e=this[$a];!e||e.flowing||e.size===e.remain?this[YC]||this.emit(\"drain\"):e.once(\"drain\",i=>this.emit(\"drain\"))}}[iN](e,t){let i=this[Jc],n=i.blockRemain,s=n>=e.length&&t===0?e:e.slice(t,t+n);return i.write(s),i.blockRemain||(this[xs]=\"header\",this[Jc]=null,i.end()),s.length}[SX](e,t){let i=this[Jc],n=this[iN](e,t);return this[Jc]||this[bX](i),n}[zc](e,t,i){!this[eA].length&&!this[$a]?this.emit(e,t,i):this[eA].push([e,t,i])}[bX](e){switch(this[zc](\"meta\",this[cl]),e.type){case\"ExtendedHeader\":case\"OldExtendedHeader\":this[Ps]=wX.parse(this[cl],this[Ps],!1);break;case\"GlobalExtendedHeader\":this[GC]=wX.parse(this[cl],this[GC],!0);break;case\"NextFileHasLongPath\":case\"OldGnuLongPath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].path=this[cl].replace(/\\0.*/,\"\");break;case\"NextFileHasLongLinkpath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].linkpath=this[cl].replace(/\\0.*/,\"\");break;default:throw new Error(\"unknown meta: \"+e.type)}}abort(e){this[ul]=!0,this.emit(\"abort\",e),this.warn(\"TAR_ABORT\",e,{recoverable:!1})}write(e){if(this[ul])return;if(this[Dn]===null&&e){if(this[Er]&&(e=Buffer.concat([this[Er],e]),this[Er]=null),e.length<tN.length)return this[Er]=e,!0;for(let i=0;this[Dn]===null&&i<tN.length;i++)e[i]!==tN[i]&&(this[Dn]=!1);if(this[Dn]===null){let i=this[Wc];this[Wc]=!1,this[Dn]=new QFe.Unzip,this[Dn].on(\"data\",s=>this[d0](s)),this[Dn].on(\"error\",s=>this.abort(s)),this[Dn].on(\"end\",s=>{this[Wc]=!0,this[d0]()}),this[YC]=!0;let n=this[Dn][i?\"end\":\"write\"](e);return this[YC]=!1,n}}this[YC]=!0,this[Dn]?this[Dn].write(e):this[d0](e),this[YC]=!1;let t=this[eA].length?!1:this[$a]?this[$a].flowing:!0;return!t&&!this[eA].length&&this[$a].once(\"drain\",i=>this.emit(\"drain\")),t}[nN](e){e&&!this[ul]&&(this[Er]=this[Er]?Buffer.concat([this[Er],e]):e)}[sN](){if(this[Wc]&&!this[QX]&&!this[ul]&&!this[m0]){this[QX]=!0;let e=this[Jc];if(e&&e.blockRemain){let t=this[Er]?this[Er].length:0;this.warn(\"TAR_BAD_ARCHIVE\",`Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`,{entry:e}),this[Er]&&e.write(this[Er]),e.end()}this[zc](E0)}}[d0](e){if(this[m0])this[nN](e);else if(!e&&!this[Er])this[sN]();else{if(this[m0]=!0,this[Er]){this[nN](e);let t=this[Er];this[Er]=null,this[C0](t)}else this[C0](e);for(;this[Er]&&this[Er].length>=512&&!this[ul]&&!this[y0];){let t=this[Er];this[Er]=null,this[C0](t)}this[m0]=!1}(!this[Er]||this[Wc])&&this[sN]()}[C0](e){let t=0,i=e.length;for(;t+512<=i&&!this[ul]&&!this[y0];)switch(this[xs]){case\"begin\":case\"header\":this[vX](e,t),t+=512;break;case\"ignore\":case\"body\":t+=this[iN](e,t);break;case\"meta\":t+=this[SX](e,t);break;default:throw new Error(\"invalid state: \"+this[xs])}t<i&&(this[Er]?this[Er]=Buffer.concat([e.slice(t),this[Er]]):this[Er]=e.slice(t))}end(e){this[ul]||(this[Dn]?this[Dn].end(e):(this[Wc]=!0,this.write(e)))}})});var B0=w((Zot,RX)=>{\"use strict\";var vFe=Xf(),DX=w0(),hh=J(\"fs\"),xFe=fh(),PX=J(\"path\"),oN=nh();RX.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=vFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&DFe(i,e),i.noResume||PFe(i),i.file&&i.sync?kFe(i):i.file?RFe(i,t):kX(i)};var PFe=r=>{let e=r.onentry;r.onentry=e?t=>{e(t),t.resume()}:t=>t.resume()},DFe=(r,e)=>{let t=new Map(e.map(s=>[oN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||PX.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(PX.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(oN(s)):s=>n(oN(s))},kFe=r=>{let e=kX(r),t=r.file,i=!0,n;try{let s=hh.statSync(t),o=r.maxReadSize||16*1024*1024;if(s.size<o)e.end(hh.readFileSync(t));else{let a=0,l=Buffer.allocUnsafe(o);for(n=hh.openSync(t,\"r\");a<s.size;){let c=hh.readSync(n,l,0,o,a);a+=c,e.write(l.slice(0,c))}e.end()}i=!1}finally{if(i&&n)try{hh.closeSync(n)}catch{}}},RFe=(r,e)=>{let t=new DX(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"end\",o),hh.stat(n,(l,c)=>{if(l)a(l);else{let u=new xFe.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},kX=r=>new DX(r)});var OX=w((_ot,MX)=>{\"use strict\";var FFe=Xf(),b0=A0(),FX=fh(),NX=B0(),TX=J(\"path\");MX.exports=(r,e,t)=>{if(typeof e==\"function\"&&(t=e),Array.isArray(r)&&(e=r,r={}),!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");e=Array.from(e);let i=FFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return i.file&&i.sync?NFe(i,e):i.file?TFe(i,e,t):i.sync?LFe(i,e):MFe(i,e)};var NFe=(r,e)=>{let t=new b0.Sync(r),i=new FX.WriteStreamSync(r.file,{mode:r.mode||438});t.pipe(i),LX(t,e)},TFe=(r,e,t)=>{let i=new b0(r),n=new FX.WriteStream(r.file,{mode:r.mode||438});i.pipe(n);let s=new Promise((o,a)=>{n.on(\"error\",a),n.on(\"close\",o),i.on(\"error\",a)});return aN(i,e),t?s.then(t,t):s},LX=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?NX({file:TX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},aN=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return NX({file:TX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>aN(r,e));r.add(t)}r.end()},LFe=(r,e)=>{let t=new b0.Sync(r);return LX(t,e),t},MFe=(r,e)=>{let t=new b0(r);return aN(t,e),t}});var AN=w(($ot,qX)=>{\"use strict\";var OFe=Xf(),KX=A0(),_n=J(\"fs\"),UX=fh(),HX=B0(),GX=J(\"path\"),YX=ih();qX.exports=(r,e,t)=>{let i=OFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),i.sync?KFe(i,e):HFe(i,e,t)};var KFe=(r,e)=>{let t=new KX.Sync(r),i=!0,n,s;try{try{n=_n.openSync(r.file,\"r+\")}catch(l){if(l.code===\"ENOENT\")n=_n.openSync(r.file,\"w+\");else throw l}let o=_n.fstatSync(n),a=Buffer.alloc(512);e:for(s=0;s<o.size;s+=512){for(let u=0,g=0;u<512;u+=g){if(g=_n.readSync(n,a,u,a.length-u,s+u),s===0&&a[0]===31&&a[1]===139)throw new Error(\"cannot append to compressed archives\");if(!g)break e}let l=new YX(a);if(!l.cksumValid)break;let c=512*Math.ceil(l.size/512);if(s+c+512>o.size)break;s+=c,r.mtimeCache&&r.mtimeCache.set(l.path,l.mtime)}i=!1,UFe(r,t,s,n,e)}finally{if(i)try{_n.closeSync(n)}catch{}}},UFe=(r,e,t,i,n)=>{let s=new UX.WriteStreamSync(r.file,{fd:i,start:t});e.pipe(s),GFe(e,n)},HFe=(r,e,t)=>{e=Array.from(e);let i=new KX(r),n=(o,a,l)=>{let c=(p,C)=>{p?_n.close(o,y=>l(p)):l(null,C)},u=0;if(a===0)return c(null,0);let g=0,f=Buffer.alloc(512),h=(p,C)=>{if(p)return c(p);if(g+=C,g<512&&C)return _n.read(o,f,g,f.length-g,u+g,h);if(u===0&&f[0]===31&&f[1]===139)return c(new Error(\"cannot append to compressed archives\"));if(g<512)return c(null,u);let y=new YX(f);if(!y.cksumValid)return c(null,u);let B=512*Math.ceil(y.size/512);if(u+B+512>a||(u+=B+512,u>=a))return c(null,u);r.mtimeCache&&r.mtimeCache.set(y.path,y.mtime),g=0,_n.read(o,f,0,512,u,h)};_n.read(o,f,0,512,u,h)},s=new Promise((o,a)=>{i.on(\"error\",a);let l=\"r+\",c=(u,g)=>{if(u&&u.code===\"ENOENT\"&&l===\"r+\")return l=\"w+\",_n.open(r.file,l,c);if(u)return a(u);_n.fstat(g,(f,h)=>{if(f)return _n.close(g,()=>a(f));n(g,h.size,(p,C)=>{if(p)return a(p);let y=new UX.WriteStream(r.file,{fd:g,start:C});i.pipe(y),y.on(\"error\",a),y.on(\"close\",o),jX(i,e)})})};_n.open(r.file,l,c)});return t?s.then(t,t):s},GFe=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?HX({file:GX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},jX=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return HX({file:GX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>jX(r,e));r.add(t)}r.end()}});var WX=w((eat,JX)=>{\"use strict\";var YFe=Xf(),jFe=AN();JX.exports=(r,e,t)=>{let i=YFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),qFe(i),jFe(i,e,t)};var qFe=r=>{let e=r.filter;r.mtimeCache||(r.mtimeCache=new Map),r.filter=e?(t,i)=>e(t,i)&&!(r.mtimeCache.get(t)>i.mtime):(t,i)=>!(r.mtimeCache.get(t)>i.mtime)}});var XX=w((tat,VX)=>{var{promisify:zX}=J(\"util\"),gl=J(\"fs\"),JFe=r=>{if(!r)r={mode:511,fs:gl};else if(typeof r==\"object\")r={mode:511,fs:gl,...r};else if(typeof r==\"number\")r={mode:r,fs:gl};else if(typeof r==\"string\")r={mode:parseInt(r,8),fs:gl};else throw new TypeError(\"invalid options argument\");return r.mkdir=r.mkdir||r.fs.mkdir||gl.mkdir,r.mkdirAsync=zX(r.mkdir),r.stat=r.stat||r.fs.stat||gl.stat,r.statAsync=zX(r.stat),r.statSync=r.statSync||r.fs.statSync||gl.statSync,r.mkdirSync=r.mkdirSync||r.fs.mkdirSync||gl.mkdirSync,r};VX.exports=JFe});var _X=w((rat,ZX)=>{var WFe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:zFe,parse:VFe}=J(\"path\"),XFe=r=>{if(/\\0/.test(r))throw Object.assign(new TypeError(\"path must be a string without null bytes\"),{path:r,code:\"ERR_INVALID_ARG_VALUE\"});if(r=zFe(r),WFe===\"win32\"){let e=/[*|\"<>?:]/,{root:t}=VFe(r);if(e.test(r.substr(t.length)))throw Object.assign(new Error(\"Illegal characters in path.\"),{path:r,code:\"EINVAL\"})}return r};ZX.exports=XFe});var i7=w((iat,r7)=>{var{dirname:$X}=J(\"path\"),e7=(r,e,t=void 0)=>t===e?Promise.resolve():r.statAsync(e).then(i=>i.isDirectory()?t:void 0,i=>i.code===\"ENOENT\"?e7(r,$X(e),e):void 0),t7=(r,e,t=void 0)=>{if(t!==e)try{return r.statSync(e).isDirectory()?t:void 0}catch(i){return i.code===\"ENOENT\"?t7(r,$X(e),e):void 0}};r7.exports={findMade:e7,findMadeSync:t7}});var uN=w((nat,s7)=>{var{dirname:n7}=J(\"path\"),lN=(r,e,t)=>{e.recursive=!1;let i=n7(r);return i===r?e.mkdirAsync(r,e).catch(n=>{if(n.code!==\"EISDIR\")throw n}):e.mkdirAsync(r,e).then(()=>t||r,n=>{if(n.code===\"ENOENT\")return lN(i,e).then(s=>lN(r,e,s));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;return e.statAsync(r).then(s=>{if(s.isDirectory())return t;throw n},()=>{throw n})})},cN=(r,e,t)=>{let i=n7(r);if(e.recursive=!1,i===r)try{return e.mkdirSync(r,e)}catch(n){if(n.code!==\"EISDIR\")throw n;return}try{return e.mkdirSync(r,e),t||r}catch(n){if(n.code===\"ENOENT\")return cN(r,e,cN(i,e,t));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;try{if(!e.statSync(r).isDirectory())throw n}catch{throw n}}};s7.exports={mkdirpManual:lN,mkdirpManualSync:cN}});var A7=w((sat,a7)=>{var{dirname:o7}=J(\"path\"),{findMade:ZFe,findMadeSync:_Fe}=i7(),{mkdirpManual:$Fe,mkdirpManualSync:eNe}=uN(),tNe=(r,e)=>(e.recursive=!0,o7(r)===r?e.mkdirAsync(r,e):ZFe(e,r).then(i=>e.mkdirAsync(r,e).then(()=>i).catch(n=>{if(n.code===\"ENOENT\")return $Fe(r,e);throw n}))),rNe=(r,e)=>{if(e.recursive=!0,o7(r)===r)return e.mkdirSync(r,e);let i=_Fe(e,r);try{return e.mkdirSync(r,e),i}catch(n){if(n.code===\"ENOENT\")return eNe(r,e);throw n}};a7.exports={mkdirpNative:tNe,mkdirpNativeSync:rNe}});var g7=w((oat,u7)=>{var l7=J(\"fs\"),iNe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,gN=iNe.replace(/^v/,\"\").split(\".\"),c7=+gN[0]>10||+gN[0]==10&&+gN[1]>=12,nNe=c7?r=>r.mkdir===l7.mkdir:()=>!1,sNe=c7?r=>r.mkdirSync===l7.mkdirSync:()=>!1;u7.exports={useNative:nNe,useNativeSync:sNe}});var m7=w((aat,C7)=>{var ph=XX(),dh=_X(),{mkdirpNative:f7,mkdirpNativeSync:h7}=A7(),{mkdirpManual:p7,mkdirpManualSync:d7}=uN(),{useNative:oNe,useNativeSync:aNe}=g7(),Ch=(r,e)=>(r=dh(r),e=ph(e),oNe(e)?f7(r,e):p7(r,e)),ANe=(r,e)=>(r=dh(r),e=ph(e),aNe(e)?h7(r,e):d7(r,e));Ch.sync=ANe;Ch.native=(r,e)=>f7(dh(r),ph(e));Ch.manual=(r,e)=>p7(dh(r),ph(e));Ch.nativeSync=(r,e)=>h7(dh(r),ph(e));Ch.manualSync=(r,e)=>d7(dh(r),ph(e));C7.exports=Ch});var Q7=w((Aat,b7)=>{\"use strict\";var Ds=J(\"fs\"),Xc=J(\"path\"),lNe=Ds.lchown?\"lchown\":\"chown\",cNe=Ds.lchownSync?\"lchownSync\":\"chownSync\",I7=Ds.lchown&&!process.version.match(/v1[1-9]+\\./)&&!process.version.match(/v10\\.[6-9]/),E7=(r,e,t)=>{try{return Ds[cNe](r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},uNe=(r,e,t)=>{try{return Ds.chownSync(r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},gNe=I7?(r,e,t,i)=>n=>{!n||n.code!==\"EISDIR\"?i(n):Ds.chown(r,e,t,i)}:(r,e,t,i)=>i,fN=I7?(r,e,t)=>{try{return E7(r,e,t)}catch(i){if(i.code!==\"EISDIR\")throw i;uNe(r,e,t)}}:(r,e,t)=>E7(r,e,t),fNe=process.version,y7=(r,e,t)=>Ds.readdir(r,e,t),hNe=(r,e)=>Ds.readdirSync(r,e);/^v4\\./.test(fNe)&&(y7=(r,e,t)=>Ds.readdir(r,t));var Q0=(r,e,t,i)=>{Ds[lNe](r,e,t,gNe(r,e,t,n=>{i(n&&n.code!==\"ENOENT\"?n:null)}))},w7=(r,e,t,i,n)=>{if(typeof e==\"string\")return Ds.lstat(Xc.resolve(r,e),(s,o)=>{if(s)return n(s.code!==\"ENOENT\"?s:null);o.name=e,w7(r,o,t,i,n)});if(e.isDirectory())hN(Xc.resolve(r,e.name),t,i,s=>{if(s)return n(s);let o=Xc.resolve(r,e.name);Q0(o,t,i,n)});else{let s=Xc.resolve(r,e.name);Q0(s,t,i,n)}},hN=(r,e,t,i)=>{y7(r,{withFileTypes:!0},(n,s)=>{if(n){if(n.code===\"ENOENT\")return i();if(n.code!==\"ENOTDIR\"&&n.code!==\"ENOTSUP\")return i(n)}if(n||!s.length)return Q0(r,e,t,i);let o=s.length,a=null,l=c=>{if(!a){if(c)return i(a=c);if(--o===0)return Q0(r,e,t,i)}};s.forEach(c=>w7(r,c,e,t,l))})},pNe=(r,e,t,i)=>{if(typeof e==\"string\")try{let n=Ds.lstatSync(Xc.resolve(r,e));n.name=e,e=n}catch(n){if(n.code===\"ENOENT\")return;throw n}e.isDirectory()&&B7(Xc.resolve(r,e.name),t,i),fN(Xc.resolve(r,e.name),t,i)},B7=(r,e,t)=>{let i;try{i=hNe(r,{withFileTypes:!0})}catch(n){if(n.code===\"ENOENT\")return;if(n.code===\"ENOTDIR\"||n.code===\"ENOTSUP\")return fN(r,e,t);throw n}return i&&i.length&&i.forEach(n=>pNe(r,n,e,t)),fN(r,e,t)};b7.exports=hN;hN.sync=B7});var P7=w((lat,pN)=>{\"use strict\";var S7=m7(),ks=J(\"fs\"),S0=J(\"path\"),v7=Q7(),co=th(),v0=class extends Error{constructor(e,t){super(\"Cannot extract through symbolic link\"),this.path=t,this.symlink=e}get name(){return\"SylinkError\"}},x0=class extends Error{constructor(e,t){super(t+\": Cannot cd into '\"+e+\"'\"),this.path=e,this.code=t}get name(){return\"CwdError\"}},P0=(r,e)=>r.get(co(e)),jC=(r,e,t)=>r.set(co(e),t),dNe=(r,e)=>{ks.stat(r,(t,i)=>{(t||!i.isDirectory())&&(t=new x0(r,t&&t.code||\"ENOTDIR\")),e(t)})};pN.exports=(r,e,t)=>{r=co(r);let i=e.umask,n=e.mode|448,s=(n&i)!==0,o=e.uid,a=e.gid,l=typeof o==\"number\"&&typeof a==\"number\"&&(o!==e.processUid||a!==e.processGid),c=e.preserve,u=e.unlink,g=e.cache,f=co(e.cwd),h=(y,B)=>{y?t(y):(jC(g,r,!0),B&&l?v7(B,o,a,v=>h(v)):s?ks.chmod(r,n,t):t())};if(g&&P0(g,r)===!0)return h();if(r===f)return dNe(r,h);if(c)return S7(r,{mode:n}).then(y=>h(null,y),h);let C=co(S0.relative(f,r)).split(\"/\");D0(f,C,n,g,u,f,null,h)};var D0=(r,e,t,i,n,s,o,a)=>{if(!e.length)return a(null,o);let l=e.shift(),c=co(S0.resolve(r+\"/\"+l));if(P0(i,c))return D0(c,e,t,i,n,s,o,a);ks.mkdir(c,t,x7(c,e,t,i,n,s,o,a))},x7=(r,e,t,i,n,s,o,a)=>l=>{l?ks.lstat(r,(c,u)=>{if(c)c.path=c.path&&co(c.path),a(c);else if(u.isDirectory())D0(r,e,t,i,n,s,o,a);else if(n)ks.unlink(r,g=>{if(g)return a(g);ks.mkdir(r,t,x7(r,e,t,i,n,s,o,a))});else{if(u.isSymbolicLink())return a(new v0(r,r+\"/\"+e.join(\"/\")));a(l)}}):(o=o||r,D0(r,e,t,i,n,s,o,a))},CNe=r=>{let e=!1,t=\"ENOTDIR\";try{e=ks.statSync(r).isDirectory()}catch(i){t=i.code}finally{if(!e)throw new x0(r,t)}};pN.exports.sync=(r,e)=>{r=co(r);let t=e.umask,i=e.mode|448,n=(i&t)!==0,s=e.uid,o=e.gid,a=typeof s==\"number\"&&typeof o==\"number\"&&(s!==e.processUid||o!==e.processGid),l=e.preserve,c=e.unlink,u=e.cache,g=co(e.cwd),f=y=>{jC(u,r,!0),y&&a&&v7.sync(y,s,o),n&&ks.chmodSync(r,i)};if(u&&P0(u,r)===!0)return f();if(r===g)return CNe(g),f();if(l)return f(S7.sync(r,i));let p=co(S0.relative(g,r)).split(\"/\"),C=null;for(let y=p.shift(),B=g;y&&(B+=\"/\"+y);y=p.shift())if(B=co(S0.resolve(B)),!P0(u,B))try{ks.mkdirSync(B,i),C=C||B,jC(u,B,!0)}catch{let D=ks.lstatSync(B);if(D.isDirectory()){jC(u,B,!0);continue}else if(c){ks.unlinkSync(B),ks.mkdirSync(B,i),C=C||B,jC(u,B,!0);continue}else if(D.isSymbolicLink())return new v0(B,B+\"/\"+p.join(\"/\"))}return f(C)}});var CN=w((cat,D7)=>{var dN=Object.create(null),{hasOwnProperty:mNe}=Object.prototype;D7.exports=r=>(mNe.call(dN,r)||(dN[r]=r.normalize(\"NFKD\")),dN[r])});var N7=w((uat,F7)=>{var k7=J(\"assert\"),ENe=CN(),INe=nh(),{join:R7}=J(\"path\"),yNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,wNe=yNe===\"win32\";F7.exports=()=>{let r=new Map,e=new Map,t=c=>c.split(\"/\").slice(0,-1).reduce((g,f)=>(g.length&&(f=R7(g[g.length-1],f)),g.push(f||\"/\"),g),[]),i=new Set,n=c=>{let u=e.get(c);if(!u)throw new Error(\"function does not have any path reservations\");return{paths:u.paths.map(g=>r.get(g)),dirs:[...u.dirs].map(g=>r.get(g))}},s=c=>{let{paths:u,dirs:g}=n(c);return u.every(f=>f[0]===c)&&g.every(f=>f[0]instanceof Set&&f[0].has(c))},o=c=>i.has(c)||!s(c)?!1:(i.add(c),c(()=>a(c)),!0),a=c=>{if(!i.has(c))return!1;let{paths:u,dirs:g}=e.get(c),f=new Set;return u.forEach(h=>{let p=r.get(h);k7.equal(p[0],c),p.length===1?r.delete(h):(p.shift(),typeof p[0]==\"function\"?f.add(p[0]):p[0].forEach(C=>f.add(C)))}),g.forEach(h=>{let p=r.get(h);k7(p[0]instanceof Set),p[0].size===1&&p.length===1?r.delete(h):p[0].size===1?(p.shift(),f.add(p[0])):p[0].delete(c)}),i.delete(c),f.forEach(h=>o(h)),!0};return{check:s,reserve:(c,u)=>{c=wNe?[\"win32 parallelization disabled\"]:c.map(f=>ENe(INe(R7(f))).toLowerCase());let g=new Set(c.map(f=>t(f)).reduce((f,h)=>f.concat(h)));return e.set(u,{dirs:g,paths:c}),c.forEach(f=>{let h=r.get(f);h?h.push(u):r.set(f,[u])}),g.forEach(f=>{let h=r.get(f);h?h[h.length-1]instanceof Set?h[h.length-1].add(u):h.push(new Set([u])):r.set(f,[new Set([u])])}),o(u)}}}});var M7=w((gat,L7)=>{var BNe=process.env.__FAKE_PLATFORM__||process.platform,bNe=BNe===\"win32\",QNe=global.__FAKE_TESTING_FS__||J(\"fs\"),{O_CREAT:SNe,O_TRUNC:vNe,O_WRONLY:xNe,UV_FS_O_FILEMAP:T7=0}=QNe.constants,PNe=bNe&&!!T7,DNe=512*1024,kNe=T7|vNe|SNe|xNe;L7.exports=PNe?r=>r<DNe?kNe:\"w\":()=>\"w\"});var SN=w((fat,Z7)=>{\"use strict\";var RNe=J(\"assert\"),FNe=w0(),jt=J(\"fs\"),NNe=fh(),tA=J(\"path\"),z7=P7(),O7=SF(),TNe=N7(),LNe=vF(),$n=th(),MNe=nh(),ONe=CN(),K7=Symbol(\"onEntry\"),IN=Symbol(\"checkFs\"),U7=Symbol(\"checkFs2\"),F0=Symbol(\"pruneCache\"),yN=Symbol(\"isReusable\"),Rs=Symbol(\"makeFs\"),wN=Symbol(\"file\"),BN=Symbol(\"directory\"),N0=Symbol(\"link\"),H7=Symbol(\"symlink\"),G7=Symbol(\"hardlink\"),Y7=Symbol(\"unsupported\"),j7=Symbol(\"checkPath\"),fl=Symbol(\"mkdir\"),Yi=Symbol(\"onError\"),k0=Symbol(\"pending\"),q7=Symbol(\"pend\"),mh=Symbol(\"unpend\"),mN=Symbol(\"ended\"),EN=Symbol(\"maybeClose\"),bN=Symbol(\"skip\"),qC=Symbol(\"doChown\"),JC=Symbol(\"uid\"),WC=Symbol(\"gid\"),zC=Symbol(\"checkedCwd\"),V7=J(\"crypto\"),X7=M7(),KNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,VC=KNe===\"win32\",UNe=(r,e)=>{if(!VC)return jt.unlink(r,e);let t=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.rename(r,t,i=>{if(i)return e(i);jt.unlink(t,e)})},HNe=r=>{if(!VC)return jt.unlinkSync(r);let e=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.renameSync(r,e),jt.unlinkSync(e)},J7=(r,e,t)=>r===r>>>0?r:e===e>>>0?e:t,W7=r=>ONe(MNe($n(r))).toLowerCase(),GNe=(r,e)=>{e=W7(e);for(let t of r.keys()){let i=W7(t);(i===e||i.indexOf(e+\"/\")===0)&&r.delete(t)}},YNe=r=>{for(let e of r.keys())r.delete(e)},XC=class extends FNe{constructor(e){if(e||(e={}),e.ondone=t=>{this[mN]=!0,this[EN]()},super(e),this[zC]=!1,this.reservations=TNe(),this.transform=typeof e.transform==\"function\"?e.transform:null,this.writable=!0,this.readable=!1,this[k0]=0,this[mN]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid==\"number\"||typeof e.gid==\"number\"){if(typeof e.uid!=\"number\"||typeof e.gid!=\"number\")throw new TypeError(\"cannot set owner without number uid and gid\");if(e.preserveOwner)throw new TypeError(\"cannot preserve owner in archive and also set owner explicitly\");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!=\"number\"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||VC,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=$n(tA.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask==\"number\"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on(\"entry\",t=>this[K7](t))}warn(e,t,i={}){return(e===\"TAR_BAD_ARCHIVE\"||e===\"TAR_ABORT\")&&(i.recoverable=!1),super.warn(e,t,i)}[EN](){this[mN]&&this[k0]===0&&(this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\"))}[j7](e){if(this.strip){let t=$n(e.path).split(\"/\");if(t.length<this.strip)return!1;if(e.path=t.slice(this.strip).join(\"/\"),e.type===\"Link\"){let i=$n(e.linkpath).split(\"/\");if(i.length>=this.strip)e.linkpath=i.slice(this.strip).join(\"/\");else return!1}}if(!this.preservePaths){let t=$n(e.path),i=t.split(\"/\");if(i.includes(\"..\")||VC&&/^[a-z]:\\.\\.$/i.test(i[0]))return this.warn(\"TAR_ENTRY_ERROR\",\"path contains '..'\",{entry:e,path:t}),!1;let[n,s]=LNe(t);n&&(e.path=s,this.warn(\"TAR_ENTRY_INFO\",`stripping ${n} from absolute path`,{entry:e,path:t}))}if(tA.isAbsolute(e.path)?e.absolute=$n(tA.resolve(e.path)):e.absolute=$n(tA.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+\"/\")!==0&&e.absolute!==this.cwd)return this.warn(\"TAR_ENTRY_ERROR\",\"path escaped extraction target\",{entry:e,path:$n(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!==\"Directory\"&&e.type!==\"GNUDumpDir\")return!1;if(this.win32){let{root:t}=tA.win32.parse(e.absolute);e.absolute=t+O7.encode(e.absolute.substr(t.length));let{root:i}=tA.win32.parse(e.path);e.path=i+O7.encode(e.path.substr(i.length))}return!0}[K7](e){if(!this[j7](e))return e.resume();switch(RNe.equal(typeof e.absolute,\"string\"),e.type){case\"Directory\":case\"GNUDumpDir\":e.mode&&(e.mode=e.mode|448);case\"File\":case\"OldFile\":case\"ContiguousFile\":case\"Link\":case\"SymbolicLink\":return this[IN](e);case\"CharacterDevice\":case\"BlockDevice\":case\"FIFO\":default:return this[Y7](e)}}[Yi](e,t){e.name===\"CwdError\"?this.emit(\"error\",e):(this.warn(\"TAR_ENTRY_ERROR\",e,{entry:t}),this[mh](),t.resume())}[fl](e,t,i){z7($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t,noChmod:this.noChmod},i)}[qC](e){return this.forceChown||this.preserveOwner&&(typeof e.uid==\"number\"&&e.uid!==this.processUid||typeof e.gid==\"number\"&&e.gid!==this.processGid)||typeof this.uid==\"number\"&&this.uid!==this.processUid||typeof this.gid==\"number\"&&this.gid!==this.processGid}[JC](e){return J7(this.uid,e.uid,this.processUid)}[WC](e){return J7(this.gid,e.gid,this.processGid)}[wN](e,t){let i=e.mode&4095||this.fmode,n=new NNe.WriteStream(e.absolute,{flags:X7(e.size),mode:i,autoClose:!1});n.on(\"error\",l=>{n.fd&&jt.close(n.fd,()=>{}),n.write=()=>!0,this[Yi](l,e),t()});let s=1,o=l=>{if(l){n.fd&&jt.close(n.fd,()=>{}),this[Yi](l,e),t();return}--s===0&&jt.close(n.fd,c=>{c?this[Yi](c,e):this[mh](),t()})};n.on(\"finish\",l=>{let c=e.absolute,u=n.fd;if(e.mtime&&!this.noMtime){s++;let g=e.atime||new Date,f=e.mtime;jt.futimes(u,g,f,h=>h?jt.utimes(c,g,f,p=>o(p&&h)):o())}if(this[qC](e)){s++;let g=this[JC](e),f=this[WC](e);jt.fchown(u,g,f,h=>h?jt.chown(c,g,f,p=>o(p&&h)):o())}o()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on(\"error\",l=>{this[Yi](l,e),t()}),e.pipe(a)),a.pipe(n)}[BN](e,t){let i=e.mode&4095||this.dmode;this[fl](e.absolute,i,n=>{if(n){this[Yi](n,e),t();return}let s=1,o=a=>{--s===0&&(t(),this[mh](),e.resume())};e.mtime&&!this.noMtime&&(s++,jt.utimes(e.absolute,e.atime||new Date,e.mtime,o)),this[qC](e)&&(s++,jt.chown(e.absolute,this[JC](e),this[WC](e),o)),o()})}[Y7](e){e.unsupported=!0,this.warn(\"TAR_ENTRY_UNSUPPORTED\",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[H7](e,t){this[N0](e,e.linkpath,\"symlink\",t)}[G7](e,t){let i=$n(tA.resolve(this.cwd,e.linkpath));this[N0](e,i,\"link\",t)}[q7](){this[k0]++}[mh](){this[k0]--,this[EN]()}[bN](e){this[mh](),e.resume()}[yN](e,t){return e.type===\"File\"&&!this.unlink&&t.isFile()&&t.nlink<=1&&!VC}[IN](e){this[q7]();let t=[e.path];e.linkpath&&t.push(e.linkpath),this.reservations.reserve(t,i=>this[U7](e,i))}[F0](e){e.type===\"SymbolicLink\"?YNe(this.dirCache):e.type!==\"Directory\"&&GNe(this.dirCache,e.absolute)}[U7](e,t){this[F0](e);let i=a=>{this[F0](e),t(a)},n=()=>{this[fl](this.cwd,this.dmode,a=>{if(a){this[Yi](a,e),i();return}this[zC]=!0,s()})},s=()=>{if(e.absolute!==this.cwd){let a=$n(tA.dirname(e.absolute));if(a!==this.cwd)return this[fl](a,this.dmode,l=>{if(l){this[Yi](l,e),i();return}o()})}o()},o=()=>{jt.lstat(e.absolute,(a,l)=>{if(l&&(this.keep||this.newer&&l.mtime>e.mtime)){this[bN](e),i();return}if(a||this[yN](e,l))return this[Rs](null,e,i);if(l.isDirectory()){if(e.type===\"Directory\"){let c=!this.noChmod&&e.mode&&(l.mode&4095)!==e.mode,u=g=>this[Rs](g,e,i);return c?jt.chmod(e.absolute,e.mode,u):u()}if(e.absolute!==this.cwd)return jt.rmdir(e.absolute,c=>this[Rs](c,e,i))}if(e.absolute===this.cwd)return this[Rs](null,e,i);UNe(e.absolute,c=>this[Rs](c,e,i))})};this[zC]?s():n()}[Rs](e,t,i){if(e){this[Yi](e,t),i();return}switch(t.type){case\"File\":case\"OldFile\":case\"ContiguousFile\":return this[wN](t,i);case\"Link\":return this[G7](t,i);case\"SymbolicLink\":return this[H7](t,i);case\"Directory\":case\"GNUDumpDir\":return this[BN](t,i)}}[N0](e,t,i,n){jt[i](t,e.absolute,s=>{s?this[Yi](s,e):(this[mh](),e.resume()),n()})}},R0=r=>{try{return[null,r()]}catch(e){return[e,null]}},QN=class extends XC{[Rs](e,t){return super[Rs](e,t,()=>{})}[IN](e){if(this[F0](e),!this[zC]){let s=this[fl](this.cwd,this.dmode);if(s)return this[Yi](s,e);this[zC]=!0}if(e.absolute!==this.cwd){let s=$n(tA.dirname(e.absolute));if(s!==this.cwd){let o=this[fl](s,this.dmode);if(o)return this[Yi](o,e)}}let[t,i]=R0(()=>jt.lstatSync(e.absolute));if(i&&(this.keep||this.newer&&i.mtime>e.mtime))return this[bN](e);if(t||this[yN](e,i))return this[Rs](null,e);if(i.isDirectory()){if(e.type===\"Directory\"){let o=!this.noChmod&&e.mode&&(i.mode&4095)!==e.mode,[a]=o?R0(()=>{jt.chmodSync(e.absolute,e.mode)}):[];return this[Rs](a,e)}let[s]=R0(()=>jt.rmdirSync(e.absolute));this[Rs](s,e)}let[n]=e.absolute===this.cwd?[]:R0(()=>HNe(e.absolute));this[Rs](n,e)}[wN](e,t){let i=e.mode&4095||this.fmode,n=a=>{let l;try{jt.closeSync(s)}catch(c){l=c}(a||l)&&this[Yi](a||l,e),t()},s;try{s=jt.openSync(e.absolute,X7(e.size),i)}catch(a){return n(a)}let o=this.transform&&this.transform(e)||e;o!==e&&(o.on(\"error\",a=>this[Yi](a,e)),e.pipe(o)),o.on(\"data\",a=>{try{jt.writeSync(s,a,0,a.length)}catch(l){n(l)}}),o.on(\"end\",a=>{let l=null;if(e.mtime&&!this.noMtime){let c=e.atime||new Date,u=e.mtime;try{jt.futimesSync(s,c,u)}catch(g){try{jt.utimesSync(e.absolute,c,u)}catch{l=g}}}if(this[qC](e)){let c=this[JC](e),u=this[WC](e);try{jt.fchownSync(s,c,u)}catch(g){try{jt.chownSync(e.absolute,c,u)}catch{l=l||g}}}n(l)})}[BN](e,t){let i=e.mode&4095||this.dmode,n=this[fl](e.absolute,i);if(n){this[Yi](n,e),t();return}if(e.mtime&&!this.noMtime)try{jt.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[qC](e))try{jt.chownSync(e.absolute,this[JC](e),this[WC](e))}catch{}t(),e.resume()}[fl](e,t){try{return z7.sync($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t})}catch(i){return i}}[N0](e,t,i,n){try{jt[i+\"Sync\"](t,e.absolute),n(),e.resume()}catch(s){return this[Yi](s,e)}}};XC.Sync=QN;Z7.exports=XC});var rZ=w((hat,tZ)=>{\"use strict\";var jNe=Xf(),T0=SN(),$7=J(\"fs\"),eZ=fh(),_7=J(\"path\"),vN=nh();tZ.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=jNe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&qNe(i,e),i.file&&i.sync?JNe(i):i.file?WNe(i,t):i.sync?zNe(i):VNe(i)};var qNe=(r,e)=>{let t=new Map(e.map(s=>[vN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||_7.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(_7.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(vN(s)):s=>n(vN(s))},JNe=r=>{let e=new T0.Sync(r),t=r.file,i=$7.statSync(t),n=r.maxReadSize||16*1024*1024;new eZ.ReadStreamSync(t,{readSize:n,size:i.size}).pipe(e)},WNe=(r,e)=>{let t=new T0(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"close\",o),$7.stat(n,(l,c)=>{if(l)a(l);else{let u=new eZ.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},zNe=r=>new T0.Sync(r),VNe=r=>new T0(r)});var iZ=w(ci=>{\"use strict\";ci.c=ci.create=OX();ci.r=ci.replace=AN();ci.t=ci.list=B0();ci.u=ci.update=WX();ci.x=ci.extract=rZ();ci.Pack=A0();ci.Unpack=SN();ci.Parse=w0();ci.ReadEntry=qB();ci.WriteEntry=MF();ci.Header=ih();ci.Pax=WB();ci.types=EF()});var aZ=w((Cat,oZ)=>{var xN;oZ.exports.getContent=()=>(typeof xN>\"u\"&&(xN=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),xN)});var fZ=w((PN,gZ)=>{(function(r,e){typeof PN==\"object\"?gZ.exports=e():typeof define==\"function\"&&define.amd?define(e):r.treeify=e()})(PN,function(){function r(n,s){var o=s?\"\\u2514\":\"\\u251C\";return n?o+=\"\\u2500 \":o+=\"\\u2500\\u2500\\u2510\",o}function e(n,s){var o=[];for(var a in n)!n.hasOwnProperty(a)||s&&typeof n[a]==\"function\"||o.push(a);return o}function t(n,s,o,a,l,c,u){var g=\"\",f=0,h,p,C=a.slice(0);if(C.push([s,o])&&a.length>0&&(a.forEach(function(B,v){v>0&&(g+=(B[1]?\" \":\"\\u2502\")+\"  \"),!p&&B[0]===s&&(p=!0)}),g+=r(n,o)+n,l&&(typeof s!=\"object\"||s instanceof Date)&&(g+=\": \"+s),p&&(g+=\" (circular ref.)\"),u(g)),!p&&typeof s==\"object\"){var y=e(s,c);y.forEach(function(B){h=++f===y.length,t(B,s[B],h,C,l,c,u)})}}var i={};return i.asLines=function(n,s,o,a){var l=typeof o!=\"function\"?o:!1;t(\".\",n,!1,[],s,l,a||o)},i.asTree=function(n,s,o){var a=\"\";return t(\".\",n,!1,[],s,o,function(l){a+=l+`\n`}),a},i})});var K0=w((Uat,BZ)=>{var fTe=vs(),hTe=gC(),pTe=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,dTe=/^\\w*$/;function CTe(r,e){if(fTe(r))return!1;var t=typeof r;return t==\"number\"||t==\"symbol\"||t==\"boolean\"||r==null||hTe(r)?!0:dTe.test(r)||!pTe.test(r)||e!=null&&r in Object(e)}BZ.exports=CTe});var U0=w((Hat,bZ)=>{var mTe=Fc(),ETe=vn(),ITe=\"[object AsyncFunction]\",yTe=\"[object Function]\",wTe=\"[object GeneratorFunction]\",BTe=\"[object Proxy]\";function bTe(r){if(!ETe(r))return!1;var e=mTe(r);return e==yTe||e==wTe||e==ITe||e==BTe}bZ.exports=bTe});var SZ=w((Gat,QZ)=>{var QTe=ys(),STe=QTe[\"__core-js_shared__\"];QZ.exports=STe});var PZ=w((Yat,xZ)=>{var MN=SZ(),vZ=function(){var r=/[^.]+$/.exec(MN&&MN.keys&&MN.keys.IE_PROTO||\"\");return r?\"Symbol(src)_1.\"+r:\"\"}();function vTe(r){return!!vZ&&vZ in r}xZ.exports=vTe});var ON=w((jat,DZ)=>{var xTe=Function.prototype,PTe=xTe.toString;function DTe(r){if(r!=null){try{return PTe.call(r)}catch{}try{return r+\"\"}catch{}}return\"\"}DZ.exports=DTe});var RZ=w((qat,kZ)=>{var kTe=U0(),RTe=PZ(),FTe=vn(),NTe=ON(),TTe=/[\\\\^$.*+?()[\\]{}|]/g,LTe=/^\\[object .+?Constructor\\]$/,MTe=Function.prototype,OTe=Object.prototype,KTe=MTe.toString,UTe=OTe.hasOwnProperty,HTe=RegExp(\"^\"+KTe.call(UTe).replace(TTe,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");function GTe(r){if(!FTe(r)||RTe(r))return!1;var e=kTe(r)?HTe:LTe;return e.test(NTe(r))}kZ.exports=GTe});var NZ=w((Jat,FZ)=>{function YTe(r,e){return r==null?void 0:r[e]}FZ.exports=YTe});var pl=w((Wat,TZ)=>{var jTe=RZ(),qTe=NZ();function JTe(r,e){var t=qTe(r,e);return jTe(t)?t:void 0}TZ.exports=JTe});var _C=w((zat,LZ)=>{var WTe=pl(),zTe=WTe(Object,\"create\");LZ.exports=zTe});var KZ=w((Vat,OZ)=>{var MZ=_C();function VTe(){this.__data__=MZ?MZ(null):{},this.size=0}OZ.exports=VTe});var HZ=w((Xat,UZ)=>{function XTe(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}UZ.exports=XTe});var YZ=w((Zat,GZ)=>{var ZTe=_C(),_Te=\"__lodash_hash_undefined__\",$Te=Object.prototype,eLe=$Te.hasOwnProperty;function tLe(r){var e=this.__data__;if(ZTe){var t=e[r];return t===_Te?void 0:t}return eLe.call(e,r)?e[r]:void 0}GZ.exports=tLe});var qZ=w((_at,jZ)=>{var rLe=_C(),iLe=Object.prototype,nLe=iLe.hasOwnProperty;function sLe(r){var e=this.__data__;return rLe?e[r]!==void 0:nLe.call(e,r)}jZ.exports=sLe});var WZ=w(($at,JZ)=>{var oLe=_C(),aLe=\"__lodash_hash_undefined__\";function ALe(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=oLe&&e===void 0?aLe:e,this}JZ.exports=ALe});var VZ=w((eAt,zZ)=>{var lLe=KZ(),cLe=HZ(),uLe=YZ(),gLe=qZ(),fLe=WZ();function Eh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Eh.prototype.clear=lLe;Eh.prototype.delete=cLe;Eh.prototype.get=uLe;Eh.prototype.has=gLe;Eh.prototype.set=fLe;zZ.exports=Eh});var ZZ=w((tAt,XZ)=>{function hLe(){this.__data__=[],this.size=0}XZ.exports=hLe});var Ih=w((rAt,_Z)=>{function pLe(r,e){return r===e||r!==r&&e!==e}_Z.exports=pLe});var $C=w((iAt,$Z)=>{var dLe=Ih();function CLe(r,e){for(var t=r.length;t--;)if(dLe(r[t][0],e))return t;return-1}$Z.exports=CLe});var t_=w((nAt,e_)=>{var mLe=$C(),ELe=Array.prototype,ILe=ELe.splice;function yLe(r){var e=this.__data__,t=mLe(e,r);if(t<0)return!1;var i=e.length-1;return t==i?e.pop():ILe.call(e,t,1),--this.size,!0}e_.exports=yLe});var i_=w((sAt,r_)=>{var wLe=$C();function BLe(r){var e=this.__data__,t=wLe(e,r);return t<0?void 0:e[t][1]}r_.exports=BLe});var s_=w((oAt,n_)=>{var bLe=$C();function QLe(r){return bLe(this.__data__,r)>-1}n_.exports=QLe});var a_=w((aAt,o_)=>{var SLe=$C();function vLe(r,e){var t=this.__data__,i=SLe(t,r);return i<0?(++this.size,t.push([r,e])):t[i][1]=e,this}o_.exports=vLe});var em=w((AAt,A_)=>{var xLe=ZZ(),PLe=t_(),DLe=i_(),kLe=s_(),RLe=a_();function yh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}yh.prototype.clear=xLe;yh.prototype.delete=PLe;yh.prototype.get=DLe;yh.prototype.has=kLe;yh.prototype.set=RLe;A_.exports=yh});var H0=w((lAt,l_)=>{var FLe=pl(),NLe=ys(),TLe=FLe(NLe,\"Map\");l_.exports=TLe});var g_=w((cAt,u_)=>{var c_=VZ(),LLe=em(),MLe=H0();function OLe(){this.size=0,this.__data__={hash:new c_,map:new(MLe||LLe),string:new c_}}u_.exports=OLe});var h_=w((uAt,f_)=>{function KLe(r){var e=typeof r;return e==\"string\"||e==\"number\"||e==\"symbol\"||e==\"boolean\"?r!==\"__proto__\":r===null}f_.exports=KLe});var tm=w((gAt,p_)=>{var ULe=h_();function HLe(r,e){var t=r.__data__;return ULe(e)?t[typeof e==\"string\"?\"string\":\"hash\"]:t.map}p_.exports=HLe});var C_=w((fAt,d_)=>{var GLe=tm();function YLe(r){var e=GLe(this,r).delete(r);return this.size-=e?1:0,e}d_.exports=YLe});var E_=w((hAt,m_)=>{var jLe=tm();function qLe(r){return jLe(this,r).get(r)}m_.exports=qLe});var y_=w((pAt,I_)=>{var JLe=tm();function WLe(r){return JLe(this,r).has(r)}I_.exports=WLe});var B_=w((dAt,w_)=>{var zLe=tm();function VLe(r,e){var t=zLe(this,r),i=t.size;return t.set(r,e),this.size+=t.size==i?0:1,this}w_.exports=VLe});var G0=w((CAt,b_)=>{var XLe=g_(),ZLe=C_(),_Le=E_(),$Le=y_(),eMe=B_();function wh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}wh.prototype.clear=XLe;wh.prototype.delete=ZLe;wh.prototype.get=_Le;wh.prototype.has=$Le;wh.prototype.set=eMe;b_.exports=wh});var v_=w((mAt,S_)=>{var Q_=G0(),tMe=\"Expected a function\";function KN(r,e){if(typeof r!=\"function\"||e!=null&&typeof e!=\"function\")throw new TypeError(tMe);var t=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=t.cache;if(s.has(n))return s.get(n);var o=r.apply(this,i);return t.cache=s.set(n,o)||s,o};return t.cache=new(KN.Cache||Q_),t}KN.Cache=Q_;S_.exports=KN});var P_=w((EAt,x_)=>{var rMe=v_(),iMe=500;function nMe(r){var e=rMe(r,function(i){return t.size===iMe&&t.clear(),i}),t=e.cache;return e}x_.exports=nMe});var k_=w((IAt,D_)=>{var sMe=P_(),oMe=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,aMe=/\\\\(\\\\)?/g,AMe=sMe(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(\"\"),r.replace(oMe,function(t,i,n,s){e.push(n?s.replace(aMe,\"$1\"):i||t)}),e});D_.exports=AMe});var Bh=w((yAt,R_)=>{var lMe=vs(),cMe=K0(),uMe=k_(),gMe=Vf();function fMe(r,e){return lMe(r)?r:cMe(r,e)?[r]:uMe(gMe(r))}R_.exports=fMe});var Zc=w((wAt,F_)=>{var hMe=gC(),pMe=1/0;function dMe(r){if(typeof r==\"string\"||hMe(r))return r;var e=r+\"\";return e==\"0\"&&1/r==-pMe?\"-0\":e}F_.exports=dMe});var rm=w((BAt,N_)=>{var CMe=Bh(),mMe=Zc();function EMe(r,e){e=CMe(e,r);for(var t=0,i=e.length;r!=null&&t<i;)r=r[mMe(e[t++])];return t&&t==i?r:void 0}N_.exports=EMe});var UN=w((bAt,T_)=>{var IMe=pl(),yMe=function(){try{var r=IMe(Object,\"defineProperty\");return r({},\"\",{}),r}catch{}}();T_.exports=yMe});var bh=w((QAt,M_)=>{var L_=UN();function wMe(r,e,t){e==\"__proto__\"&&L_?L_(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}M_.exports=wMe});var Y0=w((SAt,O_)=>{var BMe=bh(),bMe=Ih(),QMe=Object.prototype,SMe=QMe.hasOwnProperty;function vMe(r,e,t){var i=r[e];(!(SMe.call(r,e)&&bMe(i,t))||t===void 0&&!(e in r))&&BMe(r,e,t)}O_.exports=vMe});var im=w((vAt,K_)=>{var xMe=9007199254740991,PMe=/^(?:0|[1-9]\\d*)$/;function DMe(r,e){var t=typeof r;return e=e==null?xMe:e,!!e&&(t==\"number\"||t!=\"symbol\"&&PMe.test(r))&&r>-1&&r%1==0&&r<e}K_.exports=DMe});var HN=w((xAt,H_)=>{var kMe=Y0(),RMe=Bh(),FMe=im(),U_=vn(),NMe=Zc();function TMe(r,e,t,i){if(!U_(r))return r;e=RMe(e,r);for(var n=-1,s=e.length,o=s-1,a=r;a!=null&&++n<s;){var l=NMe(e[n]),c=t;if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return r;if(n!=o){var u=a[l];c=i?i(u,l,a):void 0,c===void 0&&(c=U_(u)?u:FMe(e[n+1])?[]:{})}kMe(a,l,c),a=a[l]}return r}H_.exports=TMe});var Y_=w((PAt,G_)=>{var LMe=rm(),MMe=HN(),OMe=Bh();function KMe(r,e,t){for(var i=-1,n=e.length,s={};++i<n;){var o=e[i],a=LMe(r,o);t(a,o)&&MMe(s,OMe(o,r),a)}return s}G_.exports=KMe});var q_=w((DAt,j_)=>{function UMe(r,e){return r!=null&&e in Object(r)}j_.exports=UMe});var W_=w((kAt,J_)=>{var HMe=Fc(),GMe=Wo(),YMe=\"[object Arguments]\";function jMe(r){return GMe(r)&&HMe(r)==YMe}J_.exports=jMe});var nm=w((RAt,X_)=>{var z_=W_(),qMe=Wo(),V_=Object.prototype,JMe=V_.hasOwnProperty,WMe=V_.propertyIsEnumerable,zMe=z_(function(){return arguments}())?z_:function(r){return qMe(r)&&JMe.call(r,\"callee\")&&!WMe.call(r,\"callee\")};X_.exports=zMe});var j0=w((FAt,Z_)=>{var VMe=9007199254740991;function XMe(r){return typeof r==\"number\"&&r>-1&&r%1==0&&r<=VMe}Z_.exports=XMe});var GN=w((NAt,__)=>{var ZMe=Bh(),_Me=nm(),$Me=vs(),eOe=im(),tOe=j0(),rOe=Zc();function iOe(r,e,t){e=ZMe(e,r);for(var i=-1,n=e.length,s=!1;++i<n;){var o=rOe(e[i]);if(!(s=r!=null&&t(r,o)))break;r=r[o]}return s||++i!=n?s:(n=r==null?0:r.length,!!n&&tOe(n)&&eOe(o,n)&&($Me(r)||_Me(r)))}__.exports=iOe});var YN=w((TAt,$_)=>{var nOe=q_(),sOe=GN();function oOe(r,e){return r!=null&&sOe(r,e,nOe)}$_.exports=oOe});var t$=w((LAt,e$)=>{var aOe=Y_(),AOe=YN();function lOe(r,e){return aOe(r,e,function(t,i){return AOe(r,i)})}e$.exports=lOe});var q0=w((MAt,r$)=>{function cOe(r,e){for(var t=-1,i=e.length,n=r.length;++t<i;)r[n+t]=e[t];return r}r$.exports=cOe});var o$=w((OAt,s$)=>{var i$=Rc(),uOe=nm(),gOe=vs(),n$=i$?i$.isConcatSpreadable:void 0;function fOe(r){return gOe(r)||uOe(r)||!!(n$&&r&&r[n$])}s$.exports=fOe});var l$=w((KAt,A$)=>{var hOe=q0(),pOe=o$();function a$(r,e,t,i,n){var s=-1,o=r.length;for(t||(t=pOe),n||(n=[]);++s<o;){var a=r[s];e>0&&t(a)?e>1?a$(a,e-1,t,i,n):hOe(n,a):i||(n[n.length]=a)}return n}A$.exports=a$});var u$=w((UAt,c$)=>{var dOe=l$();function COe(r){var e=r==null?0:r.length;return e?dOe(r,1):[]}c$.exports=COe});var f$=w((HAt,g$)=>{function mOe(r,e,t){switch(t.length){case 0:return r.call(e);case 1:return r.call(e,t[0]);case 2:return r.call(e,t[0],t[1]);case 3:return r.call(e,t[0],t[1],t[2])}return r.apply(e,t)}g$.exports=mOe});var jN=w((GAt,p$)=>{var EOe=f$(),h$=Math.max;function IOe(r,e,t){return e=h$(e===void 0?r.length-1:e,0),function(){for(var i=arguments,n=-1,s=h$(i.length-e,0),o=Array(s);++n<s;)o[n]=i[e+n];n=-1;for(var a=Array(e+1);++n<e;)a[n]=i[n];return a[e]=t(o),EOe(r,this,a)}}p$.exports=IOe});var C$=w((YAt,d$)=>{function yOe(r){return function(){return r}}d$.exports=yOe});var J0=w((jAt,m$)=>{function wOe(r){return r}m$.exports=wOe});var y$=w((qAt,I$)=>{var BOe=C$(),E$=UN(),bOe=J0(),QOe=E$?function(r,e){return E$(r,\"toString\",{configurable:!0,enumerable:!1,value:BOe(e),writable:!0})}:bOe;I$.exports=QOe});var B$=w((JAt,w$)=>{var SOe=800,vOe=16,xOe=Date.now;function POe(r){var e=0,t=0;return function(){var i=xOe(),n=vOe-(i-t);if(t=i,n>0){if(++e>=SOe)return arguments[0]}else e=0;return r.apply(void 0,arguments)}}w$.exports=POe});var qN=w((WAt,b$)=>{var DOe=y$(),kOe=B$(),ROe=kOe(DOe);b$.exports=ROe});var S$=w((zAt,Q$)=>{var FOe=u$(),NOe=jN(),TOe=qN();function LOe(r){return TOe(NOe(r,void 0,FOe),r+\"\")}Q$.exports=LOe});var x$=w((VAt,v$)=>{var MOe=t$(),OOe=S$(),KOe=OOe(function(r,e){return r==null?{}:MOe(r,e)});v$.exports=KOe});var K$=w((mct,O$)=>{\"use strict\";var _N;try{_N=Map}catch{}var $N;try{$N=Set}catch{}function L$(r,e,t){if(!r||typeof r!=\"object\"||typeof r==\"function\")return r;if(r.nodeType&&\"cloneNode\"in r)return r.cloneNode(!0);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r);if(Array.isArray(r))return r.map(M$);if(_N&&r instanceof _N)return new Map(Array.from(r.entries()));if($N&&r instanceof $N)return new Set(Array.from(r.values()));if(r instanceof Object){e.push(r);var i=Object.create(r);t.push(i);for(var n in r){var s=e.findIndex(function(o){return o===r[n]});i[n]=s>-1?t[s]:L$(r[n],e,t)}return i}return r}function M$(r){return L$(r,[],[])}O$.exports=M$});var om=w(eT=>{\"use strict\";Object.defineProperty(eT,\"__esModule\",{value:!0});eT.default=e1e;var zOe=Object.prototype.toString,VOe=Error.prototype.toString,XOe=RegExp.prototype.toString,ZOe=typeof Symbol<\"u\"?Symbol.prototype.toString:()=>\"\",_Oe=/^Symbol\\((.*)\\)(.*)$/;function $Oe(r){return r!=+r?\"NaN\":r===0&&1/r<0?\"-0\":\"\"+r}function U$(r,e=!1){if(r==null||r===!0||r===!1)return\"\"+r;let t=typeof r;if(t===\"number\")return $Oe(r);if(t===\"string\")return e?`\"${r}\"`:r;if(t===\"function\")return\"[Function \"+(r.name||\"anonymous\")+\"]\";if(t===\"symbol\")return ZOe.call(r).replace(_Oe,\"Symbol($1)\");let i=zOe.call(r).slice(8,-1);return i===\"Date\"?isNaN(r.getTime())?\"\"+r:r.toISOString(r):i===\"Error\"||r instanceof Error?\"[\"+VOe.call(r)+\"]\":i===\"RegExp\"?XOe.call(r):null}function e1e(r,e){let t=U$(r,e);return t!==null?t:JSON.stringify(r,function(i,n){let s=U$(this[i],e);return s!==null?s:n},2)}});var iA=w(Ei=>{\"use strict\";Object.defineProperty(Ei,\"__esModule\",{value:!0});Ei.default=Ei.array=Ei.object=Ei.boolean=Ei.date=Ei.number=Ei.string=Ei.mixed=void 0;var H$=t1e(om());function t1e(r){return r&&r.__esModule?r:{default:r}}var G$={default:\"${path} is invalid\",required:\"${path} is a required field\",oneOf:\"${path} must be one of the following values: ${values}\",notOneOf:\"${path} must not be one of the following values: ${values}\",notType:({path:r,type:e,value:t,originalValue:i})=>{let n=i!=null&&i!==t,s=`${r} must be a \\`${e}\\` type, but the final value was: \\`${(0,H$.default)(t,!0)}\\``+(n?` (cast from the value \\`${(0,H$.default)(i,!0)}\\`).`:\".\");return t===null&&(s+='\\n If \"null\" is intended as an empty value be sure to mark the schema as `.nullable()`'),s},defined:\"${path} must be defined\"};Ei.mixed=G$;var Y$={length:\"${path} must be exactly ${length} characters\",min:\"${path} must be at least ${min} characters\",max:\"${path} must be at most ${max} characters\",matches:'${path} must match the following: \"${regex}\"',email:\"${path} must be a valid email\",url:\"${path} must be a valid URL\",uuid:\"${path} must be a valid UUID\",trim:\"${path} must be a trimmed string\",lowercase:\"${path} must be a lowercase string\",uppercase:\"${path} must be a upper case string\"};Ei.string=Y$;var j$={min:\"${path} must be greater than or equal to ${min}\",max:\"${path} must be less than or equal to ${max}\",lessThan:\"${path} must be less than ${less}\",moreThan:\"${path} must be greater than ${more}\",positive:\"${path} must be a positive number\",negative:\"${path} must be a negative number\",integer:\"${path} must be an integer\"};Ei.number=j$;var q$={min:\"${path} field must be later than ${min}\",max:\"${path} field must be at earlier than ${max}\"};Ei.date=q$;var J$={isValue:\"${path} field must be ${value}\"};Ei.boolean=J$;var W$={noUnknown:\"${path} field has unspecified keys: ${unknown}\"};Ei.object=W$;var z$={min:\"${path} field must have at least ${min} items\",max:\"${path} field must have less than or equal to ${max} items\",length:\"${path} must be have ${length} items\"};Ei.array=z$;var r1e=Object.assign(Object.create(null),{mixed:G$,string:Y$,number:j$,date:q$,object:W$,array:z$,boolean:J$});Ei.default=r1e});var X$=w((yct,V$)=>{var i1e=Object.prototype,n1e=i1e.hasOwnProperty;function s1e(r,e){return r!=null&&n1e.call(r,e)}V$.exports=s1e});var am=w((wct,Z$)=>{var o1e=X$(),a1e=GN();function A1e(r,e){return r!=null&&a1e(r,e,o1e)}Z$.exports=A1e});var xh=w(eb=>{\"use strict\";Object.defineProperty(eb,\"__esModule\",{value:!0});eb.default=void 0;var l1e=r=>r&&r.__isYupSchema__;eb.default=l1e});var $$=w(tb=>{\"use strict\";Object.defineProperty(tb,\"__esModule\",{value:!0});tb.default=void 0;var c1e=_$(am()),u1e=_$(xh());function _$(r){return r&&r.__esModule?r:{default:r}}var tT=class{constructor(e,t){if(this.refs=e,this.refs=e,typeof t==\"function\"){this.fn=t;return}if(!(0,c1e.default)(t,\"is\"))throw new TypeError(\"`is:` is required for `when()` conditions\");if(!t.then&&!t.otherwise)throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");let{is:i,then:n,otherwise:s}=t,o=typeof i==\"function\"?i:(...a)=>a.every(l=>l===i);this.fn=function(...a){let l=a.pop(),c=a.pop(),u=o(...a)?n:s;if(!!u)return typeof u==\"function\"?u(c):c.concat(u.resolve(l))}}resolve(e,t){let i=this.refs.map(s=>s.getValue(t==null?void 0:t.value,t==null?void 0:t.parent,t==null?void 0:t.context)),n=this.fn.apply(e,i.concat(e,t));if(n===void 0||n===e)return e;if(!(0,u1e.default)(n))throw new TypeError(\"conditions must return a schema object\");return n.resolve(t)}},g1e=tT;tb.default=g1e});var iT=w(rT=>{\"use strict\";Object.defineProperty(rT,\"__esModule\",{value:!0});rT.default=f1e;function f1e(r){return r==null?[]:[].concat(r)}});var _c=w(rb=>{\"use strict\";Object.defineProperty(rb,\"__esModule\",{value:!0});rb.default=void 0;var h1e=eee(om()),p1e=eee(iT());function eee(r){return r&&r.__esModule?r:{default:r}}function nT(){return nT=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},nT.apply(this,arguments)}var d1e=/\\$\\{\\s*(\\w+)\\s*\\}/g,Ph=class extends Error{static formatError(e,t){let i=t.label||t.path||\"this\";return i!==t.path&&(t=nT({},t,{path:i})),typeof e==\"string\"?e.replace(d1e,(n,s)=>(0,h1e.default)(t[s])):typeof e==\"function\"?e(t):e}static isError(e){return e&&e.name===\"ValidationError\"}constructor(e,t,i,n){super(),this.name=\"ValidationError\",this.value=t,this.path=i,this.type=n,this.errors=[],this.inner=[],(0,p1e.default)(e).forEach(s=>{Ph.isError(s)?(this.errors.push(...s.errors),this.inner=this.inner.concat(s.inner.length?s.inner:s)):this.errors.push(s)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,Ph)}};rb.default=Ph});var ib=w(oT=>{\"use strict\";Object.defineProperty(oT,\"__esModule\",{value:!0});oT.default=E1e;var sT=C1e(_c());function C1e(r){return r&&r.__esModule?r:{default:r}}var m1e=r=>{let e=!1;return(...t)=>{e||(e=!0,r(...t))}};function E1e(r,e){let{endEarly:t,tests:i,args:n,value:s,errors:o,sort:a,path:l}=r,c=m1e(e),u=i.length,g=[];if(o=o||[],!u)return o.length?c(new sT.default(o,s,l)):c(null,s);for(let f=0;f<i.length;f++){let h=i[f];h(n,function(C){if(C){if(!sT.default.isError(C))return c(C,s);if(t)return C.value=s,c(C,s);g.push(C)}if(--u<=0){if(g.length&&(a&&g.sort(a),o.length&&g.push(...o),o=g),o.length){c(new sT.default(o,s,l),s);return}c(null,s)}})}}});var ree=w((xct,tee)=>{function I1e(r){return function(e,t,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var l=o[r?a:++n];if(t(s[l],l,s)===!1)break}return e}}tee.exports=I1e});var aT=w((Pct,iee)=>{var y1e=ree(),w1e=y1e();iee.exports=w1e});var see=w((Dct,nee)=>{function B1e(r,e){for(var t=-1,i=Array(r);++t<r;)i[t]=e(t);return i}nee.exports=B1e});var aee=w((kct,oee)=>{function b1e(){return!1}oee.exports=b1e});var lm=w((Am,Dh)=>{var Q1e=ys(),S1e=aee(),cee=typeof Am==\"object\"&&Am&&!Am.nodeType&&Am,Aee=cee&&typeof Dh==\"object\"&&Dh&&!Dh.nodeType&&Dh,v1e=Aee&&Aee.exports===cee,lee=v1e?Q1e.Buffer:void 0,x1e=lee?lee.isBuffer:void 0,P1e=x1e||S1e;Dh.exports=P1e});var gee=w((Rct,uee)=>{var D1e=Fc(),k1e=j0(),R1e=Wo(),F1e=\"[object Arguments]\",N1e=\"[object Array]\",T1e=\"[object Boolean]\",L1e=\"[object Date]\",M1e=\"[object Error]\",O1e=\"[object Function]\",K1e=\"[object Map]\",U1e=\"[object Number]\",H1e=\"[object Object]\",G1e=\"[object RegExp]\",Y1e=\"[object Set]\",j1e=\"[object String]\",q1e=\"[object WeakMap]\",J1e=\"[object ArrayBuffer]\",W1e=\"[object DataView]\",z1e=\"[object Float32Array]\",V1e=\"[object Float64Array]\",X1e=\"[object Int8Array]\",Z1e=\"[object Int16Array]\",_1e=\"[object Int32Array]\",$1e=\"[object Uint8Array]\",eKe=\"[object Uint8ClampedArray]\",tKe=\"[object Uint16Array]\",rKe=\"[object Uint32Array]\",Ir={};Ir[z1e]=Ir[V1e]=Ir[X1e]=Ir[Z1e]=Ir[_1e]=Ir[$1e]=Ir[eKe]=Ir[tKe]=Ir[rKe]=!0;Ir[F1e]=Ir[N1e]=Ir[J1e]=Ir[T1e]=Ir[W1e]=Ir[L1e]=Ir[M1e]=Ir[O1e]=Ir[K1e]=Ir[U1e]=Ir[H1e]=Ir[G1e]=Ir[Y1e]=Ir[j1e]=Ir[q1e]=!1;function iKe(r){return R1e(r)&&k1e(r.length)&&!!Ir[D1e(r)]}uee.exports=iKe});var nb=w((Fct,fee)=>{function nKe(r){return function(e){return r(e)}}fee.exports=nKe});var sb=w((cm,kh)=>{var sKe=WD(),hee=typeof cm==\"object\"&&cm&&!cm.nodeType&&cm,um=hee&&typeof kh==\"object\"&&kh&&!kh.nodeType&&kh,oKe=um&&um.exports===hee,AT=oKe&&sKe.process,aKe=function(){try{var r=um&&um.require&&um.require(\"util\").types;return r||AT&&AT.binding&&AT.binding(\"util\")}catch{}}();kh.exports=aKe});var ob=w((Nct,Cee)=>{var AKe=gee(),lKe=nb(),pee=sb(),dee=pee&&pee.isTypedArray,cKe=dee?lKe(dee):AKe;Cee.exports=cKe});var lT=w((Tct,mee)=>{var uKe=see(),gKe=nm(),fKe=vs(),hKe=lm(),pKe=im(),dKe=ob(),CKe=Object.prototype,mKe=CKe.hasOwnProperty;function EKe(r,e){var t=fKe(r),i=!t&&gKe(r),n=!t&&!i&&hKe(r),s=!t&&!i&&!n&&dKe(r),o=t||i||n||s,a=o?uKe(r.length,String):[],l=a.length;for(var c in r)(e||mKe.call(r,c))&&!(o&&(c==\"length\"||n&&(c==\"offset\"||c==\"parent\")||s&&(c==\"buffer\"||c==\"byteLength\"||c==\"byteOffset\")||pKe(c,l)))&&a.push(c);return a}mee.exports=EKe});var ab=w((Lct,Eee)=>{var IKe=Object.prototype;function yKe(r){var e=r&&r.constructor,t=typeof e==\"function\"&&e.prototype||IKe;return r===t}Eee.exports=yKe});var cT=w((Mct,Iee)=>{function wKe(r,e){return function(t){return r(e(t))}}Iee.exports=wKe});var wee=w((Oct,yee)=>{var BKe=cT(),bKe=BKe(Object.keys,Object);yee.exports=bKe});var bee=w((Kct,Bee)=>{var QKe=ab(),SKe=wee(),vKe=Object.prototype,xKe=vKe.hasOwnProperty;function PKe(r){if(!QKe(r))return SKe(r);var e=[];for(var t in Object(r))xKe.call(r,t)&&t!=\"constructor\"&&e.push(t);return e}Bee.exports=PKe});var gm=w((Uct,Qee)=>{var DKe=U0(),kKe=j0();function RKe(r){return r!=null&&kKe(r.length)&&!DKe(r)}Qee.exports=RKe});var Rh=w((Hct,See)=>{var FKe=lT(),NKe=bee(),TKe=gm();function LKe(r){return TKe(r)?FKe(r):NKe(r)}See.exports=LKe});var uT=w((Gct,vee)=>{var MKe=aT(),OKe=Rh();function KKe(r,e){return r&&MKe(r,e,OKe)}vee.exports=KKe});var Pee=w((Yct,xee)=>{var UKe=em();function HKe(){this.__data__=new UKe,this.size=0}xee.exports=HKe});var kee=w((jct,Dee)=>{function GKe(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}Dee.exports=GKe});var Fee=w((qct,Ree)=>{function YKe(r){return this.__data__.get(r)}Ree.exports=YKe});var Tee=w((Jct,Nee)=>{function jKe(r){return this.__data__.has(r)}Nee.exports=jKe});var Mee=w((Wct,Lee)=>{var qKe=em(),JKe=H0(),WKe=G0(),zKe=200;function VKe(r,e){var t=this.__data__;if(t instanceof qKe){var i=t.__data__;if(!JKe||i.length<zKe-1)return i.push([r,e]),this.size=++t.size,this;t=this.__data__=new WKe(i)}return t.set(r,e),this.size=t.size,this}Lee.exports=VKe});var fm=w((zct,Oee)=>{var XKe=em(),ZKe=Pee(),_Ke=kee(),$Ke=Fee(),eUe=Tee(),tUe=Mee();function Fh(r){var e=this.__data__=new XKe(r);this.size=e.size}Fh.prototype.clear=ZKe;Fh.prototype.delete=_Ke;Fh.prototype.get=$Ke;Fh.prototype.has=eUe;Fh.prototype.set=tUe;Oee.exports=Fh});var Uee=w((Vct,Kee)=>{var rUe=\"__lodash_hash_undefined__\";function iUe(r){return this.__data__.set(r,rUe),this}Kee.exports=iUe});var Gee=w((Xct,Hee)=>{function nUe(r){return this.__data__.has(r)}Hee.exports=nUe});var jee=w((Zct,Yee)=>{var sUe=G0(),oUe=Uee(),aUe=Gee();function Ab(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new sUe;++e<t;)this.add(r[e])}Ab.prototype.add=Ab.prototype.push=oUe;Ab.prototype.has=aUe;Yee.exports=Ab});var Jee=w((_ct,qee)=>{function AUe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i;)if(e(r[t],t,r))return!0;return!1}qee.exports=AUe});var zee=w(($ct,Wee)=>{function lUe(r,e){return r.has(e)}Wee.exports=lUe});var gT=w((eut,Vee)=>{var cUe=jee(),uUe=Jee(),gUe=zee(),fUe=1,hUe=2;function pUe(r,e,t,i,n,s){var o=t&fUe,a=r.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var c=s.get(r),u=s.get(e);if(c&&u)return c==e&&u==r;var g=-1,f=!0,h=t&hUe?new cUe:void 0;for(s.set(r,e),s.set(e,r);++g<a;){var p=r[g],C=e[g];if(i)var y=o?i(C,p,g,e,r,s):i(p,C,g,r,e,s);if(y!==void 0){if(y)continue;f=!1;break}if(h){if(!uUe(e,function(B,v){if(!gUe(h,v)&&(p===B||n(p,B,t,i,s)))return h.push(v)})){f=!1;break}}else if(!(p===C||n(p,C,t,i,s))){f=!1;break}}return s.delete(r),s.delete(e),f}Vee.exports=pUe});var fT=w((tut,Xee)=>{var dUe=ys(),CUe=dUe.Uint8Array;Xee.exports=CUe});var _ee=w((rut,Zee)=>{function mUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i,n){t[++e]=[n,i]}),t}Zee.exports=mUe});var ete=w((iut,$ee)=>{function EUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i){t[++e]=i}),t}$ee.exports=EUe});var ste=w((nut,nte)=>{var tte=Rc(),rte=fT(),IUe=Ih(),yUe=gT(),wUe=_ee(),BUe=ete(),bUe=1,QUe=2,SUe=\"[object Boolean]\",vUe=\"[object Date]\",xUe=\"[object Error]\",PUe=\"[object Map]\",DUe=\"[object Number]\",kUe=\"[object RegExp]\",RUe=\"[object Set]\",FUe=\"[object String]\",NUe=\"[object Symbol]\",TUe=\"[object ArrayBuffer]\",LUe=\"[object DataView]\",ite=tte?tte.prototype:void 0,hT=ite?ite.valueOf:void 0;function MUe(r,e,t,i,n,s,o){switch(t){case LUe:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case TUe:return!(r.byteLength!=e.byteLength||!s(new rte(r),new rte(e)));case SUe:case vUe:case DUe:return IUe(+r,+e);case xUe:return r.name==e.name&&r.message==e.message;case kUe:case FUe:return r==e+\"\";case PUe:var a=wUe;case RUe:var l=i&bUe;if(a||(a=BUe),r.size!=e.size&&!l)return!1;var c=o.get(r);if(c)return c==e;i|=QUe,o.set(r,e);var u=yUe(a(r),a(e),i,n,s,o);return o.delete(r),u;case NUe:if(hT)return hT.call(r)==hT.call(e)}return!1}nte.exports=MUe});var pT=w((sut,ote)=>{var OUe=q0(),KUe=vs();function UUe(r,e,t){var i=e(r);return KUe(r)?i:OUe(i,t(r))}ote.exports=UUe});var Ate=w((out,ate)=>{function HUe(r,e){for(var t=-1,i=r==null?0:r.length,n=0,s=[];++t<i;){var o=r[t];e(o,t,r)&&(s[n++]=o)}return s}ate.exports=HUe});var dT=w((aut,lte)=>{function GUe(){return[]}lte.exports=GUe});var lb=w((Aut,ute)=>{var YUe=Ate(),jUe=dT(),qUe=Object.prototype,JUe=qUe.propertyIsEnumerable,cte=Object.getOwnPropertySymbols,WUe=cte?function(r){return r==null?[]:(r=Object(r),YUe(cte(r),function(e){return JUe.call(r,e)}))}:jUe;ute.exports=WUe});var CT=w((lut,gte)=>{var zUe=pT(),VUe=lb(),XUe=Rh();function ZUe(r){return zUe(r,XUe,VUe)}gte.exports=ZUe});var pte=w((cut,hte)=>{var fte=CT(),_Ue=1,$Ue=Object.prototype,e2e=$Ue.hasOwnProperty;function t2e(r,e,t,i,n,s){var o=t&_Ue,a=fte(r),l=a.length,c=fte(e),u=c.length;if(l!=u&&!o)return!1;for(var g=l;g--;){var f=a[g];if(!(o?f in e:e2e.call(e,f)))return!1}var h=s.get(r),p=s.get(e);if(h&&p)return h==e&&p==r;var C=!0;s.set(r,e),s.set(e,r);for(var y=o;++g<l;){f=a[g];var B=r[f],v=e[f];if(i)var D=o?i(v,B,f,e,r,s):i(B,v,f,r,e,s);if(!(D===void 0?B===v||n(B,v,t,i,s):D)){C=!1;break}y||(y=f==\"constructor\")}if(C&&!y){var T=r.constructor,H=e.constructor;T!=H&&\"constructor\"in r&&\"constructor\"in e&&!(typeof T==\"function\"&&T instanceof T&&typeof H==\"function\"&&H instanceof H)&&(C=!1)}return s.delete(r),s.delete(e),C}hte.exports=t2e});var Cte=w((uut,dte)=>{var r2e=pl(),i2e=ys(),n2e=r2e(i2e,\"DataView\");dte.exports=n2e});var Ete=w((gut,mte)=>{var s2e=pl(),o2e=ys(),a2e=s2e(o2e,\"Promise\");mte.exports=a2e});var yte=w((fut,Ite)=>{var A2e=pl(),l2e=ys(),c2e=A2e(l2e,\"Set\");Ite.exports=c2e});var Bte=w((hut,wte)=>{var u2e=pl(),g2e=ys(),f2e=u2e(g2e,\"WeakMap\");wte.exports=f2e});var hm=w((put,Dte)=>{var mT=Cte(),ET=H0(),IT=Ete(),yT=yte(),wT=Bte(),Pte=Fc(),Nh=ON(),bte=\"[object Map]\",h2e=\"[object Object]\",Qte=\"[object Promise]\",Ste=\"[object Set]\",vte=\"[object WeakMap]\",xte=\"[object DataView]\",p2e=Nh(mT),d2e=Nh(ET),C2e=Nh(IT),m2e=Nh(yT),E2e=Nh(wT),$c=Pte;(mT&&$c(new mT(new ArrayBuffer(1)))!=xte||ET&&$c(new ET)!=bte||IT&&$c(IT.resolve())!=Qte||yT&&$c(new yT)!=Ste||wT&&$c(new wT)!=vte)&&($c=function(r){var e=Pte(r),t=e==h2e?r.constructor:void 0,i=t?Nh(t):\"\";if(i)switch(i){case p2e:return xte;case d2e:return bte;case C2e:return Qte;case m2e:return Ste;case E2e:return vte}return e});Dte.exports=$c});var Ote=w((dut,Mte)=>{var BT=fm(),I2e=gT(),y2e=ste(),w2e=pte(),kte=hm(),Rte=vs(),Fte=lm(),B2e=ob(),b2e=1,Nte=\"[object Arguments]\",Tte=\"[object Array]\",cb=\"[object Object]\",Q2e=Object.prototype,Lte=Q2e.hasOwnProperty;function S2e(r,e,t,i,n,s){var o=Rte(r),a=Rte(e),l=o?Tte:kte(r),c=a?Tte:kte(e);l=l==Nte?cb:l,c=c==Nte?cb:c;var u=l==cb,g=c==cb,f=l==c;if(f&&Fte(r)){if(!Fte(e))return!1;o=!0,u=!1}if(f&&!u)return s||(s=new BT),o||B2e(r)?I2e(r,e,t,i,n,s):y2e(r,e,l,t,i,n,s);if(!(t&b2e)){var h=u&&Lte.call(r,\"__wrapped__\"),p=g&&Lte.call(e,\"__wrapped__\");if(h||p){var C=h?r.value():r,y=p?e.value():e;return s||(s=new BT),n(C,y,t,i,s)}}return f?(s||(s=new BT),w2e(r,e,t,i,n,s)):!1}Mte.exports=S2e});var bT=w((Cut,Hte)=>{var v2e=Ote(),Kte=Wo();function Ute(r,e,t,i,n){return r===e?!0:r==null||e==null||!Kte(r)&&!Kte(e)?r!==r&&e!==e:v2e(r,e,t,i,Ute,n)}Hte.exports=Ute});var Yte=w((mut,Gte)=>{var x2e=fm(),P2e=bT(),D2e=1,k2e=2;function R2e(r,e,t,i){var n=t.length,s=n,o=!i;if(r==null)return!s;for(r=Object(r);n--;){var a=t[n];if(o&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return!1}for(;++n<s;){a=t[n];var l=a[0],c=r[l],u=a[1];if(o&&a[2]){if(c===void 0&&!(l in r))return!1}else{var g=new x2e;if(i)var f=i(c,u,l,r,e,g);if(!(f===void 0?P2e(u,c,D2e|k2e,i,g):f))return!1}}return!0}Gte.exports=R2e});var QT=w((Eut,jte)=>{var F2e=vn();function N2e(r){return r===r&&!F2e(r)}jte.exports=N2e});var Jte=w((Iut,qte)=>{var T2e=QT(),L2e=Rh();function M2e(r){for(var e=L2e(r),t=e.length;t--;){var i=e[t],n=r[i];e[t]=[i,n,T2e(n)]}return e}qte.exports=M2e});var ST=w((yut,Wte)=>{function O2e(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}Wte.exports=O2e});var Vte=w((wut,zte)=>{var K2e=Yte(),U2e=Jte(),H2e=ST();function G2e(r){var e=U2e(r);return e.length==1&&e[0][2]?H2e(e[0][0],e[0][1]):function(t){return t===r||K2e(t,r,e)}}zte.exports=G2e});var ub=w((But,Xte)=>{var Y2e=rm();function j2e(r,e,t){var i=r==null?void 0:Y2e(r,e);return i===void 0?t:i}Xte.exports=j2e});var _te=w((but,Zte)=>{var q2e=bT(),J2e=ub(),W2e=YN(),z2e=K0(),V2e=QT(),X2e=ST(),Z2e=Zc(),_2e=1,$2e=2;function eHe(r,e){return z2e(r)&&V2e(e)?X2e(Z2e(r),e):function(t){var i=J2e(t,r);return i===void 0&&i===e?W2e(t,r):q2e(e,i,_2e|$2e)}}Zte.exports=eHe});var ere=w((Qut,$te)=>{function tHe(r){return function(e){return e==null?void 0:e[r]}}$te.exports=tHe});var rre=w((Sut,tre)=>{var rHe=rm();function iHe(r){return function(e){return rHe(e,r)}}tre.exports=iHe});var nre=w((vut,ire)=>{var nHe=ere(),sHe=rre(),oHe=K0(),aHe=Zc();function AHe(r){return oHe(r)?nHe(aHe(r)):sHe(r)}ire.exports=AHe});var vT=w((xut,sre)=>{var lHe=Vte(),cHe=_te(),uHe=J0(),gHe=vs(),fHe=nre();function hHe(r){return typeof r==\"function\"?r:r==null?uHe:typeof r==\"object\"?gHe(r)?cHe(r[0],r[1]):lHe(r):fHe(r)}sre.exports=hHe});var xT=w((Put,ore)=>{var pHe=bh(),dHe=uT(),CHe=vT();function mHe(r,e){var t={};return e=CHe(e,3),dHe(r,function(i,n,s){pHe(t,n,e(i,n,s))}),t}ore.exports=mHe});var pm=w((Dut,ure)=>{\"use strict\";function eu(r){this._maxSize=r,this.clear()}eu.prototype.clear=function(){this._size=0,this._values=Object.create(null)};eu.prototype.get=function(r){return this._values[r]};eu.prototype.set=function(r,e){return this._size>=this._maxSize&&this.clear(),r in this._values||this._size++,this._values[r]=e};var EHe=/[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,cre=/^\\d+$/,IHe=/^\\d/,yHe=/[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,wHe=/^\\s*(['\"]?)(.*?)(\\1)\\s*$/,kT=512,are=new eu(kT),Are=new eu(kT),lre=new eu(kT);ure.exports={Cache:eu,split:DT,normalizePath:PT,setter:function(r){var e=PT(r);return Are.get(r)||Are.set(r,function(i,n){for(var s=0,o=e.length,a=i;s<o-1;){var l=e[s];if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return i;a=a[e[s++]]}a[e[s]]=n})},getter:function(r,e){var t=PT(r);return lre.get(r)||lre.set(r,function(n){for(var s=0,o=t.length;s<o;)if(n!=null||!e)n=n[t[s++]];else return;return n})},join:function(r){return r.reduce(function(e,t){return e+(RT(t)||cre.test(t)?\"[\"+t+\"]\":(e?\".\":\"\")+t)},\"\")},forEach:function(r,e,t){BHe(Array.isArray(r)?r:DT(r),e,t)}};function PT(r){return are.get(r)||are.set(r,DT(r).map(function(e){return e.replace(wHe,\"$2\")}))}function DT(r){return r.match(EHe)}function BHe(r,e,t){var i=r.length,n,s,o,a;for(s=0;s<i;s++)n=r[s],n&&(SHe(n)&&(n='\"'+n+'\"'),a=RT(n),o=!a&&/^\\d+$/.test(n),e.call(t,n,a,o,s,r))}function RT(r){return typeof r==\"string\"&&r&&[\"'\",'\"'].indexOf(r.charAt(0))!==-1}function bHe(r){return r.match(IHe)&&!r.match(cre)}function QHe(r){return yHe.test(r)}function SHe(r){return!RT(r)&&(bHe(r)||QHe(r))}});var tu=w(Cm=>{\"use strict\";Object.defineProperty(Cm,\"__esModule\",{value:!0});Cm.create=xHe;Cm.default=void 0;var vHe=pm(),gb={context:\"$\",value:\".\"};function xHe(r,e){return new dm(r,e)}var dm=class{constructor(e,t={}){if(typeof e!=\"string\")throw new TypeError(\"ref must be a string, got: \"+e);if(this.key=e.trim(),e===\"\")throw new TypeError(\"ref must be a non-empty string\");this.isContext=this.key[0]===gb.context,this.isValue=this.key[0]===gb.value,this.isSibling=!this.isContext&&!this.isValue;let i=this.isContext?gb.context:this.isValue?gb.value:\"\";this.path=this.key.slice(i.length),this.getter=this.path&&(0,vHe.getter)(this.path,!0),this.map=t.map}getValue(e,t,i){let n=this.isContext?i:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,t==null?void 0:t.parent,t==null?void 0:t.context)}resolve(){return this}describe(){return{type:\"ref\",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};Cm.default=dm;dm.prototype.__isYupRef=!0});var gre=w(NT=>{\"use strict\";Object.defineProperty(NT,\"__esModule\",{value:!0});NT.default=RHe;var PHe=FT(xT()),fb=FT(_c()),DHe=FT(tu());function FT(r){return r&&r.__esModule?r:{default:r}}function hb(){return hb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},hb.apply(this,arguments)}function kHe(r,e){if(r==null)return{};var t={},i=Object.keys(r),n,s;for(s=0;s<i.length;s++)n=i[s],!(e.indexOf(n)>=0)&&(t[n]=r[n]);return t}function RHe(r){function e(t,i){let{value:n,path:s=\"\",label:o,options:a,originalValue:l,sync:c}=t,u=kHe(t,[\"value\",\"path\",\"label\",\"options\",\"originalValue\",\"sync\"]),{name:g,test:f,params:h,message:p}=r,{parent:C,context:y}=a;function B(j){return DHe.default.isRef(j)?j.getValue(n,C,y):j}function v(j={}){let $=(0,PHe.default)(hb({value:n,originalValue:l,label:o,path:j.path||s},h,j.params),B),V=new fb.default(fb.default.formatError(j.message||p,$),n,$.path,j.type||g);return V.params=$,V}let D=hb({path:s,parent:C,type:g,createError:v,resolve:B,options:a,originalValue:l},u);if(!c){try{Promise.resolve(f.call(D,n,D)).then(j=>{fb.default.isError(j)?i(j):j?i(null,j):i(v())})}catch(j){i(j)}return}let T;try{var H;if(T=f.call(D,n,D),typeof((H=T)==null?void 0:H.then)==\"function\")throw new Error(`Validation test of type: \"${D.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(j){i(j);return}fb.default.isError(T)?i(T):T?i(null,T):i(v())}return e.OPTIONS=r,e}});var TT=w(mm=>{\"use strict\";Object.defineProperty(mm,\"__esModule\",{value:!0});mm.getIn=fre;mm.default=void 0;var FHe=pm(),NHe=r=>r.substr(0,r.length-1).substr(1);function fre(r,e,t,i=t){let n,s,o;return e?((0,FHe.forEach)(e,(a,l,c)=>{let u=l?NHe(a):a;if(r=r.resolve({context:i,parent:n,value:t}),r.innerType){let g=c?parseInt(u,10):0;if(t&&g>=t.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${e}. because there is no value at that index. `);n=t,t=t&&t[g],r=r.innerType}if(!c){if(!r.fields||!r.fields[u])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${o} which is a type: \"${r._type}\")`);n=t,t=t&&t[u],r=r.fields[u]}s=u,o=l?\"[\"+a+\"]\":\".\"+a}),{schema:r,parent:n,parentPath:s}):{parent:n,parentPath:e,schema:r}}var THe=(r,e,t,i)=>fre(r,e,t,i).schema,LHe=THe;mm.default=LHe});var pre=w(pb=>{\"use strict\";Object.defineProperty(pb,\"__esModule\",{value:!0});pb.default=void 0;var hre=MHe(tu());function MHe(r){return r&&r.__esModule?r:{default:r}}var Em=class{constructor(){this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let t of this.list)e.push(t);for(let[,t]of this.refs)e.push(t.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}add(e){hre.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){hre.default.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}has(e,t){if(this.list.has(e))return!0;let i,n=this.refs.values();for(;i=n.next(),!i.done;)if(t(i.value)===e)return!0;return!1}clone(){let e=new Em;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,t){let i=this.clone();return e.list.forEach(n=>i.add(n)),e.refs.forEach(n=>i.add(n)),t.list.forEach(n=>i.delete(n)),t.refs.forEach(n=>i.delete(n)),i}};pb.default=Em});var sA=w(Cb=>{\"use strict\";Object.defineProperty(Cb,\"__esModule\",{value:!0});Cb.default=void 0;var dre=nA(K$()),Th=iA(),OHe=nA($$()),Cre=nA(ib()),db=nA(gre()),mre=nA(om()),KHe=nA(tu()),UHe=TT(),HHe=nA(iT()),Ere=nA(_c()),Ire=nA(pre());function nA(r){return r&&r.__esModule?r:{default:r}}function Fs(){return Fs=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Fs.apply(this,arguments)}var uo=class{constructor(e){this.deps=[],this.conditions=[],this._whitelist=new Ire.default,this._blacklist=new Ire.default,this.exclusiveTests=Object.create(null),this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(Th.mixed.notType)}),this.type=(e==null?void 0:e.type)||\"mixed\",this.spec=Fs({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:\"optional\"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeError=this._typeError,t._whitelistError=this._whitelistError,t._blacklistError=this._blacklistError,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.exclusiveTests=Fs({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=(0,dre.default)(Fs({},this.spec,e)),t}label(e){var t=this.clone();return t.spec.label=e,t}meta(...e){if(e.length===0)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let i=e(this);return this._mutate=t,i}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!==\"mixed\")throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${e.type}`);let t=this,i=e.clone(),n=Fs({},t.spec,i.spec);return i.spec=n,i._typeError||(i._typeError=t._typeError),i._whitelistError||(i._whitelistError=t._whitelistError),i._blacklistError||(i._blacklistError=t._blacklistError),i._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),i._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),i.tests=t.tests,i.exclusiveTests=t.exclusiveTests,i.withMutation(s=>{e.tests.forEach(o=>{s.test(o.OPTIONS)})}),i}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let i=t.conditions;t=t.clone(),t.conditions=[],t=i.reduce((n,s)=>s.resolve(n,e),t),t=t.resolve(e)}return t}cast(e,t={}){let i=this.resolve(Fs({value:e},t)),n=i._cast(e,t);if(e!==void 0&&t.assert!==!1&&i.isType(n)!==!0){let s=(0,mre.default)(e),o=(0,mre.default)(n);throw new TypeError(`The value of ${t.path||\"field\"} could not be cast to a value that satisfies the schema type: \"${i._type}\". \n\nattempted value: ${s} \n`+(o!==s?`result of cast: ${o}`:\"\"))}return n}_cast(e,t){let i=e===void 0?e:this.transforms.reduce((n,s)=>s.call(this,n,e,this),e);return i===void 0&&(i=this.getDefault()),i}_validate(e,t={},i){let{sync:n,path:s,from:o=[],originalValue:a=e,strict:l=this.spec.strict,abortEarly:c=this.spec.abortEarly}=t,u=e;l||(u=this._cast(u,Fs({assert:!1},t)));let g={value:u,path:s,options:t,originalValue:a,schema:this,label:this.spec.label,sync:n,from:o},f=[];this._typeError&&f.push(this._typeError),this._whitelistError&&f.push(this._whitelistError),this._blacklistError&&f.push(this._blacklistError),(0,Cre.default)({args:g,value:u,path:s,sync:n,tests:f,endEarly:c},h=>{if(h)return void i(h,u);(0,Cre.default)({tests:this.tests,args:g,path:s,sync:n,value:u,endEarly:c},i)})}validate(e,t,i){let n=this.resolve(Fs({},t,{value:e}));return typeof i==\"function\"?n._validate(e,t,i):new Promise((s,o)=>n._validate(e,t,(a,l)=>{a?o(a):s(l)}))}validateSync(e,t){let i=this.resolve(Fs({},t,{value:e})),n;return i._validate(e,Fs({},t,{sync:!0}),(s,o)=>{if(s)throw s;n=o}),n}isValid(e,t){return this.validate(e,t).then(()=>!0,i=>{if(Ere.default.isError(i))return!1;throw i})}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(i){if(Ere.default.isError(i))return!1;throw i}}_getDefault(){let e=this.spec.default;return e==null?e:typeof e==\"function\"?e.call(this):(0,dre.default)(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return arguments.length===0?this._getDefault():this.clone({default:e})}strict(e=!0){var t=this.clone();return t.spec.strict=e,t}_isPresent(e){return e!=null}defined(e=Th.mixed.defined){return this.test({message:e,name:\"defined\",exclusive:!0,test(t){return t!==void 0}})}required(e=Th.mixed.required){return this.clone({presence:\"required\"}).withMutation(t=>t.test({message:e,name:\"required\",exclusive:!0,test(i){return this.schema._isPresent(i)}}))}notRequired(){var e=this.clone({presence:\"optional\"});return e.tests=e.tests.filter(t=>t.OPTIONS.name!==\"required\"),e}nullable(e=!0){var t=this.clone({nullable:e!==!1});return t}transform(e){var t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(e.length===1?typeof e[0]==\"function\"?t={test:e[0]}:t=e[0]:e.length===2?t={name:e[0],test:e[1]}:t={name:e[0],message:e[1],test:e[2]},t.message===void 0&&(t.message=Th.mixed.default),typeof t.test!=\"function\")throw new TypeError(\"`test` is a required parameters\");let i=this.clone(),n=(0,db.default)(t),s=t.exclusive||t.name&&i.exclusiveTests[t.name]===!0;if(t.exclusive&&!t.name)throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");return t.name&&(i.exclusiveTests[t.name]=!!t.exclusive),i.tests=i.tests.filter(o=>!(o.OPTIONS.name===t.name&&(s||o.OPTIONS.test===n.OPTIONS.test))),i.tests.push(n),i}when(e,t){!Array.isArray(e)&&typeof e!=\"string\"&&(t=e,e=\".\");let i=this.clone(),n=(0,HHe.default)(e).map(s=>new KHe.default(s));return n.forEach(s=>{s.isSibling&&i.deps.push(s.key)}),i.conditions.push(new OHe.default(n,t)),i}typeError(e){var t=this.clone();return t._typeError=(0,db.default)({message:e,name:\"typeError\",test(i){return i!==void 0&&!this.schema.isType(i)?this.createError({params:{type:this.schema._type}}):!0}}),t}oneOf(e,t=Th.mixed.oneOf){var i=this.clone();return e.forEach(n=>{i._whitelist.add(n),i._blacklist.delete(n)}),i._whitelistError=(0,db.default)({message:t,name:\"oneOf\",test(n){if(n===void 0)return!0;let s=this.schema._whitelist;return s.has(n,this.resolve)?!0:this.createError({params:{values:s.toArray().join(\", \")}})}}),i}notOneOf(e,t=Th.mixed.notOneOf){var i=this.clone();return e.forEach(n=>{i._blacklist.add(n),i._whitelist.delete(n)}),i._blacklistError=(0,db.default)({message:t,name:\"notOneOf\",test(n){let s=this.schema._blacklist;return s.has(n,this.resolve)?this.createError({params:{values:s.toArray().join(\", \")}}):!0}}),i}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(){let e=this.clone(),{label:t,meta:i}=e.spec;return{meta:i,label:t,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map(s=>({name:s.OPTIONS.name,params:s.OPTIONS.params})).filter((s,o,a)=>a.findIndex(l=>l.name===s.name)===o)}}};Cb.default=uo;uo.prototype.__isYupSchema__=!0;for(let r of[\"validate\",\"validateSync\"])uo.prototype[`${r}At`]=function(e,t,i={}){let{parent:n,parentPath:s,schema:o}=(0,UHe.getIn)(this,e,t,i.context);return o[r](n&&n[s],Fs({},i,{parent:n,path:e}))};for(let r of[\"equals\",\"is\"])uo.prototype[r]=uo.prototype.oneOf;for(let r of[\"not\",\"nope\"])uo.prototype[r]=uo.prototype.notOneOf;uo.prototype.optional=uo.prototype.notRequired});var wre=w(Im=>{\"use strict\";Object.defineProperty(Im,\"__esModule\",{value:!0});Im.create=yre;Im.default=void 0;var GHe=YHe(sA());function YHe(r){return r&&r.__esModule?r:{default:r}}var LT=GHe.default,jHe=LT;Im.default=jHe;function yre(){return new LT}yre.prototype=LT.prototype});var Lh=w(mb=>{\"use strict\";Object.defineProperty(mb,\"__esModule\",{value:!0});mb.default=void 0;var qHe=r=>r==null;mb.default=qHe});var vre=w(wm=>{\"use strict\";Object.defineProperty(wm,\"__esModule\",{value:!0});wm.create=Sre;wm.default=void 0;var JHe=Qre(sA()),Bre=iA(),bre=Qre(Lh());function Qre(r){return r&&r.__esModule?r:{default:r}}function Sre(){return new ym}var ym=class extends JHe.default{constructor(){super({type:\"boolean\"}),this.withMutation(()=>{this.transform(function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}_typeCheck(e){return e instanceof Boolean&&(e=e.valueOf()),typeof e==\"boolean\"}isTrue(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"true\"},test(t){return(0,bre.default)(t)||t===!0}})}isFalse(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"false\"},test(t){return(0,bre.default)(t)||t===!1}})}};wm.default=ym;Sre.prototype=ym.prototype});var Dre=w(bm=>{\"use strict\";Object.defineProperty(bm,\"__esModule\",{value:!0});bm.create=Pre;bm.default=void 0;var ia=iA(),oA=xre(Lh()),WHe=xre(sA());function xre(r){return r&&r.__esModule?r:{default:r}}var zHe=/^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,VHe=/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,XHe=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,ZHe=r=>(0,oA.default)(r)||r===r.trim(),_He={}.toString();function Pre(){return new Bm}var Bm=class extends WHe.default{constructor(){super({type:\"string\"}),this.withMutation(()=>{this.transform(function(e){if(this.isType(e)||Array.isArray(e))return e;let t=e!=null&&e.toString?e.toString():e;return t===_He?e:t})})}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),typeof e==\"string\"}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,t=ia.string.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,oA.default)(i)||i.length===this.resolve(e)}})}min(e,t=ia.string.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,oA.default)(i)||i.length>=this.resolve(e)}})}max(e,t=ia.string.max){return this.test({name:\"max\",exclusive:!0,message:t,params:{max:e},test(i){return(0,oA.default)(i)||i.length<=this.resolve(e)}})}matches(e,t){let i=!1,n,s;return t&&(typeof t==\"object\"?{excludeEmptyString:i=!1,message:n,name:s}=t:n=t),this.test({name:s||\"matches\",message:n||ia.string.matches,params:{regex:e},test:o=>(0,oA.default)(o)||o===\"\"&&i||o.search(e)!==-1})}email(e=ia.string.email){return this.matches(zHe,{name:\"email\",message:e,excludeEmptyString:!0})}url(e=ia.string.url){return this.matches(VHe,{name:\"url\",message:e,excludeEmptyString:!0})}uuid(e=ia.string.uuid){return this.matches(XHe,{name:\"uuid\",message:e,excludeEmptyString:!1})}ensure(){return this.default(\"\").transform(e=>e===null?\"\":e)}trim(e=ia.string.trim){return this.transform(t=>t!=null?t.trim():t).test({message:e,name:\"trim\",test:ZHe})}lowercase(e=ia.string.lowercase){return this.transform(t=>(0,oA.default)(t)?t:t.toLowerCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toLowerCase()})}uppercase(e=ia.string.uppercase){return this.transform(t=>(0,oA.default)(t)?t:t.toUpperCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toUpperCase()})}};bm.default=Bm;Pre.prototype=Bm.prototype});var Fre=w(Sm=>{\"use strict\";Object.defineProperty(Sm,\"__esModule\",{value:!0});Sm.create=Rre;Sm.default=void 0;var ru=iA(),iu=kre(Lh()),$He=kre(sA());function kre(r){return r&&r.__esModule?r:{default:r}}var eGe=r=>r!=+r;function Rre(){return new Qm}var Qm=class extends $He.default{constructor(){super({type:\"number\"}),this.withMutation(()=>{this.transform(function(e){let t=e;if(typeof t==\"string\"){if(t=t.replace(/\\s/g,\"\"),t===\"\")return NaN;t=+t}return this.isType(t)?t:parseFloat(t)})})}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),typeof e==\"number\"&&!eGe(e)}min(e,t=ru.number.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,iu.default)(i)||i>=this.resolve(e)}})}max(e,t=ru.number.max){return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,iu.default)(i)||i<=this.resolve(e)}})}lessThan(e,t=ru.number.lessThan){return this.test({message:t,name:\"max\",exclusive:!0,params:{less:e},test(i){return(0,iu.default)(i)||i<this.resolve(e)}})}moreThan(e,t=ru.number.moreThan){return this.test({message:t,name:\"min\",exclusive:!0,params:{more:e},test(i){return(0,iu.default)(i)||i>this.resolve(e)}})}positive(e=ru.number.positive){return this.moreThan(0,e)}negative(e=ru.number.negative){return this.lessThan(0,e)}integer(e=ru.number.integer){return this.test({name:\"integer\",message:e,test:t=>(0,iu.default)(t)||Number.isInteger(t)})}truncate(){return this.transform(e=>(0,iu.default)(e)?e:e|0)}round(e){var t,i=[\"ceil\",\"floor\",\"round\",\"trunc\"];if(e=((t=e)==null?void 0:t.toLowerCase())||\"round\",e===\"trunc\")return this.truncate();if(i.indexOf(e.toLowerCase())===-1)throw new TypeError(\"Only valid options for round() are: \"+i.join(\", \"));return this.transform(n=>(0,iu.default)(n)?n:Math[e](n))}};Sm.default=Qm;Rre.prototype=Qm.prototype});var Nre=w(MT=>{\"use strict\";Object.defineProperty(MT,\"__esModule\",{value:!0});MT.default=rGe;var tGe=/^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;function rGe(r){var e=[1,4,5,6,7,10,11],t=0,i,n;if(n=tGe.exec(r)){for(var s=0,o;o=e[s];++s)n[o]=+n[o]||0;n[2]=(+n[2]||1)-1,n[3]=+n[3]||1,n[7]=n[7]?String(n[7]).substr(0,3):0,(n[8]===void 0||n[8]===\"\")&&(n[9]===void 0||n[9]===\"\")?i=+new Date(n[1],n[2],n[3],n[4],n[5],n[6],n[7]):(n[8]!==\"Z\"&&n[9]!==void 0&&(t=n[10]*60+n[11],n[9]===\"+\"&&(t=0-t)),i=Date.UTC(n[1],n[2],n[3],n[4],n[5]+t,n[6],n[7]))}else i=Date.parse?Date.parse(r):NaN;return i}});var Mre=w(vm=>{\"use strict\";Object.defineProperty(vm,\"__esModule\",{value:!0});vm.create=KT;vm.default=void 0;var iGe=Eb(Nre()),Tre=iA(),Lre=Eb(Lh()),nGe=Eb(tu()),sGe=Eb(sA());function Eb(r){return r&&r.__esModule?r:{default:r}}var OT=new Date(\"\"),oGe=r=>Object.prototype.toString.call(r)===\"[object Date]\";function KT(){return new Mh}var Mh=class extends sGe.default{constructor(){super({type:\"date\"}),this.withMutation(()=>{this.transform(function(e){return this.isType(e)?e:(e=(0,iGe.default)(e),isNaN(e)?OT:new Date(e))})})}_typeCheck(e){return oGe(e)&&!isNaN(e.getTime())}prepareParam(e,t){let i;if(nGe.default.isRef(e))i=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\\`${t}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);i=n}return i}min(e,t=Tre.date.min){let i=this.prepareParam(e,\"min\");return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(n){return(0,Lre.default)(n)||n>=this.resolve(i)}})}max(e,t=Tre.date.max){var i=this.prepareParam(e,\"max\");return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(n){return(0,Lre.default)(n)||n<=this.resolve(i)}})}};vm.default=Mh;Mh.INVALID_DATE=OT;KT.prototype=Mh.prototype;KT.INVALID_DATE=OT});var Kre=w((Yut,Ore)=>{function aGe(r,e,t,i){var n=-1,s=r==null?0:r.length;for(i&&s&&(t=r[++n]);++n<s;)t=e(t,r[n],n,r);return t}Ore.exports=aGe});var Hre=w((jut,Ure)=>{function AGe(r){return function(e){return r==null?void 0:r[e]}}Ure.exports=AGe});var Yre=w((qut,Gre)=>{var lGe=Hre(),cGe={\\u00C0:\"A\",\\u00C1:\"A\",\\u00C2:\"A\",\\u00C3:\"A\",\\u00C4:\"A\",\\u00C5:\"A\",\\u00E0:\"a\",\\u00E1:\"a\",\\u00E2:\"a\",\\u00E3:\"a\",\\u00E4:\"a\",\\u00E5:\"a\",\\u00C7:\"C\",\\u00E7:\"c\",\\u00D0:\"D\",\\u00F0:\"d\",\\u00C8:\"E\",\\u00C9:\"E\",\\u00CA:\"E\",\\u00CB:\"E\",\\u00E8:\"e\",\\u00E9:\"e\",\\u00EA:\"e\",\\u00EB:\"e\",\\u00CC:\"I\",\\u00CD:\"I\",\\u00CE:\"I\",\\u00CF:\"I\",\\u00EC:\"i\",\\u00ED:\"i\",\\u00EE:\"i\",\\u00EF:\"i\",\\u00D1:\"N\",\\u00F1:\"n\",\\u00D2:\"O\",\\u00D3:\"O\",\\u00D4:\"O\",\\u00D5:\"O\",\\u00D6:\"O\",\\u00D8:\"O\",\\u00F2:\"o\",\\u00F3:\"o\",\\u00F4:\"o\",\\u00F5:\"o\",\\u00F6:\"o\",\\u00F8:\"o\",\\u00D9:\"U\",\\u00DA:\"U\",\\u00DB:\"U\",\\u00DC:\"U\",\\u00F9:\"u\",\\u00FA:\"u\",\\u00FB:\"u\",\\u00FC:\"u\",\\u00DD:\"Y\",\\u00FD:\"y\",\\u00FF:\"y\",\\u00C6:\"Ae\",\\u00E6:\"ae\",\\u00DE:\"Th\",\\u00FE:\"th\",\\u00DF:\"ss\",\\u0100:\"A\",\\u0102:\"A\",\\u0104:\"A\",\\u0101:\"a\",\\u0103:\"a\",\\u0105:\"a\",\\u0106:\"C\",\\u0108:\"C\",\\u010A:\"C\",\\u010C:\"C\",\\u0107:\"c\",\\u0109:\"c\",\\u010B:\"c\",\\u010D:\"c\",\\u010E:\"D\",\\u0110:\"D\",\\u010F:\"d\",\\u0111:\"d\",\\u0112:\"E\",\\u0114:\"E\",\\u0116:\"E\",\\u0118:\"E\",\\u011A:\"E\",\\u0113:\"e\",\\u0115:\"e\",\\u0117:\"e\",\\u0119:\"e\",\\u011B:\"e\",\\u011C:\"G\",\\u011E:\"G\",\\u0120:\"G\",\\u0122:\"G\",\\u011D:\"g\",\\u011F:\"g\",\\u0121:\"g\",\\u0123:\"g\",\\u0124:\"H\",\\u0126:\"H\",\\u0125:\"h\",\\u0127:\"h\",\\u0128:\"I\",\\u012A:\"I\",\\u012C:\"I\",\\u012E:\"I\",\\u0130:\"I\",\\u0129:\"i\",\\u012B:\"i\",\\u012D:\"i\",\\u012F:\"i\",\\u0131:\"i\",\\u0134:\"J\",\\u0135:\"j\",\\u0136:\"K\",\\u0137:\"k\",\\u0138:\"k\",\\u0139:\"L\",\\u013B:\"L\",\\u013D:\"L\",\\u013F:\"L\",\\u0141:\"L\",\\u013A:\"l\",\\u013C:\"l\",\\u013E:\"l\",\\u0140:\"l\",\\u0142:\"l\",\\u0143:\"N\",\\u0145:\"N\",\\u0147:\"N\",\\u014A:\"N\",\\u0144:\"n\",\\u0146:\"n\",\\u0148:\"n\",\\u014B:\"n\",\\u014C:\"O\",\\u014E:\"O\",\\u0150:\"O\",\\u014D:\"o\",\\u014F:\"o\",\\u0151:\"o\",\\u0154:\"R\",\\u0156:\"R\",\\u0158:\"R\",\\u0155:\"r\",\\u0157:\"r\",\\u0159:\"r\",\\u015A:\"S\",\\u015C:\"S\",\\u015E:\"S\",\\u0160:\"S\",\\u015B:\"s\",\\u015D:\"s\",\\u015F:\"s\",\\u0161:\"s\",\\u0162:\"T\",\\u0164:\"T\",\\u0166:\"T\",\\u0163:\"t\",\\u0165:\"t\",\\u0167:\"t\",\\u0168:\"U\",\\u016A:\"U\",\\u016C:\"U\",\\u016E:\"U\",\\u0170:\"U\",\\u0172:\"U\",\\u0169:\"u\",\\u016B:\"u\",\\u016D:\"u\",\\u016F:\"u\",\\u0171:\"u\",\\u0173:\"u\",\\u0174:\"W\",\\u0175:\"w\",\\u0176:\"Y\",\\u0177:\"y\",\\u0178:\"Y\",\\u0179:\"Z\",\\u017B:\"Z\",\\u017D:\"Z\",\\u017A:\"z\",\\u017C:\"z\",\\u017E:\"z\",\\u0132:\"IJ\",\\u0133:\"ij\",\\u0152:\"Oe\",\\u0153:\"oe\",\\u0149:\"'n\",\\u017F:\"s\"},uGe=lGe(cGe);Gre.exports=uGe});var qre=w((Jut,jre)=>{var gGe=Yre(),fGe=Vf(),hGe=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,pGe=\"\\\\u0300-\\\\u036f\",dGe=\"\\\\ufe20-\\\\ufe2f\",CGe=\"\\\\u20d0-\\\\u20ff\",mGe=pGe+dGe+CGe,EGe=\"[\"+mGe+\"]\",IGe=RegExp(EGe,\"g\");function yGe(r){return r=fGe(r),r&&r.replace(hGe,gGe).replace(IGe,\"\")}jre.exports=yGe});var Wre=w((Wut,Jre)=>{var wGe=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;function BGe(r){return r.match(wGe)||[]}Jre.exports=BGe});var Vre=w((zut,zre)=>{var bGe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function QGe(r){return bGe.test(r)}zre.exports=QGe});var hie=w((Vut,fie)=>{var eie=\"\\\\ud800-\\\\udfff\",SGe=\"\\\\u0300-\\\\u036f\",vGe=\"\\\\ufe20-\\\\ufe2f\",xGe=\"\\\\u20d0-\\\\u20ff\",PGe=SGe+vGe+xGe,tie=\"\\\\u2700-\\\\u27bf\",rie=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",DGe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",kGe=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",RGe=\"\\\\u2000-\\\\u206f\",FGe=\" \\\\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\",iie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",NGe=\"\\\\ufe0e\\\\ufe0f\",nie=DGe+kGe+RGe+FGe,sie=\"['\\u2019]\",Xre=\"[\"+nie+\"]\",TGe=\"[\"+PGe+\"]\",oie=\"\\\\d+\",LGe=\"[\"+tie+\"]\",aie=\"[\"+rie+\"]\",Aie=\"[^\"+eie+nie+oie+tie+rie+iie+\"]\",MGe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",OGe=\"(?:\"+TGe+\"|\"+MGe+\")\",KGe=\"[^\"+eie+\"]\",lie=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",cie=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Oh=\"[\"+iie+\"]\",UGe=\"\\\\u200d\",Zre=\"(?:\"+aie+\"|\"+Aie+\")\",HGe=\"(?:\"+Oh+\"|\"+Aie+\")\",_re=\"(?:\"+sie+\"(?:d|ll|m|re|s|t|ve))?\",$re=\"(?:\"+sie+\"(?:D|LL|M|RE|S|T|VE))?\",uie=OGe+\"?\",gie=\"[\"+NGe+\"]?\",GGe=\"(?:\"+UGe+\"(?:\"+[KGe,lie,cie].join(\"|\")+\")\"+gie+uie+\")*\",YGe=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jGe=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",qGe=gie+uie+GGe,JGe=\"(?:\"+[LGe,lie,cie].join(\"|\")+\")\"+qGe,WGe=RegExp([Oh+\"?\"+aie+\"+\"+_re+\"(?=\"+[Xre,Oh,\"$\"].join(\"|\")+\")\",HGe+\"+\"+$re+\"(?=\"+[Xre,Oh+Zre,\"$\"].join(\"|\")+\")\",Oh+\"?\"+Zre+\"+\"+_re,Oh+\"+\"+$re,jGe,YGe,oie,JGe].join(\"|\"),\"g\");function zGe(r){return r.match(WGe)||[]}fie.exports=zGe});var die=w((Xut,pie)=>{var VGe=Wre(),XGe=Vre(),ZGe=Vf(),_Ge=hie();function $Ge(r,e,t){return r=ZGe(r),e=t?void 0:e,e===void 0?XGe(r)?_Ge(r):VGe(r):r.match(e)||[]}pie.exports=$Ge});var UT=w((Zut,Cie)=>{var eYe=Kre(),tYe=qre(),rYe=die(),iYe=\"['\\u2019]\",nYe=RegExp(iYe,\"g\");function sYe(r){return function(e){return eYe(rYe(tYe(e).replace(nYe,\"\")),r,\"\")}}Cie.exports=sYe});var Eie=w((_ut,mie)=>{var oYe=UT(),aYe=oYe(function(r,e,t){return r+(t?\"_\":\"\")+e.toLowerCase()});mie.exports=aYe});var yie=w(($ut,Iie)=>{var AYe=PB(),lYe=UT(),cYe=lYe(function(r,e,t){return e=e.toLowerCase(),r+(t?AYe(e):e)});Iie.exports=cYe});var Bie=w((egt,wie)=>{var uYe=bh(),gYe=uT(),fYe=vT();function hYe(r,e){var t={};return e=fYe(e,3),gYe(r,function(i,n,s){uYe(t,e(i,n,s),i)}),t}wie.exports=hYe});var Qie=w((tgt,HT)=>{HT.exports=function(r){return bie(pYe(r),r)};HT.exports.array=bie;function bie(r,e){var t=r.length,i=new Array(t),n={},s=t,o=dYe(e),a=CYe(r);for(e.forEach(function(c){if(!a.has(c[0])||!a.has(c[1]))throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\")});s--;)n[s]||l(r[s],s,new Set);return i;function l(c,u,g){if(g.has(c)){var f;try{f=\", node was:\"+JSON.stringify(c)}catch{f=\"\"}throw new Error(\"Cyclic dependency\"+f)}if(!a.has(c))throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \"+JSON.stringify(c));if(!n[u]){n[u]=!0;var h=o.get(c)||new Set;if(h=Array.from(h),u=h.length){g.add(c);do{var p=h[--u];l(p,a.get(p),g)}while(u);g.delete(c)}i[--t]=c}}}function pYe(r){for(var e=new Set,t=0,i=r.length;t<i;t++){var n=r[t];e.add(n[0]),e.add(n[1])}return Array.from(e)}function dYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++){var n=r[t];e.has(n[0])||e.set(n[0],new Set),e.has(n[1])||e.set(n[1],new Set),e.get(n[0]).add(n[1])}return e}function CYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++)e.set(r[t],t);return e}});var Sie=w(GT=>{\"use strict\";Object.defineProperty(GT,\"__esModule\",{value:!0});GT.default=BYe;var mYe=Ib(am()),EYe=Ib(Qie()),IYe=pm(),yYe=Ib(tu()),wYe=Ib(xh());function Ib(r){return r&&r.__esModule?r:{default:r}}function BYe(r,e=[]){let t=[],i=[];function n(s,o){var a=(0,IYe.split)(s)[0];~i.indexOf(a)||i.push(a),~e.indexOf(`${o}-${a}`)||t.push([o,a])}for(let s in r)if((0,mYe.default)(r,s)){let o=r[s];~i.indexOf(s)||i.push(s),yYe.default.isRef(o)&&o.isSibling?n(o.path,s):(0,wYe.default)(o)&&\"deps\"in o&&o.deps.forEach(a=>n(a,s))}return EYe.default.array(i,t).reverse()}});var xie=w(YT=>{\"use strict\";Object.defineProperty(YT,\"__esModule\",{value:!0});YT.default=bYe;function vie(r,e){let t=1/0;return r.some((i,n)=>{var s;if(((s=e.path)==null?void 0:s.indexOf(i))!==-1)return t=n,!0}),t}function bYe(r){return(e,t)=>vie(r,e)-vie(r,t)}});var Tie=w(Pm=>{\"use strict\";Object.defineProperty(Pm,\"__esModule\",{value:!0});Pm.create=Nie;Pm.default=void 0;var Pie=na(am()),Die=na(Eie()),QYe=na(yie()),SYe=na(Bie()),vYe=na(xT()),xYe=pm(),kie=iA(),PYe=na(Sie()),Fie=na(xie()),DYe=na(ib()),kYe=na(_c()),jT=na(sA());function na(r){return r&&r.__esModule?r:{default:r}}function Kh(){return Kh=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Kh.apply(this,arguments)}var Rie=r=>Object.prototype.toString.call(r)===\"[object Object]\";function RYe(r,e){let t=Object.keys(r.fields);return Object.keys(e).filter(i=>t.indexOf(i)===-1)}var FYe=(0,Fie.default)([]),xm=class extends jT.default{constructor(e){super({type:\"object\"}),this.fields=Object.create(null),this._sortErrors=FYe,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{this.transform(function(i){if(typeof i==\"string\")try{i=JSON.parse(i)}catch{i=null}return this.isType(i)?i:null}),e&&this.shape(e)})}_typeCheck(e){return Rie(e)||typeof e==\"function\"}_cast(e,t={}){var i;let n=super._cast(e,t);if(n===void 0)return this.getDefault();if(!this._typeCheck(n))return n;let s=this.fields,o=(i=t.stripUnknown)!=null?i:this.spec.noUnknown,a=this._nodes.concat(Object.keys(n).filter(g=>this._nodes.indexOf(g)===-1)),l={},c=Kh({},t,{parent:l,__validating:t.__validating||!1}),u=!1;for(let g of a){let f=s[g],h=(0,Pie.default)(n,g);if(f){let p,C=n[g];c.path=(t.path?`${t.path}.`:\"\")+g,f=f.resolve({value:C,context:t.context,parent:l});let y=\"spec\"in f?f.spec:void 0,B=y==null?void 0:y.strict;if(y!=null&&y.strip){u=u||g in n;continue}p=!t.__validating||!B?f.cast(n[g],c):n[g],p!==void 0&&(l[g]=p)}else h&&!o&&(l[g]=n[g]);l[g]!==n[g]&&(u=!0)}return u?l:n}_validate(e,t={},i){let n=[],{sync:s,from:o=[],originalValue:a=e,abortEarly:l=this.spec.abortEarly,recursive:c=this.spec.recursive}=t;o=[{schema:this,value:a},...o],t.__validating=!0,t.originalValue=a,t.from=o,super._validate(e,t,(u,g)=>{if(u){if(!kYe.default.isError(u)||l)return void i(u,g);n.push(u)}if(!c||!Rie(g)){i(n[0]||null,g);return}a=a||g;let f=this._nodes.map(h=>(p,C)=>{let y=h.indexOf(\".\")===-1?(t.path?`${t.path}.`:\"\")+h:`${t.path||\"\"}[\"${h}\"]`,B=this.fields[h];if(B&&\"validate\"in B){B.validate(g[h],Kh({},t,{path:y,from:o,strict:!0,parent:g,originalValue:a[h]}),C);return}C(null)});(0,DYe.default)({sync:s,tests:f,value:g,errors:n,endEarly:l,sort:this._sortErrors,path:t.path},i)})}clone(e){let t=super.clone(e);return t.fields=Kh({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),i=t.fields;for(let[n,s]of Object.entries(this.fields)){let o=i[n];o===void 0?i[n]=s:o instanceof jT.default&&s instanceof jT.default&&(i[n]=s.concat(o))}return t.withMutation(()=>t.shape(i))}getDefaultFromShape(){let e={};return this._nodes.forEach(t=>{let i=this.fields[t];e[t]=\"default\"in i?i.getDefault():void 0}),e}_getDefault(){if(\"default\"in this.spec)return super._getDefault();if(!!this._nodes.length)return this.getDefaultFromShape()}shape(e,t=[]){let i=this.clone(),n=Object.assign(i.fields,e);if(i.fields=n,i._sortErrors=(0,Fie.default)(Object.keys(n)),t.length){Array.isArray(t[0])||(t=[t]);let s=t.map(([o,a])=>`${o}-${a}`);i._excludedEdges=i._excludedEdges.concat(s)}return i._nodes=(0,PYe.default)(n,i._excludedEdges),i}pick(e){let t={};for(let i of e)this.fields[i]&&(t[i]=this.fields[i]);return this.clone().withMutation(i=>(i.fields={},i.shape(t)))}omit(e){let t=this.clone(),i=t.fields;t.fields={};for(let n of e)delete i[n];return t.withMutation(()=>t.shape(i))}from(e,t,i){let n=(0,xYe.getter)(e,!0);return this.transform(s=>{if(s==null)return s;let o=s;return(0,Pie.default)(s,e)&&(o=Kh({},s),i||delete o[e],o[t]=n(s)),o})}noUnknown(e=!0,t=kie.object.noUnknown){typeof e==\"string\"&&(t=e,e=!0);let i=this.test({name:\"noUnknown\",exclusive:!0,message:t,test(n){if(n==null)return!0;let s=RYe(this.schema,n);return!e||s.length===0||this.createError({params:{unknown:s.join(\", \")}})}});return i.spec.noUnknown=e,i}unknown(e=!0,t=kie.object.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform(t=>t&&(0,SYe.default)(t,(i,n)=>e(n)))}camelCase(){return this.transformKeys(QYe.default)}snakeCase(){return this.transformKeys(Die.default)}constantCase(){return this.transformKeys(e=>(0,Die.default)(e).toUpperCase())}describe(){let e=super.describe();return e.fields=(0,vYe.default)(this.fields,t=>t.describe()),e}};Pm.default=xm;function Nie(r){return new xm(r)}Nie.prototype=xm.prototype});var Mie=w(km=>{\"use strict\";Object.defineProperty(km,\"__esModule\",{value:!0});km.create=Lie;km.default=void 0;var qT=Uh(Lh()),NYe=Uh(xh()),TYe=Uh(om()),JT=iA(),LYe=Uh(ib()),MYe=Uh(_c()),OYe=Uh(sA());function Uh(r){return r&&r.__esModule?r:{default:r}}function yb(){return yb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},yb.apply(this,arguments)}function Lie(r){return new Dm(r)}var Dm=class extends OYe.default{constructor(e){super({type:\"array\"}),this.innerType=e,this.withMutation(()=>{this.transform(function(t){if(typeof t==\"string\")try{t=JSON.parse(t)}catch{t=null}return this.isType(t)?t:null})})}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,t){let i=super._cast(e,t);if(!this._typeCheck(i)||!this.innerType)return i;let n=!1,s=i.map((o,a)=>{let l=this.innerType.cast(o,yb({},t,{path:`${t.path||\"\"}[${a}]`}));return l!==o&&(n=!0),l});return n?s:i}_validate(e,t={},i){var n,s;let o=[],a=t.sync,l=t.path,c=this.innerType,u=(n=t.abortEarly)!=null?n:this.spec.abortEarly,g=(s=t.recursive)!=null?s:this.spec.recursive,f=t.originalValue!=null?t.originalValue:e;super._validate(e,t,(h,p)=>{if(h){if(!MYe.default.isError(h)||u)return void i(h,p);o.push(h)}if(!g||!c||!this._typeCheck(p)){i(o[0]||null,p);return}f=f||p;let C=new Array(p.length);for(let y=0;y<p.length;y++){let B=p[y],v=`${t.path||\"\"}[${y}]`,D=yb({},t,{path:v,strict:!0,parent:p,index:y,originalValue:f[y]});C[y]=(T,H)=>c.validate(B,D,H)}(0,LYe.default)({sync:a,path:l,value:p,errors:o,endEarly:u,tests:C},i)})}clone(e){let t=super.clone(e);return t.innerType=this.innerType,t}concat(e){let t=super.concat(e);return t.innerType=this.innerType,e.innerType&&(t.innerType=t.innerType?t.innerType.concat(e.innerType):e.innerType),t}of(e){let t=this.clone();if(!(0,NYe.default)(e))throw new TypeError(\"`array.of()` sub-schema must be a valid yup schema not: \"+(0,TYe.default)(e));return t.innerType=e,t}length(e,t=JT.array.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,qT.default)(i)||i.length===this.resolve(e)}})}min(e,t){return t=t||JT.array.min,this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,qT.default)(i)||i.length>=this.resolve(e)}})}max(e,t){return t=t||JT.array.max,this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,qT.default)(i)||i.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,t)=>this._typeCheck(e)?e:t==null?[]:[].concat(t))}compact(e){let t=e?(i,n,s)=>!e(i,n,s):i=>!!i;return this.transform(i=>i!=null?i.filter(t):i)}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}};km.default=Dm;Lie.prototype=Dm.prototype});var Oie=w(Rm=>{\"use strict\";Object.defineProperty(Rm,\"__esModule\",{value:!0});Rm.create=HYe;Rm.default=void 0;var KYe=UYe(xh());function UYe(r){return r&&r.__esModule?r:{default:r}}function HYe(r){return new wb(r)}var wb=class{constructor(e){this.type=\"lazy\",this.__isYupSchema__=!0,this._resolve=(t,i={})=>{let n=this.builder(t,i);if(!(0,KYe.default)(n))throw new TypeError(\"lazy() functions must return a valid schema\");return n.resolve(i)},this.builder=e}resolve(e){return this._resolve(e.value,e)}cast(e,t){return this._resolve(e,t).cast(e,t)}validate(e,t,i){return this._resolve(e,t).validate(e,t,i)}validateSync(e,t){return this._resolve(e,t).validateSync(e,t)}validateAt(e,t,i){return this._resolve(t,i).validateAt(e,t,i)}validateSyncAt(e,t,i){return this._resolve(t,i).validateSyncAt(e,t,i)}describe(){return null}isValid(e,t){return this._resolve(e,t).isValid(e,t)}isValidSync(e,t){return this._resolve(e,t).isValidSync(e,t)}},GYe=wb;Rm.default=GYe});var Kie=w(WT=>{\"use strict\";Object.defineProperty(WT,\"__esModule\",{value:!0});WT.default=qYe;var YYe=jYe(iA());function jYe(r){return r&&r.__esModule?r:{default:r}}function qYe(r){Object.keys(r).forEach(e=>{Object.keys(r[e]).forEach(t=>{YYe.default[e][t]=r[e][t]})})}});var VT=w(yr=>{\"use strict\";Object.defineProperty(yr,\"__esModule\",{value:!0});yr.addMethod=_Ye;Object.defineProperty(yr,\"MixedSchema\",{enumerable:!0,get:function(){return Uie.default}});Object.defineProperty(yr,\"mixed\",{enumerable:!0,get:function(){return Uie.create}});Object.defineProperty(yr,\"BooleanSchema\",{enumerable:!0,get:function(){return zT.default}});Object.defineProperty(yr,\"bool\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"boolean\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"StringSchema\",{enumerable:!0,get:function(){return Hie.default}});Object.defineProperty(yr,\"string\",{enumerable:!0,get:function(){return Hie.create}});Object.defineProperty(yr,\"NumberSchema\",{enumerable:!0,get:function(){return Gie.default}});Object.defineProperty(yr,\"number\",{enumerable:!0,get:function(){return Gie.create}});Object.defineProperty(yr,\"DateSchema\",{enumerable:!0,get:function(){return Yie.default}});Object.defineProperty(yr,\"date\",{enumerable:!0,get:function(){return Yie.create}});Object.defineProperty(yr,\"ObjectSchema\",{enumerable:!0,get:function(){return jie.default}});Object.defineProperty(yr,\"object\",{enumerable:!0,get:function(){return jie.create}});Object.defineProperty(yr,\"ArraySchema\",{enumerable:!0,get:function(){return qie.default}});Object.defineProperty(yr,\"array\",{enumerable:!0,get:function(){return qie.create}});Object.defineProperty(yr,\"ref\",{enumerable:!0,get:function(){return JYe.create}});Object.defineProperty(yr,\"lazy\",{enumerable:!0,get:function(){return WYe.create}});Object.defineProperty(yr,\"ValidationError\",{enumerable:!0,get:function(){return zYe.default}});Object.defineProperty(yr,\"reach\",{enumerable:!0,get:function(){return VYe.default}});Object.defineProperty(yr,\"isSchema\",{enumerable:!0,get:function(){return Jie.default}});Object.defineProperty(yr,\"setLocale\",{enumerable:!0,get:function(){return XYe.default}});Object.defineProperty(yr,\"BaseSchema\",{enumerable:!0,get:function(){return ZYe.default}});var Uie=nu(wre()),zT=nu(vre()),Hie=nu(Dre()),Gie=nu(Fre()),Yie=nu(Mre()),jie=nu(Tie()),qie=nu(Mie()),JYe=tu(),WYe=Oie(),zYe=Fm(_c()),VYe=Fm(TT()),Jie=Fm(xh()),XYe=Fm(Kie()),ZYe=Fm(sA());function Fm(r){return r&&r.__esModule?r:{default:r}}function Wie(){if(typeof WeakMap!=\"function\")return null;var r=new WeakMap;return Wie=function(){return r},r}function nu(r){if(r&&r.__esModule)return r;if(r===null||typeof r!=\"object\"&&typeof r!=\"function\")return{default:r};var e=Wie();if(e&&e.has(r))return e.get(r);var t={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in r)if(Object.prototype.hasOwnProperty.call(r,n)){var s=i?Object.getOwnPropertyDescriptor(r,n):null;s&&(s.get||s.set)?Object.defineProperty(t,n,s):t[n]=r[n]}return t.default=r,e&&e.set(r,t),t}function _Ye(r,e,t){if(!r||!(0,Jie.default)(r.prototype))throw new TypeError(\"You must provide a yup schema constructor function\");if(typeof e!=\"string\")throw new TypeError(\"A Method name must be provided\");if(typeof t!=\"function\")throw new TypeError(\"Method function must be provided\");r.prototype[e]=t}});var _ie=w((ygt,Tm)=>{\"use strict\";var tje=process.env.TERM_PROGRAM===\"Hyper\",rje=process.platform===\"win32\",Vie=process.platform===\"linux\",XT={ballotDisabled:\"\\u2612\",ballotOff:\"\\u2610\",ballotOn:\"\\u2611\",bullet:\"\\u2022\",bulletWhite:\"\\u25E6\",fullBlock:\"\\u2588\",heart:\"\\u2764\",identicalTo:\"\\u2261\",line:\"\\u2500\",mark:\"\\u203B\",middot:\"\\xB7\",minus:\"\\uFF0D\",multiplication:\"\\xD7\",obelus:\"\\xF7\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",pencilUpRight:\"\\u2710\",percent:\"%\",pilcrow2:\"\\u2761\",pilcrow:\"\\xB6\",plusMinus:\"\\xB1\",section:\"\\xA7\",starsOff:\"\\u2606\",starsOn:\"\\u2605\",upDownArrow:\"\\u2195\"},Xie=Object.assign({},XT,{check:\"\\u221A\",cross:\"\\xD7\",ellipsisLarge:\"...\",ellipsis:\"...\",info:\"i\",question:\"?\",questionSmall:\"?\",pointer:\">\",pointerSmall:\"\\xBB\",radioOff:\"( )\",radioOn:\"(*)\",warning:\"\\u203C\"}),Zie=Object.assign({},XT,{ballotCross:\"\\u2718\",check:\"\\u2714\",cross:\"\\u2716\",ellipsisLarge:\"\\u22EF\",ellipsis:\"\\u2026\",info:\"\\u2139\",question:\"?\",questionFull:\"\\uFF1F\",questionSmall:\"\\uFE56\",pointer:Vie?\"\\u25B8\":\"\\u276F\",pointerSmall:Vie?\"\\u2023\":\"\\u203A\",radioOff:\"\\u25EF\",radioOn:\"\\u25C9\",warning:\"\\u26A0\"});Tm.exports=rje&&!tje?Xie:Zie;Reflect.defineProperty(Tm.exports,\"common\",{enumerable:!1,value:XT});Reflect.defineProperty(Tm.exports,\"windows\",{enumerable:!1,value:Xie});Reflect.defineProperty(Tm.exports,\"other\",{enumerable:!1,value:Zie})});var go=w((wgt,ZT)=>{\"use strict\";var ije=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),nje=/[\\u001b\\u009b][[\\]#;?()]*(?:(?:(?:[^\\W_]*;?[^\\W_]*)\\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,$ie=()=>{let r={enabled:!0,visible:!0,styles:{},keys:{}};\"FORCE_COLOR\"in process.env&&(r.enabled=process.env.FORCE_COLOR!==\"0\");let e=s=>{let o=s.open=`\\x1B[${s.codes[0]}m`,a=s.close=`\\x1B[${s.codes[1]}m`,l=s.regex=new RegExp(`\\\\u001b\\\\[${s.codes[1]}m`,\"g\");return s.wrap=(c,u)=>{c.includes(a)&&(c=c.replace(l,a+o));let g=o+c+a;return u?g.replace(/\\r*\\n/g,`${a}$&${o}`):g},s},t=(s,o,a)=>typeof s==\"function\"?s(o):s.wrap(o,a),i=(s,o)=>{if(s===\"\"||s==null)return\"\";if(r.enabled===!1)return s;if(r.visible===!1)return\"\";let a=\"\"+s,l=a.includes(`\n`),c=o.length;for(c>0&&o.includes(\"unstyle\")&&(o=[...new Set([\"unstyle\",...o])].reverse());c-- >0;)a=t(r.styles[o[c]],a,l);return a},n=(s,o,a)=>{r.styles[s]=e({name:s,codes:o}),(r.keys[a]||(r.keys[a]=[])).push(s),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(c){r.alias(s,c)},get(){let c=u=>i(u,c.stack);return Reflect.setPrototypeOf(c,r),c.stack=this.stack?this.stack.concat(s):[s],c}})};return n(\"reset\",[0,0],\"modifier\"),n(\"bold\",[1,22],\"modifier\"),n(\"dim\",[2,22],\"modifier\"),n(\"italic\",[3,23],\"modifier\"),n(\"underline\",[4,24],\"modifier\"),n(\"inverse\",[7,27],\"modifier\"),n(\"hidden\",[8,28],\"modifier\"),n(\"strikethrough\",[9,29],\"modifier\"),n(\"black\",[30,39],\"color\"),n(\"red\",[31,39],\"color\"),n(\"green\",[32,39],\"color\"),n(\"yellow\",[33,39],\"color\"),n(\"blue\",[34,39],\"color\"),n(\"magenta\",[35,39],\"color\"),n(\"cyan\",[36,39],\"color\"),n(\"white\",[37,39],\"color\"),n(\"gray\",[90,39],\"color\"),n(\"grey\",[90,39],\"color\"),n(\"bgBlack\",[40,49],\"bg\"),n(\"bgRed\",[41,49],\"bg\"),n(\"bgGreen\",[42,49],\"bg\"),n(\"bgYellow\",[43,49],\"bg\"),n(\"bgBlue\",[44,49],\"bg\"),n(\"bgMagenta\",[45,49],\"bg\"),n(\"bgCyan\",[46,49],\"bg\"),n(\"bgWhite\",[47,49],\"bg\"),n(\"blackBright\",[90,39],\"bright\"),n(\"redBright\",[91,39],\"bright\"),n(\"greenBright\",[92,39],\"bright\"),n(\"yellowBright\",[93,39],\"bright\"),n(\"blueBright\",[94,39],\"bright\"),n(\"magentaBright\",[95,39],\"bright\"),n(\"cyanBright\",[96,39],\"bright\"),n(\"whiteBright\",[97,39],\"bright\"),n(\"bgBlackBright\",[100,49],\"bgBright\"),n(\"bgRedBright\",[101,49],\"bgBright\"),n(\"bgGreenBright\",[102,49],\"bgBright\"),n(\"bgYellowBright\",[103,49],\"bgBright\"),n(\"bgBlueBright\",[104,49],\"bgBright\"),n(\"bgMagentaBright\",[105,49],\"bgBright\"),n(\"bgCyanBright\",[106,49],\"bgBright\"),n(\"bgWhiteBright\",[107,49],\"bgBright\"),r.ansiRegex=nje,r.hasColor=r.hasAnsi=s=>(r.ansiRegex.lastIndex=0,typeof s==\"string\"&&s!==\"\"&&r.ansiRegex.test(s)),r.alias=(s,o)=>{let a=typeof o==\"string\"?r[o]:o;if(typeof a!=\"function\")throw new TypeError(\"Expected alias to be the name of an existing color (string) or a function\");a.stack||(Reflect.defineProperty(a,\"name\",{value:s}),r.styles[s]=a,a.stack=[s]),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(l){r.alias(s,l)},get(){let l=c=>i(c,l.stack);return Reflect.setPrototypeOf(l,r),l.stack=this.stack?this.stack.concat(a.stack):a.stack,l}})},r.theme=s=>{if(!ije(s))throw new TypeError(\"Expected theme to be an object\");for(let o of Object.keys(s))r.alias(o,s[o]);return r},r.alias(\"unstyle\",s=>typeof s==\"string\"&&s!==\"\"?(r.ansiRegex.lastIndex=0,s.replace(r.ansiRegex,\"\")):\"\"),r.alias(\"noop\",s=>s),r.none=r.clear=r.noop,r.stripColor=r.unstyle,r.symbols=_ie(),r.define=n,r};ZT.exports=$ie();ZT.exports.create=$ie});var ji=w(Tt=>{\"use strict\";var sje=Object.prototype.toString,Ns=go(),ene=!1,_T=[],tne={yellow:\"blue\",cyan:\"red\",green:\"magenta\",black:\"white\",blue:\"yellow\",red:\"cyan\",magenta:\"green\",white:\"black\"};Tt.longest=(r,e)=>r.reduce((t,i)=>Math.max(t,e?i[e].length:i.length),0);Tt.hasColor=r=>!!r&&Ns.hasColor(r);var bb=Tt.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);Tt.nativeType=r=>sje.call(r).slice(8,-1).toLowerCase().replace(/\\s/g,\"\");Tt.isAsyncFn=r=>Tt.nativeType(r)===\"asyncfunction\";Tt.isPrimitive=r=>r!=null&&typeof r!=\"object\"&&typeof r!=\"function\";Tt.resolve=(r,e,...t)=>typeof e==\"function\"?e.call(r,...t):e;Tt.scrollDown=(r=[])=>[...r.slice(1),r[0]];Tt.scrollUp=(r=[])=>[r.pop(),...r];Tt.reorder=(r=[])=>{let e=r.slice();return e.sort((t,i)=>t.index>i.index?1:t.index<i.index?-1:0),e};Tt.swap=(r,e,t)=>{let i=r.length,n=t===i?0:t<0?i-1:t,s=r[e];r[e]=r[n],r[n]=s};Tt.width=(r,e=80)=>{let t=r&&r.columns?r.columns:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[0]),process.platform===\"win32\"?t-1:t};Tt.height=(r,e=20)=>{let t=r&&r.rows?r.rows:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[1]),t};Tt.wordWrap=(r,e={})=>{if(!r)return r;typeof e==\"number\"&&(e={width:e});let{indent:t=\"\",newline:i=`\n`+t,width:n=80}=e,s=(i+t).match(/[^\\S\\n]/g)||[];n-=s.length;let o=`.{1,${n}}([\\\\s\\\\u200B]+|$)|[^\\\\s\\\\u200B]+?([\\\\s\\\\u200B]+|$)`,a=r.trim(),l=new RegExp(o,\"g\"),c=a.match(l)||[];return c=c.map(u=>u.replace(/\\n$/,\"\")),e.padEnd&&(c=c.map(u=>u.padEnd(n,\" \"))),e.padStart&&(c=c.map(u=>u.padStart(n,\" \"))),t+c.join(i)};Tt.unmute=r=>{let e=r.stack.find(i=>Ns.keys.color.includes(i));return e?Ns[e]:r.stack.find(i=>i.slice(2)===\"bg\")?Ns[e.slice(2)]:i=>i};Tt.pascal=r=>r?r[0].toUpperCase()+r.slice(1):\"\";Tt.inverse=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i));if(e){let i=Ns[\"bg\"+Tt.pascal(e)];return i?i.black:r}let t=r.stack.find(i=>i.slice(0,2)===\"bg\");return t?Ns[t.slice(2).toLowerCase()]||r:Ns.none};Tt.complement=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i)),t=r.stack.find(i=>i.slice(0,2)===\"bg\");if(e&&!t)return Ns[tne[e]||e];if(t){let i=t.slice(2).toLowerCase(),n=tne[i];return n&&Ns[\"bg\"+Tt.pascal(n)]||r}return Ns.none};Tt.meridiem=r=>{let e=r.getHours(),t=r.getMinutes(),i=e>=12?\"pm\":\"am\";e=e%12;let n=e===0?12:e,s=t<10?\"0\"+t:t;return n+\":\"+s+\" \"+i};Tt.set=(r={},e=\"\",t)=>e.split(\".\").reduce((i,n,s,o)=>{let a=o.length-1>s?i[n]||{}:t;return!Tt.isObject(a)&&s<o.length-1&&(a={}),i[n]=a},r);Tt.get=(r={},e=\"\",t)=>{let i=r[e]==null?e.split(\".\").reduce((n,s)=>n&&n[s],r):r[e];return i==null?t:i};Tt.mixin=(r,e)=>{if(!bb(r))return e;if(!bb(e))return r;for(let t of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,t);if(i.hasOwnProperty(\"value\"))if(r.hasOwnProperty(t)&&bb(i.value)){let n=Object.getOwnPropertyDescriptor(r,t);bb(n.value)?r[t]=Tt.merge({},r[t],e[t]):Reflect.defineProperty(r,t,i)}else Reflect.defineProperty(r,t,i);else Reflect.defineProperty(r,t,i)}return r};Tt.merge=(...r)=>{let e={};for(let t of r)Tt.mixin(e,t);return e};Tt.mixinEmitter=(r,e)=>{let t=e.constructor.prototype;for(let i of Object.keys(t)){let n=t[i];typeof n==\"function\"?Tt.define(r,i,n.bind(e)):Tt.define(r,i,n)}};Tt.onExit=r=>{let e=(t,i)=>{ene||(ene=!0,_T.forEach(n=>n()),t===!0&&process.exit(128+i))};_T.length===0&&(process.once(\"SIGTERM\",e.bind(null,!0,15)),process.once(\"SIGINT\",e.bind(null,!0,2)),process.once(\"exit\",e)),_T.push(r)};Tt.define=(r,e,t)=>{Reflect.defineProperty(r,e,{value:t})};Tt.defineExport=(r,e,t)=>{let i;Reflect.defineProperty(r,e,{enumerable:!0,configurable:!0,set(n){i=n},get(){return i?i():t()}})}});var rne=w(Gh=>{\"use strict\";Gh.ctrl={a:\"first\",b:\"backward\",c:\"cancel\",d:\"deleteForward\",e:\"last\",f:\"forward\",g:\"reset\",i:\"tab\",k:\"cutForward\",l:\"reset\",n:\"newItem\",m:\"cancel\",j:\"submit\",p:\"search\",r:\"remove\",s:\"save\",u:\"undo\",w:\"cutLeft\",x:\"toggleCursor\",v:\"paste\"};Gh.shift={up:\"shiftUp\",down:\"shiftDown\",left:\"shiftLeft\",right:\"shiftRight\",tab:\"prev\"};Gh.fn={up:\"pageUp\",down:\"pageDown\",left:\"pageLeft\",right:\"pageRight\",delete:\"deleteForward\"};Gh.option={b:\"backward\",f:\"forward\",d:\"cutRight\",left:\"cutLeft\",up:\"altUp\",down:\"altDown\"};Gh.keys={pageup:\"pageUp\",pagedown:\"pageDown\",home:\"home\",end:\"end\",cancel:\"cancel\",delete:\"deleteForward\",backspace:\"delete\",down:\"down\",enter:\"submit\",escape:\"cancel\",left:\"left\",space:\"space\",number:\"number\",return:\"submit\",right:\"right\",tab:\"next\",up:\"up\"}});var sne=w((Qgt,nne)=>{\"use strict\";var ine=J(\"readline\"),oje=rne(),aje=/^(?:\\x1b)([a-zA-Z0-9])$/,Aje=/^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/,lje={OP:\"f1\",OQ:\"f2\",OR:\"f3\",OS:\"f4\",\"[11~\":\"f1\",\"[12~\":\"f2\",\"[13~\":\"f3\",\"[14~\":\"f4\",\"[[A\":\"f1\",\"[[B\":\"f2\",\"[[C\":\"f3\",\"[[D\":\"f4\",\"[[E\":\"f5\",\"[15~\":\"f5\",\"[17~\":\"f6\",\"[18~\":\"f7\",\"[19~\":\"f8\",\"[20~\":\"f9\",\"[21~\":\"f10\",\"[23~\":\"f11\",\"[24~\":\"f12\",\"[A\":\"up\",\"[B\":\"down\",\"[C\":\"right\",\"[D\":\"left\",\"[E\":\"clear\",\"[F\":\"end\",\"[H\":\"home\",OA:\"up\",OB:\"down\",OC:\"right\",OD:\"left\",OE:\"clear\",OF:\"end\",OH:\"home\",\"[1~\":\"home\",\"[2~\":\"insert\",\"[3~\":\"delete\",\"[4~\":\"end\",\"[5~\":\"pageup\",\"[6~\":\"pagedown\",\"[[5~\":\"pageup\",\"[[6~\":\"pagedown\",\"[7~\":\"home\",\"[8~\":\"end\",\"[a\":\"up\",\"[b\":\"down\",\"[c\":\"right\",\"[d\":\"left\",\"[e\":\"clear\",\"[2$\":\"insert\",\"[3$\":\"delete\",\"[5$\":\"pageup\",\"[6$\":\"pagedown\",\"[7$\":\"home\",\"[8$\":\"end\",Oa:\"up\",Ob:\"down\",Oc:\"right\",Od:\"left\",Oe:\"clear\",\"[2^\":\"insert\",\"[3^\":\"delete\",\"[5^\":\"pageup\",\"[6^\":\"pagedown\",\"[7^\":\"home\",\"[8^\":\"end\",\"[Z\":\"tab\"};function cje(r){return[\"[a\",\"[b\",\"[c\",\"[d\",\"[e\",\"[2$\",\"[3$\",\"[5$\",\"[6$\",\"[7$\",\"[8$\",\"[Z\"].includes(r)}function uje(r){return[\"Oa\",\"Ob\",\"Oc\",\"Od\",\"Oe\",\"[2^\",\"[3^\",\"[5^\",\"[6^\",\"[7^\",\"[8^\"].includes(r)}var Qb=(r=\"\",e={})=>{let t,i={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:r,raw:r,...e};if(Buffer.isBuffer(r)?r[0]>127&&r[1]===void 0?(r[0]-=128,r=\"\\x1B\"+String(r)):r=String(r):r!==void 0&&typeof r!=\"string\"?r=String(r):r||(r=i.sequence||\"\"),i.sequence=i.sequence||r||i.name,r===\"\\r\")i.raw=void 0,i.name=\"return\";else if(r===`\n`)i.name=\"enter\";else if(r===\"\t\")i.name=\"tab\";else if(r===\"\\b\"||r===\"\\x7F\"||r===\"\\x1B\\x7F\"||r===\"\\x1B\\b\")i.name=\"backspace\",i.meta=r.charAt(0)===\"\\x1B\";else if(r===\"\\x1B\"||r===\"\\x1B\\x1B\")i.name=\"escape\",i.meta=r.length===2;else if(r===\" \"||r===\"\\x1B \")i.name=\"space\",i.meta=r.length===2;else if(r<=\"\u001a\")i.name=String.fromCharCode(r.charCodeAt(0)+\"a\".charCodeAt(0)-1),i.ctrl=!0;else if(r.length===1&&r>=\"0\"&&r<=\"9\")i.name=\"number\";else if(r.length===1&&r>=\"a\"&&r<=\"z\")i.name=r;else if(r.length===1&&r>=\"A\"&&r<=\"Z\")i.name=r.toLowerCase(),i.shift=!0;else if(t=aje.exec(r))i.meta=!0,i.shift=/^[A-Z]$/.test(t[1]);else if(t=Aje.exec(r)){let n=[...r];n[0]===\"\\x1B\"&&n[1]===\"\\x1B\"&&(i.option=!0);let s=[t[1],t[2],t[4],t[6]].filter(Boolean).join(\"\"),o=(t[3]||t[5]||1)-1;i.ctrl=!!(o&4),i.meta=!!(o&10),i.shift=!!(o&1),i.code=s,i.name=lje[s],i.shift=cje(s)||i.shift,i.ctrl=uje(s)||i.ctrl}return i};Qb.listen=(r={},e)=>{let{stdin:t}=r;if(!t||t!==process.stdin&&!t.isTTY)throw new Error(\"Invalid stream passed\");let i=ine.createInterface({terminal:!0,input:t});ine.emitKeypressEvents(t,i);let n=(a,l)=>e(a,Qb(a,l),i),s=t.isRaw;return t.isTTY&&t.setRawMode(!0),t.on(\"keypress\",n),i.resume(),()=>{t.isTTY&&t.setRawMode(s),t.removeListener(\"keypress\",n),i.pause(),i.close()}};Qb.action=(r,e,t)=>{let i={...oje,...t};return e.ctrl?(e.action=i.ctrl[e.name],e):e.option&&i.option?(e.action=i.option[e.name],e):e.shift?(e.action=i.shift[e.name],e):(e.action=i.keys[e.name],e)};nne.exports=Qb});var ane=w((Sgt,one)=>{\"use strict\";one.exports=r=>{r.timers=r.timers||{};let e=r.options.timers;if(!!e)for(let t of Object.keys(e)){let i=e[t];typeof i==\"number\"&&(i={interval:i}),gje(r,t,i)}};function gje(r,e,t={}){let i=r.timers[e]={name:e,start:Date.now(),ms:0,tick:0},n=t.interval||120;i.frames=t.frames||[],i.loading=!0;let s=setInterval(()=>{i.ms=Date.now()-i.start,i.tick++,r.render()},n);return i.stop=()=>{i.loading=!1,clearInterval(s)},Reflect.defineProperty(i,\"interval\",{value:s}),r.once(\"close\",()=>i.stop()),i.stop}});var lne=w((vgt,Ane)=>{\"use strict\";var{define:fje,width:hje}=ji(),$T=class{constructor(e){let t=e.options;fje(this,\"_prompt\",e),this.type=e.type,this.name=e.name,this.message=\"\",this.header=\"\",this.footer=\"\",this.error=\"\",this.hint=\"\",this.input=\"\",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt=\"\",this.buffer=\"\",this.width=hje(t.stdout||process.stdout),Object.assign(this,t),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let t=this._color||e[this.status];return typeof t==\"function\"?t:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading==\"boolean\"?this._loading:this.loadingChoices?\"choices\":!1}get status(){return this.cancelled?\"cancelled\":this.submitted?\"submitted\":\"pending\"}};Ane.exports=$T});var une=w((xgt,cne)=>{\"use strict\";var eL=ji(),Di=go(),tL={default:Di.noop,noop:Di.noop,set inverse(r){this._inverse=r},get inverse(){return this._inverse||eL.inverse(this.primary)},set complement(r){this._complement=r},get complement(){return this._complement||eL.complement(this.primary)},primary:Di.cyan,success:Di.green,danger:Di.magenta,strong:Di.bold,warning:Di.yellow,muted:Di.dim,disabled:Di.gray,dark:Di.dim.gray,underline:Di.underline,set info(r){this._info=r},get info(){return this._info||this.primary},set em(r){this._em=r},get em(){return this._em||this.primary.underline},set heading(r){this._heading=r},get heading(){return this._heading||this.muted.underline},set pending(r){this._pending=r},get pending(){return this._pending||this.primary},set submitted(r){this._submitted=r},get submitted(){return this._submitted||this.success},set cancelled(r){this._cancelled=r},get cancelled(){return this._cancelled||this.danger},set typing(r){this._typing=r},get typing(){return this._typing||this.dim},set placeholder(r){this._placeholder=r},get placeholder(){return this._placeholder||this.primary.dim},set highlight(r){this._highlight=r},get highlight(){return this._highlight||this.inverse}};tL.merge=(r={})=>{r.styles&&typeof r.styles.enabled==\"boolean\"&&(Di.enabled=r.styles.enabled),r.styles&&typeof r.styles.visible==\"boolean\"&&(Di.visible=r.styles.visible);let e=eL.merge({},tL,r.styles);delete e.merge;for(let t of Object.keys(Di))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});for(let t of Object.keys(Di.styles))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});return e};cne.exports=tL});var fne=w((Pgt,gne)=>{\"use strict\";var rL=process.platform===\"win32\",aA=go(),pje=ji(),iL={...aA.symbols,upDownDoubleArrow:\"\\u21D5\",upDownDoubleArrow2:\"\\u2B0D\",upDownArrow:\"\\u2195\",asterisk:\"*\",asterism:\"\\u2042\",bulletWhite:\"\\u25E6\",electricArrow:\"\\u2301\",ellipsisLarge:\"\\u22EF\",ellipsisSmall:\"\\u2026\",fullBlock:\"\\u2588\",identicalTo:\"\\u2261\",indicator:aA.symbols.check,leftAngle:\"\\u2039\",mark:\"\\u203B\",minus:\"\\u2212\",multiplication:\"\\xD7\",obelus:\"\\xF7\",percent:\"%\",pilcrow:\"\\xB6\",pilcrow2:\"\\u2761\",pencilUpRight:\"\\u2710\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",plus:\"+\",plusMinus:\"\\xB1\",pointRight:\"\\u261E\",rightAngle:\"\\u203A\",section:\"\\xA7\",hexagon:{off:\"\\u2B21\",on:\"\\u2B22\",disabled:\"\\u2B22\"},ballot:{on:\"\\u2611\",off:\"\\u2610\",disabled:\"\\u2612\"},stars:{on:\"\\u2605\",off:\"\\u2606\",disabled:\"\\u2606\"},folder:{on:\"\\u25BC\",off:\"\\u25B6\",disabled:\"\\u25B6\"},prefix:{pending:aA.symbols.question,submitted:aA.symbols.check,cancelled:aA.symbols.cross},separator:{pending:aA.symbols.pointerSmall,submitted:aA.symbols.middot,cancelled:aA.symbols.middot},radio:{off:rL?\"( )\":\"\\u25EF\",on:rL?\"(*)\":\"\\u25C9\",disabled:rL?\"(|)\":\"\\u24BE\"},numbers:[\"\\u24EA\",\"\\u2460\",\"\\u2461\",\"\\u2462\",\"\\u2463\",\"\\u2464\",\"\\u2465\",\"\\u2466\",\"\\u2467\",\"\\u2468\",\"\\u2469\",\"\\u246A\",\"\\u246B\",\"\\u246C\",\"\\u246D\",\"\\u246E\",\"\\u246F\",\"\\u2470\",\"\\u2471\",\"\\u2472\",\"\\u2473\",\"\\u3251\",\"\\u3252\",\"\\u3253\",\"\\u3254\",\"\\u3255\",\"\\u3256\",\"\\u3257\",\"\\u3258\",\"\\u3259\",\"\\u325A\",\"\\u325B\",\"\\u325C\",\"\\u325D\",\"\\u325E\",\"\\u325F\",\"\\u32B1\",\"\\u32B2\",\"\\u32B3\",\"\\u32B4\",\"\\u32B5\",\"\\u32B6\",\"\\u32B7\",\"\\u32B8\",\"\\u32B9\",\"\\u32BA\",\"\\u32BB\",\"\\u32BC\",\"\\u32BD\",\"\\u32BE\",\"\\u32BF\"]};iL.merge=r=>{let e=pje.merge({},aA.symbols,iL,r.symbols);return delete e.merge,e};gne.exports=iL});var pne=w((Dgt,hne)=>{\"use strict\";var dje=une(),Cje=fne(),mje=ji();hne.exports=r=>{r.options=mje.merge({},r.options.theme,r.options),r.symbols=Cje.merge(r.options),r.styles=dje.merge(r.options)}});var Ine=w((mne,Ene)=>{\"use strict\";var dne=process.env.TERM_PROGRAM===\"Apple_Terminal\",Eje=go(),nL=ji(),fo=Ene.exports=mne,Dr=\"\\x1B[\",Cne=\"\\x07\",sL=!1,dl=fo.code={bell:Cne,beep:Cne,beginning:`${Dr}G`,down:`${Dr}J`,esc:Dr,getPosition:`${Dr}6n`,hide:`${Dr}?25l`,line:`${Dr}2K`,lineEnd:`${Dr}K`,lineStart:`${Dr}1K`,restorePosition:Dr+(dne?\"8\":\"u\"),savePosition:Dr+(dne?\"7\":\"s\"),screen:`${Dr}2J`,show:`${Dr}?25h`,up:`${Dr}1J`},su=fo.cursor={get hidden(){return sL},hide(){return sL=!0,dl.hide},show(){return sL=!1,dl.show},forward:(r=1)=>`${Dr}${r}C`,backward:(r=1)=>`${Dr}${r}D`,nextLine:(r=1)=>`${Dr}E`.repeat(r),prevLine:(r=1)=>`${Dr}F`.repeat(r),up:(r=1)=>r?`${Dr}${r}A`:\"\",down:(r=1)=>r?`${Dr}${r}B`:\"\",right:(r=1)=>r?`${Dr}${r}C`:\"\",left:(r=1)=>r?`${Dr}${r}D`:\"\",to(r,e){return e?`${Dr}${e+1};${r+1}H`:`${Dr}${r+1}G`},move(r=0,e=0){let t=\"\";return t+=r<0?su.left(-r):r>0?su.right(r):\"\",t+=e<0?su.up(-e):e>0?su.down(e):\"\",t},restore(r={}){let{after:e,cursor:t,initial:i,input:n,prompt:s,size:o,value:a}=r;if(i=nL.isPrimitive(i)?String(i):\"\",n=nL.isPrimitive(n)?String(n):\"\",a=nL.isPrimitive(a)?String(a):\"\",o){let l=fo.cursor.up(o)+fo.cursor.to(s.length),c=n.length-t;return c>0&&(l+=fo.cursor.left(c)),l}if(a||e){let l=!n&&!!i?-i.length:-n.length+t;return e&&(l-=e.length),n===\"\"&&i&&!s.includes(i)&&(l+=i.length),fo.cursor.move(l)}}},oL=fo.erase={screen:dl.screen,up:dl.up,down:dl.down,line:dl.line,lineEnd:dl.lineEnd,lineStart:dl.lineStart,lines(r){let e=\"\";for(let t=0;t<r;t++)e+=fo.erase.line+(t<r-1?fo.cursor.up(1):\"\");return r&&(e+=fo.code.beginning),e}};fo.clear=(r=\"\",e=process.stdout.columns)=>{if(!e)return oL.line+su.to(0);let t=s=>[...Eje.unstyle(s)].length,i=r.split(/\\r?\\n/),n=0;for(let s of i)n+=1+Math.floor(Math.max(t(s)-1,0)/e);return(oL.line+su.prevLine()).repeat(n-1)+oL.line+su.to(0)}});var Yh=w((kgt,wne)=>{\"use strict\";var Ije=J(\"events\"),yne=go(),aL=sne(),yje=ane(),wje=lne(),Bje=pne(),kn=ji(),ou=Ine(),Lm=class extends Ije{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,Bje(this),yje(this),this.state=new wje(this),this.initial=[e.initial,e.default].find(t=>t!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=Qje(this.options.margin),this.setMaxListeners(0),bje(this)}async keypress(e,t={}){this.keypressed=!0;let i=aL.action(e,aL(e,t),this.options.actions);this.state.keypress=i,this.emit(\"keypress\",e,i),this.emit(\"state\",this.state.clone());let n=this.options[i.action]||this[i.action]||this.dispatch;if(typeof n==\"function\")return await n.call(this,e,i);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit(\"alert\"):this.stdout.write(ou.code.beep)}cursorHide(){this.stdout.write(ou.cursor.hide()),kn.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(ou.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let t=this.state.buffer;this.state.buffer=\"\",!(!t&&!e||this.options.show===!1)&&this.stdout.write(ou.cursor.down(e)+ou.clear(t,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:t,rest:i}=this.sections(),{cursor:n,initial:s=\"\",input:o=\"\",value:a=\"\"}=this,l=this.state.size=i.length,c={after:t,cursor:n,initial:s,input:o,prompt:e,size:l,value:a},u=ou.cursor.restore(c);u&&this.stdout.write(u)}sections(){let{buffer:e,input:t,prompt:i}=this.state;i=yne.unstyle(i);let n=yne.unstyle(e),s=n.indexOf(i),o=n.slice(0,s),l=n.slice(s).split(`\n`),c=l[0],u=l[l.length-1],f=(i+(t?\" \"+t:\"\")).length,h=f<c.length?c.slice(f+1):\"\";return{header:o,prompt:c,after:h,rest:l.slice(1),last:u}}async submit(){this.state.submitted=!0,this.state.validating=!0,this.options.onSubmit&&await this.options.onSubmit.call(this,this.name,this.value,this);let e=this.state.error||await this.validate(this.value,this.state);if(e!==!0){let t=`\n`+this.symbols.pointer+\" \";typeof e==\"string\"?t+=e.trim():t+=\"Invalid input\",this.state.error=`\n`+this.styles.danger(t),this.state.submitted=!1,await this.render(),await this.alert(),this.state.validating=!1,this.state.error=void 0;return}this.state.validating=!1,await this.render(),await this.close(),this.value=await this.result(this.value),this.emit(\"submit\",this.value)}async cancel(e){this.state.cancelled=this.state.submitted=!0,await this.render(),await this.close(),typeof this.options.onCancel==\"function\"&&await this.options.onCancel.call(this,this.name,this.value,this),this.emit(\"cancel\",await this.error(e))}async close(){this.state.closed=!0;try{let e=this.sections(),t=Math.ceil(e.prompt.length/this.width);e.rest&&this.write(ou.cursor.down(e.rest.length)),this.write(`\n`.repeat(t))}catch{}this.emit(\"close\")}start(){!this.stop&&this.options.show!==!1&&(this.stop=aL.listen(this,this.keypress.bind(this)),this.once(\"close\",this.stop))}async skip(){return this.skipped=this.options.skip===!0,typeof this.options.skip==\"function\"&&(this.skipped=await this.options.skip.call(this,this.name,this.value)),this.skipped}async initialize(){let{format:e,options:t,result:i}=this;if(this.format=()=>e.call(this,this.value),this.result=()=>i.call(this,this.value),typeof t.initial==\"function\"&&(this.initial=await t.initial.call(this,this)),typeof t.onRun==\"function\"&&await t.onRun.call(this,this),typeof t.onSubmit==\"function\"){let n=t.onSubmit.bind(this),s=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await n(this.name,this.value,this),s())}await this.start(),await this.render()}render(){throw new Error(\"expected prompt to have a custom render method\")}run(){return new Promise(async(e,t)=>{if(this.once(\"submit\",e),this.once(\"cancel\",t),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit(\"run\")})}async element(e,t,i){let{options:n,state:s,symbols:o,timers:a}=this,l=a&&a[e];s.timer=l;let c=n[e]||s[e]||o[e],u=t&&t[e]!=null?t[e]:await c;if(u===\"\")return u;let g=await this.resolve(u,s,t,i);return!g&&t&&t[e]?this.resolve(c,s,t,i):g}async prefix(){let e=await this.element(\"prefix\")||this.symbols,t=this.timers&&this.timers.prefix,i=this.state;return i.timer=t,kn.isObject(e)&&(e=e[i.status]||e.pending),kn.hasColor(e)?e:(this.styles[i.status]||this.styles.pending)(e)}async message(){let e=await this.element(\"message\");return kn.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element(\"separator\")||this.symbols,t=this.timers&&this.timers.separator,i=this.state;i.timer=t;let n=e[i.status]||e.pending||i.separator,s=await this.resolve(n,i);return kn.isObject(s)&&(s=s[i.status]||s.pending),kn.hasColor(s)?s:this.styles.muted(s)}async pointer(e,t){let i=await this.element(\"pointer\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=this.index===t,o=s?n.primary:c=>c,a=await this.resolve(i[s?\"on\":\"off\"]||i,this.state),l=kn.hasColor(a)?a:o(a);return s?l:\" \".repeat(a.length)}}async indicator(e,t){let i=await this.element(\"indicator\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=e.enabled===!0,o=s?n.success:n.dark,a=i[s?\"on\":\"off\"]||i;return kn.hasColor(a)?a:o(a)}return\"\"}body(){return null}footer(){if(this.state.status===\"pending\")return this.element(\"footer\")}header(){if(this.state.status===\"pending\")return this.element(\"header\")}async hint(){if(this.state.status===\"pending\"&&!this.isValue(this.state.input)){let e=await this.element(\"hint\");return kn.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?\"\":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==\"\"}resolve(e,...t){return kn.resolve(this,e,...t)}get base(){return Lm.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||kn.height(this.stdout,25)}get width(){return this.options.columns||kn.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:t}=this.state,i=[t,e].find(this.isValue.bind(this));return this.isValue(i)?i:this.initial}static get prompt(){return e=>new this(e).run()}};function bje(r){let e=n=>r[n]===void 0||typeof r[n]==\"function\",t=[\"actions\",\"choices\",\"initial\",\"margin\",\"roles\",\"styles\",\"symbols\",\"theme\",\"timers\",\"value\"],i=[\"body\",\"footer\",\"error\",\"header\",\"hint\",\"indicator\",\"message\",\"prefix\",\"separator\",\"skip\"];for(let n of Object.keys(r.options)){if(t.includes(n)||/^on[A-Z]/.test(n))continue;let s=r.options[n];typeof s==\"function\"&&e(n)?i.includes(n)||(r[n]=s.bind(r)):typeof r[n]!=\"function\"&&(r[n]=s)}}function Qje(r){typeof r==\"number\"&&(r=[r,r,r,r]);let e=[].concat(r||[]),t=n=>n%2===0?`\n`:\" \",i=[];for(let n=0;n<4;n++){let s=t(n);e[n]?i.push(s.repeat(e[n])):i.push(\"\")}return i}wne.exports=Lm});var Qne=w((Rgt,bne)=>{\"use strict\";var Sje=ji(),Bne={default(r,e){return e},checkbox(r,e){throw new Error(\"checkbox role is not implemented yet\")},editable(r,e){throw new Error(\"editable role is not implemented yet\")},expandable(r,e){throw new Error(\"expandable role is not implemented yet\")},heading(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||\"\",e},input(r,e){throw new Error(\"input role is not implemented yet\")},option(r,e){return Bne.default(r,e)},radio(r,e){throw new Error(\"radio role is not implemented yet\")},separator(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||r.symbols.line.repeat(5),e},spacer(r,e){return e}};bne.exports=(r,e={})=>{let t=Sje.merge({},Bne,e.roles);return t[r]||t.default}});var Mm=w((Fgt,xne)=>{\"use strict\";var vje=go(),xje=Yh(),Pje=Qne(),Sb=ji(),{reorder:AL,scrollUp:Dje,scrollDown:kje,isObject:Sne,swap:Rje}=Sb,lL=class extends xje{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=\"\"}async initialize(){typeof this.options.initial==\"function\"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:t,autofocus:i,suggest:n}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(s=>s.enabled=!1),typeof n!=\"function\"&&this.selectable.length===0)throw new Error(\"At least one choice must be selectable\");Sne(t)&&(t=Object.keys(t)),Array.isArray(t)?(i!=null&&(this.index=this.findIndex(i)),t.forEach(s=>this.enable(this.find(s))),await this.render()):(i!=null&&(t=i),typeof t==\"string\"&&(t=this.findIndex(t)),typeof t==\"number\"&&t>-1&&(this.index=Math.max(0,Math.min(t,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,t){this.state.loadingChoices=!0;let i=[],n=0,s=async(o,a)=>{typeof o==\"function\"&&(o=await o.call(this)),o instanceof Promise&&(o=await o);for(let l=0;l<o.length;l++){let c=o[l]=await this.toChoice(o[l],n++,a);i.push(c),c.choices&&await s(c.choices,c)}return i};return s(e,t).then(o=>(this.state.loadingChoices=!1,o))}async toChoice(e,t,i){if(typeof e==\"function\"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e==\"string\"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value;if(e=Pje(e.role,this.options)(this,e),typeof e.disabled==\"string\"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint=\"(disabled)\"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||\"\",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input=\"\",e.index=t,e.cursor=0,Sb.define(e,\"parent\",i),e.level=i?i.level+1:1,e.indent==null&&(e.indent=i?i.indent+\"  \":e.indent||\"\"),e.path=i?i.path+\".\"+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,vje.unstyle(e.message).length));let o={...e};return e.reset=(a=o.input,l=o.value)=>{for(let c of Object.keys(o))e[c]=o[c];e.input=a,e.value=l},n==null&&typeof e.initial==\"function\"&&(e.input=await e.initial.call(this,this.state,e,t)),e}async onChoice(e,t){this.emit(\"choice\",e,t,this),typeof e.onChoice==\"function\"&&await e.onChoice.call(this,this.state,e,t)}async addChoice(e,t,i){let n=await this.toChoice(e,t,i);return this.choices.push(n),this.index=this.choices.length-1,this.limit=this.choices.length,n}async newItem(e,t,i){let n={name:\"New choice name?\",editable:!0,newChoice:!0,...e},s=await this.addChoice(n,t,i);return s.updateChoice=()=>{delete s.newChoice,s.name=s.message=s.input,s.input=\"\",s.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?\"  \".repeat(e.level-1):\"\":e.indent}dispatch(e,t){if(this.multiple&&this[t.name])return this[t.name]();this.alert()}focus(e,t){return typeof t!=\"boolean\"&&(t=e.enabled),t&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=t&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelected<this.choices.length)return this.alert();let e=this.selectable.every(t=>t.enabled);return this.choices.forEach(t=>t.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(t=>!!t.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,t){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof t!=\"boolean\"&&(t=!e.enabled),e.enabled=t,e.choices&&e.choices.forEach(n=>this.toggle(n,t));let i=e.parent;for(;i;){let n=i.choices.filter(s=>this.isDisabled(s));i.enabled=n.every(s=>s.enabled===!0),i=i.parent}return vne(this,this.choices),this.emit(\"toggle\",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let t=i=>{let n=Number(i);if(n>this.choices.length-1)return this.alert();let s=this.focused,o=this.choices.find(a=>n===a.index);if(!o.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(o)===-1){let a=AL(this.choices),l=a.indexOf(o);if(s.index>l){let c=a.slice(l,l+this.limit),u=a.filter(g=>!c.includes(g));this.choices=c.concat(u)}else{let c=l-this.limit+1;this.choices=a.slice(c).concat(a.slice(0,c))}}return this.index=this.choices.indexOf(o),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(i=>{let n=this.choices.length,s=this.num,o=(a=!1,l)=>{clearTimeout(this.numberTimeout),a&&(l=t(s)),this.num=\"\",i(l)};if(s===\"0\"||s.length===1&&Number(s+\"0\")>n)return o(!0);if(Number(s)>n)return o(!1,this.alert());this.numberTimeout=setTimeout(()=>o(!0),this.delay)})}home(){return this.choices=AL(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,t=AL(this.choices);return this.choices=t.slice(e).concat(t.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===0?this.alert():e>t&&i===0?this.scrollUp():(this.index=(i-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===t-1?this.alert():e>t&&i===t-1?this.scrollDown():(this.index=(i+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=Dje(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=kje(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Rje(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&[\"disabled\",\"collapsed\",\"hidden\",\"completing\",\"readonly\"].some(i=>e[i]===!0)?!0:e&&e.role===\"heading\"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(t=>this.isEnabled(t));if(e.choices){let t=e.choices.filter(i=>!this.isDisabled(i));return e.enabled&&t.every(i=>this.isEnabled(i))}return e.enabled&&!this.isDisabled(e)}isChoice(e,t){return e.name===t||e.index===Number(t)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(t=>this.isChoice(e,t)):this.isChoice(e,this.initial)}map(e=[],t=\"value\"){return[].concat(e||[]).reduce((i,n)=>(i[n]=this.find(n,t),i),{})}filter(e,t){let n=typeof e==\"function\"?e:(a,l)=>[a.name,l].includes(e),o=(this.options.multiple?this.state._choices:this.choices).filter(n);return t?o.map(a=>a[t]):o}find(e,t){if(Sne(e))return t?e[t]:e;let n=typeof e==\"function\"?e:(o,a)=>[o.name,a].includes(e),s=this.choices.find(n);if(s)return t?s[t]:s}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(o=>o.newChoice))return this.alert();let{reorder:t,sort:i}=this.options,n=this.multiple===!0,s=this.selected;return s===void 0?this.alert():(Array.isArray(s)&&t!==!1&&i!==!0&&(s=Sb.reorder(s)),this.value=n?s.map(o=>o.name):s.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let t of e)this.state._choices.some(i=>i.name===t.name)||this.state._choices.push(t);if(!this._initial&&this.options.initial){this._initial=!0;let t=this.initial;if(typeof t==\"string\"||typeof t==\"number\"){let i=this.find(t);i&&(this.initial=i.index,this.focus(i,!0))}}}get choices(){return vne(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:t,choices:i}=this,n=e.limit||this._limit||t.limit||i.length;return Math.min(n,this.height)}set value(e){super.value=e}get value(){return typeof super.value!=\"string\"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function vne(r,e){if(e instanceof Promise)return e;if(typeof e==\"function\"){if(Sb.isAsyncFn(e))return e;e=e.call(r,r)}for(let t of e){if(Array.isArray(t.choices)){let i=t.choices.filter(n=>!r.isDisabled(n));t.enabled=i.every(n=>n.enabled===!0)}r.isDisabled(t)===!0&&delete t.enabled}return e}xne.exports=lL});var Cl=w((Ngt,Pne)=>{\"use strict\";var Fje=Mm(),cL=ji(),uL=class extends Fje{constructor(e){super(e),this.emptyError=this.options.emptyError||\"No items were selected\"}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,t){return!this.multiple||this.options.pointer?super.pointer(e,t):\"\"}indicator(e,t){return this.multiple?super.indicator(e,t):\"\"}choiceMessage(e,t){let i=this.resolve(e.message,this.state,e,t);return e.role===\"heading\"&&!cL.hasColor(i)&&(i=this.styles.strong(i)),this.resolve(i,this.state,e,t)}choiceSeparator(){return\":\"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await this.indicator(e,t)+(e.pad||\"\"),o=await this.resolve(e.hint,this.state,e,t);o&&!cL.hasColor(o)&&(o=this.styles.muted(o));let a=this.indent(e),l=await this.choiceMessage(e,t),c=()=>[this.margin[3],a+n+s,l,this.margin[1],o].filter(Boolean).join(\" \");return e.role===\"heading\"?c():e.disabled?(cL.hasColor(l)||(l=this.styles.disabled(l)),c()):(i&&(l=this.styles.em(l)),c())}async renderChoices(){if(this.state.loading===\"choices\")return this.styles.warning(\"Loading choices\");if(this.state.submitted)return\"\";let e=this.visible.map(async(s,o)=>await this.renderChoice(s,o)),t=await Promise.all(e);t.length||t.push(this.styles.danger(\"No matching choices\"));let i=this.margin[0]+t.join(`\n`),n;return this.options.choicesHeader&&(n=await this.resolve(this.options.choicesHeader,this.state)),[n,i].filter(Boolean).join(`\n`)}format(){return!this.state.submitted||this.state.cancelled?\"\":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(\", \"):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:t}=this.state,i=\"\",n=await this.header(),s=await this.prefix(),o=await this.separator(),a=await this.message();this.options.promptLine!==!1&&(i=[s,a,o,\"\"].join(\" \"),this.state.prompt=i);let l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();l&&(i+=l),c&&!i.includes(c)&&(i+=\" \"+c),e&&!l&&!u.trim()&&this.multiple&&this.emptyError!=null&&(i+=this.styles.danger(this.emptyError)),this.clear(t),this.write([n,i,u,g].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Pne.exports=uL});var kne=w((Tgt,Dne)=>{\"use strict\";var Nje=Cl(),Tje=(r,e)=>{let t=r.toLowerCase();return i=>{let s=i.toLowerCase().indexOf(t),o=e(i.slice(s,s+t.length));return s>=0?i.slice(0,s)+o+i.slice(s+t.length):i}},gL=class extends Nje{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:t,input:i}=this.state;return this.input=i.slice(0,t)+e+i.slice(t),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:t}=this.state;return t?(this.input=t.slice(0,e-1)+t.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:t}=this.state;return t[e]===void 0?this.alert():(this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,t=this.state._choices){if(typeof this.options.suggest==\"function\")return this.options.suggest.call(this,e,t);let i=e.toLowerCase();return t.filter(n=>n.message.toLowerCase().includes(i))}pointer(){return\"\"}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(\", \");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!==\"pending\")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,t=Tje(this.input,e),i=this.choices;this.choices=i.map(n=>({...n,message:t(n.message)})),await super.render(),this.choices=i}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Dne.exports=gL});var hL=w((Lgt,Rne)=>{\"use strict\";var fL=ji();Rne.exports=(r,e={})=>{r.cursorHide();let{input:t=\"\",initial:i=\"\",pos:n,showCursor:s=!0,color:o}=e,a=o||r.styles.placeholder,l=fL.inverse(r.styles.primary),c=C=>l(r.styles.black(C)),u=t,g=\" \",f=c(g);if(r.blink&&r.blink.off===!0&&(c=C=>C,f=\"\"),s&&n===0&&i===\"\"&&t===\"\")return c(g);if(s&&n===0&&(t===i||t===\"\"))return c(i[0])+a(i.slice(1));i=fL.isPrimitive(i)?`${i}`:\"\",t=fL.isPrimitive(t)?`${t}`:\"\";let h=i&&i.startsWith(t)&&i!==t,p=h?c(i[t.length]):f;if(n!==t.length&&s===!0&&(u=t.slice(0,n)+c(t[n])+t.slice(n+1),p=\"\"),s===!1&&(p=\"\"),h){let C=r.styles.unstyle(u+p);return u+p+a(i.slice(C.length))}return u+p}});var vb=w((Mgt,Fne)=>{\"use strict\";var Lje=go(),Mje=Cl(),Oje=hL(),pL=class extends Mje{constructor(e){super({...e,multiple:!0}),this.type=\"form\",this.initial=this.options.initial,this.align=[this.options.align,\"right\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(t=>t.reset&&t.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let t=this.focused;if(!t)return this.alert();let{cursor:i,input:n}=t;return t.value=t.input=n.slice(0,i)+e+n.slice(i),t.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:t,input:i}=e;return e.value=e.input=i.slice(0,t-1)+i.slice(t),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:t,input:i}=e;if(i[t]===void 0)return this.alert();let n=`${i}`.slice(0,t)+`${i}`.slice(t+1);return e.value=e.input=n,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,t){return this.dispatch(e,t)}number(e,t){return this.dispatch(e,t)}next(){let e=this.focused;if(!e)return this.alert();let{initial:t,input:i}=e;return t&&t.startsWith(i)&&i!==t?(e.value=e.input=t,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input=\"\",e.cursor=0,this.render()):this.alert()}separator(){return\"\"}format(e){return this.state.submitted?\"\":super.format(e)}pointer(){return\"\"}indicator(e){return e.input?\"\\u29BF\":\"\\u2299\"}async choiceSeparator(e,t){let i=await this.resolve(e.separator,this.state,e,t)||\":\";return i?\" \"+this.styles.disabled(i):\"\"}async renderChoice(e,t){await this.onChoice(e,t);let{state:i,styles:n}=this,{cursor:s,initial:o=\"\",name:a,hint:l,input:c=\"\"}=e,{muted:u,submitted:g,primary:f,danger:h}=n,p=l,C=this.index===t,y=e.validate||(()=>!0),B=await this.choiceSeparator(e,t),v=e.message;this.align===\"right\"&&(v=v.padStart(this.longest+1,\" \")),this.align===\"left\"&&(v=v.padEnd(this.longest+1,\" \"));let D=this.values[a]=c||o,T=c?\"success\":\"dark\";await y.call(e,D,this.state)!==!0&&(T=\"danger\");let H=n[T],j=H(await this.indicator(e,t))+(e.pad||\"\"),$=this.indent(e),V=()=>[$,j,v+B,c,p].filter(Boolean).join(\" \");if(i.submitted)return v=Lje.unstyle(v),c=g(c),p=\"\",V();if(e.format)c=await e.format.call(this,c,e,t);else{let W=this.styles.muted;c=Oje(this,{input:c,initial:o,pos:s,showCursor:C,color:W})}return this.isValue(c)||(c=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,D,e,t)),C&&(v=f(v)),e.error?c+=(c?\" \":\"\")+h(e.error.trim()):e.hint&&(c+=(c?\" \":\"\")+u(e.hint.trim())),V()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Fne.exports=pL});var dL=w((Ogt,Tne)=>{\"use strict\";var Kje=vb(),Uje=()=>{throw new Error(\"expected prompt to have a custom authenticate method\")},Nne=(r=Uje)=>{class e extends Kje{constructor(i){super(i)}async submit(){this.value=await r.call(this,this.values,this.state),super.base.submit.call(this)}static create(i){return Nne(i)}}return e};Tne.exports=Nne()});var One=w((Kgt,Mne)=>{\"use strict\";var Hje=dL();function Gje(r,e){return r.username===this.options.username&&r.password===this.options.password}var Lne=(r=Gje)=>{let e=[{name:\"username\",message:\"username\"},{name:\"password\",message:\"password\",format(i){return this.options.showPassword?i:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(i.length))}}];class t extends Hje.create(r){constructor(n){super({...n,choices:e})}static create(n){return Lne(n)}}return t};Mne.exports=Lne()});var xb=w((Ugt,Kne)=>{\"use strict\";var Yje=Yh(),{isPrimitive:jje,hasColor:qje}=ji(),CL=class extends Yje{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:t,state:i}=this;return i.submitted?t.success(e):t.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return jje(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status===\"pending\"){let e=await this.element(\"hint\");return qje(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=this.styles.muted(this.default),a=[i,s,o,n].filter(Boolean).join(\" \");this.state.prompt=a;let l=await this.header(),c=this.value=this.cast(e),u=await this.format(c),g=await this.error()||await this.hint(),f=await this.footer();g&&!a.includes(g)&&(u+=\" \"+g),a+=\" \"+u,this.clear(t),this.write([l,a,f].filter(Boolean).join(`\n`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Kne.exports=CL});var Hne=w((Hgt,Une)=>{\"use strict\";var Jje=xb(),mL=class extends Jje{constructor(e){super(e),this.default=this.options.default||(this.initial?\"(Y/n)\":\"(y/N)\")}};Une.exports=mL});var Yne=w((Ggt,Gne)=>{\"use strict\";var Wje=Cl(),zje=vb(),jh=zje.prototype,EL=class extends Wje{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,\"left\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}dispatch(e,t){let i=this.focused,n=i.parent||{};return!i.editable&&!n.editable&&(e===\"a\"||e===\"i\")?super[e]():jh.dispatch.call(this,e,t)}append(e,t){return jh.append.call(this,e,t)}delete(e,t){return jh.delete.call(this,e,t)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?jh.next.call(this):super.next()}prev(){return this.focused.editable?jh.prev.call(this):super.prev()}async indicator(e,t){let i=e.indicator||\"\",n=e.editable?i:super.indicator(e,t);return await this.resolve(n,this.state,e,t)||\"\"}indent(e){return e.role===\"heading\"?\"\":e.editable?\" \":\"  \"}async renderChoice(e,t){return e.indent=\"\",e.editable?jh.renderChoice.call(this,e,t):super.renderChoice(e,t)}error(){return\"\"}footer(){return this.state.error}async validate(){let e=!0;for(let t of this.choices){if(typeof t.validate!=\"function\"||t.role===\"heading\")continue;let i=t.parent?this.value[t.parent.name]:this.value;if(t.editable?i=t.value===t.name?t.initial||\"\":t.value:this.isDisabled(t)||(i=t.enabled===!0),e=await t.validate(i,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e==\"string\"?e:\"Invalid Input\"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let t=e.parent?this.value[e.parent.name]:this.value;if(e.role===\"heading\"){this.value[e.name]={};continue}e.editable?t[e.name]=e.value===e.name?e.initial||\"\":e.value:this.isDisabled(e)||(t[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Gne.exports=EL});var au=w((Ygt,jne)=>{\"use strict\";var Vje=Yh(),Xje=hL(),{isPrimitive:Zje}=ji(),IL=class extends Vje{constructor(e){super(e),this.initial=Zje(this.initial)?String(this.initial):\"\",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,t={}){let i=this.state.prevKeypress;return this.state.prevKeypress=t,this.options.multiline===!0&&t.name===\"return\"&&(!i||i.name!==\"return\")?this.append(`\n`,t):super.keypress(e,t)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value=\"\",this.cursor=0,this.render()}dispatch(e,t){if(!e||t.ctrl||t.code)return this.alert();this.append(e)}append(e){let{cursor:t,input:i}=this.state;this.input=`${i}`.slice(0,t)+e+`${i}`.slice(t),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:t}=this.state;if(e<=0)return this.alert();this.input=`${t}`.slice(0,e-1)+`${t}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:t}=this.state;if(t[e]===void 0)return this.alert();this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let t=this.input.slice(0,e),i=this.input.slice(e),n=t.split(\" \");this.state.clipboard.push(n.pop()),this.input=n.join(\" \"),this.cursor=this.input.length,this.input+=i,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):\"\";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let t=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||t):Xje(this,{input:e,initial:t,pos:this.cursor})}async render(){let e=this.state.size,t=await this.prefix(),i=await this.separator(),n=await this.message(),s=[t,n,i].filter(Boolean).join(\" \");this.state.prompt=s;let o=await this.header(),a=await this.format(),l=await this.error()||await this.hint(),c=await this.footer();l&&!a.includes(l)&&(a+=\" \"+l),s+=\" \"+a,this.clear(e),this.write([o,s,c].filter(Boolean).join(`\n`)),this.restore()}};jne.exports=IL});var Jne=w((jgt,qne)=>{\"use strict\";var _je=r=>r.filter((e,t)=>r.lastIndexOf(e)===t),Pb=r=>_je(r).filter(Boolean);qne.exports=(r,e={},t=\"\")=>{let{past:i=[],present:n=\"\"}=e,s,o;switch(r){case\"prev\":case\"undo\":return s=i.slice(0,i.length-1),o=i[i.length-1]||\"\",{past:Pb([t,...s]),present:o};case\"next\":case\"redo\":return s=i.slice(1),o=i[0]||\"\",{past:Pb([...s,t]),present:o};case\"save\":return{past:Pb([...i,t]),present:\"\"};case\"remove\":return o=Pb(i.filter(a=>a!==t)),n=\"\",o.length&&(n=o.pop()),{past:o,present:n};default:throw new Error(`Invalid action: \"${r}\"`)}}});var wL=w((qgt,zne)=>{\"use strict\";var $je=au(),Wne=Jne(),yL=class extends $je{constructor(e){super(e);let t=this.options.history;if(t&&t.store){let i=t.values||this.initial;this.autosave=!!t.autosave,this.store=t.store,this.data=this.store.get(\"values\")||{past:[],present:i},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Wne(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion(\"prev\")}altDown(){return this.completion(\"next\")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Wne(\"save\",this.data,this.input),this.store.set(\"values\",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};zne.exports=yL});var Xne=w((Jgt,Vne)=>{\"use strict\";var eqe=au(),BL=class extends eqe{format(){return\"\"}};Vne.exports=BL});var _ne=w((Wgt,Zne)=>{\"use strict\";var tqe=au(),bL=class extends tqe{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||\"\"}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:t=>t;return this.list.map(e).join(\", \")}async submit(e){let t=this.state.error||await this.validate(this.list,this.state);return t!==!0?(this.state.error=t,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};Zne.exports=bL});var ese=w((zgt,$ne)=>{\"use strict\";var rqe=Cl(),QL=class extends rqe{constructor(e){super({...e,multiple:!0})}};$ne.exports=QL});var vL=w((Vgt,tse)=>{\"use strict\";var iqe=au(),SL=class extends iqe{constructor(e={}){super({style:\"number\",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:\"\",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e===\".\"&&this.input.includes(\".\")?this.alert(\"invalid number\"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let t=e||this.minor,i=this.toNumber(this.input);return i>this.max+t?this.alert():(this.input=`${i+t}`,this.render())}down(e){let t=e||this.minor,i=this.toNumber(this.input);return i<this.min-t?this.alert():(this.input=`${i-t}`,this.render())}shiftDown(){return this.down(this.major)}shiftUp(){return this.up(this.major)}format(e=this.input){return typeof this.options.format==\"function\"?this.options.format.call(this,e):this.styles.info(e)}toNumber(e=\"\"){return this.float?+e:Math.round(+e)}isValue(e){return/^[-+]?[0-9]+((\\.)|(\\.[0-9]+))?$/.test(e)}submit(){let e=[this.input,this.initial].find(t=>this.isValue(t));return this.value=this.toNumber(e||0),super.submit()}};tse.exports=SL});var ise=w((Xgt,rse)=>{rse.exports=vL()});var sse=w((Zgt,nse)=>{\"use strict\";var nqe=au(),xL=class extends nqe{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):\"\"}};nse.exports=xL});var Ase=w((_gt,ase)=>{\"use strict\";var sqe=go(),oqe=Mm(),ose=ji(),PL=class extends oqe{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||\"left\"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||`\n   `;let t=e.startNumber||1;typeof this.scale==\"number\"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((i,n)=>({name:n+t})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let t of this.choices){e=Math.max(e,t.message.length),t.scaleIndex=t.initial||2,t.scale=[];for(let i=0;i<this.scale.length;i++)t.scale.push({index:i})}this.widths[0]=Math.min(this.widths[0],e+3)}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}heading(e,t,i){return this.styles.strong(e)}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIndex>=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return\"\"}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.index)).join(\", \"):\"\"}pointer(){return\"\"}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?\"\":[\"\",...this.scale.map(i=>`   ${i.name} - ${i.message}`)].map(i=>this.styles.muted(i)).join(`\n`)}renderScaleHeading(e){let t=this.scale.map(l=>l.name);typeof this.options.renderScaleHeading==\"function\"&&(t=this.options.renderScaleHeading.call(this,e));let i=this.scaleLength-t.join(\"\").length,n=Math.round(i/(t.length-1)),o=t.map(l=>this.styles.strong(l)).join(\" \".repeat(n)),a=\" \".repeat(this.widths[0]);return this.margin[3]+a+this.margin[1]+o}scaleIndicator(e,t,i){if(typeof this.options.scaleIndicator==\"function\")return this.options.scaleIndicator.call(this,e,t,i);let n=e.scaleIndex===t.index;return t.disabled?this.styles.hint(this.symbols.radio.disabled):n?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,t){let i=e.scale.map(s=>this.scaleIndicator(e,s,t)),n=this.term===\"Hyper\"?\"\":\" \";return i.join(n+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await e.hint;s&&!ose.hasColor(s)&&(s=this.styles.muted(s));let o=p=>this.margin[3]+p.replace(/\\s+$/,\"\").padEnd(this.widths[0],\" \"),a=this.newline,l=this.indent(e),c=await this.resolve(e.message,this.state,e,t),u=await this.renderScale(e,t),g=this.margin[1]+this.margin[3];this.scaleLength=sqe.unstyle(u).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-g.length);let h=ose.wordWrap(c,{width:this.widths[0],newline:a}).split(`\n`).map(p=>o(p)+this.margin[1]);return i&&(u=this.styles.info(u),h=h.map(p=>this.styles.info(p))),h[0]+=u,this.linebreak&&h.push(\"\"),[l+n,h.join(`\n`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return\"\";this.tableize();let e=this.visible.map(async(n,s)=>await this.renderChoice(n,s)),t=await Promise.all(e),i=await this.renderScaleHeading();return this.margin[0]+[i,...t.map(n=>n.join(\" \"))].join(`\n`)}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=\"\";this.options.promptLine!==!1&&(o=[i,s,n,\"\"].join(\" \"),this.state.prompt=o);let a=await this.header(),l=await this.format(),c=await this.renderScaleKey(),u=await this.error()||await this.hint(),g=await this.renderChoices(),f=await this.footer(),h=this.emptyError;l&&(o+=l),u&&!o.includes(u)&&(o+=\" \"+u),e&&!l&&!g.trim()&&this.multiple&&h!=null&&(o+=this.styles.danger(h)),this.clear(t),this.write([a,o,c,g,f].filter(Boolean).join(`\n`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};ase.exports=PL});var use=w(($gt,cse)=>{\"use strict\";var lse=go(),aqe=(r=\"\")=>typeof r==\"string\"?r.replace(/^['\"]|['\"]$/g,\"\"):\"\",kL=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=aqe(e.initial||this.field.initial||\"\"),this.message=e.message||this.name,this.cursor=0,this.input=\"\",this.lines=[]}},Aqe=async(r={},e={},t=i=>i)=>{let i=new Set,n=r.fields||[],s=r.template,o=[],a=[],l=[],c=1;typeof s==\"function\"&&(s=await s());let u=-1,g=()=>s[++u],f=()=>s[u+1],h=p=>{p.line=c,o.push(p)};for(h({type:\"bos\",value:\"\"});u<s.length-1;){let p=g();if(/^[^\\S\\n ]$/.test(p)){h({type:\"text\",value:p});continue}if(p===`\n`){h({type:\"newline\",value:p}),c++;continue}if(p===\"\\\\\"){p+=g(),h({type:\"text\",value:p});continue}if((p===\"$\"||p===\"#\"||p===\"{\")&&f()===\"{\"){let y=g();p+=y;let B={type:\"template\",open:p,inner:\"\",close:\"\",value:p},v;for(;v=g();){if(v===\"}\"){f()===\"}\"&&(v+=g()),B.value+=v,B.close=v;break}v===\":\"?(B.initial=\"\",B.key=B.inner):B.initial!==void 0&&(B.initial+=v),B.value+=v,B.inner+=v}B.template=B.open+(B.initial||B.inner)+B.close,B.key=B.key||B.inner,e.hasOwnProperty(B.key)&&(B.initial=e[B.key]),B=t(B),h(B),l.push(B.key),i.add(B.key);let D=a.find(T=>T.name===B.key);B.field=n.find(T=>T.name===B.key),D||(D=new kL(B),a.push(D)),D.lines.push(B.line-1);continue}let C=o[o.length-1];C.type===\"text\"&&C.line===c?C.value+=p:h({type:\"text\",value:p})}return h({type:\"eos\",value:\"\"}),{input:s,tabstops:o,unique:i,keys:l,items:a}};cse.exports=async r=>{let e=r.options,t=new Set(e.required===!0?[]:e.required||[]),i={...e.values,...e.initial},{tabstops:n,items:s,keys:o}=await Aqe(e,i),a=DL(\"result\",r,e),l=DL(\"format\",r,e),c=DL(\"validate\",r,e,!0),u=r.isValue.bind(r);return async(g={},f=!1)=>{let h=0;g.required=t,g.items=s,g.keys=o,g.output=\"\";let p=async(v,D,T,H)=>{let j=await c(v,D,T,H);return j===!1?\"Invalid field \"+T.name:j};for(let v of n){let D=v.value,T=v.key;if(v.type!==\"template\"){D&&(g.output+=D);continue}if(v.type===\"template\"){let H=s.find(_=>_.name===T);e.required===!0&&g.required.add(H.name);let j=[H.input,g.values[H.value],H.value,D].find(u),V=(H.field||{}).message||v.inner;if(f){let _=await p(g.values[T],g,H,h);if(_&&typeof _==\"string\"||_===!1){g.invalid.set(T,_);continue}g.invalid.delete(T);let A=await a(g.values[T],g,H,h);g.output+=lse.unstyle(A);continue}H.placeholder=!1;let W=D;D=await l(D,g,H,h),j!==D?(g.values[T]=j,D=r.styles.typing(j),g.missing.delete(V)):(g.values[T]=void 0,j=`<${V}>`,D=r.styles.primary(j),H.placeholder=!0,g.required.has(T)&&g.missing.add(V)),g.missing.has(V)&&g.validating&&(D=r.styles.warning(j)),g.invalid.has(T)&&g.validating&&(D=r.styles.danger(j)),h===g.index&&(W!==D?D=r.styles.underline(D):D=r.styles.heading(lse.unstyle(D))),h++}D&&(g.output+=D)}let C=g.output.split(`\n`).map(v=>\" \"+v),y=s.length,B=0;for(let v of s)g.invalid.has(v.name)&&v.lines.forEach(D=>{C[D][0]===\" \"&&(C[D]=g.styles.danger(g.symbols.bullet)+C[D].slice(1))}),r.isValue(g.values[v.name])&&B++;return g.completed=(B/y*100).toFixed(0),g.output=C.join(`\n`),g.output}};function DL(r,e,t,i){return(n,s,o,a)=>typeof o.field[r]==\"function\"?o.field[r].call(e,n,s,o,a):[i,n].find(l=>e.isValue(l))}});var fse=w((eft,gse)=>{\"use strict\";var lqe=go(),cqe=use(),uqe=Yh(),RL=class extends uqe{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await cqe(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let t=this.getItem();this.cursor+=e,t.cursor+=e}dispatch(e,t){if(!t.code&&!t.ctrl&&e!=null&&this.getItem()){this.append(e,t);return}this.alert()}append(e,t){let i=this.getItem(),n=i.input.slice(0,this.cursor),s=i.input.slice(this.cursor);this.input=i.input=`${n}${e}${s}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let t=e.input.slice(this.cursor),i=e.input.slice(0,this.cursor-1);this.input=e.input=`${i}${t}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let t=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(t=this.styles.danger),t(`${this.state.completed}% completed`)}async render(){let{index:e,keys:t=[],submitted:i,size:n}=this.state,s=[this.options.newline,`\n`].find(v=>v!=null),o=await this.prefix(),a=await this.separator(),l=await this.message(),c=[o,l,a].filter(Boolean).join(\" \");this.state.prompt=c;let u=await this.header(),g=await this.error()||\"\",f=await this.hint()||\"\",h=i?\"\":await this.interpolate(this.state),p=this.state.key=t[e]||\"\",C=await this.format(p),y=await this.footer();C&&(c+=\" \"+C),f&&!C&&this.state.completed===0&&(c+=\" \"+f),this.clear(n);let B=[u,c,h,y,g.trim()];this.write(B.filter(Boolean).join(s)),this.restore()}getItem(e){let{items:t,keys:i,index:n}=this.state,s=t.find(o=>o.name===i[n]);return s&&s.input!=null&&(this.input=s.input,this.cursor=s.cursor),s}async submit(){typeof this.interpolate!=\"function\"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:t,output:i,values:n}=this.state;if(e.size){let a=\"\";for(let[l,c]of e)a+=`Invalid ${l}: ${c}\n`;return this.state.error=a,super.submit()}if(t.size)return this.state.error=\"Required: \"+[...t.keys()].join(\", \"),super.submit();let o=lqe.unstyle(i).split(`\n`).map(a=>a.slice(1)).join(`\n`);return this.value={values:n,result:o},super.submit()}};gse.exports=RL});var pse=w((tft,hse)=>{\"use strict\";var gqe=\"(Use <shift>+<up/down> to sort)\",fqe=Cl(),FL=class extends fqe{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,gqe].find(this.isValue.bind(this))}indicator(){return\"\"}async renderChoice(e,t){let i=await super.renderChoice(e,t),n=this.symbols.identicalTo+\" \",s=this.index===t&&this.sorting?this.styles.muted(n):\"  \";return this.options.drag===!1&&(s=\"\"),this.options.numbered===!0?s+`${t+1} - `+i:s+i}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};hse.exports=FL});var Cse=w((rft,dse)=>{\"use strict\";var hqe=Mm(),NL=class extends hqe{constructor(e={}){if(super(e),this.emptyError=e.emptyError||\"No items were selected\",this.term=process.env.TERM_PROGRAM,!this.options.header){let t=[\"\",\"4 - Strongly Agree\",\"3 - Agree\",\"2 - Neutral\",\"1 - Disagree\",\"0 - Strongly Disagree\",\"\"];t=t.map(i=>this.styles.muted(i)),this.state.header=t.join(`\n   `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let t=await super.toChoices(...e);for(let i of t)i.scale=pqe(5,this.options),i.scaleIdx=2;return t}dispatch(){this.alert()}space(){let e=this.focused,t=e.scale[e.scaleIdx],i=t.selected;return e.scale.forEach(n=>n.selected=!1),t.selected=!i,this.render()}indicator(){return\"\"}pointer(){return\"\"}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return\"   \"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=this.term===\"Hyper\",s=n?9:8,o=n?\"\":\" \",a=this.symbols.line.repeat(s),l=\" \".repeat(s+(n?0:1)),c=D=>(D?this.styles.success(\"\\u25C9\"):\"\\u25EF\")+o,u=t+1+\".\",g=i?this.styles.heading:this.styles.noop,f=await this.resolve(e.message,this.state,e,t),h=this.indent(e),p=h+e.scale.map((D,T)=>c(T===e.scaleIdx)).join(a),C=D=>D===e.scaleIdx?g(D):D,y=h+e.scale.map((D,T)=>C(T)).join(l),B=()=>[u,f].filter(Boolean).join(\" \"),v=()=>[B(),p,y,\" \"].filter(Boolean).join(`\n`);return i&&(p=this.styles.cyan(p),y=this.styles.cyan(y)),v()}async renderChoices(){if(this.state.submitted)return\"\";let e=this.visible.map(async(i,n)=>await this.renderChoice(i,n)),t=await Promise.all(e);return t.length||t.push(this.styles.danger(\"No matching choices\")),t.join(`\n`)}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.scaleIdx)).join(\", \"):\"\"}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=[i,s,n].filter(Boolean).join(\" \");this.state.prompt=o;let a=await this.header(),l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();(l||!c)&&(o+=\" \"+l),c&&!o.includes(c)&&(o+=\" \"+c),e&&!l&&!u&&this.multiple&&this.type!==\"form\"&&(o+=this.styles.danger(this.emptyError)),this.clear(t),this.write([o,a,u,g].filter(Boolean).join(`\n`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function pqe(r,e={}){if(Array.isArray(e.scale))return e.scale.map(i=>({...i}));let t=[];for(let i=1;i<r+1;i++)t.push({i,selected:!1});return t}dse.exports=NL});var Ese=w((ift,mse)=>{mse.exports=wL()});var yse=w((nft,Ise)=>{\"use strict\";var dqe=xb(),TL=class extends dqe{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||\"no\",this.enabled=this.options.enabled||\"yes\",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e=\"\",t){switch(e.toLowerCase()){case\" \":return this.toggle();case\"1\":case\"y\":case\"t\":return this.enable();case\"0\":case\"n\":case\"f\":return this.disable();default:return this.alert()}}format(){let e=i=>this.styles.primary.underline(i);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(\" / \"))}async render(){let{size:e}=this.state,t=await this.header(),i=await this.prefix(),n=await this.separator(),s=await this.message(),o=await this.format(),a=await this.error()||await this.hint(),l=await this.footer(),c=[i,s,n,o].join(\" \");this.state.prompt=c,a&&!c.includes(a)&&(c+=\" \"+a),this.clear(e),this.write([t,c,l].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Ise.exports=TL});var Bse=w((sft,wse)=>{\"use strict\";var Cqe=Cl(),LL=class extends Cqe{constructor(e){if(super(e),typeof this.options.correctChoice!=\"number\"||this.options.correctChoice<0)throw new Error(\"Please specify the index of the correct answer from the list of choices\")}async toChoices(e,t){let i=await super.toChoices(e,t);if(i.length<2)throw new Error(\"Please give at least two choices to the user\");if(this.options.correctChoice>i.length)throw new Error(\"Please specify the index of the correct answer from the list of choices\");return i}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};wse.exports=LL});var Qse=w(ML=>{\"use strict\";var bse=ji(),ui=(r,e)=>{bse.defineExport(ML,r,e),bse.defineExport(ML,r.toLowerCase(),e)};ui(\"AutoComplete\",()=>kne());ui(\"BasicAuth\",()=>One());ui(\"Confirm\",()=>Hne());ui(\"Editable\",()=>Yne());ui(\"Form\",()=>vb());ui(\"Input\",()=>wL());ui(\"Invisible\",()=>Xne());ui(\"List\",()=>_ne());ui(\"MultiSelect\",()=>ese());ui(\"Numeral\",()=>ise());ui(\"Password\",()=>sse());ui(\"Scale\",()=>Ase());ui(\"Select\",()=>Cl());ui(\"Snippet\",()=>fse());ui(\"Sort\",()=>pse());ui(\"Survey\",()=>Cse());ui(\"Text\",()=>Ese());ui(\"Toggle\",()=>yse());ui(\"Quiz\",()=>Bse())});var vse=w((aft,Sse)=>{Sse.exports={ArrayPrompt:Mm(),AuthPrompt:dL(),BooleanPrompt:xb(),NumberPrompt:vL(),StringPrompt:au()}});var Km=w((Aft,Pse)=>{\"use strict\";var xse=J(\"assert\"),KL=J(\"events\"),ml=ji(),ho=class extends KL{constructor(e,t){super(),this.options=ml.merge({},e),this.answers={...t}}register(e,t){if(ml.isObject(e)){for(let n of Object.keys(e))this.register(n,e[n]);return this}xse.equal(typeof t,\"function\",\"expected a function\");let i=e.toLowerCase();return t.prototype instanceof this.Prompt?this.prompts[i]=t:this.prompts[i]=t(this.Prompt,this),this}async prompt(e=[]){for(let t of[].concat(e))try{typeof t==\"function\"&&(t=await t.call(this)),await this.ask(ml.merge({},this.options,t))}catch(i){return Promise.reject(i)}return this.answers}async ask(e){typeof e==\"function\"&&(e=await e.call(this));let t=ml.merge({},this.options,e),{type:i,name:n}=e,{set:s,get:o}=ml;if(typeof i==\"function\"&&(i=await i.call(this,e,this.answers)),!i)return this.answers[n];xse(this.prompts[i],`Prompt \"${i}\" is not registered`);let a=new this.prompts[i](t),l=o(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on(\"submit\",u=>{this.emit(\"answer\",n,u,a),s(this.answers,n,u)});let c=a.emit.bind(a);return a.emit=(...u)=>(this.emit.call(this,...u),c(...u)),this.emit(\"prompt\",a,this),t.autofill&&l!=null?(a.value=a.input=l,t.autofill===\"show\"&&await a.submit()):l=a.value=await a.run(),l}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||Yh()}static get prompts(){return Qse()}static get types(){return vse()}static get prompt(){let e=(t,...i)=>{let n=new this(...i),s=n.emit.bind(n);return n.emit=(...o)=>(e.emit(...o),s(...o)),n.prompt(t)};return ml.mixinEmitter(e,new KL),e}};ml.mixinEmitter(ho,new KL);var OL=ho.prompts;for(let r of Object.keys(OL)){let e=r.toLowerCase(),t=i=>new OL[r](i).run();ho.prompt[e]=t,ho[e]=t,ho[r]||Reflect.defineProperty(ho,r,{get:()=>OL[r]})}var Om=r=>{ml.defineExport(ho,r,()=>ho.types[r])};Om(\"ArrayPrompt\");Om(\"AuthPrompt\");Om(\"BooleanPrompt\");Om(\"NumberPrompt\");Om(\"StringPrompt\");Pse.exports=ho});var Kse=w((Vft,Ose)=>{function wqe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i&&e(r[t],t,r)!==!1;);return r}Ose.exports=wqe});var Jh=w((Xft,Use)=>{var Bqe=Y0(),bqe=bh();function Qqe(r,e,t,i){var n=!t;t||(t={});for(var s=-1,o=e.length;++s<o;){var a=e[s],l=i?i(t[a],r[a],a,t,r):void 0;l===void 0&&(l=r[a]),n?bqe(t,a,l):Bqe(t,a,l)}return t}Use.exports=Qqe});var Gse=w((Zft,Hse)=>{var Sqe=Jh(),vqe=Rh();function xqe(r,e){return r&&Sqe(e,vqe(e),r)}Hse.exports=xqe});var jse=w((_ft,Yse)=>{function Pqe(r){var e=[];if(r!=null)for(var t in Object(r))e.push(t);return e}Yse.exports=Pqe});var Jse=w(($ft,qse)=>{var Dqe=vn(),kqe=ab(),Rqe=jse(),Fqe=Object.prototype,Nqe=Fqe.hasOwnProperty;function Tqe(r){if(!Dqe(r))return Rqe(r);var e=kqe(r),t=[];for(var i in r)i==\"constructor\"&&(e||!Nqe.call(r,i))||t.push(i);return t}qse.exports=Tqe});var Wh=w((eht,Wse)=>{var Lqe=lT(),Mqe=Jse(),Oqe=gm();function Kqe(r){return Oqe(r)?Lqe(r,!0):Mqe(r)}Wse.exports=Kqe});var Vse=w((tht,zse)=>{var Uqe=Jh(),Hqe=Wh();function Gqe(r,e){return r&&Uqe(e,Hqe(e),r)}zse.exports=Gqe});var qL=w((Ym,zh)=>{var Yqe=ys(),$se=typeof Ym==\"object\"&&Ym&&!Ym.nodeType&&Ym,Xse=$se&&typeof zh==\"object\"&&zh&&!zh.nodeType&&zh,jqe=Xse&&Xse.exports===$se,Zse=jqe?Yqe.Buffer:void 0,_se=Zse?Zse.allocUnsafe:void 0;function qqe(r,e){if(e)return r.slice();var t=r.length,i=_se?_se(t):new r.constructor(t);return r.copy(i),i}zh.exports=qqe});var JL=w((rht,eoe)=>{function Jqe(r,e){var t=-1,i=r.length;for(e||(e=Array(i));++t<i;)e[t]=r[t];return e}eoe.exports=Jqe});var roe=w((iht,toe)=>{var Wqe=Jh(),zqe=lb();function Vqe(r,e){return Wqe(r,zqe(r),e)}toe.exports=Vqe});var kb=w((nht,ioe)=>{var Xqe=cT(),Zqe=Xqe(Object.getPrototypeOf,Object);ioe.exports=Zqe});var WL=w((sht,noe)=>{var _qe=q0(),$qe=kb(),eJe=lb(),tJe=dT(),rJe=Object.getOwnPropertySymbols,iJe=rJe?function(r){for(var e=[];r;)_qe(e,eJe(r)),r=$qe(r);return e}:tJe;noe.exports=iJe});var ooe=w((oht,soe)=>{var nJe=Jh(),sJe=WL();function oJe(r,e){return nJe(r,sJe(r),e)}soe.exports=oJe});var Aoe=w((aht,aoe)=>{var aJe=pT(),AJe=WL(),lJe=Wh();function cJe(r){return aJe(r,lJe,AJe)}aoe.exports=cJe});var coe=w((Aht,loe)=>{var uJe=Object.prototype,gJe=uJe.hasOwnProperty;function fJe(r){var e=r.length,t=new r.constructor(e);return e&&typeof r[0]==\"string\"&&gJe.call(r,\"index\")&&(t.index=r.index,t.input=r.input),t}loe.exports=fJe});var Rb=w((lht,goe)=>{var uoe=fT();function hJe(r){var e=new r.constructor(r.byteLength);return new uoe(e).set(new uoe(r)),e}goe.exports=hJe});var hoe=w((cht,foe)=>{var pJe=Rb();function dJe(r,e){var t=e?pJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.byteLength)}foe.exports=dJe});var doe=w((uht,poe)=>{var CJe=/\\w*$/;function mJe(r){var e=new r.constructor(r.source,CJe.exec(r));return e.lastIndex=r.lastIndex,e}poe.exports=mJe});var yoe=w((ght,Ioe)=>{var Coe=Rc(),moe=Coe?Coe.prototype:void 0,Eoe=moe?moe.valueOf:void 0;function EJe(r){return Eoe?Object(Eoe.call(r)):{}}Ioe.exports=EJe});var zL=w((fht,woe)=>{var IJe=Rb();function yJe(r,e){var t=e?IJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.length)}woe.exports=yJe});var boe=w((hht,Boe)=>{var wJe=Rb(),BJe=hoe(),bJe=doe(),QJe=yoe(),SJe=zL(),vJe=\"[object Boolean]\",xJe=\"[object Date]\",PJe=\"[object Map]\",DJe=\"[object Number]\",kJe=\"[object RegExp]\",RJe=\"[object Set]\",FJe=\"[object String]\",NJe=\"[object Symbol]\",TJe=\"[object ArrayBuffer]\",LJe=\"[object DataView]\",MJe=\"[object Float32Array]\",OJe=\"[object Float64Array]\",KJe=\"[object Int8Array]\",UJe=\"[object Int16Array]\",HJe=\"[object Int32Array]\",GJe=\"[object Uint8Array]\",YJe=\"[object Uint8ClampedArray]\",jJe=\"[object Uint16Array]\",qJe=\"[object Uint32Array]\";function JJe(r,e,t){var i=r.constructor;switch(e){case TJe:return wJe(r);case vJe:case xJe:return new i(+r);case LJe:return BJe(r,t);case MJe:case OJe:case KJe:case UJe:case HJe:case GJe:case YJe:case jJe:case qJe:return SJe(r,t);case PJe:return new i;case DJe:case FJe:return new i(r);case kJe:return bJe(r);case RJe:return new i;case NJe:return QJe(r)}}Boe.exports=JJe});var voe=w((pht,Soe)=>{var WJe=vn(),Qoe=Object.create,zJe=function(){function r(){}return function(e){if(!WJe(e))return{};if(Qoe)return Qoe(e);r.prototype=e;var t=new r;return r.prototype=void 0,t}}();Soe.exports=zJe});var VL=w((dht,xoe)=>{var VJe=voe(),XJe=kb(),ZJe=ab();function _Je(r){return typeof r.constructor==\"function\"&&!ZJe(r)?VJe(XJe(r)):{}}xoe.exports=_Je});var Doe=w((Cht,Poe)=>{var $Je=hm(),eWe=Wo(),tWe=\"[object Map]\";function rWe(r){return eWe(r)&&$Je(r)==tWe}Poe.exports=rWe});var Noe=w((mht,Foe)=>{var iWe=Doe(),nWe=nb(),koe=sb(),Roe=koe&&koe.isMap,sWe=Roe?nWe(Roe):iWe;Foe.exports=sWe});var Loe=w((Eht,Toe)=>{var oWe=hm(),aWe=Wo(),AWe=\"[object Set]\";function lWe(r){return aWe(r)&&oWe(r)==AWe}Toe.exports=lWe});var Uoe=w((Iht,Koe)=>{var cWe=Loe(),uWe=nb(),Moe=sb(),Ooe=Moe&&Moe.isSet,gWe=Ooe?uWe(Ooe):cWe;Koe.exports=gWe});var qoe=w((yht,joe)=>{var fWe=fm(),hWe=Kse(),pWe=Y0(),dWe=Gse(),CWe=Vse(),mWe=qL(),EWe=JL(),IWe=roe(),yWe=ooe(),wWe=CT(),BWe=Aoe(),bWe=hm(),QWe=coe(),SWe=boe(),vWe=VL(),xWe=vs(),PWe=lm(),DWe=Noe(),kWe=vn(),RWe=Uoe(),FWe=Rh(),NWe=Wh(),TWe=1,LWe=2,MWe=4,Hoe=\"[object Arguments]\",OWe=\"[object Array]\",KWe=\"[object Boolean]\",UWe=\"[object Date]\",HWe=\"[object Error]\",Goe=\"[object Function]\",GWe=\"[object GeneratorFunction]\",YWe=\"[object Map]\",jWe=\"[object Number]\",Yoe=\"[object Object]\",qWe=\"[object RegExp]\",JWe=\"[object Set]\",WWe=\"[object String]\",zWe=\"[object Symbol]\",VWe=\"[object WeakMap]\",XWe=\"[object ArrayBuffer]\",ZWe=\"[object DataView]\",_We=\"[object Float32Array]\",$We=\"[object Float64Array]\",e3e=\"[object Int8Array]\",t3e=\"[object Int16Array]\",r3e=\"[object Int32Array]\",i3e=\"[object Uint8Array]\",n3e=\"[object Uint8ClampedArray]\",s3e=\"[object Uint16Array]\",o3e=\"[object Uint32Array]\",ur={};ur[Hoe]=ur[OWe]=ur[XWe]=ur[ZWe]=ur[KWe]=ur[UWe]=ur[_We]=ur[$We]=ur[e3e]=ur[t3e]=ur[r3e]=ur[YWe]=ur[jWe]=ur[Yoe]=ur[qWe]=ur[JWe]=ur[WWe]=ur[zWe]=ur[i3e]=ur[n3e]=ur[s3e]=ur[o3e]=!0;ur[HWe]=ur[Goe]=ur[VWe]=!1;function Fb(r,e,t,i,n,s){var o,a=e&TWe,l=e&LWe,c=e&MWe;if(t&&(o=n?t(r,i,n,s):t(r)),o!==void 0)return o;if(!kWe(r))return r;var u=xWe(r);if(u){if(o=QWe(r),!a)return EWe(r,o)}else{var g=bWe(r),f=g==Goe||g==GWe;if(PWe(r))return mWe(r,a);if(g==Yoe||g==Hoe||f&&!n){if(o=l||f?{}:vWe(r),!a)return l?yWe(r,CWe(o,r)):IWe(r,dWe(o,r))}else{if(!ur[g])return n?r:{};o=SWe(r,g,a)}}s||(s=new fWe);var h=s.get(r);if(h)return h;s.set(r,o),RWe(r)?r.forEach(function(y){o.add(Fb(y,e,t,y,r,s))}):DWe(r)&&r.forEach(function(y,B){o.set(B,Fb(y,e,t,B,r,s))});var p=c?l?BWe:wWe:l?NWe:FWe,C=u?void 0:p(r);return hWe(C||r,function(y,B){C&&(B=y,y=r[B]),pWe(o,B,Fb(y,e,t,B,r,s))}),o}joe.exports=Fb});var XL=w((wht,Joe)=>{var a3e=qoe(),A3e=1,l3e=4;function c3e(r){return a3e(r,A3e|l3e)}Joe.exports=c3e});var zoe=w((Bht,Woe)=>{var u3e=HN();function g3e(r,e,t){return r==null?r:u3e(r,e,t)}Woe.exports=g3e});var $oe=w((Pht,_oe)=>{function f3e(r){var e=r==null?0:r.length;return e?r[e-1]:void 0}_oe.exports=f3e});var tae=w((Dht,eae)=>{var h3e=rm(),p3e=HR();function d3e(r,e){return e.length<2?r:h3e(r,p3e(e,0,-1))}eae.exports=d3e});var iae=w((kht,rae)=>{var C3e=Bh(),m3e=$oe(),E3e=tae(),I3e=Zc();function y3e(r,e){return e=C3e(e,r),r=E3e(r,e),r==null||delete r[I3e(m3e(e))]}rae.exports=y3e});var sae=w((Rht,nae)=>{var w3e=iae();function B3e(r,e){return r==null?!0:w3e(r,e)}nae.exports=B3e});var cae=w((opt,S3e)=>{S3e.exports={name:\"@yarnpkg/cli\",version:\"3.6.3\",license:\"BSD-2-Clause\",main:\"./sources/index.ts\",dependencies:{\"@yarnpkg/core\":\"workspace:^\",\"@yarnpkg/fslib\":\"workspace:^\",\"@yarnpkg/libzip\":\"workspace:^\",\"@yarnpkg/parsers\":\"workspace:^\",\"@yarnpkg/plugin-compat\":\"workspace:^\",\"@yarnpkg/plugin-dlx\":\"workspace:^\",\"@yarnpkg/plugin-essentials\":\"workspace:^\",\"@yarnpkg/plugin-file\":\"workspace:^\",\"@yarnpkg/plugin-git\":\"workspace:^\",\"@yarnpkg/plugin-github\":\"workspace:^\",\"@yarnpkg/plugin-http\":\"workspace:^\",\"@yarnpkg/plugin-init\":\"workspace:^\",\"@yarnpkg/plugin-link\":\"workspace:^\",\"@yarnpkg/plugin-nm\":\"workspace:^\",\"@yarnpkg/plugin-npm\":\"workspace:^\",\"@yarnpkg/plugin-npm-cli\":\"workspace:^\",\"@yarnpkg/plugin-pack\":\"workspace:^\",\"@yarnpkg/plugin-patch\":\"workspace:^\",\"@yarnpkg/plugin-pnp\":\"workspace:^\",\"@yarnpkg/plugin-pnpm\":\"workspace:^\",\"@yarnpkg/shell\":\"workspace:^\",chalk:\"^3.0.0\",\"ci-info\":\"^3.2.0\",clipanion:\"3.2.0-rc.4\",semver:\"^7.1.2\",tslib:\"^1.13.0\",typanion:\"^3.3.0\",yup:\"^0.32.9\"},devDependencies:{\"@types/semver\":\"^7.1.0\",\"@types/yup\":\"^0\",\"@yarnpkg/builder\":\"workspace:^\",\"@yarnpkg/monorepo\":\"workspace:^\",\"@yarnpkg/pnpify\":\"workspace:^\",micromatch:\"^4.0.2\"},peerDependencies:{\"@yarnpkg/core\":\"workspace:^\"},scripts:{postpack:\"rm -rf lib\",prepack:'run build:compile \"$(pwd)\"',\"build:cli+hook\":\"run build:pnp:hook && builder build bundle\",\"build:cli\":\"builder build bundle\",\"run:cli\":\"builder run\",\"update-local\":\"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/\"},publishConfig:{main:\"./lib/index.js\",types:\"./lib/index.d.ts\",bin:null},files:[\"/lib/**/*\",\"!/lib/pluginConfiguration.*\",\"!/lib/cli.*\"],\"@yarnpkg/builder\":{bundles:{standard:[\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"]}},repository:{type:\"git\",url:\"ssh://git@github.com/yarnpkg/berry.git\",directory:\"packages/yarnpkg-cli\"},engines:{node:\">=12 <14 || 14.2 - 14.9 || >14.10.0\"}}});var oM=w((kmt,bae)=>{\"use strict\";bae.exports=function(e,t){t===!0&&(t=0);var i=\"\";if(typeof e==\"string\")try{i=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(i=e.protocol);var n=i.split(/\\:|\\+/).filter(Boolean);return typeof t==\"number\"?n[t]:n}});var Sae=w((Rmt,Qae)=>{\"use strict\";var q3e=oM();function J3e(r){var e={protocols:[],protocol:null,port:null,resource:\"\",host:\"\",user:\"\",password:\"\",pathname:\"\",hash:\"\",search:\"\",href:r,query:{},parse_failed:!1};try{var t=new URL(r);e.protocols=q3e(t),e.protocol=e.protocols[0],e.port=t.port,e.resource=t.hostname,e.host=t.host,e.user=t.username||\"\",e.password=t.password||\"\",e.pathname=t.pathname,e.hash=t.hash.slice(1),e.search=t.search.slice(1),e.href=t.href,e.query=Object.fromEntries(t.searchParams)}catch{e.protocols=[\"file\"],e.protocol=e.protocols[0],e.port=\"\",e.resource=\"\",e.user=\"\",e.pathname=\"\",e.hash=\"\",e.search=\"\",e.href=r,e.query={},e.parse_failed=!0}return e}Qae.exports=J3e});var Pae=w((Fmt,xae)=>{\"use strict\";var W3e=Sae();function z3e(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var V3e=z3e(W3e),X3e=\"text/plain\",Z3e=\"us-ascii\",vae=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),_3e=(r,{stripHash:e})=>{let t=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(r);if(!t)throw new Error(`Invalid URL: ${r}`);let{type:i,data:n,hash:s}=t.groups,o=i.split(\";\");s=e?\"\":s;let a=!1;o[o.length-1]===\"base64\"&&(o.pop(),a=!0);let l=(o.shift()||\"\").toLowerCase(),u=[...o.map(g=>{let[f,h=\"\"]=g.split(\"=\").map(p=>p.trim());return f===\"charset\"&&(h=h.toLowerCase(),h===Z3e)?\"\":`${f}${h?`=${h}`:\"\"}`}).filter(Boolean)];return a&&u.push(\"base64\"),(u.length>0||l&&l!==X3e)&&u.unshift(l),`data:${u.join(\";\")},${a?n.trim():n}${s?`#${s}`:\"\"}`};function $3e(r,e){if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},r=r.trim(),/^data:/i.test(r))return _3e(r,e);if(/^view-source:/i.test(r))throw new Error(\"`view-source:` is not supported as it is a non-standard protocol\");let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new URL(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash?n.hash=\"\":e.stripTextFragment&&(n.hash=n.hash.replace(/#?:~:text.*?$/i,\"\")),n.pathname){let o=/\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g,a=0,l=\"\";for(;;){let u=o.exec(n.pathname);if(!u)break;let g=u[0],f=u.index,h=n.pathname.slice(a,f);l+=h.replace(/\\/{2,}/g,\"/\"),l+=g,a=f+g.length}let c=n.pathname.slice(a,n.pathname.length);l+=c.replace(/\\/{2,}/g,\"/\"),n.pathname=l}if(n.pathname)try{n.pathname=decodeURI(n.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let o=n.pathname.split(\"/\"),a=o[o.length-1];vae(a,e.removeDirectoryIndex)&&(o=o.slice(0,-1),n.pathname=o.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let o of[...n.searchParams.keys()])vae(o,e.removeQueryParameters)&&n.searchParams.delete(o);if(e.removeQueryParameters===!0&&(n.search=\"\"),e.sortQueryParameters){n.searchParams.sort();try{n.search=decodeURIComponent(n.search)}catch{}}e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\"));let s=r;return r=n.toString(),!e.removeSingleSlash&&n.pathname===\"/\"&&!s.endsWith(\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&e.removeSingleSlash&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r}var aM=(r,e=!1)=>{let t=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\\/\\/)([\\w\\.\\-@]+)[\\/:]([\\~,\\.\\w,\\-,\\_,\\/]+?(?:\\.git|\\/)?)$/,i=s=>{let o=new Error(s);throw o.subject_url=r,o};(typeof r!=\"string\"||!r.trim())&&i(\"Invalid url.\"),r.length>aM.MAX_INPUT_LENGTH&&i(\"Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.\"),e&&(typeof e!=\"object\"&&(e={stripHash:!1}),r=$3e(r,e));let n=V3e.default(r);if(n.parse_failed){let s=n.href.match(t);s?(n.protocols=[\"ssh\"],n.protocol=\"ssh\",n.resource=s[2],n.host=s[2],n.user=s[1],n.pathname=`/${s[3]}`,n.parse_failed=!1):i(\"URL parsing failed.\")}return n};aM.MAX_INPUT_LENGTH=2048;xae.exports=aM});var Rae=w((Nmt,kae)=>{\"use strict\";var e4e=oM();function Dae(r){if(Array.isArray(r))return r.indexOf(\"ssh\")!==-1||r.indexOf(\"rsync\")!==-1;if(typeof r!=\"string\")return!1;var e=e4e(r);if(r=r.substring(r.indexOf(\"://\")+3),Dae(e))return!0;var t=new RegExp(\".([a-zA-Z\\\\d]+):(\\\\d+)/\");return!r.match(t)&&r.indexOf(\"@\")<r.indexOf(\":\")}kae.exports=Dae});var Tae=w((Tmt,Nae)=>{\"use strict\";var t4e=Pae(),Fae=Rae();function r4e(r){var e=t4e(r);return e.token=\"\",e.password===\"x-oauth-basic\"?e.token=e.user:e.user===\"x-token-auth\"&&(e.token=e.password),Fae(e.protocols)||e.protocols.length===0&&Fae(r)?e.protocol=\"ssh\":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol=\"file\",e.protocols=[\"file\"]),e.href=e.href.replace(/\\/$/,\"\"),e}Nae.exports=r4e});var Mae=w((Lmt,Lae)=>{\"use strict\";var i4e=Tae();function AM(r){if(typeof r!=\"string\")throw new Error(\"The url must be a string.\");var e=/^([a-z\\d-]{1,39})\\/([-\\.\\w]{1,100})$/i;e.test(r)&&(r=\"https://github.com/\"+r);var t=i4e(r),i=t.resource.split(\".\"),n=null;switch(t.toString=function(y){return AM.stringify(this,y)},t.source=i.length>2?i.slice(1-i.length).join(\".\"):t.source=t.resource,t.git_suffix=/\\.git$/.test(t.pathname),t.name=decodeURIComponent((t.pathname||t.href).replace(/(^\\/)|(\\/$)/g,\"\").replace(/\\.git$/,\"\")),t.owner=decodeURIComponent(t.user),t.source){case\"git.cloudforge.com\":t.owner=t.user,t.organization=i[0],t.source=\"cloudforge.com\";break;case\"visualstudio.com\":if(t.resource===\"vs-ssh.visualstudio.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3],t.full_name=n[2]+\"/\"+n[3]);break}else{n=t.name.split(\"/\"),n.length===2?(t.owner=n[1],t.name=n[1],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name);break}case\"dev.azure.com\":case\"azure.com\":if(t.resource===\"ssh.dev.azure.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3]);break}else{n=t.name.split(\"/\"),n.length===5?(t.organization=n[0],t.owner=n[1],t.name=n[4],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name),t.query&&t.query.path&&(t.filepath=t.query.path.replace(/^\\/+/g,\"\")),t.query&&t.query.version&&(t.ref=t.query.version.replace(/^GB/,\"\"));break}default:n=t.name.split(\"/\");var s=n.length-1;if(n.length>=2){var o=n.indexOf(\"-\",2),a=n.indexOf(\"blob\",2),l=n.indexOf(\"tree\",2),c=n.indexOf(\"commit\",2),u=n.indexOf(\"src\",2),g=n.indexOf(\"raw\",2),f=n.indexOf(\"edit\",2);s=o>0?o-1:a>0?a-1:l>0?l-1:c>0?c-1:u>0?u-1:g>0?g-1:f>0?f-1:s,t.owner=n.slice(0,s).join(\"/\"),t.name=n[s],c&&(t.commit=n[s+2])}t.ref=\"\",t.filepathtype=\"\",t.filepath=\"\";var h=n.length>s&&n[s+1]===\"-\"?s+1:s;n.length>h+2&&[\"raw\",\"src\",\"blob\",\"tree\",\"edit\"].indexOf(n[h+1])>=0&&(t.filepathtype=n[h+1],t.ref=n[h+2],n.length>h+3&&(t.filepath=n.slice(h+3).join(\"/\"))),t.organization=t.owner;break}t.full_name||(t.full_name=t.owner,t.name&&(t.full_name&&(t.full_name+=\"/\"),t.full_name+=t.name)),t.owner.startsWith(\"scm/\")&&(t.source=\"bitbucket-server\",t.owner=t.owner.replace(\"scm/\",\"\"),t.organization=t.owner,t.full_name=t.owner+\"/\"+t.name);var p=/(projects|users)\\/(.*?)\\/repos\\/(.*?)((\\/.*$)|$)/,C=p.exec(t.pathname);return C!=null&&(t.source=\"bitbucket-server\",C[1]===\"users\"?t.owner=\"~\"+C[2]:t.owner=C[2],t.organization=t.owner,t.name=C[3],n=C[4].split(\"/\"),n.length>1&&([\"raw\",\"browse\"].indexOf(n[1])>=0?(t.filepathtype=n[1],n.length>2&&(t.filepath=n.slice(2).join(\"/\"))):n[1]===\"commits\"&&n.length>2&&(t.commit=n[2])),t.full_name=t.owner+\"/\"+t.name,t.query.at?t.ref=t.query.at:t.ref=\"\"),t}AM.stringify=function(r,e){e=e||(r.protocols&&r.protocols.length?r.protocols.join(\"+\"):r.protocol);var t=r.port?\":\"+r.port:\"\",i=r.user||\"git\",n=r.git_suffix?\".git\":\"\";switch(e){case\"ssh\":return t?\"ssh://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n:i+\"@\"+r.resource+\":\"+r.full_name+n;case\"git+ssh\":case\"ssh+git\":case\"ftp\":case\"ftps\":return e+\"://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n;case\"http\":case\"https\":var s=r.token?n4e(r):r.user&&(r.protocols.includes(\"http\")||r.protocols.includes(\"https\"))?r.user+\"@\":\"\";return e+\"://\"+s+r.resource+t+\"/\"+s4e(r)+n;default:return r.href}};function n4e(r){switch(r.source){case\"bitbucket.org\":return\"x-token-auth:\"+r.token+\"@\";default:return r.token+\"@\"}}function s4e(r){switch(r.source){case\"bitbucket-server\":return\"scm/\"+r.full_name;default:return\"\"+r.full_name}}Lae.exports=AM});var DM=w((Syt,iAe)=>{var S4e=bh(),v4e=Ih();function x4e(r,e,t){(t!==void 0&&!v4e(r[e],t)||t===void 0&&!(e in r))&&S4e(r,e,t)}iAe.exports=x4e});var sAe=w((vyt,nAe)=>{var P4e=gm(),D4e=Wo();function k4e(r){return D4e(r)&&P4e(r)}nAe.exports=k4e});var AAe=w((xyt,aAe)=>{var R4e=Fc(),F4e=kb(),N4e=Wo(),T4e=\"[object Object]\",L4e=Function.prototype,M4e=Object.prototype,oAe=L4e.toString,O4e=M4e.hasOwnProperty,K4e=oAe.call(Object);function U4e(r){if(!N4e(r)||R4e(r)!=T4e)return!1;var e=F4e(r);if(e===null)return!0;var t=O4e.call(e,\"constructor\")&&e.constructor;return typeof t==\"function\"&&t instanceof t&&oAe.call(t)==K4e}aAe.exports=U4e});var kM=w((Pyt,lAe)=>{function H4e(r,e){if(!(e===\"constructor\"&&typeof r[e]==\"function\")&&e!=\"__proto__\")return r[e]}lAe.exports=H4e});var uAe=w((Dyt,cAe)=>{var G4e=Jh(),Y4e=Wh();function j4e(r){return G4e(r,Y4e(r))}cAe.exports=j4e});var CAe=w((kyt,dAe)=>{var gAe=DM(),q4e=qL(),J4e=zL(),W4e=JL(),z4e=VL(),fAe=nm(),hAe=vs(),V4e=sAe(),X4e=lm(),Z4e=U0(),_4e=vn(),$4e=AAe(),e8e=ob(),pAe=kM(),t8e=uAe();function r8e(r,e,t,i,n,s,o){var a=pAe(r,t),l=pAe(e,t),c=o.get(l);if(c){gAe(r,t,c);return}var u=s?s(a,l,t+\"\",r,e,o):void 0,g=u===void 0;if(g){var f=hAe(l),h=!f&&X4e(l),p=!f&&!h&&e8e(l);u=l,f||h||p?hAe(a)?u=a:V4e(a)?u=W4e(a):h?(g=!1,u=q4e(l,!0)):p?(g=!1,u=J4e(l,!0)):u=[]:$4e(l)||fAe(l)?(u=a,fAe(a)?u=t8e(a):(!_4e(a)||Z4e(a))&&(u=z4e(l))):g=!1}g&&(o.set(l,u),n(u,l,i,s,o),o.delete(l)),gAe(r,t,u)}dAe.exports=r8e});var IAe=w((Ryt,EAe)=>{var i8e=fm(),n8e=DM(),s8e=aT(),o8e=CAe(),a8e=vn(),A8e=Wh(),l8e=kM();function mAe(r,e,t,i,n){r!==e&&s8e(e,function(s,o){if(n||(n=new i8e),a8e(s))o8e(r,e,o,t,mAe,i,n);else{var a=i?i(l8e(r,o),s,o+\"\",r,e,n):void 0;a===void 0&&(a=s),n8e(r,o,a)}},A8e)}EAe.exports=mAe});var wAe=w((Fyt,yAe)=>{var c8e=J0(),u8e=jN(),g8e=qN();function f8e(r,e){return g8e(u8e(r,e,c8e),r+\"\")}yAe.exports=f8e});var bAe=w((Nyt,BAe)=>{var h8e=Ih(),p8e=gm(),d8e=im(),C8e=vn();function m8e(r,e,t){if(!C8e(t))return!1;var i=typeof e;return(i==\"number\"?p8e(t)&&d8e(e,t.length):i==\"string\"&&e in t)?h8e(t[e],r):!1}BAe.exports=m8e});var SAe=w((Tyt,QAe)=>{var E8e=wAe(),I8e=bAe();function y8e(r){return E8e(function(e,t){var i=-1,n=t.length,s=n>1?t[n-1]:void 0,o=n>2?t[2]:void 0;for(s=r.length>3&&typeof s==\"function\"?(n--,s):void 0,o&&I8e(t[0],t[1],o)&&(s=n<3?void 0:s,n=1),e=Object(e);++i<n;){var a=t[i];a&&r(e,a,i,s)}return e})}QAe.exports=y8e});var xAe=w((Lyt,vAe)=>{var w8e=IAe(),B8e=SAe(),b8e=B8e(function(r,e,t){w8e(r,e,t)});vAe.exports=b8e});var GAe=w((Twt,HAe)=>{var HM;HAe.exports=()=>(typeof HM>\"u\"&&(HM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),HM)});var lle=w((sBt,Ale)=>{var XM=Symbol(\"arg flag\"),Rn=class extends Error{constructor(e,t){super(e),this.name=\"ArgError\",this.code=t,Object.setPrototypeOf(this,Rn.prototype)}};function uE(r,{argv:e=process.argv.slice(2),permissive:t=!1,stopAtPositional:i=!1}={}){if(!r)throw new Rn(\"argument specification object is required\",\"ARG_CONFIG_NO_SPEC\");let n={_:[]},s={},o={};for(let a of Object.keys(r)){if(!a)throw new Rn(\"argument key cannot be an empty string\",\"ARG_CONFIG_EMPTY_KEY\");if(a[0]!==\"-\")throw new Rn(`argument key must start with '-' but found: '${a}'`,\"ARG_CONFIG_NONOPT_KEY\");if(a.length===1)throw new Rn(`argument key must have a name; singular '-' keys are not allowed: ${a}`,\"ARG_CONFIG_NONAME_KEY\");if(typeof r[a]==\"string\"){s[a]=r[a];continue}let l=r[a],c=!1;if(Array.isArray(l)&&l.length===1&&typeof l[0]==\"function\"){let[u]=l;l=(g,f,h=[])=>(h.push(u(g,f,h[h.length-1])),h),c=u===Boolean||u[XM]===!0}else if(typeof l==\"function\")c=l===Boolean||l[XM]===!0;else throw new Rn(`type missing or not a function or valid array type: ${a}`,\"ARG_CONFIG_VAD_TYPE\");if(a[1]!==\"-\"&&a.length>2)throw new Rn(`short argument keys (with a single hyphen) must have only one character: ${a}`,\"ARG_CONFIG_SHORTOPT_TOOLONG\");o[a]=[l,c]}for(let a=0,l=e.length;a<l;a++){let c=e[a];if(i&&n._.length>0){n._=n._.concat(e.slice(a));break}if(c===\"--\"){n._=n._.concat(e.slice(a+1));break}if(c.length>1&&c[0]===\"-\"){let u=c[1]===\"-\"||c.length===2?[c]:c.slice(1).split(\"\").map(g=>`-${g}`);for(let g=0;g<u.length;g++){let f=u[g],[h,p]=f[1]===\"-\"?f.split(/=(.*)/,2):[f,void 0],C=h;for(;C in s;)C=s[C];if(!(C in o))if(t){n._.push(f);continue}else throw new Rn(`unknown or unexpected option: ${h}`,\"ARG_UNKNOWN_OPTION\");let[y,B]=o[C];if(!B&&g+1<u.length)throw new Rn(`option requires argument (but was followed by another short argument): ${h}`,\"ARG_MISSING_REQUIRED_SHORTARG\");if(B)n[C]=y(!0,C,n[C]);else if(p===void 0){if(e.length<a+2||e[a+1].length>1&&e[a+1][0]===\"-\"&&!(e[a+1].match(/^-?\\d*(\\.(?=\\d))?\\d*$/)&&(y===Number||typeof BigInt<\"u\"&&y===BigInt))){let v=h===C?\"\":` (alias for ${C})`;throw new Rn(`option requires argument: ${h}${v}`,\"ARG_MISSING_REQUIRED_LONGARG\")}n[C]=y(e[a+1],C,n[C]),++a}else n[C]=y(p,C,n[C])}}else n._.push(c)}return n}uE.flag=r=>(r[XM]=!0,r);uE.COUNT=uE.flag((r,e,t)=>(t||0)+1);uE.ArgError=Rn;Ale.exports=uE});var Ile=w((LBt,Ele)=>{var eO;Ele.exports=()=>(typeof eO>\"u\"&&(eO=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),eO)});var vle=w((oO,aO)=>{(function(r){oO&&typeof oO==\"object\"&&typeof aO<\"u\"?aO.exports=r():typeof define==\"function\"&&define.amd?define([],r):typeof window<\"u\"?window.isWindows=r():typeof global<\"u\"?global.isWindows=r():typeof self<\"u\"?self.isWindows=r():this.isWindows=r()})(function(){\"use strict\";return function(){return process&&(process.platform===\"win32\"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var kle=w((T0t,Dle)=>{\"use strict\";AO.ifExists=wze;var np=J(\"util\"),Ts=J(\"path\"),xle=vle(),Eze=/^#!\\s*(?:\\/usr\\/bin\\/env)?\\s*([^ \\t]+)(.*)$/,Ize={createPwshFile:!0,createCmdFile:xle(),fs:J(\"fs\")},yze=new Map([[\".js\",\"node\"],[\".cjs\",\"node\"],[\".mjs\",\"node\"],[\".cmd\",\"cmd\"],[\".bat\",\"cmd\"],[\".ps1\",\"pwsh\"],[\".sh\",\"sh\"]]);function Ple(r){let e={...Ize,...r},t=e.fs;return e.fs_={chmod:t.chmod?np.promisify(t.chmod):async()=>{},mkdir:np.promisify(t.mkdir),readFile:np.promisify(t.readFile),stat:np.promisify(t.stat),unlink:np.promisify(t.unlink),writeFile:np.promisify(t.writeFile)},e}async function AO(r,e,t){let i=Ple(t);await i.fs_.stat(r),await bze(r,e,i)}function wze(r,e,t){return AO(r,e,t).catch(()=>{})}function Bze(r,e){return e.fs_.unlink(r).catch(()=>{})}async function bze(r,e,t){let i=await Pze(r,t);return await Qze(e,t),Sze(r,e,i,t)}function Qze(r,e){return e.fs_.mkdir(Ts.dirname(r),{recursive:!0})}function Sze(r,e,t,i){let n=Ple(i),s=[{generator:Rze,extension:\"\"}];return n.createCmdFile&&s.push({generator:kze,extension:\".cmd\"}),n.createPwshFile&&s.push({generator:Fze,extension:\".ps1\"}),Promise.all(s.map(o=>Dze(r,e+o.extension,t,o.generator,n)))}function vze(r,e){return Bze(r,e)}function xze(r,e){return Nze(r,e)}async function Pze(r,e){let n=(await e.fs_.readFile(r,\"utf8\")).trim().split(/\\r*\\n/)[0].match(Eze);if(!n){let s=Ts.extname(r).toLowerCase();return{program:yze.get(s)||null,additionalArgs:\"\"}}return{program:n[1],additionalArgs:n[2]}}async function Dze(r,e,t,i,n){let s=n.preserveSymlinks?\"--preserve-symlinks\":\"\",o=[t.additionalArgs,s].filter(a=>a).join(\" \");return n=Object.assign({},n,{prog:t.program,args:o}),await vze(e,n),await n.fs_.writeFile(e,i(r,e,n),\"utf8\"),xze(e,n)}function kze(r,e,t){let n=Ts.relative(Ts.dirname(e),r).split(\"/\").join(\"\\\\\"),s=Ts.isAbsolute(n)?`\"${n}\"`:`\"%~dp0\\\\${n}\"`,o,a=t.prog,l=t.args||\"\",c=lO(t.nodePath).win32;a?(o=`\"%~dp0\\\\${a}.exe\"`,n=s):(a=s,l=\"\",n=\"\");let u=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",g=c?`@SET NODE_PATH=${c}\\r\n`:\"\";return o?g+=`@IF EXIST ${o} (\\r\n  ${o} ${l} ${n} ${u}%*\\r\n) ELSE (\\r\n  @SETLOCAL\\r\n  @SET PATHEXT=%PATHEXT:;.JS;=;%\\r\n  ${a} ${l} ${n} ${u}%*\\r\n)\\r\n`:g+=`@${a} ${l} ${n} ${u}%*\\r\n`,g}function Rze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s;i=i.split(\"\\\\\").join(\"/\");let o=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,a=t.args||\"\",l=lO(t.nodePath).posix;n?(s=`\"$basedir/${t.prog}\"`,i=o):(n=o,a=\"\",i=\"\");let c=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",u=`#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\\\\\,/,g')\")\n\ncase \\`uname\\` in\n    *CYGWIN*) basedir=\\`cygpath -w \"$basedir\"\\`;;\nesac\n\n`,g=t.nodePath?`export NODE_PATH=\"${l}\"\n`:\"\";return s?u+=`${g}if [ -x ${s} ]; then\n  exec ${s} ${a} ${i} ${c}\"$@\"\nelse\n  exec ${n} ${a} ${i} ${c}\"$@\"\nfi\n`:u+=`${g}${n} ${a} ${i} ${c}\"$@\"\nexit $?\n`,u}function Fze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s=n&&`\"${n}$exe\"`,o;i=i.split(\"\\\\\").join(\"/\");let a=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,l=t.args||\"\",c=lO(t.nodePath),u=c.win32,g=c.posix;s?(o=`\"$basedir/${t.prog}$exe\"`,i=a):(s=a,l=\"\",i=\"\");let f=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",h=`#!/usr/bin/env pwsh\n$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n\n$exe=\"\"\n${t.nodePath?`$env_node_path=$env:NODE_PATH\n$env:NODE_PATH=\"${u}\"\n`:\"\"}if ($PSVersionTable.PSVersion -lt \"6.0\" -or $IsWindows) {\n  # Fix case when both the Windows and Linux builds of Node\n  # are installed in the same directory\n  $exe=\".exe\"\n}`;return t.nodePath&&(h+=` else {\n  $env:NODE_PATH=\"${g}\"\n}`),o?h+=`\n$ret=0\nif (Test-Path ${o}) {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${o} ${l} ${i} ${f}$args\n  } else {\n    & ${o} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n} else {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${s} ${l} ${i} ${f}$args\n  } else {\n    & ${s} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $ret\n`:h+=`\n# Support pipeline input\nif ($MyInvocation.ExpectingInput) {\n  $input | & ${s} ${l} ${i} ${f}$args\n} else {\n  & ${s} ${l} ${i} ${f}$args\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $LASTEXITCODE\n`,h}function Nze(r,e){return e.fs_.chmod(r,493)}function lO(r){if(!r)return{win32:\"\",posix:\"\"};let e=typeof r==\"string\"?r.split(Ts.delimiter):Array.from(r),t={};for(let i=0;i<e.length;i++){let n=e[i].split(\"/\").join(\"\\\\\"),s=xle()?e[i].split(\"\\\\\").join(\"/\").replace(/^([^:\\\\/]*):/,(o,a)=>`/mnt/${a.toLowerCase()}`):e[i];t.win32=t.win32?`${t.win32};${n}`:n,t.posix=t.posix?`${t.posix}:${s}`:s,t[i]={win32:n,posix:s}}return t}Dle.exports=AO});var yO=w(($bt,Zle)=>{Zle.exports=J(\"stream\")});var tce=w((eQt,ece)=>{\"use strict\";function _le(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function e5e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?_le(Object(t),!0).forEach(function(i){t5e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):_le(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function t5e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function r5e(r,e){if(!(r instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function $le(r,e){for(var t=0;t<e.length;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(r,i.key,i)}}function i5e(r,e,t){return e&&$le(r.prototype,e),t&&$le(r,t),r}var n5e=J(\"buffer\"),pQ=n5e.Buffer,s5e=J(\"util\"),wO=s5e.inspect,o5e=wO&&wO.custom||\"inspect\";function a5e(r,e,t){pQ.prototype.copy.call(r,e,t)}ece.exports=function(){function r(){r5e(this,r),this.head=null,this.tail=null,this.length=0}return i5e(r,[{key:\"push\",value:function(t){var i={data:t,next:null};this.length>0?this.tail.next=i:this.head=i,this.tail=i,++this.length}},{key:\"unshift\",value:function(t){var i={data:t,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length}},{key:\"shift\",value:function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(this.length===0)return\"\";for(var i=this.head,n=\"\"+i.data;i=i.next;)n+=t+i.data;return n}},{key:\"concat\",value:function(t){if(this.length===0)return pQ.alloc(0);for(var i=pQ.allocUnsafe(t>>>0),n=this.head,s=0;n;)a5e(n.data,i,s),s+=n.data.length,n=n.next;return i}},{key:\"consume\",value:function(t,i){var n;return t<this.head.data.length?(n=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):t===this.head.data.length?n=this.shift():n=i?this._getString(t):this._getBuffer(t),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var i=this.head,n=1,s=i.data;for(t-=s.length;i=i.next;){var o=i.data,a=t>o.length?o.length:t;if(a===o.length?s+=o:s+=o.slice(0,t),t-=a,t===0){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,s}},{key:\"_getBuffer\",value:function(t){var i=pQ.allocUnsafe(t),n=this.head,s=1;for(n.data.copy(i),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(i,i.length-t,0,a),t-=a,t===0){a===o.length?(++s,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(a));break}++s}return this.length-=s,i}},{key:o5e,value:function(t,i){return wO(this,e5e({},i,{depth:0,customInspect:!1}))}}]),r}()});var bO=w((tQt,ice)=>{\"use strict\";function A5e(r,e){var t=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(r):r&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(BO,this,r)):process.nextTick(BO,this,r)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(r||null,function(s){!e&&s?t._writableState?t._writableState.errorEmitted?process.nextTick(dQ,t):(t._writableState.errorEmitted=!0,process.nextTick(rce,t,s)):process.nextTick(rce,t,s):e?(process.nextTick(dQ,t),e(s)):process.nextTick(dQ,t)}),this)}function rce(r,e){BO(r,e),dQ(r)}function dQ(r){r._writableState&&!r._writableState.emitClose||r._readableState&&!r._readableState.emitClose||r.emit(\"close\")}function l5e(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function BO(r,e){r.emit(\"error\",e)}function c5e(r,e){var t=r._readableState,i=r._writableState;t&&t.autoDestroy||i&&i.autoDestroy?r.destroy(e):r.emit(\"error\",e)}ice.exports={destroy:A5e,undestroy:l5e,errorOrDestroy:c5e}});var Sl=w((rQt,oce)=>{\"use strict\";var sce={};function Ms(r,e,t){t||(t=Error);function i(s,o,a){return typeof e==\"string\"?e:e(s,o,a)}class n extends t{constructor(o,a,l){super(i(o,a,l))}}n.prototype.name=t.name,n.prototype.code=r,sce[r]=n}function nce(r,e){if(Array.isArray(r)){let t=r.length;return r=r.map(i=>String(i)),t>2?`one of ${e} ${r.slice(0,t-1).join(\", \")}, or `+r[t-1]:t===2?`one of ${e} ${r[0]} or ${r[1]}`:`of ${e} ${r[0]}`}else return`of ${e} ${String(r)}`}function u5e(r,e,t){return r.substr(!t||t<0?0:+t,e.length)===e}function g5e(r,e,t){return(t===void 0||t>r.length)&&(t=r.length),r.substring(t-e.length,t)===e}function f5e(r,e,t){return typeof t!=\"number\"&&(t=0),t+e.length>r.length?!1:r.indexOf(e,t)!==-1}Ms(\"ERR_INVALID_OPT_VALUE\",function(r,e){return'The value \"'+e+'\" is invalid for option \"'+r+'\"'},TypeError);Ms(\"ERR_INVALID_ARG_TYPE\",function(r,e,t){let i;typeof e==\"string\"&&u5e(e,\"not \")?(i=\"must not be\",e=e.replace(/^not /,\"\")):i=\"must be\";let n;if(g5e(r,\" argument\"))n=`The ${r} ${i} ${nce(e,\"type\")}`;else{let s=f5e(r,\".\")?\"property\":\"argument\";n=`The \"${r}\" ${s} ${i} ${nce(e,\"type\")}`}return n+=`. Received type ${typeof t}`,n},TypeError);Ms(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\");Ms(\"ERR_METHOD_NOT_IMPLEMENTED\",function(r){return\"The \"+r+\" method is not implemented\"});Ms(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\");Ms(\"ERR_STREAM_DESTROYED\",function(r){return\"Cannot call \"+r+\" after a stream was destroyed\"});Ms(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\");Ms(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\");Ms(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\");Ms(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);Ms(\"ERR_UNKNOWN_ENCODING\",function(r){return\"Unknown encoding: \"+r},TypeError);Ms(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\");oce.exports.codes=sce});var QO=w((iQt,ace)=>{\"use strict\";var h5e=Sl().codes.ERR_INVALID_OPT_VALUE;function p5e(r,e,t){return r.highWaterMark!=null?r.highWaterMark:e?r[t]:null}function d5e(r,e,t,i){var n=p5e(e,i,t);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var s=i?t:\"highWaterMark\";throw new h5e(s,n)}return Math.floor(n)}return r.objectMode?16:16*1024}ace.exports={getHighWaterMark:d5e}});var Ace=w((nQt,SO)=>{typeof Object.create==\"function\"?SO.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:SO.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}});var vl=w((sQt,xO)=>{try{if(vO=J(\"util\"),typeof vO.inherits!=\"function\")throw\"\";xO.exports=vO.inherits}catch{xO.exports=Ace()}var vO});var cce=w((oQt,lce)=>{lce.exports=J(\"util\").deprecate});var kO=w((aQt,dce)=>{\"use strict\";dce.exports=Lr;function gce(r){var e=this;this.next=null,this.entry=null,this.finish=function(){Y5e(e,r)}}var ap;Lr.WritableState=dE;var C5e={deprecate:cce()},fce=yO(),mQ=J(\"buffer\").Buffer,m5e=global.Uint8Array||function(){};function E5e(r){return mQ.from(r)}function I5e(r){return mQ.isBuffer(r)||r instanceof m5e}var DO=bO(),y5e=QO(),w5e=y5e.getHighWaterMark,xl=Sl().codes,B5e=xl.ERR_INVALID_ARG_TYPE,b5e=xl.ERR_METHOD_NOT_IMPLEMENTED,Q5e=xl.ERR_MULTIPLE_CALLBACK,S5e=xl.ERR_STREAM_CANNOT_PIPE,v5e=xl.ERR_STREAM_DESTROYED,x5e=xl.ERR_STREAM_NULL_VALUES,P5e=xl.ERR_STREAM_WRITE_AFTER_END,D5e=xl.ERR_UNKNOWN_ENCODING,Ap=DO.errorOrDestroy;vl()(Lr,fce);function k5e(){}function dE(r,e,t){ap=ap||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof ap),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.writableObjectMode),this.highWaterMark=w5e(this,r,\"writableHighWaterMark\",t),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=r.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){O5e(e,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new gce(this)}dE.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t};(function(){try{Object.defineProperty(dE.prototype,\"buffer\",{get:C5e.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch{}})();var CQ;typeof Symbol==\"function\"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==\"function\"?(CQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Lr,Symbol.hasInstance,{value:function(e){return CQ.call(this,e)?!0:this!==Lr?!1:e&&e._writableState instanceof dE}})):CQ=function(e){return e instanceof this};function Lr(r){ap=ap||qu();var e=this instanceof ap;if(!e&&!CQ.call(Lr,this))return new Lr(r);this._writableState=new dE(r,this,e),this.writable=!0,r&&(typeof r.write==\"function\"&&(this._write=r.write),typeof r.writev==\"function\"&&(this._writev=r.writev),typeof r.destroy==\"function\"&&(this._destroy=r.destroy),typeof r.final==\"function\"&&(this._final=r.final)),fce.call(this)}Lr.prototype.pipe=function(){Ap(this,new S5e)};function R5e(r,e){var t=new P5e;Ap(r,t),process.nextTick(e,t)}function F5e(r,e,t,i){var n;return t===null?n=new x5e:typeof t!=\"string\"&&!e.objectMode&&(n=new B5e(\"chunk\",[\"string\",\"Buffer\"],t)),n?(Ap(r,n),process.nextTick(i,n),!1):!0}Lr.prototype.write=function(r,e,t){var i=this._writableState,n=!1,s=!i.objectMode&&I5e(r);return s&&!mQ.isBuffer(r)&&(r=E5e(r)),typeof e==\"function\"&&(t=e,e=null),s?e=\"buffer\":e||(e=i.defaultEncoding),typeof t!=\"function\"&&(t=k5e),i.ending?R5e(this,t):(s||F5e(this,i,r,t))&&(i.pendingcb++,n=T5e(this,i,s,r,e,t)),n};Lr.prototype.cork=function(){this._writableState.corked++};Lr.prototype.uncork=function(){var r=this._writableState;r.corked&&(r.corked--,!r.writing&&!r.corked&&!r.bufferProcessing&&r.bufferedRequest&&hce(this,r))};Lr.prototype.setDefaultEncoding=function(e){if(typeof e==\"string\"&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new D5e(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Lr.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function N5e(r,e,t){return!r.objectMode&&r.decodeStrings!==!1&&typeof e==\"string\"&&(e=mQ.from(e,t)),e}Object.defineProperty(Lr.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function T5e(r,e,t,i,n,s){if(!t){var o=N5e(e,i,n);i!==o&&(t=!0,n=\"buffer\",i=o)}var a=e.objectMode?1:i.length;e.length+=a;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:i,encoding:n,isBuf:t,callback:s,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else PO(r,e,!1,a,i,n,s);return l}function PO(r,e,t,i,n,s,o){e.writelen=i,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new v5e(\"write\")):t?r._writev(n,e.onwrite):r._write(n,s,e.onwrite),e.sync=!1}function L5e(r,e,t,i,n){--e.pendingcb,t?(process.nextTick(n,i),process.nextTick(pE,r,e),r._writableState.errorEmitted=!0,Ap(r,i)):(n(i),r._writableState.errorEmitted=!0,Ap(r,i),pE(r,e))}function M5e(r){r.writing=!1,r.writecb=null,r.length-=r.writelen,r.writelen=0}function O5e(r,e){var t=r._writableState,i=t.sync,n=t.writecb;if(typeof n!=\"function\")throw new Q5e;if(M5e(t),e)L5e(r,t,i,e,n);else{var s=pce(t)||r.destroyed;!s&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&hce(r,t),i?process.nextTick(uce,r,t,s,n):uce(r,t,s,n)}}function uce(r,e,t,i){t||K5e(r,e),e.pendingcb--,i(),pE(r,e)}function K5e(r,e){e.length===0&&e.needDrain&&(e.needDrain=!1,r.emit(\"drain\"))}function hce(r,e){e.bufferProcessing=!0;var t=e.bufferedRequest;if(r._writev&&t&&t.next){var i=e.bufferedRequestCount,n=new Array(i),s=e.corkedRequestsFree;s.entry=t;for(var o=0,a=!0;t;)n[o]=t,t.isBuf||(a=!1),t=t.next,o+=1;n.allBuffers=a,PO(r,e,!0,e.length,n,\"\",s.finish),e.pendingcb++,e.lastBufferedRequest=null,s.next?(e.corkedRequestsFree=s.next,s.next=null):e.corkedRequestsFree=new gce(e),e.bufferedRequestCount=0}else{for(;t;){var l=t.chunk,c=t.encoding,u=t.callback,g=e.objectMode?1:l.length;if(PO(r,e,!1,g,l,c,u),t=t.next,e.bufferedRequestCount--,e.writing)break}t===null&&(e.lastBufferedRequest=null)}e.bufferedRequest=t,e.bufferProcessing=!1}Lr.prototype._write=function(r,e,t){t(new b5e(\"_write()\"))};Lr.prototype._writev=null;Lr.prototype.end=function(r,e,t){var i=this._writableState;return typeof r==\"function\"?(t=r,r=null,e=null):typeof e==\"function\"&&(t=e,e=null),r!=null&&this.write(r,e),i.corked&&(i.corked=1,this.uncork()),i.ending||G5e(this,i,t),this};Object.defineProperty(Lr.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function pce(r){return r.ending&&r.length===0&&r.bufferedRequest===null&&!r.finished&&!r.writing}function U5e(r,e){r._final(function(t){e.pendingcb--,t&&Ap(r,t),e.prefinished=!0,r.emit(\"prefinish\"),pE(r,e)})}function H5e(r,e){!e.prefinished&&!e.finalCalled&&(typeof r._final==\"function\"&&!e.destroyed?(e.pendingcb++,e.finalCalled=!0,process.nextTick(U5e,r,e)):(e.prefinished=!0,r.emit(\"prefinish\")))}function pE(r,e){var t=pce(e);if(t&&(H5e(r,e),e.pendingcb===0&&(e.finished=!0,r.emit(\"finish\"),e.autoDestroy))){var i=r._readableState;(!i||i.autoDestroy&&i.endEmitted)&&r.destroy()}return t}function G5e(r,e,t){e.ending=!0,pE(r,e),t&&(e.finished?process.nextTick(t):r.once(\"finish\",t)),e.ended=!0,r.writable=!1}function Y5e(r,e,t){var i=r.entry;for(r.entry=null;i;){var n=i.callback;e.pendingcb--,n(t),i=i.next}e.corkedRequestsFree.next=r}Object.defineProperty(Lr.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(e){!this._writableState||(this._writableState.destroyed=e)}});Lr.prototype.destroy=DO.destroy;Lr.prototype._undestroy=DO.undestroy;Lr.prototype._destroy=function(r,e){e(r)}});var qu=w((AQt,mce)=>{\"use strict\";var j5e=Object.keys||function(r){var e=[];for(var t in r)e.push(t);return e};mce.exports=Aa;var Cce=NO(),FO=kO();vl()(Aa,Cce);for(RO=j5e(FO.prototype),EQ=0;EQ<RO.length;EQ++)IQ=RO[EQ],Aa.prototype[IQ]||(Aa.prototype[IQ]=FO.prototype[IQ]);var RO,IQ,EQ;function Aa(r){if(!(this instanceof Aa))return new Aa(r);Cce.call(this,r),FO.call(this,r),this.allowHalfOpen=!0,r&&(r.readable===!1&&(this.readable=!1),r.writable===!1&&(this.writable=!1),r.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once(\"end\",q5e)))}Object.defineProperty(Aa.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});Object.defineProperty(Aa.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});Object.defineProperty(Aa.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function q5e(){this._writableState.ended||process.nextTick(J5e,this)}function J5e(r){r.end()}Object.defineProperty(Aa.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(e){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=e,this._writableState.destroyed=e)}})});var yce=w((TO,Ice)=>{var yQ=J(\"buffer\"),fA=yQ.Buffer;function Ece(r,e){for(var t in r)e[t]=r[t]}fA.from&&fA.alloc&&fA.allocUnsafe&&fA.allocUnsafeSlow?Ice.exports=yQ:(Ece(yQ,TO),TO.Buffer=lp);function lp(r,e,t){return fA(r,e,t)}Ece(fA,lp);lp.from=function(r,e,t){if(typeof r==\"number\")throw new TypeError(\"Argument must not be a number\");return fA(r,e,t)};lp.alloc=function(r,e,t){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");var i=fA(r);return e!==void 0?typeof t==\"string\"?i.fill(e,t):i.fill(e):i.fill(0),i};lp.allocUnsafe=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return fA(r)};lp.allocUnsafeSlow=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return yQ.SlowBuffer(r)}});var OO=w(Bce=>{\"use strict\";var MO=yce().Buffer,wce=MO.isEncoding||function(r){switch(r=\"\"+r,r&&r.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function W5e(r){if(!r)return\"utf8\";for(var e;;)switch(r){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return r;default:if(e)return;r=(\"\"+r).toLowerCase(),e=!0}}function z5e(r){var e=W5e(r);if(typeof e!=\"string\"&&(MO.isEncoding===wce||!wce(r)))throw new Error(\"Unknown encoding: \"+r);return e||r}Bce.StringDecoder=CE;function CE(r){this.encoding=z5e(r);var e;switch(this.encoding){case\"utf16le\":this.text=e6e,this.end=t6e,e=4;break;case\"utf8\":this.fillLast=Z5e,e=4;break;case\"base64\":this.text=r6e,this.end=i6e,e=3;break;default:this.write=n6e,this.end=s6e;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=MO.allocUnsafe(e)}CE.prototype.write=function(r){if(r.length===0)return\"\";var e,t;if(this.lastNeed){if(e=this.fillLast(r),e===void 0)return\"\";t=this.lastNeed,this.lastNeed=0}else t=0;return t<r.length?e?e+this.text(r,t):this.text(r,t):e||\"\"};CE.prototype.end=$5e;CE.prototype.text=_5e;CE.prototype.fillLast=function(r){if(this.lastNeed<=r.length)return r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,r.length),this.lastNeed-=r.length};function LO(r){return r<=127?0:r>>5===6?2:r>>4===14?3:r>>3===30?4:r>>6===2?-1:-2}function V5e(r,e,t){var i=e.length-1;if(i<t)return 0;var n=LO(e[i]);return n>=0?(n>0&&(r.lastNeed=n-1),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(r.lastNeed=n-2),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(n===2?n=0:r.lastNeed=n-3),n):0))}function X5e(r,e,t){if((e[0]&192)!==128)return r.lastNeed=0,\"\\uFFFD\";if(r.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return r.lastNeed=1,\"\\uFFFD\";if(r.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return r.lastNeed=2,\"\\uFFFD\"}}function Z5e(r){var e=this.lastTotal-this.lastNeed,t=X5e(this,r,e);if(t!==void 0)return t;if(this.lastNeed<=r.length)return r.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,e,0,r.length),this.lastNeed-=r.length}function _5e(r,e){var t=V5e(this,r,e);if(!this.lastNeed)return r.toString(\"utf8\",e);this.lastTotal=t;var i=r.length-(t-this.lastNeed);return r.copy(this.lastChar,0,i),r.toString(\"utf8\",e,i)}function $5e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+\"\\uFFFD\":e}function e6e(r,e){if((r.length-e)%2===0){var t=r.toString(\"utf16le\",e);if(t){var i=t.charCodeAt(t.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=r[r.length-1],r.toString(\"utf16le\",e,r.length-1)}function t6e(r){var e=r&&r.length?this.write(r):\"\";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,t)}return e}function r6e(r,e){var t=(r.length-e)%3;return t===0?r.toString(\"base64\",e):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=r[r.length-1]:(this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1]),r.toString(\"base64\",e,r.length-t))}function i6e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function n6e(r){return r.toString(this.encoding)}function s6e(r){return r&&r.length?this.write(r):\"\"}});var wQ=w((cQt,Sce)=>{\"use strict\";var bce=Sl().codes.ERR_STREAM_PREMATURE_CLOSE;function o6e(r){var e=!1;return function(){if(!e){e=!0;for(var t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];r.apply(this,i)}}}function a6e(){}function A6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Qce(r,e,t){if(typeof e==\"function\")return Qce(r,null,e);e||(e={}),t=o6e(t||a6e);var i=e.readable||e.readable!==!1&&r.readable,n=e.writable||e.writable!==!1&&r.writable,s=function(){r.writable||a()},o=r._writableState&&r._writableState.finished,a=function(){n=!1,o=!0,i||t.call(r)},l=r._readableState&&r._readableState.endEmitted,c=function(){i=!1,l=!0,n||t.call(r)},u=function(p){t.call(r,p)},g=function(){var p;if(i&&!l)return(!r._readableState||!r._readableState.ended)&&(p=new bce),t.call(r,p);if(n&&!o)return(!r._writableState||!r._writableState.ended)&&(p=new bce),t.call(r,p)},f=function(){r.req.on(\"finish\",a)};return A6e(r)?(r.on(\"complete\",a),r.on(\"abort\",g),r.req?f():r.on(\"request\",f)):n&&!r._writableState&&(r.on(\"end\",s),r.on(\"close\",s)),r.on(\"end\",c),r.on(\"finish\",a),e.error!==!1&&r.on(\"error\",u),r.on(\"close\",g),function(){r.removeListener(\"complete\",a),r.removeListener(\"abort\",g),r.removeListener(\"request\",f),r.req&&r.req.removeListener(\"finish\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",s),r.removeListener(\"finish\",a),r.removeListener(\"end\",c),r.removeListener(\"error\",u),r.removeListener(\"close\",g)}}Sce.exports=Qce});var xce=w((uQt,vce)=>{\"use strict\";var BQ;function Pl(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var l6e=wQ(),Dl=Symbol(\"lastResolve\"),Ju=Symbol(\"lastReject\"),mE=Symbol(\"error\"),bQ=Symbol(\"ended\"),Wu=Symbol(\"lastPromise\"),KO=Symbol(\"handlePromise\"),zu=Symbol(\"stream\");function kl(r,e){return{value:r,done:e}}function c6e(r){var e=r[Dl];if(e!==null){var t=r[zu].read();t!==null&&(r[Wu]=null,r[Dl]=null,r[Ju]=null,e(kl(t,!1)))}}function u6e(r){process.nextTick(c6e,r)}function g6e(r,e){return function(t,i){r.then(function(){if(e[bQ]){t(kl(void 0,!0));return}e[KO](t,i)},i)}}var f6e=Object.getPrototypeOf(function(){}),h6e=Object.setPrototypeOf((BQ={get stream(){return this[zu]},next:function(){var e=this,t=this[mE];if(t!==null)return Promise.reject(t);if(this[bQ])return Promise.resolve(kl(void 0,!0));if(this[zu].destroyed)return new Promise(function(o,a){process.nextTick(function(){e[mE]?a(e[mE]):o(kl(void 0,!0))})});var i=this[Wu],n;if(i)n=new Promise(g6e(i,this));else{var s=this[zu].read();if(s!==null)return Promise.resolve(kl(s,!1));n=new Promise(this[KO])}return this[Wu]=n,n}},Pl(BQ,Symbol.asyncIterator,function(){return this}),Pl(BQ,\"return\",function(){var e=this;return new Promise(function(t,i){e[zu].destroy(null,function(n){if(n){i(n);return}t(kl(void 0,!0))})})}),BQ),f6e),p6e=function(e){var t,i=Object.create(h6e,(t={},Pl(t,zu,{value:e,writable:!0}),Pl(t,Dl,{value:null,writable:!0}),Pl(t,Ju,{value:null,writable:!0}),Pl(t,mE,{value:null,writable:!0}),Pl(t,bQ,{value:e._readableState.endEmitted,writable:!0}),Pl(t,KO,{value:function(s,o){var a=i[zu].read();a?(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(kl(a,!1))):(i[Dl]=s,i[Ju]=o)},writable:!0}),t));return i[Wu]=null,l6e(e,function(n){if(n&&n.code!==\"ERR_STREAM_PREMATURE_CLOSE\"){var s=i[Ju];s!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(n)),i[mE]=n;return}var o=i[Dl];o!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,o(kl(void 0,!0))),i[bQ]=!0}),e.on(\"readable\",u6e.bind(null,i)),i};vce.exports=p6e});var Rce=w((gQt,kce)=>{\"use strict\";function Pce(r,e,t,i,n,s,o){try{var a=r[s](o),l=a.value}catch(c){t(c);return}a.done?e(l):Promise.resolve(l).then(i,n)}function d6e(r){return function(){var e=this,t=arguments;return new Promise(function(i,n){var s=r.apply(e,t);function o(l){Pce(s,i,n,o,a,\"next\",l)}function a(l){Pce(s,i,n,o,a,\"throw\",l)}o(void 0)})}}function Dce(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function C6e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?Dce(Object(t),!0).forEach(function(i){m6e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):Dce(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function m6e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var E6e=Sl().codes.ERR_INVALID_ARG_TYPE;function I6e(r,e,t){var i;if(e&&typeof e.next==\"function\")i=e;else if(e&&e[Symbol.asyncIterator])i=e[Symbol.asyncIterator]();else if(e&&e[Symbol.iterator])i=e[Symbol.iterator]();else throw new E6e(\"iterable\",[\"Iterable\"],e);var n=new r(C6e({objectMode:!0},t)),s=!1;n._read=function(){s||(s=!0,o())};function o(){return a.apply(this,arguments)}function a(){return a=d6e(function*(){try{var l=yield i.next(),c=l.value,u=l.done;u?n.push(null):n.push(yield c)?o():s=!1}catch(g){n.destroy(g)}}),a.apply(this,arguments)}return n}kce.exports=I6e});var NO=w((hQt,Gce)=>{\"use strict\";Gce.exports=Ut;var cp;Ut.ReadableState=Lce;var fQt=J(\"events\").EventEmitter,Tce=function(e,t){return e.listeners(t).length},IE=yO(),QQ=J(\"buffer\").Buffer,y6e=global.Uint8Array||function(){};function w6e(r){return QQ.from(r)}function B6e(r){return QQ.isBuffer(r)||r instanceof y6e}var UO=J(\"util\"),Dt;UO&&UO.debuglog?Dt=UO.debuglog(\"stream\"):Dt=function(){};var b6e=tce(),WO=bO(),Q6e=QO(),S6e=Q6e.getHighWaterMark,SQ=Sl().codes,v6e=SQ.ERR_INVALID_ARG_TYPE,x6e=SQ.ERR_STREAM_PUSH_AFTER_EOF,P6e=SQ.ERR_METHOD_NOT_IMPLEMENTED,D6e=SQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,up,HO,GO;vl()(Ut,IE);var EE=WO.errorOrDestroy,YO=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k6e(r,e,t){if(typeof r.prependListener==\"function\")return r.prependListener(e,t);!r._events||!r._events[e]?r.on(e,t):Array.isArray(r._events[e])?r._events[e].unshift(t):r._events[e]=[t,r._events[e]]}function Lce(r,e,t){cp=cp||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof cp),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.readableObjectMode),this.highWaterMark=S6e(this,r,\"readableHighWaterMark\",t),this.buffer=new b6e,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.destroyed=!1,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,r.encoding&&(up||(up=OO().StringDecoder),this.decoder=new up(r.encoding),this.encoding=r.encoding)}function Ut(r){if(cp=cp||qu(),!(this instanceof Ut))return new Ut(r);var e=this instanceof cp;this._readableState=new Lce(r,this,e),this.readable=!0,r&&(typeof r.read==\"function\"&&(this._read=r.read),typeof r.destroy==\"function\"&&(this._destroy=r.destroy)),IE.call(this)}Object.defineProperty(Ut.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});Ut.prototype.destroy=WO.destroy;Ut.prototype._undestroy=WO.undestroy;Ut.prototype._destroy=function(r,e){e(r)};Ut.prototype.push=function(r,e){var t=this._readableState,i;return t.objectMode?i=!0:typeof r==\"string\"&&(e=e||t.defaultEncoding,e!==t.encoding&&(r=QQ.from(r,e),e=\"\"),i=!0),Mce(this,r,e,!1,i)};Ut.prototype.unshift=function(r){return Mce(this,r,null,!0,!1)};function Mce(r,e,t,i,n){Dt(\"readableAddChunk\",e);var s=r._readableState;if(e===null)s.reading=!1,N6e(r,s);else{var o;if(n||(o=R6e(s,e)),o)EE(r,o);else if(s.objectMode||e&&e.length>0)if(typeof e!=\"string\"&&!s.objectMode&&Object.getPrototypeOf(e)!==QQ.prototype&&(e=w6e(e)),i)s.endEmitted?EE(r,new D6e):jO(r,s,e,!0);else if(s.ended)EE(r,new x6e);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!t?(e=s.decoder.write(e),s.objectMode||e.length!==0?jO(r,s,e,!1):JO(r,s)):jO(r,s,e,!1)}else i||(s.reading=!1,JO(r,s))}return!s.ended&&(s.length<s.highWaterMark||s.length===0)}function jO(r,e,t,i){e.flowing&&e.length===0&&!e.sync?(e.awaitDrain=0,r.emit(\"data\",t)):(e.length+=e.objectMode?1:t.length,i?e.buffer.unshift(t):e.buffer.push(t),e.needReadable&&vQ(r)),JO(r,e)}function R6e(r,e){var t;return!B6e(e)&&typeof e!=\"string\"&&e!==void 0&&!r.objectMode&&(t=new v6e(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e)),t}Ut.prototype.isPaused=function(){return this._readableState.flowing===!1};Ut.prototype.setEncoding=function(r){up||(up=OO().StringDecoder);var e=new up(r);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var t=this._readableState.buffer.head,i=\"\";t!==null;)i+=e.write(t.data),t=t.next;return this._readableState.buffer.clear(),i!==\"\"&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var Fce=1073741824;function F6e(r){return r>=Fce?r=Fce:(r--,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r++),r}function Nce(r,e){return r<=0||e.length===0&&e.ended?0:e.objectMode?1:r!==r?e.flowing&&e.length?e.buffer.head.data.length:e.length:(r>e.highWaterMark&&(e.highWaterMark=F6e(r)),r<=e.length?r:e.ended?e.length:(e.needReadable=!0,0))}Ut.prototype.read=function(r){Dt(\"read\",r),r=parseInt(r,10);var e=this._readableState,t=r;if(r!==0&&(e.emittedReadable=!1),r===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return Dt(\"read: emitReadable\",e.length,e.ended),e.length===0&&e.ended?qO(this):vQ(this),null;if(r=Nce(r,e),r===0&&e.ended)return e.length===0&&qO(this),null;var i=e.needReadable;Dt(\"need readable\",i),(e.length===0||e.length-r<e.highWaterMark)&&(i=!0,Dt(\"length less than watermark\",i)),e.ended||e.reading?(i=!1,Dt(\"reading or ended\",i)):i&&(Dt(\"do read\"),e.reading=!0,e.sync=!0,e.length===0&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(r=Nce(t,e)));var n;return r>0?n=Uce(r,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,r=0):(e.length-=r,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),t!==r&&e.ended&&qO(this)),n!==null&&this.emit(\"data\",n),n};function N6e(r,e){if(Dt(\"onEofChunk\"),!e.ended){if(e.decoder){var t=e.decoder.end();t&&t.length&&(e.buffer.push(t),e.length+=e.objectMode?1:t.length)}e.ended=!0,e.sync?vQ(r):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Oce(r)))}}function vQ(r){var e=r._readableState;Dt(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(Dt(\"emitReadable\",e.flowing),e.emittedReadable=!0,process.nextTick(Oce,r))}function Oce(r){var e=r._readableState;Dt(\"emitReadable_\",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(r.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,zO(r)}function JO(r,e){e.readingMore||(e.readingMore=!0,process.nextTick(T6e,r,e))}function T6e(r,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&e.length===0);){var t=e.length;if(Dt(\"maybeReadMore read 0\"),r.read(0),t===e.length)break}e.readingMore=!1}Ut.prototype._read=function(r){EE(this,new P6e(\"_read()\"))};Ut.prototype.pipe=function(r,e){var t=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=r;break;case 1:i.pipes=[i.pipes,r];break;default:i.pipes.push(r);break}i.pipesCount+=1,Dt(\"pipe count=%d opts=%j\",i.pipesCount,e);var n=(!e||e.end!==!1)&&r!==process.stdout&&r!==process.stderr,s=n?a:C;i.endEmitted?process.nextTick(s):t.once(\"end\",s),r.on(\"unpipe\",o);function o(y,B){Dt(\"onunpipe\"),y===t&&B&&B.hasUnpiped===!1&&(B.hasUnpiped=!0,u())}function a(){Dt(\"onend\"),r.end()}var l=L6e(t);r.on(\"drain\",l);var c=!1;function u(){Dt(\"cleanup\"),r.removeListener(\"close\",h),r.removeListener(\"finish\",p),r.removeListener(\"drain\",l),r.removeListener(\"error\",f),r.removeListener(\"unpipe\",o),t.removeListener(\"end\",a),t.removeListener(\"end\",C),t.removeListener(\"data\",g),c=!0,i.awaitDrain&&(!r._writableState||r._writableState.needDrain)&&l()}t.on(\"data\",g);function g(y){Dt(\"ondata\");var B=r.write(y);Dt(\"dest.write\",B),B===!1&&((i.pipesCount===1&&i.pipes===r||i.pipesCount>1&&Hce(i.pipes,r)!==-1)&&!c&&(Dt(\"false write response, pause\",i.awaitDrain),i.awaitDrain++),t.pause())}function f(y){Dt(\"onerror\",y),C(),r.removeListener(\"error\",f),Tce(r,\"error\")===0&&EE(r,y)}k6e(r,\"error\",f);function h(){r.removeListener(\"finish\",p),C()}r.once(\"close\",h);function p(){Dt(\"onfinish\"),r.removeListener(\"close\",h),C()}r.once(\"finish\",p);function C(){Dt(\"unpipe\"),t.unpipe(r)}return r.emit(\"pipe\",t),i.flowing||(Dt(\"pipe resume\"),t.resume()),r};function L6e(r){return function(){var t=r._readableState;Dt(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&Tce(r,\"data\")&&(t.flowing=!0,zO(r))}}Ut.prototype.unpipe=function(r){var e=this._readableState,t={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return r&&r!==e.pipes?this:(r||(r=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,r&&r.emit(\"unpipe\",this,t),this);if(!r){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s<n;s++)i[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=Hce(e.pipes,r);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,e.pipesCount===1&&(e.pipes=e.pipes[0]),r.emit(\"unpipe\",this,t),this)};Ut.prototype.on=function(r,e){var t=IE.prototype.on.call(this,r,e),i=this._readableState;return r===\"data\"?(i.readableListening=this.listenerCount(\"readable\")>0,i.flowing!==!1&&this.resume()):r===\"readable\"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,Dt(\"on readable\",i.length,i.reading),i.length?vQ(this):i.reading||process.nextTick(M6e,this)),t};Ut.prototype.addListener=Ut.prototype.on;Ut.prototype.removeListener=function(r,e){var t=IE.prototype.removeListener.call(this,r,e);return r===\"readable\"&&process.nextTick(Kce,this),t};Ut.prototype.removeAllListeners=function(r){var e=IE.prototype.removeAllListeners.apply(this,arguments);return(r===\"readable\"||r===void 0)&&process.nextTick(Kce,this),e};function Kce(r){var e=r._readableState;e.readableListening=r.listenerCount(\"readable\")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:r.listenerCount(\"data\")>0&&r.resume()}function M6e(r){Dt(\"readable nexttick read 0\"),r.read(0)}Ut.prototype.resume=function(){var r=this._readableState;return r.flowing||(Dt(\"resume\"),r.flowing=!r.readableListening,O6e(this,r)),r.paused=!1,this};function O6e(r,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(K6e,r,e))}function K6e(r,e){Dt(\"resume\",e.reading),e.reading||r.read(0),e.resumeScheduled=!1,r.emit(\"resume\"),zO(r),e.flowing&&!e.reading&&r.read(0)}Ut.prototype.pause=function(){return Dt(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(Dt(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this};function zO(r){var e=r._readableState;for(Dt(\"flow\",e.flowing);e.flowing&&r.read()!==null;);}Ut.prototype.wrap=function(r){var e=this,t=this._readableState,i=!1;r.on(\"end\",function(){if(Dt(\"wrapped end\"),t.decoder&&!t.ended){var o=t.decoder.end();o&&o.length&&e.push(o)}e.push(null)}),r.on(\"data\",function(o){if(Dt(\"wrapped data\"),t.decoder&&(o=t.decoder.write(o)),!(t.objectMode&&o==null)&&!(!t.objectMode&&(!o||!o.length))){var a=e.push(o);a||(i=!0,r.pause())}});for(var n in r)this[n]===void 0&&typeof r[n]==\"function\"&&(this[n]=function(a){return function(){return r[a].apply(r,arguments)}}(n));for(var s=0;s<YO.length;s++)r.on(YO[s],this.emit.bind(this,YO[s]));return this._read=function(o){Dt(\"wrapped _read\",o),i&&(i=!1,r.resume())},this};typeof Symbol==\"function\"&&(Ut.prototype[Symbol.asyncIterator]=function(){return HO===void 0&&(HO=xce()),HO(this)});Object.defineProperty(Ut.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});Object.defineProperty(Ut.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}});Object.defineProperty(Ut.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}});Ut._fromList=Uce;Object.defineProperty(Ut.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}});function Uce(r,e){if(e.length===0)return null;var t;return e.objectMode?t=e.buffer.shift():!r||r>=e.length?(e.decoder?t=e.buffer.join(\"\"):e.buffer.length===1?t=e.buffer.first():t=e.buffer.concat(e.length),e.buffer.clear()):t=e.buffer.consume(r,e.decoder),t}function qO(r){var e=r._readableState;Dt(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(U6e,e,r))}function U6e(r,e){if(Dt(\"endReadableNT\",r.endEmitted,r.length),!r.endEmitted&&r.length===0&&(r.endEmitted=!0,e.readable=!1,e.emit(\"end\"),r.autoDestroy)){var t=e._writableState;(!t||t.autoDestroy&&t.finished)&&e.destroy()}}typeof Symbol==\"function\"&&(Ut.from=function(r,e){return GO===void 0&&(GO=Rce()),GO(Ut,r,e)});function Hce(r,e){for(var t=0,i=r.length;t<i;t++)if(r[t]===e)return t;return-1}});var VO=w((pQt,jce)=>{\"use strict\";jce.exports=hA;var xQ=Sl().codes,H6e=xQ.ERR_METHOD_NOT_IMPLEMENTED,G6e=xQ.ERR_MULTIPLE_CALLBACK,Y6e=xQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,j6e=xQ.ERR_TRANSFORM_WITH_LENGTH_0,PQ=qu();vl()(hA,PQ);function q6e(r,e){var t=this._transformState;t.transforming=!1;var i=t.writecb;if(i===null)return this.emit(\"error\",new G6e);t.writechunk=null,t.writecb=null,e!=null&&this.push(e),i(r);var n=this._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}function hA(r){if(!(this instanceof hA))return new hA(r);PQ.call(this,r),this._transformState={afterTransform:q6e.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,r&&(typeof r.transform==\"function\"&&(this._transform=r.transform),typeof r.flush==\"function\"&&(this._flush=r.flush)),this.on(\"prefinish\",J6e)}function J6e(){var r=this;typeof this._flush==\"function\"&&!this._readableState.destroyed?this._flush(function(e,t){Yce(r,e,t)}):Yce(this,null,null)}hA.prototype.push=function(r,e){return this._transformState.needTransform=!1,PQ.prototype.push.call(this,r,e)};hA.prototype._transform=function(r,e,t){t(new H6e(\"_transform()\"))};hA.prototype._write=function(r,e,t){var i=this._transformState;if(i.writecb=t,i.writechunk=r,i.writeencoding=e,!i.transforming){var n=this._readableState;(i.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}};hA.prototype._read=function(r){var e=this._transformState;e.writechunk!==null&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0};hA.prototype._destroy=function(r,e){PQ.prototype._destroy.call(this,r,function(t){e(t)})};function Yce(r,e,t){if(e)return r.emit(\"error\",e);if(t!=null&&r.push(t),r._writableState.length)throw new j6e;if(r._transformState.transforming)throw new Y6e;return r.push(null)}});var Wce=w((dQt,Jce)=>{\"use strict\";Jce.exports=yE;var qce=VO();vl()(yE,qce);function yE(r){if(!(this instanceof yE))return new yE(r);qce.call(this,r)}yE.prototype._transform=function(r,e,t){t(null,r)}});var _ce=w((CQt,Zce)=>{\"use strict\";var XO;function W6e(r){var e=!1;return function(){e||(e=!0,r.apply(void 0,arguments))}}var Xce=Sl().codes,z6e=Xce.ERR_MISSING_ARGS,V6e=Xce.ERR_STREAM_DESTROYED;function zce(r){if(r)throw r}function X6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Z6e(r,e,t,i){i=W6e(i);var n=!1;r.on(\"close\",function(){n=!0}),XO===void 0&&(XO=wQ()),XO(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,X6e(r))return r.abort();if(typeof r.destroy==\"function\")return r.destroy();i(o||new V6e(\"pipe\"))}}}function Vce(r){r()}function _6e(r,e){return r.pipe(e)}function $6e(r){return!r.length||typeof r[r.length-1]!=\"function\"?zce:r.pop()}function eVe(){for(var r=arguments.length,e=new Array(r),t=0;t<r;t++)e[t]=arguments[t];var i=$6e(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new z6e(\"streams\");var n,s=e.map(function(o,a){var l=a<e.length-1,c=a>0;return Z6e(o,l,c,function(u){n||(n=u),u&&s.forEach(Vce),!l&&(s.forEach(Vce),i(n))})});return e.reduce(_6e)}Zce.exports=eVe});var gp=w((Os,BE)=>{var wE=J(\"stream\");process.env.READABLE_STREAM===\"disable\"&&wE?(BE.exports=wE.Readable,Object.assign(BE.exports,wE),BE.exports.Stream=wE):(Os=BE.exports=NO(),Os.Stream=wE||Os,Os.Readable=Os,Os.Writable=kO(),Os.Duplex=qu(),Os.Transform=VO(),Os.PassThrough=Wce(),Os.finished=wQ(),Os.pipeline=_ce())});var tue=w((mQt,eue)=>{\"use strict\";var{Buffer:Io}=J(\"buffer\"),$ce=Symbol.for(\"BufferList\");function fr(r){if(!(this instanceof fr))return new fr(r);fr._init.call(this,r)}fr._init=function(e){Object.defineProperty(this,$ce,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};fr.prototype._new=function(e){return new fr(e)};fr.prototype._offset=function(e){if(e===0)return[0,0];let t=0;for(let i=0;i<this._bufs.length;i++){let n=t+this._bufs[i].length;if(e<n||i===this._bufs.length-1)return[i,e-t];t=n}};fr.prototype._reverseOffset=function(r){let e=r[0],t=r[1];for(let i=0;i<e;i++)t+=this._bufs[i].length;return t};fr.prototype.get=function(e){if(e>this.length||e<0)return;let t=this._offset(e);return this._bufs[t[0]][t[1]]};fr.prototype.slice=function(e,t){return typeof e==\"number\"&&e<0&&(e+=this.length),typeof t==\"number\"&&t<0&&(t+=this.length),this.copy(null,0,e,t)};fr.prototype.copy=function(e,t,i,n){if((typeof i!=\"number\"||i<0)&&(i=0),(typeof n!=\"number\"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||Io.alloc(0);let s=!!e,o=this._offset(i),a=n-i,l=a,c=s&&t||0,u=o[1];if(i===0&&n===this.length){if(!s)return this._bufs.length===1?this._bufs[0]:Io.concat(this._bufs,this.length);for(let g=0;g<this._bufs.length;g++)this._bufs[g].copy(e,c),c+=this._bufs[g].length;return e}if(l<=this._bufs[o[0]].length-u)return s?this._bufs[o[0]].copy(e,t,u,u+l):this._bufs[o[0]].slice(u,u+l);s||(e=Io.allocUnsafe(a));for(let g=o[0];g<this._bufs.length;g++){let f=this._bufs[g].length-u;if(l>f)this._bufs[g].copy(e,c,u),c+=f;else{this._bufs[g].copy(e,c,u,u+l),c+=f;break}l-=f,u&&(u=0)}return e.length>c?e.slice(0,c):e};fr.prototype.shallowSlice=function(e,t){if(e=e||0,t=typeof t!=\"number\"?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();let i=this._offset(e),n=this._offset(t),s=this._bufs.slice(i[0],n[0]+1);return n[1]===0?s.pop():s[s.length-1]=s[s.length-1].slice(0,n[1]),i[1]!==0&&(s[0]=s[0].slice(i[1])),this._new(s)};fr.prototype.toString=function(e,t,i){return this.slice(t,i).toString(e)};fr.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};fr.prototype.duplicate=function(){let e=this._new();for(let t=0;t<this._bufs.length;t++)e.append(this._bufs[t]);return e};fr.prototype.append=function(e){if(e==null)return this;if(e.buffer)this._appendBuffer(Io.from(e.buffer,e.byteOffset,e.byteLength));else if(Array.isArray(e))for(let t=0;t<e.length;t++)this.append(e[t]);else if(this._isBufferList(e))for(let t=0;t<e._bufs.length;t++)this.append(e._bufs[t]);else typeof e==\"number\"&&(e=e.toString()),this._appendBuffer(Io.from(e));return this};fr.prototype._appendBuffer=function(e){this._bufs.push(e),this.length+=e.length};fr.prototype.indexOf=function(r,e,t){if(t===void 0&&typeof e==\"string\"&&(t=e,e=void 0),typeof r==\"function\"||Array.isArray(r))throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.');if(typeof r==\"number\"?r=Io.from([r]):typeof r==\"string\"?r=Io.from(r,t):this._isBufferList(r)?r=r.slice():Array.isArray(r.buffer)?r=Io.from(r.buffer,r.byteOffset,r.byteLength):Io.isBuffer(r)||(r=Io.from(r)),e=Number(e||0),isNaN(e)&&(e=0),e<0&&(e=this.length+e),e<0&&(e=0),r.length===0)return e>this.length?this.length:e;let i=this._offset(e),n=i[0],s=i[1];for(;n<this._bufs.length;n++){let o=this._bufs[n];for(;s<o.length;)if(o.length-s>=r.length){let l=o.indexOf(r,s);if(l!==-1)return this._reverseOffset([n,l]);s=o.length-r.length+1}else{let l=this._reverseOffset([n,s]);if(this._match(l,r))return l;s++}s=0}return-1};fr.prototype._match=function(r,e){if(this.length-r<e.length)return!1;for(let t=0;t<e.length;t++)if(this.get(r+t)!==e[t])return!1;return!0};(function(){let r={readDoubleBE:8,readDoubleLE:8,readFloatBE:4,readFloatLE:4,readInt32BE:4,readInt32LE:4,readUInt32BE:4,readUInt32LE:4,readInt16BE:2,readInt16LE:2,readUInt16BE:2,readUInt16LE:2,readInt8:1,readUInt8:1,readIntBE:null,readIntLE:null,readUIntBE:null,readUIntLE:null};for(let e in r)(function(t){r[t]===null?fr.prototype[t]=function(i,n){return this.slice(i,i+n)[t](0,n)}:fr.prototype[t]=function(i=0){return this.slice(i,i+r[t])[t](0)}})(e)})();fr.prototype._isBufferList=function(e){return e instanceof fr||fr.isBufferList(e)};fr.isBufferList=function(e){return e!=null&&e[$ce]};eue.exports=fr});var rue=w((EQt,DQ)=>{\"use strict\";var ZO=gp().Duplex,tVe=vl(),bE=tue();function Wi(r){if(!(this instanceof Wi))return new Wi(r);if(typeof r==\"function\"){this._callback=r;let e=function(i){this._callback&&(this._callback(i),this._callback=null)}.bind(this);this.on(\"pipe\",function(i){i.on(\"error\",e)}),this.on(\"unpipe\",function(i){i.removeListener(\"error\",e)}),r=null}bE._init.call(this,r),ZO.call(this)}tVe(Wi,ZO);Object.assign(Wi.prototype,bE.prototype);Wi.prototype._new=function(e){return new Wi(e)};Wi.prototype._write=function(e,t,i){this._appendBuffer(e),typeof i==\"function\"&&i()};Wi.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Wi.prototype.end=function(e){ZO.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Wi.prototype._destroy=function(e,t){this._bufs.length=0,this.length=0,t(e)};Wi.prototype._isBufferList=function(e){return e instanceof Wi||e instanceof bE||Wi.isBufferList(e)};Wi.isBufferList=bE.isBufferList;DQ.exports=Wi;DQ.exports.BufferListStream=Wi;DQ.exports.BufferList=bE});var e1=w(hp=>{var rVe=Buffer.alloc,iVe=\"0000000000000000000\",nVe=\"7777777777777777777\",iue=\"0\".charCodeAt(0),nue=Buffer.from(\"ustar\\0\",\"binary\"),sVe=Buffer.from(\"00\",\"binary\"),oVe=Buffer.from(\"ustar \",\"binary\"),aVe=Buffer.from(\" \\0\",\"binary\"),AVe=parseInt(\"7777\",8),QE=257,$O=263,lVe=function(r,e,t){return typeof r!=\"number\"?t:(r=~~r,r>=e?e:r>=0||(r+=e,r>=0)?r:0)},cVe=function(r){switch(r){case 0:return\"file\";case 1:return\"link\";case 2:return\"symlink\";case 3:return\"character-device\";case 4:return\"block-device\";case 5:return\"directory\";case 6:return\"fifo\";case 7:return\"contiguous-file\";case 72:return\"pax-header\";case 55:return\"pax-global-header\";case 27:return\"gnu-long-link-path\";case 28:case 30:return\"gnu-long-path\"}return null},uVe=function(r){switch(r){case\"file\":return 0;case\"link\":return 1;case\"symlink\":return 2;case\"character-device\":return 3;case\"block-device\":return 4;case\"directory\":return 5;case\"fifo\":return 6;case\"contiguous-file\":return 7;case\"pax-header\":return 72}return 0},sue=function(r,e,t,i){for(;t<i;t++)if(r[t]===e)return t;return i},oue=function(r){for(var e=256,t=0;t<148;t++)e+=r[t];for(var i=156;i<512;i++)e+=r[i];return e},Rl=function(r,e){return r=r.toString(8),r.length>e?nVe.slice(0,e)+\" \":iVe.slice(0,e-r.length)+r+\" \"};function gVe(r){var e;if(r[0]===128)e=!0;else if(r[0]===255)e=!1;else return null;for(var t=[],i=r.length-1;i>0;i--){var n=r[i];e?t.push(n):t.push(255-n)}var s=0,o=t.length;for(i=0;i<o;i++)s+=t[i]*Math.pow(256,i);return e?s:-1*s}var Fl=function(r,e,t){if(r=r.slice(e,e+t),e=0,r[e]&128)return gVe(r);for(;e<r.length&&r[e]===32;)e++;for(var i=lVe(sue(r,32,e,r.length),r.length,r.length);e<i&&r[e]===0;)e++;return i===e?0:parseInt(r.slice(e,i).toString(),8)},fp=function(r,e,t,i){return r.slice(e,sue(r,0,e,e+t)).toString(i)},_O=function(r){var e=Buffer.byteLength(r),t=Math.floor(Math.log(e)/Math.log(10))+1;return e+t>=Math.pow(10,t)&&t++,e+t+r};hp.decodeLongPath=function(r,e){return fp(r,0,r.length,e)};hp.encodePax=function(r){var e=\"\";r.name&&(e+=_O(\" path=\"+r.name+`\n`)),r.linkname&&(e+=_O(\" linkpath=\"+r.linkname+`\n`));var t=r.pax;if(t)for(var i in t)e+=_O(\" \"+i+\"=\"+t[i]+`\n`);return Buffer.from(e)};hp.decodePax=function(r){for(var e={};r.length;){for(var t=0;t<r.length&&r[t]!==32;)t++;var i=parseInt(r.slice(0,t).toString(),10);if(!i)return e;var n=r.slice(t+1,i-1).toString(),s=n.indexOf(\"=\");if(s===-1)return e;e[n.slice(0,s)]=n.slice(s+1),r=r.slice(i)}return e};hp.encode=function(r){var e=rVe(512),t=r.name,i=\"\";if(r.typeflag===5&&t[t.length-1]!==\"/\"&&(t+=\"/\"),Buffer.byteLength(t)!==t.length)return null;for(;Buffer.byteLength(t)>100;){var n=t.indexOf(\"/\");if(n===-1)return null;i+=i?\"/\"+t.slice(0,n):t.slice(0,n),t=t.slice(n+1)}return Buffer.byteLength(t)>100||Buffer.byteLength(i)>155||r.linkname&&Buffer.byteLength(r.linkname)>100?null:(e.write(t),e.write(Rl(r.mode&AVe,6),100),e.write(Rl(r.uid,6),108),e.write(Rl(r.gid,6),116),e.write(Rl(r.size,11),124),e.write(Rl(r.mtime.getTime()/1e3|0,11),136),e[156]=iue+uVe(r.type),r.linkname&&e.write(r.linkname,157),nue.copy(e,QE),sVe.copy(e,$O),r.uname&&e.write(r.uname,265),r.gname&&e.write(r.gname,297),e.write(Rl(r.devmajor||0,6),329),e.write(Rl(r.devminor||0,6),337),i&&e.write(i,345),e.write(Rl(oue(e),6),148),e)};hp.decode=function(r,e,t){var i=r[156]===0?0:r[156]-iue,n=fp(r,0,100,e),s=Fl(r,100,8),o=Fl(r,108,8),a=Fl(r,116,8),l=Fl(r,124,12),c=Fl(r,136,12),u=cVe(i),g=r[157]===0?null:fp(r,157,100,e),f=fp(r,265,32),h=fp(r,297,32),p=Fl(r,329,8),C=Fl(r,337,8),y=oue(r);if(y===8*32)return null;if(y!==Fl(r,148,8))throw new Error(\"Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?\");if(nue.compare(r,QE,QE+6)===0)r[345]&&(n=fp(r,345,155,e)+\"/\"+n);else if(!(oVe.compare(r,QE,QE+6)===0&&aVe.compare(r,$O,$O+2)===0)){if(!t)throw new Error(\"Invalid tar header: unknown format.\")}return i===0&&n&&n[n.length-1]===\"/\"&&(i=5),{name:n,mode:s,uid:o,gid:a,size:l,mtime:new Date(1e3*c),type:u,linkname:g,uname:f,gname:h,devmajor:p,devminor:C}}});var fue=w((yQt,gue)=>{var Aue=J(\"util\"),fVe=rue(),SE=e1(),lue=gp().Writable,cue=gp().PassThrough,uue=function(){},aue=function(r){return r&=511,r&&512-r},hVe=function(r,e){var t=new kQ(r,e);return t.end(),t},pVe=function(r,e){return e.path&&(r.name=e.path),e.linkpath&&(r.linkname=e.linkpath),e.size&&(r.size=parseInt(e.size,10)),r.pax=e,r},kQ=function(r,e){this._parent=r,this.offset=e,cue.call(this,{autoDestroy:!1})};Aue.inherits(kQ,cue);kQ.prototype.destroy=function(r){this._parent.destroy(r)};var pA=function(r){if(!(this instanceof pA))return new pA(r);lue.call(this,r),r=r||{},this._offset=0,this._buffer=fVe(),this._missing=0,this._partial=!1,this._onparse=uue,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,t=e._buffer,i=function(){e._continue()},n=function(f){if(e._locked=!1,f)return e.destroy(f);e._stream||i()},s=function(){e._stream=null;var f=aue(e._header.size);f?e._parse(f,o):e._parse(512,g),e._locked||i()},o=function(){e._buffer.consume(aue(e._header.size)),e._parse(512,g),i()},a=function(){var f=e._header.size;e._paxGlobal=SE.decodePax(t.slice(0,f)),t.consume(f),s()},l=function(){var f=e._header.size;e._pax=SE.decodePax(t.slice(0,f)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),t.consume(f),s()},c=function(){var f=e._header.size;this._gnuLongPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},u=function(){var f=e._header.size;this._gnuLongLinkPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},g=function(){var f=e._offset,h;try{h=e._header=SE.decode(t.slice(0,512),r.filenameEncoding,r.allowUnknownFormat)}catch(p){e.emit(\"error\",p)}if(t.consume(512),!h){e._parse(512,g),i();return}if(h.type===\"gnu-long-path\"){e._parse(h.size,c),i();return}if(h.type===\"gnu-long-link-path\"){e._parse(h.size,u),i();return}if(h.type===\"pax-global-header\"){e._parse(h.size,a),i();return}if(h.type===\"pax-header\"){e._parse(h.size,l),i();return}if(e._gnuLongPath&&(h.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(h.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=h=pVe(h,e._pax),e._pax=null),e._locked=!0,!h.size||h.type===\"directory\"){e._parse(512,g),e.emit(\"entry\",h,hVe(e,f),n);return}e._stream=new kQ(e,f),e.emit(\"entry\",h,e._stream,n),e._parse(h.size,s),i()};this._onheader=g,this._parse(512,g)};Aue.inherits(pA,lue);pA.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.emit(\"close\"))};pA.prototype._parse=function(r,e){this._destroyed||(this._offset+=r,this._missing=r,e===this._onheader&&(this._partial=!1),this._onparse=e)};pA.prototype._continue=function(){if(!this._destroyed){var r=this._cb;this._cb=uue,this._overflow?this._write(this._overflow,void 0,r):r()}};pA.prototype._write=function(r,e,t){if(!this._destroyed){var i=this._stream,n=this._buffer,s=this._missing;if(r.length&&(this._partial=!0),r.length<s)return this._missing-=r.length,this._overflow=null,i?i.write(r,t):(n.append(r),t());this._cb=t,this._missing=0;var o=null;r.length>s&&(o=r.slice(s),r=r.slice(0,s)),i?i.end(r):n.append(r),this._overflow=o,this._onparse()}};pA.prototype._final=function(r){if(this._partial)return this.destroy(new Error(\"Unexpected end of data\"));r()};gue.exports=pA});var pue=w((wQt,hue)=>{hue.exports=J(\"fs\").constants||J(\"constants\")});var Iue=w((BQt,Eue)=>{var pp=pue(),due=Pk(),FQ=vl(),dVe=Buffer.alloc,Cue=gp().Readable,dp=gp().Writable,CVe=J(\"string_decoder\").StringDecoder,RQ=e1(),mVe=parseInt(\"755\",8),EVe=parseInt(\"644\",8),mue=dVe(1024),r1=function(){},t1=function(r,e){e&=511,e&&r.push(mue.slice(0,512-e))};function IVe(r){switch(r&pp.S_IFMT){case pp.S_IFBLK:return\"block-device\";case pp.S_IFCHR:return\"character-device\";case pp.S_IFDIR:return\"directory\";case pp.S_IFIFO:return\"fifo\";case pp.S_IFLNK:return\"symlink\"}return\"file\"}var NQ=function(r){dp.call(this),this.written=0,this._to=r,this._destroyed=!1};FQ(NQ,dp);NQ.prototype._write=function(r,e,t){if(this.written+=r.length,this._to.push(r))return t();this._to._drain=t};NQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var TQ=function(){dp.call(this),this.linkname=\"\",this._decoder=new CVe(\"utf-8\"),this._destroyed=!1};FQ(TQ,dp);TQ.prototype._write=function(r,e,t){this.linkname+=this._decoder.write(r),t()};TQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var vE=function(){dp.call(this),this._destroyed=!1};FQ(vE,dp);vE.prototype._write=function(r,e,t){t(new Error(\"No body allowed for this entry\"))};vE.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var la=function(r){if(!(this instanceof la))return new la(r);Cue.call(this,r),this._drain=r1,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};FQ(la,Cue);la.prototype.entry=function(r,e,t){if(this._stream)throw new Error(\"already piping an entry\");if(!(this._finalized||this._destroyed)){typeof e==\"function\"&&(t=e,e=null),t||(t=r1);var i=this;if((!r.size||r.type===\"symlink\")&&(r.size=0),r.type||(r.type=IVe(r.mode)),r.mode||(r.mode=r.type===\"directory\"?mVe:EVe),r.uid||(r.uid=0),r.gid||(r.gid=0),r.mtime||(r.mtime=new Date),typeof e==\"string\"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){r.size=e.length,this._encode(r);var n=this.push(e);return t1(i,r.size),n?process.nextTick(t):this._drain=t,new vE}if(r.type===\"symlink\"&&!r.linkname){var s=new TQ;return due(s,function(a){if(a)return i.destroy(),t(a);r.linkname=s.linkname,i._encode(r),t()}),s}if(this._encode(r),r.type!==\"file\"&&r.type!==\"contiguous-file\")return process.nextTick(t),new vE;var o=new NQ(this);return this._stream=o,due(o,function(a){if(i._stream=null,a)return i.destroy(),t(a);if(o.written!==r.size)return i.destroy(),t(new Error(\"size mismatch\"));t1(i,r.size),i._finalizing&&i.finalize(),t()}),o}};la.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(mue),this.push(null))};la.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.destroy&&this._stream.destroy())};la.prototype._encode=function(r){if(!r.pax){var e=RQ.encode(r);if(e){this.push(e);return}}this._encodePax(r)};la.prototype._encodePax=function(r){var e=RQ.encodePax({name:r.name,linkname:r.linkname,pax:r.pax}),t={name:\"PaxHeader\",mode:r.mode,uid:r.uid,gid:r.gid,size:e.length,mtime:r.mtime,type:\"pax-header\",linkname:r.linkname&&\"PaxHeader\",uname:r.uname,gname:r.gname,devmajor:r.devmajor,devminor:r.devminor};this.push(RQ.encode(t)),this.push(e),t1(this,e.length),t.size=r.size,t.type=r.type,this.push(RQ.encode(t))};la.prototype._read=function(r){var e=this._drain;this._drain=r1,e()};Eue.exports=la});var yue=w(i1=>{i1.extract=fue();i1.pack=Iue()});var Fue=w((qQt,Rue)=>{\"use strict\";var Xu=class{constructor(e,t,i){this.__specs=e||{},Object.keys(this.__specs).forEach(n=>{if(typeof this.__specs[n]==\"string\"){let s=this.__specs[n],o=this.__specs[s];if(o){let a=o.aliases||[];a.push(n,s),o.aliases=[...new Set(a)],this.__specs[n]=o}else throw new Error(`Alias refers to invalid key: ${s} -> ${n}`)}}),this.__opts=t||{},this.__providers=Due(i.filter(n=>n!=null&&typeof n==\"object\")),this.__isFiggyPudding=!0}get(e){return l1(this,e,!0)}get[Symbol.toStringTag](){return\"FiggyPudding\"}forEach(e,t=this){for(let[i,n]of this.entries())e.call(t,n,i,this)}toJSON(){let e={};return this.forEach((t,i)=>{e[i]=t}),e}*entries(e){for(let i of Object.keys(this.__specs))yield[i,this.get(i)];let t=e||this.__opts.other;if(t){let i=new Set;for(let n of this.__providers){let s=n.entries?n.entries(t):TVe(n);for(let[o,a]of s)t(o)&&!i.has(o)&&(i.add(o),yield[o,a])}}}*[Symbol.iterator](){for(let[e,t]of this.entries())yield[e,t]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Xu(this.__specs,this.__opts,Due(this.__providers).concat(e)),kue)}};try{let r=J(\"util\");Xu.prototype[r.inspect.custom]=function(e,t){return this[Symbol.toStringTag]+\" \"+r.inspect(this.toJSON(),t)}}catch{}function FVe(r){throw Object.assign(new Error(`invalid config key requested: ${r}`),{code:\"EBADKEY\"})}function l1(r,e,t){let i=r.__specs[e];if(t&&!i&&(!r.__opts.other||!r.__opts.other(e)))FVe(e);else{i||(i={});let n;for(let s of r.__providers){if(n=Pue(e,s),n===void 0&&i.aliases&&i.aliases.length){for(let o of i.aliases)if(o!==e&&(n=Pue(o,s),n!==void 0))break}if(n!==void 0)break}return n===void 0&&i.default!==void 0?typeof i.default==\"function\"?i.default(r):i.default:n}}function Pue(r,e){let t;return e.__isFiggyPudding?t=l1(e,r,!1):typeof e.get==\"function\"?t=e.get(r):t=e[r],t}var kue={has(r,e){return e in r.__specs&&l1(r,e,!1)!==void 0},ownKeys(r){return Object.keys(r.__specs)},get(r,e){return typeof e==\"symbol\"||e.slice(0,2)===\"__\"||e in Xu.prototype?r[e]:r.get(e)},set(r,e,t){if(typeof e==\"symbol\"||e.slice(0,2)===\"__\")return r[e]=t,!0;throw new Error(\"figgyPudding options cannot be modified. Use .concat() instead.\")},deleteProperty(){throw new Error(\"figgyPudding options cannot be deleted. Use .concat() and shadow them instead.\")}};Rue.exports=NVe;function NVe(r,e){function t(...i){return new Proxy(new Xu(r,e,i),kue)}return t}function Due(r){let e=[];return r.forEach(t=>e.unshift(t)),e}function TVe(r){return Object.keys(r).map(e=>[e,r[e]])}});var Lue=w((JQt,ga)=>{\"use strict\";var PE=J(\"crypto\"),LVe=Fue(),MVe=J(\"stream\").Transform,Nue=[\"sha256\",\"sha384\",\"sha512\"],OVe=/^[a-z0-9+/]+(?:=?=?)$/i,KVe=/^([^-]+)-([^?]+)([?\\S*]*)$/,UVe=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\\?[\\x21-\\x7E]*)*$/,HVe=/^[\\x21-\\x7E]+$/,An=LVe({algorithms:{default:[\"sha512\"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>VVe},Promise:{default:()=>Promise},sep:{default:\" \"},single:{default:!1},size:{},strict:{default:!1}}),Nl=class{get isHash(){return!0}constructor(e,t){t=An(t);let i=!!t.strict;this.source=e.trim();let n=this.source.match(i?UVe:KVe);if(!n||i&&!Nue.some(o=>o===n[1]))return;this.algorithm=n[1],this.digest=n[2];let s=n[3];this.options=s?s.slice(1).split(\"?\"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,\"base64\").toString(\"hex\")}toJSON(){return this.toString()}toString(e){if(e=An(e),e.strict&&!(Nue.some(i=>i===this.algorithm)&&this.digest.match(OVe)&&(this.options||[]).every(i=>i.match(HVe))))return\"\";let t=this.options&&this.options.length?`?${this.options.join(\"?\")}`:\"\";return`${this.algorithm}-${this.digest}${t}`}},Zu=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=An(e);let t=e.sep||\" \";return e.strict&&(t=t.replace(/\\S+/g,\" \")),Object.keys(this).map(i=>this[i].map(n=>Nl.prototype.toString.call(n,e)).filter(n=>n.length).join(t)).filter(i=>i.length).join(t)}concat(e,t){t=An(t);let i=typeof e==\"string\"?e:xE(e,t);return ua(`${this.toString(t)} ${i}`,t)}hexDigest(){return ua(this,{single:!0}).hexDigest()}match(e,t){t=An(t);let i=ua(e,t),n=i.pickAlgorithm(t);return this[n]&&i[n]&&this[n].find(s=>i[n].find(o=>s.digest===o.digest))||!1}pickAlgorithm(e){e=An(e);let t=e.pickAlgorithm,i=Object.keys(this);if(!i.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return i.reduce((n,s)=>t(n,s)||n)}};ga.exports.parse=ua;function ua(r,e){if(e=An(e),typeof r==\"string\")return c1(r,e);if(r.algorithm&&r.digest){let t=new Zu;return t[r.algorithm]=[r],c1(xE(t,e),e)}else return c1(xE(r,e),e)}function c1(r,e){return e.single?new Nl(r,e):r.trim().split(/\\s+/).reduce((t,i)=>{let n=new Nl(i,e);if(n.algorithm&&n.digest){let s=n.algorithm;t[s]||(t[s]=[]),t[s].push(n)}return t},new Zu)}ga.exports.stringify=xE;function xE(r,e){return e=An(e),r.algorithm&&r.digest?Nl.prototype.toString.call(r,e):typeof r==\"string\"?xE(ua(r,e),e):Zu.prototype.toString.call(r,e)}ga.exports.fromHex=GVe;function GVe(r,e,t){t=An(t);let i=t.options&&t.options.length?`?${t.options.join(\"?\")}`:\"\";return ua(`${e}-${Buffer.from(r,\"hex\").toString(\"base64\")}${i}`,t)}ga.exports.fromData=YVe;function YVe(r,e){e=An(e);let t=e.algorithms,i=e.options&&e.options.length?`?${e.options.join(\"?\")}`:\"\";return t.reduce((n,s)=>{let o=PE.createHash(s).update(r).digest(\"base64\"),a=new Nl(`${s}-${o}${i}`,e);if(a.algorithm&&a.digest){let l=a.algorithm;n[l]||(n[l]=[]),n[l].push(a)}return n},new Zu)}ga.exports.fromStream=jVe;function jVe(r,e){e=An(e);let t=e.Promise||Promise,i=u1(e);return new t((n,s)=>{r.pipe(i),r.on(\"error\",s),i.on(\"error\",s);let o;i.on(\"integrity\",a=>{o=a}),i.on(\"end\",()=>n(o)),i.on(\"data\",()=>{})})}ga.exports.checkData=qVe;function qVe(r,e,t){if(t=An(t),e=ua(e,t),!Object.keys(e).length){if(t.error)throw Object.assign(new Error(\"No valid integrity hashes to check against\"),{code:\"EINTEGRITY\"});return!1}let i=e.pickAlgorithm(t),n=PE.createHash(i).update(r).digest(\"base64\"),s=ua({algorithm:i,digest:n}),o=s.match(e,t);if(o||!t.error)return o;if(typeof t.size==\"number\"&&r.length!==t.size){let a=new Error(`data size mismatch when checking ${e}.\n  Wanted: ${t.size}\n  Found: ${r.length}`);throw a.code=\"EBADSIZE\",a.found=r.length,a.expected=t.size,a.sri=e,a}else{let a=new Error(`Integrity checksum failed when using ${i}: Wanted ${e}, but got ${s}. (${r.length} bytes)`);throw a.code=\"EINTEGRITY\",a.found=s,a.expected=e,a.algorithm=i,a.sri=e,a}}ga.exports.checkStream=JVe;function JVe(r,e,t){t=An(t);let i=t.Promise||Promise,n=u1(t.concat({integrity:e}));return new i((s,o)=>{r.pipe(n),r.on(\"error\",o),n.on(\"error\",o);let a;n.on(\"verified\",l=>{a=l}),n.on(\"end\",()=>s(a)),n.on(\"data\",()=>{})})}ga.exports.integrityStream=u1;function u1(r){r=An(r);let e=r.integrity&&ua(r.integrity,r),t=e&&Object.keys(e).length,i=t&&e.pickAlgorithm(r),n=t&&e[i],s=Array.from(new Set(r.algorithms.concat(i?[i]:[]))),o=s.map(PE.createHash),a=0,l=new MVe({transform(c,u,g){a+=c.length,o.forEach(f=>f.update(c,u)),g(null,c,u)}}).on(\"end\",()=>{let c=r.options&&r.options.length?`?${r.options.join(\"?\")}`:\"\",u=ua(o.map((f,h)=>`${s[h]}-${f.digest(\"base64\")}${c}`).join(\" \"),r),g=t&&u.match(e,r);if(typeof r.size==\"number\"&&a!==r.size){let f=new Error(`stream size mismatch when checking ${e}.\n  Wanted: ${r.size}\n  Found: ${a}`);f.code=\"EBADSIZE\",f.found=a,f.expected=r.size,f.sri=e,l.emit(\"error\",f)}else if(r.integrity&&!g){let f=new Error(`${e} integrity checksum failed when using ${i}: wanted ${n} but got ${u}. (${a} bytes)`);f.code=\"EINTEGRITY\",f.found=u,f.expected=n,f.algorithm=i,f.sri=e,l.emit(\"error\",f)}else l.emit(\"size\",a),l.emit(\"integrity\",u),g&&l.emit(\"verified\",g)});return l}ga.exports.create=WVe;function WVe(r){r=An(r);let e=r.algorithms,t=r.options.length?`?${r.options.join(\"?\")}`:\"\",i=e.map(PE.createHash);return{update:function(n,s){return i.forEach(o=>o.update(n,s)),this},digest:function(n){return e.reduce((o,a)=>{let l=i.shift().digest(\"base64\"),c=new Nl(`${a}-${l}${t}`,r);if(c.algorithm&&c.digest){let u=c.algorithm;o[u]||(o[u]=[]),o[u].push(c)}return o},new Zu)}}}var zVe=new Set(PE.getHashes()),Tue=[\"md5\",\"whirlpool\",\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"sha3\",\"sha3-256\",\"sha3-384\",\"sha3-512\",\"sha3_256\",\"sha3_384\",\"sha3_512\"].filter(r=>zVe.has(r));function VVe(r,e){return Tue.indexOf(r.toLowerCase())>=Tue.indexOf(e.toLowerCase())?r:e}});var sm={};ut(sm,{BuildType:()=>M0,Cache:()=>Rt,Configuration:()=>ye,DEFAULT_LOCK_FILENAME:()=>ok,DEFAULT_RC_FILENAME:()=>sk,FormatType:()=>xi,InstallMode:()=>ts,LightReport:()=>ra,LinkType:()=>Ef,Manifest:()=>ot,MessageName:()=>Ct,MultiFetcher:()=>Df,PackageExtensionStatus:()=>Xx,PackageExtensionType:()=>Vx,Project:()=>je,ProjectLookup:()=>ck,Report:()=>vi,ReportError:()=>at,SettingsType:()=>ak,StreamReport:()=>Ge,TAG_REGEXP:()=>Rf,TelemetryManager:()=>Sh,ThrowReport:()=>ti,VirtualFetcher:()=>Ff,Workspace:()=>Qh,WorkspaceFetcher:()=>Tf,WorkspaceResolver:()=>Yr,YarnVersion:()=>Tr,execUtils:()=>Cr,folderUtils:()=>Tw,formatUtils:()=>ee,hashUtils:()=>li,httpUtils:()=>Xt,miscUtils:()=>Ie,nodeUtils:()=>ws,parseMessageName:()=>LI,scriptUtils:()=>Wt,semverUtils:()=>vt,stringifyMessageName:()=>FA,structUtils:()=>P,tgzUtils:()=>mi,treeUtils:()=>es});var Cr={};ut(Cr,{EndStrategy:()=>hk,ExecError:()=>Yw,PipeError:()=>dC,execvp:()=>tk,pipevp:()=>oo});var Wp={};ut(Wp,{AliasFS:()=>So,CustomDir:()=>Hp,CwdFS:()=>qt,DEFAULT_COMPRESSION_LEVEL:()=>Xl,FakeFS:()=>ya,Filename:()=>xt,JailFS:()=>vo,LazyFS:()=>Sg,LinkStrategy:()=>CS,NoFS:()=>jp,NodeFS:()=>$t,PortablePath:()=>Me,PosixFS:()=>vg,ProxiedFS:()=>pi,VirtualFS:()=>Br,ZipFS:()=>Wr,ZipOpenFS:()=>Kn,constants:()=>xr,extendFs:()=>AI,normalizeLineEndings:()=>Vl,npath:()=>K,opendir:()=>tI,patchFs:()=>bS,ppath:()=>x,statUtils:()=>Mp,toFilename:()=>Jr,xfs:()=>O});var xr={};ut(xr,{SAFE_TIME:()=>sK,S_IFDIR:()=>Jl,S_IFLNK:()=>zl,S_IFMT:()=>qs,S_IFREG:()=>Wl});var qs=61440,Jl=16384,Wl=32768,zl=40960,sK=456789e3;var Mp={};ut(Mp,{BigIntStatsEntry:()=>Bg,DEFAULT_MODE:()=>Tp,DirEntry:()=>cS,StatEntry:()=>Ia,areStatsEqual:()=>gS,clearStats:()=>WE,convertToBigIntStats:()=>zE,makeDefaultStats:()=>Lp,makeEmptyStats:()=>Mge});var uS=Pe(J(\"util\"));var Tp=33188,cS=class{constructor(){this.name=\"\";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Ia=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=Tp;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Bg=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(Tp);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}};function Lp(){return new Ia}function Mge(){return WE(Lp())}function WE(r){for(let e in r)if(Object.prototype.hasOwnProperty.call(r,e)){let t=r[e];typeof t==\"number\"?r[e]=0:typeof t==\"bigint\"?r[e]=BigInt(0):uS.types.isDate(t)&&(r[e]=new Date(0))}return r}function zE(r){let e=new Bg;for(let t in r)if(Object.prototype.hasOwnProperty.call(r,t)){let i=r[t];typeof i==\"number\"?e[t]=BigInt(i):uS.types.isDate(i)&&(e[t]=new Date(i))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function gS(r,e){if(r.atimeMs!==e.atimeMs||r.birthtimeMs!==e.birthtimeMs||r.blksize!==e.blksize||r.blocks!==e.blocks||r.ctimeMs!==e.ctimeMs||r.dev!==e.dev||r.gid!==e.gid||r.ino!==e.ino||r.isBlockDevice()!==e.isBlockDevice()||r.isCharacterDevice()!==e.isCharacterDevice()||r.isDirectory()!==e.isDirectory()||r.isFIFO()!==e.isFIFO()||r.isFile()!==e.isFile()||r.isSocket()!==e.isSocket()||r.isSymbolicLink()!==e.isSymbolicLink()||r.mode!==e.mode||r.mtimeMs!==e.mtimeMs||r.nlink!==e.nlink||r.rdev!==e.rdev||r.size!==e.size||r.uid!==e.uid)return!1;let t=r,i=e;return!(t.atimeNs!==i.atimeNs||t.mtimeNs!==i.mtimeNs||t.ctimeNs!==i.ctimeNs||t.birthtimeNs!==i.birthtimeNs)}var XE=Pe(J(\"fs\"));var Op=Pe(J(\"path\"));var Me={root:\"/\",dot:\".\",parent:\"..\"},xt={nodeModules:\"node_modules\",manifest:\"package.json\",lockfile:\"yarn.lock\",virtual:\"__virtual__\",pnpJs:\".pnp.js\",pnpCjs:\".pnp.cjs\",rc:\".yarnrc.yml\"},K=Object.create(Op.default),x=Object.create(Op.default.posix);K.cwd=()=>process.cwd();x.cwd=()=>fS(process.cwd());x.resolve=(...r)=>r.length>0&&x.isAbsolute(r[0])?Op.default.posix.resolve(...r):Op.default.posix.resolve(x.cwd(),...r);var oK=function(r,e,t){return e=r.normalize(e),t=r.normalize(t),e===t?\".\":(e.endsWith(r.sep)||(e=e+r.sep),t.startsWith(e)?t.slice(e.length):null)};K.fromPortablePath=aK;K.toPortablePath=fS;K.contains=(r,e)=>oK(K,r,e);x.contains=(r,e)=>oK(x,r,e);var Oge=/^([a-zA-Z]:.*)$/,Kge=/^\\/\\/(\\.\\/)?(.*)$/,Uge=/^\\/([a-zA-Z]:.*)$/,Hge=/^\\/unc\\/(\\.dot\\/)?(.*)$/;function aK(r){if(process.platform!==\"win32\")return r;let e,t;if(e=r.match(Uge))r=e[1];else if(t=r.match(Hge))r=`\\\\\\\\${t[1]?\".\\\\\":\"\"}${t[2]}`;else return r;return r.replace(/\\//g,\"\\\\\")}function fS(r){if(process.platform!==\"win32\")return r;r=r.replace(/\\\\/g,\"/\");let e,t;return(e=r.match(Oge))?r=`/${e[1]}`:(t=r.match(Kge))&&(r=`/unc/${t[1]?\".dot/\":\"\"}${t[2]}`),r}function VE(r,e){return r===K?aK(e):fS(e)}function Jr(r){if(K.parse(r).dir!==\"\"||x.parse(r).dir!==\"\")throw new Error(`Invalid filename: \"${r}\"`);return r}var ZE=new Date(456789e3*1e3),CS=(t=>(t.Allow=\"allow\",t.ReadOnly=\"readOnly\",t))(CS||{});async function AK(r,e,t,i,n){let s=r.pathUtils.normalize(e),o=t.pathUtils.normalize(i),a=[],l=[],{atime:c,mtime:u}=n.stableTime?{atime:ZE,mtime:ZE}:await t.lstatPromise(o);await r.mkdirpPromise(r.pathUtils.dirname(e),{utimes:[c,u]});let g=typeof r.lutimesPromise==\"function\"?r.lutimesPromise.bind(r):r.utimesPromise.bind(r);await pS(a,l,g,r,s,t,o,{...n,didParentExist:!0});for(let f of a)await f();await Promise.all(l.map(f=>f()))}async function pS(r,e,t,i,n,s,o,a){var h,p;let l=a.didParentExist?await Gge(i,n):null,c=await s.lstatPromise(o),{atime:u,mtime:g}=a.stableTime?{atime:ZE,mtime:ZE}:c,f;switch(!0){case c.isDirectory():f=await Yge(r,e,t,i,n,l,s,o,c,a);break;case c.isFile():f=await qge(r,e,t,i,n,l,s,o,c,a);break;case c.isSymbolicLink():f=await Jge(r,e,t,i,n,l,s,o,c,a);break;default:throw new Error(`Unsupported file type (${c.mode})`)}return(f||((h=l==null?void 0:l.mtime)==null?void 0:h.getTime())!==g.getTime()||((p=l==null?void 0:l.atime)==null?void 0:p.getTime())!==u.getTime())&&(e.push(()=>t(n,u,g)),f=!0),(l===null||(l.mode&511)!==(c.mode&511))&&(e.push(()=>i.chmodPromise(n,c.mode&511)),f=!0),f}async function Gge(r,e){try{return await r.lstatPromise(e)}catch{return null}}async function Yge(r,e,t,i,n,s,o,a,l,c){if(s!==null&&!s.isDirectory())if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=!1;s===null&&(r.push(async()=>{try{await i.mkdirPromise(n,{mode:l.mode})}catch(h){if(h.code!==\"EEXIST\")throw h}}),u=!0);let g=await o.readdirPromise(a),f=c.didParentExist&&!s?{...c,didParentExist:!1}:c;if(c.stableSort)for(let h of g.sort())await pS(r,e,t,i,i.pathUtils.join(n,h),o,o.pathUtils.join(a,h),f)&&(u=!0);else(await Promise.all(g.map(async p=>{await pS(r,e,t,i,i.pathUtils.join(n,p),o,o.pathUtils.join(a,p),f)}))).some(p=>p)&&(u=!0);return u}var hS=new WeakMap;function dS(r,e,t,i,n){return async()=>{await r.linkPromise(t,e),n===\"readOnly\"&&(i.mode&=-147,await r.chmodPromise(e,i.mode))}}function jge(r,e,t,i,n){let s=hS.get(r);return typeof s>\"u\"?async()=>{try{await r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE),hS.set(r,!0)}catch(o){if(o.code===\"ENOSYS\"||o.code===\"ENOTSUP\")hS.set(r,!1),await dS(r,e,t,i,n)();else throw o}}:s?async()=>r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE):dS(r,e,t,i,n)}async function qge(r,e,t,i,n,s,o,a,l,c){var f;if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=(f=c.linkStrategy)!=null?f:null,g=i===o?u!==null?jge(i,n,a,l,u):async()=>i.copyFilePromise(a,n,XE.default.constants.COPYFILE_FICLONE):u!==null?dS(i,n,a,l,u):async()=>i.writeFilePromise(n,await o.readFilePromise(a));return r.push(async()=>g()),!0}async function Jge(r,e,t,i,n,s,o,a,l,c){if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;return r.push(async()=>{await i.symlinkPromise(VE(i.pathUtils,await o.readlinkPromise(a)),n)}),!0}function As(r,e){return Object.assign(new Error(`${r}: ${e}`),{code:r})}function $E(r){return As(\"EBUSY\",r)}function Kp(r,e){return As(\"ENOSYS\",`${r}, ${e}`)}function vA(r){return As(\"EINVAL\",`invalid argument, ${r}`)}function Ur(r){return As(\"EBADF\",`bad file descriptor, ${r}`)}function Js(r){return As(\"ENOENT\",`no such file or directory, ${r}`)}function Qo(r){return As(\"ENOTDIR\",`not a directory, ${r}`)}function Up(r){return As(\"EISDIR\",`illegal operation on a directory, ${r}`)}function eI(r){return As(\"EEXIST\",`file already exists, ${r}`)}function un(r){return As(\"EROFS\",`read-only filesystem, ${r}`)}function lK(r){return As(\"ENOTEMPTY\",`directory not empty, ${r}`)}function cK(r){return As(\"EOPNOTSUPP\",`operation not supported, ${r}`)}function uK(){return As(\"ERR_DIR_CLOSED\",\"Directory handle was closed\")}var _E=class extends Error{constructor(t,i){super(t);this.name=\"Libzip Error\",this.code=i}};var Hp=class{constructor(e,t,i={}){this.path=e;this.nextDirent=t;this.opts=i;this.closed=!1}throwIfClosed(){if(this.closed)throw uK()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let t=this.readSync();return typeof e<\"u\"?e(null,t):Promise.resolve(t)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<\"u\"?e(null):Promise.resolve()}closeSync(){var e,t;this.throwIfClosed(),(t=(e=this.opts).onClose)==null||t.call(e),this.closed=!0}};function tI(r,e,t,i){let n=()=>{let s=t.shift();return typeof s>\"u\"?null:Object.assign(r.statSync(r.pathUtils.join(e,s)),{name:s})};return new Hp(e,n,i)}var gK=J(\"os\");var ya=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:t=!1}={}){let i=[e];for(;i.length>0;){let n=i.shift();if((await this.lstatPromise(n)).isDirectory()){let o=await this.readdirPromise(n);if(t)for(let a of o.sort())i.push(this.pathUtils.join(n,a));else throw new Error(\"Not supported\")}else yield n}}async removePromise(e,{recursive:t=!0,maxRetries:i=5}={}){let n;try{n=await this.lstatPromise(e)}catch(s){if(s.code===\"ENOENT\")return;throw s}if(n.isDirectory()){if(t){let s=await this.readdirPromise(e);await Promise.all(s.map(o=>this.removePromise(this.pathUtils.resolve(e,o))))}for(let s=0;s<=i;s++)try{await this.rmdirPromise(e);break}catch(o){if(o.code!==\"EBUSY\"&&o.code!==\"ENOTEMPTY\")throw o;s<i&&await new Promise(a=>setTimeout(a,s*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:t=!0}={}){let i;try{i=this.lstatSync(e)}catch(n){if(n.code===\"ENOENT\")return;throw n}if(i.isDirectory()){if(t)for(let n of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,n));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{await this.mkdirPromise(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&await this.chmodPromise(a,t),i!=null)await this.utimesPromise(a,i[0],i[1]);else{let l=await this.statPromise(this.pathUtils.dirname(a));await this.utimesPromise(a,l.atime,l.mtime)}}}return s}mkdirpSync(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{this.mkdirSync(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&this.chmodSync(a,t),i!=null)this.utimesSync(a,i[0],i[1]);else{let l=this.statSync(this.pathUtils.dirname(a));this.utimesSync(a,l.atime,l.mtime)}}}return s}async copyPromise(e,t,{baseFs:i=this,overwrite:n=!0,stableSort:s=!1,stableTime:o=!1,linkStrategy:a=null}={}){return await AK(this,e,i,t,{overwrite:n,stableSort:s,stableTime:o,linkStrategy:a})}copySync(e,t,{baseFs:i=this,overwrite:n=!0}={}){let s=i.lstatSync(t),o=this.existsSync(e);if(s.isDirectory()){this.mkdirpSync(e);let l=i.readdirSync(t);for(let c of l)this.copySync(this.pathUtils.join(e,c),i.pathUtils.join(t,c),{baseFs:i,overwrite:n})}else if(s.isFile()){if(!o||n){o&&this.removeSync(e);let l=i.readFileSync(t);this.writeFileSync(e,l)}}else if(s.isSymbolicLink()){if(!o||n){o&&this.removeSync(e);let l=i.readlinkSync(t);this.symlinkSync(VE(this.pathUtils,l),e)}}else throw new Error(`Unsupported file type (file: ${t}, mode: 0o${s.mode.toString(8).padStart(6,\"0\")})`);let a=s.mode&511;this.chmodSync(e,a)}async changeFilePromise(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferPromise(e,t,i):this.changeFileTextPromise(e,t,i)}async changeFileBufferPromise(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=await this.readFilePromise(e)}catch{}Buffer.compare(n,t)!==0&&await this.writeFilePromise(e,t,{mode:i})}async changeFileTextPromise(e,t,{automaticNewlines:i,mode:n}={}){let s=\"\";try{s=await this.readFilePromise(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&await this.writeFilePromise(e,o,{mode:n})}changeFileSync(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferSync(e,t,i):this.changeFileTextSync(e,t,i)}changeFileBufferSync(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=this.readFileSync(e)}catch{}Buffer.compare(n,t)!==0&&this.writeFileSync(e,t,{mode:i})}changeFileTextSync(e,t,{automaticNewlines:i=!1,mode:n}={}){let s=\"\";try{s=this.readFileSync(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&this.writeFileSync(e,o,{mode:n})}async movePromise(e,t){try{await this.renamePromise(e,t)}catch(i){if(i.code===\"EXDEV\")await this.copyPromise(t,e),await this.removePromise(e);else throw i}}moveSync(e,t){try{this.renameSync(e,t)}catch(i){if(i.code===\"EXDEV\")this.copySync(t,e),this.removeSync(e);else throw i}}async lockPromise(e,t){let i=`${e}.flock`,n=1e3/60,s=Date.now(),o=null,a=async()=>{let l;try{[l]=await this.readJsonPromise(i)}catch{return Date.now()-s<500}try{return process.kill(l,0),!0}catch{return!1}};for(;o===null;)try{o=await this.openPromise(i,\"wx\")}catch(l){if(l.code===\"EEXIST\"){if(!await a())try{await this.unlinkPromise(i);continue}catch{}if(Date.now()-s<60*1e3)await new Promise(c=>setTimeout(c,n));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${i})`)}else throw l}await this.writePromise(o,JSON.stringify([process.pid]));try{return await t()}finally{try{await this.closePromise(o),await this.unlinkPromise(i)}catch{}}}async readJsonPromise(e){let t=await this.readFilePromise(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}readJsonSync(e){let t=this.readFileSync(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}async writeJsonPromise(e,t){return await this.writeFilePromise(e,`${JSON.stringify(t,null,2)}\n`)}writeJsonSync(e,t){return this.writeFileSync(e,`${JSON.stringify(t,null,2)}\n`)}async preserveTimePromise(e,t){let i=await this.lstatPromise(e),n=await t();typeof n<\"u\"&&(e=n),this.lutimesPromise?await this.lutimesPromise(e,i.atime,i.mtime):i.isSymbolicLink()||await this.utimesPromise(e,i.atime,i.mtime)}async preserveTimeSync(e,t){let i=this.lstatSync(e),n=t();typeof n<\"u\"&&(e=n),this.lutimesSync?this.lutimesSync(e,i.atime,i.mtime):i.isSymbolicLink()||this.utimesSync(e,i.atime,i.mtime)}},xA=class extends ya{constructor(){super(x)}};function Wge(r){let e=r.match(/\\r?\\n/g);if(e===null)return gK.EOL;let t=e.filter(n=>n===`\\r\n`).length,i=e.length-t;return t>i?`\\r\n`:`\n`}function Vl(r,e){return e.replace(/\\r?\\n/g,Wge(r))}var Qg=J(\"fs\"),IS=J(\"stream\"),dK=J(\"util\"),yS=Pe(J(\"zlib\"));var fK=Pe(J(\"fs\"));var $t=class extends xA{constructor(t=fK.default){super();this.realFs=t,typeof this.realFs.lutimes<\"u\"&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return Me.root}resolve(t){return x.resolve(t)}async openPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.open(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}openSync(t,i,n){return this.realFs.openSync(K.fromPortablePath(t),i,n)}async opendirPromise(t,i){return await new Promise((n,s)=>{typeof i<\"u\"?this.realFs.opendir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.opendir(K.fromPortablePath(t),this.makeCallback(n,s))}).then(n=>Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0}))}opendirSync(t,i){let n=typeof i<\"u\"?this.realFs.opendirSync(K.fromPortablePath(t),i):this.realFs.opendirSync(K.fromPortablePath(t));return Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0})}async readPromise(t,i,n=0,s=0,o=-1){return await new Promise((a,l)=>{this.realFs.read(t,i,n,s,o,(c,u)=>{c?l(c):a(u)})})}readSync(t,i,n,s,o){return this.realFs.readSync(t,i,n,s,o)}async writePromise(t,i,n,s,o){return await new Promise((a,l)=>typeof i==\"string\"?this.realFs.write(t,i,n,this.makeCallback(a,l)):this.realFs.write(t,i,n,s,o,this.makeCallback(a,l)))}writeSync(t,i,n,s,o){return typeof i==\"string\"?this.realFs.writeSync(t,i,n):this.realFs.writeSync(t,i,n,s,o)}async closePromise(t){await new Promise((i,n)=>{this.realFs.close(t,this.makeCallback(i,n))})}closeSync(t){this.realFs.closeSync(t)}createReadStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createReadStream(n,i)}createWriteStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createWriteStream(n,i)}async realpathPromise(t){return await new Promise((i,n)=>{this.realFs.realpath(K.fromPortablePath(t),{},this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}realpathSync(t){return K.toPortablePath(this.realFs.realpathSync(K.fromPortablePath(t),{}))}async existsPromise(t){return await new Promise(i=>{this.realFs.exists(K.fromPortablePath(t),i)})}accessSync(t,i){return this.realFs.accessSync(K.fromPortablePath(t),i)}async accessPromise(t,i){return await new Promise((n,s)=>{this.realFs.access(K.fromPortablePath(t),i,this.makeCallback(n,s))})}existsSync(t){return this.realFs.existsSync(K.fromPortablePath(t))}async statPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.stat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.stat(K.fromPortablePath(t),this.makeCallback(n,s))})}statSync(t,i){return i?this.realFs.statSync(K.fromPortablePath(t),i):this.realFs.statSync(K.fromPortablePath(t))}async fstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.fstat(t,i,this.makeCallback(n,s)):this.realFs.fstat(t,this.makeCallback(n,s))})}fstatSync(t,i){return i?this.realFs.fstatSync(t,i):this.realFs.fstatSync(t)}async lstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.lstat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.lstat(K.fromPortablePath(t),this.makeCallback(n,s))})}lstatSync(t,i){return i?this.realFs.lstatSync(K.fromPortablePath(t),i):this.realFs.lstatSync(K.fromPortablePath(t))}async fchmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.fchmod(t,i,this.makeCallback(n,s))})}fchmodSync(t,i){return this.realFs.fchmodSync(t,i)}async chmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.chmod(K.fromPortablePath(t),i,this.makeCallback(n,s))})}chmodSync(t,i){return this.realFs.chmodSync(K.fromPortablePath(t),i)}async fchownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.fchown(t,i,n,this.makeCallback(s,o))})}fchownSync(t,i,n){return this.realFs.fchownSync(t,i,n)}async chownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.chown(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}chownSync(t,i,n){return this.realFs.chownSync(K.fromPortablePath(t),i,n)}async renamePromise(t,i){return await new Promise((n,s)=>{this.realFs.rename(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}renameSync(t,i){return this.realFs.renameSync(K.fromPortablePath(t),K.fromPortablePath(i))}async copyFilePromise(t,i,n=0){return await new Promise((s,o)=>{this.realFs.copyFile(K.fromPortablePath(t),K.fromPortablePath(i),n,this.makeCallback(s,o))})}copyFileSync(t,i,n=0){return this.realFs.copyFileSync(K.fromPortablePath(t),K.fromPortablePath(i),n)}async appendFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFile(a,i,n,this.makeCallback(s,o)):this.realFs.appendFile(a,i,this.makeCallback(s,o))})}appendFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFileSync(s,i,n):this.realFs.appendFileSync(s,i)}async writeFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFile(a,i,n,this.makeCallback(s,o)):this.realFs.writeFile(a,i,this.makeCallback(s,o))})}writeFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFileSync(s,i,n):this.realFs.writeFileSync(s,i)}async unlinkPromise(t){return await new Promise((i,n)=>{this.realFs.unlink(K.fromPortablePath(t),this.makeCallback(i,n))})}unlinkSync(t){return this.realFs.unlinkSync(K.fromPortablePath(t))}async utimesPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.utimes(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}utimesSync(t,i,n){this.realFs.utimesSync(K.fromPortablePath(t),i,n)}async lutimesPromiseImpl(t,i,n){let s=this.realFs.lutimes;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);return await new Promise((o,a)=>{s.call(this.realFs,K.fromPortablePath(t),i,n,this.makeCallback(o,a))})}lutimesSyncImpl(t,i,n){let s=this.realFs.lutimesSync;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);s.call(this.realFs,K.fromPortablePath(t),i,n)}async mkdirPromise(t,i){return await new Promise((n,s)=>{this.realFs.mkdir(K.fromPortablePath(t),i,this.makeCallback(n,s))})}mkdirSync(t,i){return this.realFs.mkdirSync(K.fromPortablePath(t),i)}async rmdirPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.rmdir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.rmdir(K.fromPortablePath(t),this.makeCallback(n,s))})}rmdirSync(t,i){return this.realFs.rmdirSync(K.fromPortablePath(t),i)}async linkPromise(t,i){return await new Promise((n,s)=>{this.realFs.link(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}linkSync(t,i){return this.realFs.linkSync(K.fromPortablePath(t),K.fromPortablePath(i))}async symlinkPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.symlink(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n,this.makeCallback(s,o))})}symlinkSync(t,i,n){return this.realFs.symlinkSync(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n)}async readFilePromise(t,i){return await new Promise((n,s)=>{let o=typeof t==\"string\"?K.fromPortablePath(t):t;this.realFs.readFile(o,i,this.makeCallback(n,s))})}readFileSync(t,i){let n=typeof t==\"string\"?K.fromPortablePath(t):t;return this.realFs.readFileSync(n,i)}async readdirPromise(t,i){return await new Promise((n,s)=>{i!=null&&i.withFileTypes?this.realFs.readdir(K.fromPortablePath(t),{withFileTypes:!0},this.makeCallback(n,s)):this.realFs.readdir(K.fromPortablePath(t),this.makeCallback(o=>n(o),s))})}readdirSync(t,i){return i!=null&&i.withFileTypes?this.realFs.readdirSync(K.fromPortablePath(t),{withFileTypes:!0}):this.realFs.readdirSync(K.fromPortablePath(t))}async readlinkPromise(t){return await new Promise((i,n)=>{this.realFs.readlink(K.fromPortablePath(t),this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}readlinkSync(t){return K.toPortablePath(this.realFs.readlinkSync(K.fromPortablePath(t)))}async truncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.truncate(K.fromPortablePath(t),i,this.makeCallback(n,s))})}truncateSync(t,i){return this.realFs.truncateSync(K.fromPortablePath(t),i)}async ftruncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.ftruncate(t,i,this.makeCallback(n,s))})}ftruncateSync(t,i){return this.realFs.ftruncateSync(t,i)}watch(t,i,n){return this.realFs.watch(K.fromPortablePath(t),i,n)}watchFile(t,i,n){return this.realFs.watchFile(K.fromPortablePath(t),i,n)}unwatchFile(t,i){return this.realFs.unwatchFile(K.fromPortablePath(t),i)}makeCallback(t,i){return(n,s)=>{n?i(n):t(s)}}};var pK=J(\"events\");function hK(r,e){if(r!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${r}'`)}var bg=class extends pK.EventEmitter{constructor(t,i,{bigint:n=!1}={}){super();this.status=\"ready\";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=t,this.path=i,this.bigint=n,this.lastStats=this.stat()}static create(t,i,n){let s=new bg(t,i,n);return s.start(),s}start(){hK(this.status,\"ready\"),this.status=\"running\",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(\"change\",this.lastStats,this.lastStats)},3)}stop(){hK(this.status,\"running\"),this.status=\"stopped\",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(\"stop\")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let i=this.bigint?new Bg:new Ia;return WE(i)}}makeInterval(t){let i=setInterval(()=>{let n=this.stat(),s=this.lastStats;gS(n,s)||(this.lastStats=n,this.emit(\"change\",n,s))},t.interval);return t.persistent?i:i.unref()}registerChangeListener(t,i){this.addListener(\"change\",t),this.changeListeners.set(t,this.makeInterval(i))}unregisterChangeListener(t){this.removeListener(\"change\",t);let i=this.changeListeners.get(t);typeof i<\"u\"&&clearInterval(i),this.changeListeners.delete(t)}unregisterAllChangeListeners(){for(let t of this.changeListeners.keys())this.unregisterChangeListener(t)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let t of this.changeListeners.values())t.ref();return this}unref(){for(let t of this.changeListeners.values())t.unref();return this}};var rI=new WeakMap;function iI(r,e,t,i){let n,s,o,a;switch(typeof t){case\"function\":n=!1,s=!0,o=5007,a=t;break;default:({bigint:n=!1,persistent:s=!0,interval:o=5007}=t),a=i;break}let l=rI.get(r);typeof l>\"u\"&&rI.set(r,l=new Map);let c=l.get(e);return typeof c>\"u\"&&(c=bg.create(r,e,{bigint:n}),l.set(e,c)),c.registerChangeListener(a,{persistent:s,interval:o}),c}function Gp(r,e,t){let i=rI.get(r);if(typeof i>\"u\")return;let n=i.get(e);typeof n>\"u\"||(typeof t>\"u\"?n.unregisterAllChangeListeners():n.unregisterChangeListener(t),n.hasChangeListeners()||(n.stop(),i.delete(e)))}function Yp(r){let e=rI.get(r);if(!(typeof e>\"u\"))for(let t of e.keys())Gp(r,t)}var Xl=\"mixed\";function zge(r){if(typeof r==\"string\"&&String(+r)===r)return+r;if(typeof r==\"number\"&&Number.isFinite(r))return r<0?Date.now()/1e3:r;if(dK.types.isDate(r))return r.getTime()/1e3;throw new Error(\"Invalid time\")}function ES(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var Wr=class extends xA{constructor(t,i){super();this.lzSource=null;this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;this.libzip=i.libzip;let n=i;if(this.level=typeof n.level<\"u\"?n.level:Xl,t!=null||(t=ES()),typeof t==\"string\"){let{baseFs:a=new $t}=n;this.baseFs=a,this.path=t}else this.path=null,this.baseFs=null;if(i.stats)this.stats=i.stats;else if(typeof t==\"string\")try{this.stats=this.baseFs.statSync(t)}catch(a){if(a.code===\"ENOENT\"&&n.create)this.stats=Lp();else throw a}else this.stats=Lp();let s=this.libzip.malloc(4);try{let a=0;if(typeof t==\"string\"&&n.create&&(a|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),i.readOnly&&(a|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof t==\"string\")this.zip=this.libzip.open(K.fromPortablePath(t),a,s);else{let l=this.allocateUnattachedSource(t);try{this.zip=this.libzip.openFromSource(l,a,s),this.lzSource=l}catch(c){throw this.libzip.source.free(l),c}}if(this.zip===0){let l=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(l,this.libzip.getValue(s,\"i32\")),this.makeLibzipError(l)}}finally{this.libzip.free(s)}this.listings.set(Me.root,new Set);let o=this.libzip.getNumEntries(this.zip,0);for(let a=0;a<o;++a){let l=this.libzip.getName(this.zip,a,0);if(x.isAbsolute(l))continue;let c=x.resolve(Me.root,l);this.registerEntry(c,a),l.endsWith(\"/\")&&this.registerListing(c)}if(this.symlinkCount=this.libzip.ext.countSymlinks(this.zip),this.symlinkCount===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.ready=!0}makeLibzipError(t){let i=this.libzip.struct.errorCodeZip(t),n=this.libzip.error.strerror(t),s=new _E(n,this.libzip.errors[i]);if(i===this.libzip.errors.ZIP_ER_CHANGED)throw new Error(`Assertion failed: Unexpected libzip error: ${s.message}`);return s}getExtractHint(t){for(let i of this.entries.keys()){let n=this.pathUtils.extname(i);if(t.relevantExtensions.has(n))return!0}return!1}getAllFiles(){return Array.from(this.entries.keys())}getRealPath(){if(!this.path)throw new Error(\"ZipFS don't have real paths when loaded from a buffer\");return this.path}getBufferAndClose(){if(this.prepareClose(),!this.lzSource)throw new Error(\"ZipFS was not created from a Buffer\");if(this.entries.size===0)return this.discardAndClose(),ES();try{if(this.libzip.source.keep(this.lzSource),this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.source.open(this.lzSource)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_END)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let t=this.libzip.source.tell(this.lzSource);if(t===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_SET)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let i=this.libzip.malloc(t);if(!i)throw new Error(\"Couldn't allocate enough memory\");try{let n=this.libzip.source.read(this.lzSource,i,t);if(n===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(n<t)throw new Error(\"Incomplete read\");if(n>t)throw new Error(\"Overread\");let s=this.libzip.HEAPU8.subarray(i,i+t);return Buffer.from(s)}finally{this.libzip.free(i)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw $E(\"archive closed, close\");Yp(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error(\"ZipFS cannot be saved and must be discarded when loaded from a buffer\");if(this.prepareClose(),this.readOnly){this.discardAndClose();return}let t=this.baseFs.existsSync(this.path)||this.stats.mode===Tp?void 0:this.stats.mode;if(this.entries.size===0)this.discardAndClose(),this.baseFs.writeFileSync(this.path,ES(),{mode:t});else{if(this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));typeof t<\"u\"&&this.baseFs.chmodSync(this.path,t)}this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(t){return x.resolve(Me.root,t)}async openPromise(t,i,n){return this.openSync(t,i,n)}openSync(t,i,n){let s=this.nextFd++;return this.fds.set(s,{cursor:0,p:t}),s}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(t,i){return this.opendirSync(t,i)}opendirSync(t,i={}){let n=this.resolveFilename(`opendir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`opendir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`opendir '${t}'`);let o=[...s],a=this.openSync(n,\"r\");return tI(this,n,o,{onClose:()=>{this.closeSync(a)}})}async readPromise(t,i,n,s,o){return this.readSync(t,i,n,s,o)}readSync(t,i,n=0,s=i.byteLength,o=-1){let a=this.fds.get(t);if(typeof a>\"u\")throw Ur(\"read\");let l=o===-1||o===null?a.cursor:o,c=this.readFileSync(a.p);c.copy(i,n,l,l+s);let u=Math.max(0,Math.min(c.length-l,s));return(o===-1||o===null)&&(a.cursor+=u),u}async writePromise(t,i,n,s,o){return typeof i==\"string\"?this.writeSync(t,i,o):this.writeSync(t,i,n,s,o)}writeSync(t,i,n,s,o){throw typeof this.fds.get(t)>\"u\"?Ur(\"read\"):new Error(\"Unimplemented\")}async closePromise(t){return this.closeSync(t)}closeSync(t){if(typeof this.fds.get(t)>\"u\")throw Ur(\"read\");this.fds.delete(t)}createReadStream(t,{encoding:i}={}){if(t===null)throw new Error(\"Unimplemented\");let n=this.openSync(t,\"r\"),s=Object.assign(new IS.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(a,l)=>{clearImmediate(o),this.closeSync(n),l(a)}}),{close(){s.destroy()},bytesRead:0,path:t}),o=setImmediate(async()=>{try{let a=await this.readFilePromise(t,i);s.bytesRead=a.length,s.end(a)}catch(a){s.destroy(a)}});return s}createWriteStream(t,{encoding:i}={}){if(this.readOnly)throw un(`open '${t}'`);if(t===null)throw new Error(\"Unimplemented\");let n=[],s=this.openSync(t,\"w\"),o=Object.assign(new IS.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(a,l)=>{try{a?l(a):(this.writeFileSync(t,Buffer.concat(n),i),l(null))}catch(c){l(c)}finally{this.closeSync(s)}}}),{bytesWritten:0,path:t,close(){o.destroy()}});return o.on(\"data\",a=>{let l=Buffer.from(a);o.bytesWritten+=l.length,n.push(l)}),o}async realpathPromise(t){return this.realpathSync(t)}realpathSync(t){let i=this.resolveFilename(`lstat '${t}'`,t);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`lstat '${t}'`);return i}async existsPromise(t){return this.existsSync(t)}existsSync(t){if(!this.ready)throw $E(`archive closed, existsSync '${t}'`);if(this.symlinkCount===0){let n=x.resolve(Me.root,t);return this.entries.has(n)||this.listings.has(n)}let i;try{i=this.resolveFilename(`stat '${t}'`,t,void 0,!1)}catch{return!1}return i===void 0?!1:this.entries.has(i)||this.listings.has(i)}async accessPromise(t,i){return this.accessSync(t,i)}accessSync(t,i=Qg.constants.F_OK){let n=this.resolveFilename(`access '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`access '${t}'`);if(this.readOnly&&i&Qg.constants.W_OK)throw un(`access '${t}'`)}async statPromise(t,i={bigint:!1}){return i.bigint?this.statSync(t,{bigint:!0}):this.statSync(t)}statSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`stat '${t}'`,t,void 0,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`stat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`stat '${t}'`);return this.statImpl(`stat '${t}'`,n,i)}}async fstatPromise(t,i){return this.fstatSync(t,i)}fstatSync(t,i){let n=this.fds.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let{p:s}=n,o=this.resolveFilename(`stat '${s}'`,s);if(!this.entries.has(o)&&!this.listings.has(o))throw Js(`stat '${s}'`);if(s[s.length-1]===\"/\"&&!this.listings.has(o))throw Qo(`stat '${s}'`);return this.statImpl(`fstat '${s}'`,o,i)}async lstatPromise(t,i={bigint:!1}){return i.bigint?this.lstatSync(t,{bigint:!0}):this.lstatSync(t)}lstatSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`lstat '${t}'`,t,!1,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`lstat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`lstat '${t}'`);return this.statImpl(`lstat '${t}'`,n,i)}}statImpl(t,i,n={}){let s=this.entries.get(i);if(typeof s<\"u\"){let o=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,s,0,0,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let l=this.stats.uid,c=this.stats.gid,u=this.libzip.struct.statSize(o)>>>0,g=512,f=Math.ceil(u/g),h=(this.libzip.struct.statMtime(o)>>>0)*1e3,p=h,C=h,y=h,B=new Date(p),v=new Date(C),D=new Date(y),T=new Date(h),H=this.listings.has(i)?16384:this.isSymbolicLink(s)?40960:32768,j=H===16384?493:420,$=H|this.getUnixMode(s,j)&511,V=this.libzip.struct.statCrc(o),W=Object.assign(new Ia,{uid:l,gid:c,size:u,blksize:g,blocks:f,atime:B,birthtime:v,ctime:D,mtime:T,atimeMs:p,birthtimeMs:C,ctimeMs:y,mtimeMs:h,mode:$,crc:V});return n.bigint===!0?zE(W):W}if(this.listings.has(i)){let o=this.stats.uid,a=this.stats.gid,l=0,c=512,u=0,g=this.stats.mtimeMs,f=this.stats.mtimeMs,h=this.stats.mtimeMs,p=this.stats.mtimeMs,C=new Date(g),y=new Date(f),B=new Date(h),v=new Date(p),D=16877,T=0,H=Object.assign(new Ia,{uid:o,gid:a,size:l,blksize:c,blocks:u,atime:C,birthtime:y,ctime:B,mtime:v,atimeMs:g,birthtimeMs:f,ctimeMs:h,mtimeMs:p,mode:D,crc:T});return n.bigint===!0?zE(H):H}throw new Error(\"Unreachable\")}getUnixMode(t,i){if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?i:this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16}registerListing(t){let i=this.listings.get(t);if(i)return i;this.registerListing(x.dirname(t)).add(x.basename(t));let s=new Set;return this.listings.set(t,s),s}registerEntry(t,i){this.registerListing(x.dirname(t)).add(x.basename(t)),this.entries.set(t,i)}unregisterListing(t){this.listings.delete(t);let i=this.listings.get(x.dirname(t));i==null||i.delete(x.basename(t))}unregisterEntry(t){this.unregisterListing(t);let i=this.entries.get(t);this.entries.delete(t),!(typeof i>\"u\")&&(this.fileSources.delete(i),this.isSymbolicLink(i)&&this.symlinkCount--)}deleteEntry(t,i){if(this.unregisterEntry(t),this.libzip.delete(this.zip,i)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(t,i,n=!0,s=!0){if(!this.ready)throw $E(`archive closed, ${t}`);let o=x.resolve(Me.root,i);if(o===\"/\")return Me.root;let a=this.entries.get(o);if(n&&a!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(a)){let l=this.getFileSource(a).toString();return this.resolveFilename(t,x.resolve(x.dirname(o),l),!0,s)}else return o;for(;;){let l=this.resolveFilename(t,x.dirname(o),!0,s);if(l===void 0)return l;let c=this.listings.has(l),u=this.entries.has(l);if(!c&&!u){if(s===!1)return;throw Js(t)}if(!c)throw Qo(t);if(o=x.resolve(l,x.basename(o)),!n||this.symlinkCount===0)break;let g=this.libzip.name.locate(this.zip,o.slice(1),0);if(g===-1)break;if(this.isSymbolicLink(g)){let f=this.getFileSource(g).toString();o=x.resolve(x.dirname(o),f)}else break}return o}allocateBuffer(t){Buffer.isBuffer(t)||(t=Buffer.from(t));let i=this.libzip.malloc(t.byteLength);if(!i)throw new Error(\"Couldn't allocate enough memory\");return new Uint8Array(this.libzip.HEAPU8.buffer,i,t.byteLength).set(t),{buffer:i,byteLength:t.byteLength}}allocateUnattachedSource(t){let i=this.libzip.struct.errorS(),{buffer:n,byteLength:s}=this.allocateBuffer(t),o=this.libzip.source.fromUnattachedBuffer(n,s,0,1,i);if(o===0)throw this.libzip.free(i),this.makeLibzipError(i);return o}allocateSource(t){let{buffer:i,byteLength:n}=this.allocateBuffer(t),s=this.libzip.source.fromBuffer(this.zip,i,n,0,1);if(s===0)throw this.libzip.free(i),this.makeLibzipError(this.libzip.getError(this.zip));return s}setFileSource(t,i){let n=Buffer.isBuffer(i)?i:Buffer.from(i),s=x.relative(Me.root,t),o=this.allocateSource(i);try{let a=this.libzip.file.add(this.zip,s,o,this.libzip.ZIP_FL_OVERWRITE);if(a===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!==\"mixed\"){let l=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,a,0,l,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(a,n),a}catch(a){throw this.libzip.source.free(o),a}}isSymbolicLink(t){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16&61440)===40960}getFileSource(t,i={asyncDecompress:!1}){let n=this.fileSources.get(t);if(typeof n<\"u\")return n;let s=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,t,0,0,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.libzip.struct.statCompSize(s),l=this.libzip.struct.statCompMethod(s),c=this.libzip.malloc(a);try{let u=this.libzip.fopenIndex(this.zip,t,0,this.libzip.ZIP_FL_COMPRESSED);if(u===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let g=this.libzip.fread(u,c,a,0);if(g===-1)throw this.makeLibzipError(this.libzip.file.getError(u));if(g<a)throw new Error(\"Incomplete read\");if(g>a)throw new Error(\"Overread\");let f=this.libzip.HEAPU8.subarray(c,c+a),h=Buffer.from(f);if(l===0)return this.fileSources.set(t,h),h;if(i.asyncDecompress)return new Promise((p,C)=>{yS.default.inflateRaw(h,(y,B)=>{y?C(y):(this.fileSources.set(t,B),p(B))})});{let p=yS.default.inflateRawSync(h);return this.fileSources.set(t,p),p}}finally{this.libzip.fclose(u)}}finally{this.libzip.free(c)}}async fchmodPromise(t,i){return this.chmodPromise(this.fdToPath(t,\"fchmod\"),i)}fchmodSync(t,i){return this.chmodSync(this.fdToPath(t,\"fchmodSync\"),i)}async chmodPromise(t,i){return this.chmodSync(t,i)}chmodSync(t,i){if(this.readOnly)throw un(`chmod '${t}'`);i&=493;let n=this.resolveFilename(`chmod '${t}'`,t,!1),s=this.entries.get(n);if(typeof s>\"u\")throw new Error(`Assertion failed: The entry should have been registered (${n})`);let a=this.getUnixMode(s,32768)&-512|i;if(this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,a<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(t,i,n){return this.chownPromise(this.fdToPath(t,\"fchown\"),i,n)}fchownSync(t,i,n){return this.chownSync(this.fdToPath(t,\"fchownSync\"),i,n)}async chownPromise(t,i,n){return this.chownSync(t,i,n)}chownSync(t,i,n){throw new Error(\"Unimplemented\")}async renamePromise(t,i){return this.renameSync(t,i)}renameSync(t,i){throw new Error(\"Unimplemented\")}async copyFilePromise(t,i,n){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=await this.getFileSource(s,{asyncDecompress:!0}),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}copyFileSync(t,i,n=0){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=this.getFileSource(s),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}prepareCopyFile(t,i,n=0){if(this.readOnly)throw un(`copyfile '${t} -> '${i}'`);if((n&Qg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Kp(\"unsupported clone operation\",`copyfile '${t}' -> ${i}'`);let s=this.resolveFilename(`copyfile '${t} -> ${i}'`,t),o=this.entries.get(s);if(typeof o>\"u\")throw vA(`copyfile '${t}' -> '${i}'`);let a=this.resolveFilename(`copyfile '${t}' -> ${i}'`,i),l=this.entries.get(a);if((n&(Qg.constants.COPYFILE_EXCL|Qg.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof l<\"u\")throw eI(`copyfile '${t}' -> '${i}'`);return{indexSource:o,resolvedDestP:a,indexDest:l}}async appendFilePromise(t,i,n){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFilePromise(t,i,n)}appendFileSync(t,i,n={}){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFileSync(t,i,n)}fdToPath(t,i){var s;let n=(s=this.fds.get(t))==null?void 0:s.p;if(typeof n>\"u\")throw Ur(i);return n}async writeFilePromise(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([await this.getFileSource(a,{asyncDecompress:!0}),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&await this.chmodPromise(l,o)}writeFileSync(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([this.getFileSource(a),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&this.chmodSync(l,o)}prepareWriteFile(t,i){if(typeof t==\"number\"&&(t=this.fdToPath(t,\"read\")),this.readOnly)throw un(`open '${t}'`);let n=this.resolveFilename(`open '${t}'`,t);if(this.listings.has(n))throw Up(`open '${t}'`);let s=null,o=null;typeof i==\"string\"?s=i:typeof i==\"object\"&&({encoding:s=null,mode:o=null}=i);let a=this.entries.get(n);return{encoding:s,mode:o,resolvedP:n,index:a}}async unlinkPromise(t){return this.unlinkSync(t)}unlinkSync(t){if(this.readOnly)throw un(`unlink '${t}'`);let i=this.resolveFilename(`unlink '${t}'`,t);if(this.listings.has(i))throw Up(`unlink '${t}'`);let n=this.entries.get(i);if(typeof n>\"u\")throw vA(`unlink '${t}'`);this.deleteEntry(i,n)}async utimesPromise(t,i,n){return this.utimesSync(t,i,n)}utimesSync(t,i,n){if(this.readOnly)throw un(`utimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t);this.utimesImpl(s,n)}async lutimesPromise(t,i,n){return this.lutimesSync(t,i,n)}lutimesSync(t,i,n){if(this.readOnly)throw un(`lutimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t,!1);this.utimesImpl(s,n)}utimesImpl(t,i){this.listings.has(t)&&(this.entries.has(t)||this.hydrateDirectory(t));let n=this.entries.get(t);if(n===void 0)throw new Error(\"Unreachable\");if(this.libzip.file.setMtime(this.zip,n,0,zge(i),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(t,i){return this.mkdirSync(t,i)}mkdirSync(t,{mode:i=493,recursive:n=!1}={}){if(n)return this.mkdirpSync(t,{chmod:i});if(this.readOnly)throw un(`mkdir '${t}'`);let s=this.resolveFilename(`mkdir '${t}'`,t);if(this.entries.has(s)||this.listings.has(s))throw eI(`mkdir '${t}'`);this.hydrateDirectory(s),this.chmodSync(s,i)}async rmdirPromise(t,i){return this.rmdirSync(t,i)}rmdirSync(t,{recursive:i=!1}={}){if(this.readOnly)throw un(`rmdir '${t}'`);if(i){this.removeSync(t);return}let n=this.resolveFilename(`rmdir '${t}'`,t),s=this.listings.get(n);if(!s)throw Qo(`rmdir '${t}'`);if(s.size>0)throw lK(`rmdir '${t}'`);let o=this.entries.get(n);if(typeof o>\"u\")throw vA(`rmdir '${t}'`);this.deleteEntry(t,o)}hydrateDirectory(t){let i=this.libzip.dir.add(this.zip,x.relative(Me.root,t));if(i===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(t),this.registerEntry(t,i),i}async linkPromise(t,i){return this.linkSync(t,i)}linkSync(t,i){throw cK(`link '${t}' -> '${i}'`)}async symlinkPromise(t,i){return this.symlinkSync(t,i)}symlinkSync(t,i){if(this.readOnly)throw un(`symlink '${t}' -> '${i}'`);let n=this.resolveFilename(`symlink '${t}' -> '${i}'`,i);if(this.listings.has(n))throw Up(`symlink '${t}' -> '${i}'`);if(this.entries.has(n))throw eI(`symlink '${t}' -> '${i}'`);let s=this.setFileSource(n,t);if(this.registerEntry(n,s),this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,41471<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=await this.readFileBuffer(t,{asyncDecompress:!0});return i?n.toString(i):n}readFileSync(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=this.readFileBuffer(t);return i?n.toString(i):n}readFileBuffer(t,i={asyncDecompress:!1}){typeof t==\"number\"&&(t=this.fdToPath(t,\"read\"));let n=this.resolveFilename(`open '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`open '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`open '${t}'`);if(this.listings.has(n))throw Up(\"read\");let s=this.entries.get(n);if(s===void 0)throw new Error(\"Unreachable\");return this.getFileSource(s,i)}async readdirPromise(t,i){return this.readdirSync(t,i)}readdirSync(t,i){let n=this.resolveFilename(`scandir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`scandir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`scandir '${t}'`);let o=[...s];return i!=null&&i.withFileTypes?o.map(a=>Object.assign(this.statImpl(\"lstat\",x.join(t,a)),{name:a})):o}async readlinkPromise(t){let i=this.prepareReadlink(t);return(await this.getFileSource(i,{asyncDecompress:!0})).toString()}readlinkSync(t){let i=this.prepareReadlink(t);return this.getFileSource(i).toString()}prepareReadlink(t){let i=this.resolveFilename(`readlink '${t}'`,t,!1);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`readlink '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(i))throw Qo(`open '${t}'`);if(this.listings.has(i))throw vA(`readlink '${t}'`);let n=this.entries.get(i);if(n===void 0)throw new Error(\"Unreachable\");if(!this.isSymbolicLink(n))throw vA(`readlink '${t}'`);return n}async truncatePromise(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=await this.getFileSource(s,{asyncDecompress:!0}),a=Buffer.alloc(i,0);return o.copy(a),await this.writeFilePromise(t,a)}truncateSync(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=this.getFileSource(s),a=Buffer.alloc(i,0);return o.copy(a),this.writeFileSync(t,a)}async ftruncatePromise(t,i){return this.truncatePromise(this.fdToPath(t,\"ftruncate\"),i)}ftruncateSync(t,i){return this.truncateSync(this.fdToPath(t,\"ftruncateSync\"),i)}watch(t,i,n){let s;switch(typeof i){case\"function\":case\"string\":case\"undefined\":s=!0;break;default:({persistent:s=!0}=i);break}if(!s)return{on:()=>{},close:()=>{}};let o=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(o)}}}watchFile(t,i,n){let s=x.resolve(Me.root,t);return iI(this,s,i,n)}unwatchFile(t,i){let n=x.resolve(Me.root,t);return Gp(this,n,i)}};var pi=class extends ya{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,t,i){return this.baseFs.openPromise(this.mapToBase(e),t,i)}openSync(e,t,i){return this.baseFs.openSync(this.mapToBase(e),t,i)}async opendirPromise(e,t){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),t),{path:e})}opendirSync(e,t){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),t),{path:e})}async readPromise(e,t,i,n,s){return await this.baseFs.readPromise(e,t,i,n,s)}readSync(e,t,i,n,s){return this.baseFs.readSync(e,t,i,n,s)}async writePromise(e,t,i,n,s){return typeof t==\"string\"?await this.baseFs.writePromise(e,t,i):await this.baseFs.writePromise(e,t,i,n,s)}writeSync(e,t,i,n,s){return typeof t==\"string\"?this.baseFs.writeSync(e,t,i):this.baseFs.writeSync(e,t,i,n,s)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,t){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,t)}createWriteStream(e,t){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,t)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,t){return this.baseFs.accessSync(this.mapToBase(e),t)}async accessPromise(e,t){return this.baseFs.accessPromise(this.mapToBase(e),t)}async statPromise(e,t){return this.baseFs.statPromise(this.mapToBase(e),t)}statSync(e,t){return this.baseFs.statSync(this.mapToBase(e),t)}async fstatPromise(e,t){return this.baseFs.fstatPromise(e,t)}fstatSync(e,t){return this.baseFs.fstatSync(e,t)}lstatPromise(e,t){return this.baseFs.lstatPromise(this.mapToBase(e),t)}lstatSync(e,t){return this.baseFs.lstatSync(this.mapToBase(e),t)}async fchmodPromise(e,t){return this.baseFs.fchmodPromise(e,t)}fchmodSync(e,t){return this.baseFs.fchmodSync(e,t)}async chmodPromise(e,t){return this.baseFs.chmodPromise(this.mapToBase(e),t)}chmodSync(e,t){return this.baseFs.chmodSync(this.mapToBase(e),t)}async fchownPromise(e,t,i){return this.baseFs.fchownPromise(e,t,i)}fchownSync(e,t,i){return this.baseFs.fchownSync(e,t,i)}async chownPromise(e,t,i){return this.baseFs.chownPromise(this.mapToBase(e),t,i)}chownSync(e,t,i){return this.baseFs.chownSync(this.mapToBase(e),t,i)}async renamePromise(e,t){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(t))}renameSync(e,t){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(t))}async copyFilePromise(e,t,i=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(t),i)}copyFileSync(e,t,i=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(t),i)}async appendFilePromise(e,t,i){return this.baseFs.appendFilePromise(this.fsMapToBase(e),t,i)}appendFileSync(e,t,i){return this.baseFs.appendFileSync(this.fsMapToBase(e),t,i)}async writeFilePromise(e,t,i){return this.baseFs.writeFilePromise(this.fsMapToBase(e),t,i)}writeFileSync(e,t,i){return this.baseFs.writeFileSync(this.fsMapToBase(e),t,i)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,t,i){return this.baseFs.utimesPromise(this.mapToBase(e),t,i)}utimesSync(e,t,i){return this.baseFs.utimesSync(this.mapToBase(e),t,i)}async mkdirPromise(e,t){return this.baseFs.mkdirPromise(this.mapToBase(e),t)}mkdirSync(e,t){return this.baseFs.mkdirSync(this.mapToBase(e),t)}async rmdirPromise(e,t){return this.baseFs.rmdirPromise(this.mapToBase(e),t)}rmdirSync(e,t){return this.baseFs.rmdirSync(this.mapToBase(e),t)}async linkPromise(e,t){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(t))}linkSync(e,t){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(t))}async symlinkPromise(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkPromise(o,n,i)}symlinkSync(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkSync(o,n,i)}async readFilePromise(e,t){return t===\"utf8\"?this.baseFs.readFilePromise(this.fsMapToBase(e),t):this.baseFs.readFilePromise(this.fsMapToBase(e),t)}readFileSync(e,t){return t===\"utf8\"?this.baseFs.readFileSync(this.fsMapToBase(e),t):this.baseFs.readFileSync(this.fsMapToBase(e),t)}async readdirPromise(e,t){return this.baseFs.readdirPromise(this.mapToBase(e),t)}readdirSync(e,t){return this.baseFs.readdirSync(this.mapToBase(e),t)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,t){return this.baseFs.truncatePromise(this.mapToBase(e),t)}truncateSync(e,t){return this.baseFs.truncateSync(this.mapToBase(e),t)}async ftruncatePromise(e,t){return this.baseFs.ftruncatePromise(e,t)}ftruncateSync(e,t){return this.baseFs.ftruncateSync(e,t)}watch(e,t,i){return this.baseFs.watch(this.mapToBase(e),t,i)}watchFile(e,t,i){return this.baseFs.watchFile(this.mapToBase(e),t,i)}unwatchFile(e,t){return this.baseFs.unwatchFile(this.mapToBase(e),t)}fsMapToBase(e){return typeof e==\"number\"?e:this.mapToBase(e)}};var So=class extends pi{constructor(t,{baseFs:i,pathUtils:n}){super(n);this.target=t,this.baseFs=i}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(t){return t}mapToBase(t){return t}};var qt=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.normalize(t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(t){return this.pathUtils.isAbsolute(t)?x.normalize(t):this.baseFs.resolve(x.join(this.target,t))}mapFromBase(t){return t}mapToBase(t){return this.pathUtils.isAbsolute(t)?t:this.pathUtils.join(this.target,t)}};var CK=Me.root,vo=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.resolve(Me.root,t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Me.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(t){let i=this.pathUtils.normalize(t);if(this.pathUtils.isAbsolute(t))return this.pathUtils.resolve(this.target,this.pathUtils.relative(CK,t));if(i.match(/^\\.\\.\\/?/))throw new Error(`Resolving this path (${t}) would escape the jail`);return this.pathUtils.resolve(this.target,t)}mapFromBase(t){return this.pathUtils.resolve(CK,this.pathUtils.relative(this.target,t))}};var Sg=class extends pi{constructor(t,i){super(i);this.instance=null;this.factory=t}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(t){this.instance=t}mapFromBase(t){return t}mapToBase(t){return t}};var Ze=()=>Object.assign(new Error(\"ENOSYS: unsupported filesystem access\"),{code:\"ENOSYS\"}),wS=class extends ya{constructor(){super(x)}getExtractHint(){throw Ze()}getRealPath(){throw Ze()}resolve(){throw Ze()}async openPromise(){throw Ze()}openSync(){throw Ze()}async opendirPromise(){throw Ze()}opendirSync(){throw Ze()}async readPromise(){throw Ze()}readSync(){throw Ze()}async writePromise(){throw Ze()}writeSync(){throw Ze()}async closePromise(){throw Ze()}closeSync(){throw Ze()}createWriteStream(){throw Ze()}createReadStream(){throw Ze()}async realpathPromise(){throw Ze()}realpathSync(){throw Ze()}async readdirPromise(){throw Ze()}readdirSync(){throw Ze()}async existsPromise(e){throw Ze()}existsSync(e){throw Ze()}async accessPromise(){throw Ze()}accessSync(){throw Ze()}async statPromise(){throw Ze()}statSync(){throw Ze()}async fstatPromise(e){throw Ze()}fstatSync(e){throw Ze()}async lstatPromise(e){throw Ze()}lstatSync(e){throw Ze()}async fchmodPromise(){throw Ze()}fchmodSync(){throw Ze()}async chmodPromise(){throw Ze()}chmodSync(){throw Ze()}async fchownPromise(){throw Ze()}fchownSync(){throw Ze()}async chownPromise(){throw Ze()}chownSync(){throw Ze()}async mkdirPromise(){throw Ze()}mkdirSync(){throw Ze()}async rmdirPromise(){throw Ze()}rmdirSync(){throw Ze()}async linkPromise(){throw Ze()}linkSync(){throw Ze()}async symlinkPromise(){throw Ze()}symlinkSync(){throw Ze()}async renamePromise(){throw Ze()}renameSync(){throw Ze()}async copyFilePromise(){throw Ze()}copyFileSync(){throw Ze()}async appendFilePromise(){throw Ze()}appendFileSync(){throw Ze()}async writeFilePromise(){throw Ze()}writeFileSync(){throw Ze()}async unlinkPromise(){throw Ze()}unlinkSync(){throw Ze()}async utimesPromise(){throw Ze()}utimesSync(){throw Ze()}async readFilePromise(){throw Ze()}readFileSync(){throw Ze()}async readlinkPromise(){throw Ze()}readlinkSync(){throw Ze()}async truncatePromise(){throw Ze()}truncateSync(){throw Ze()}async ftruncatePromise(e,t){throw Ze()}ftruncateSync(e,t){throw Ze()}watch(){throw Ze()}watchFile(){throw Ze()}unwatchFile(){throw Ze()}},jp=wS;jp.instance=new wS;var vg=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return K.fromPortablePath(t)}mapToBase(t){return K.toPortablePath(t)}};var Vge=/^[0-9]+$/,BS=/^(\\/(?:[^/]+\\/)*?(?:\\$\\$virtual|__virtual__))((?:\\/((?:[^/]+-)?[a-f0-9]+)(?:\\/([^/]+))?)?((?:\\/.*)?))$/,Xge=/^([^/]+-)?[a-f0-9]+$/,Br=class extends pi{constructor({baseFs:t=new $t}={}){super(x);this.baseFs=t}static makeVirtualPath(t,i,n){if(x.basename(t)!==\"__virtual__\")throw new Error('Assertion failed: Virtual folders must be named \"__virtual__\"');if(!x.basename(i).match(Xge))throw new Error(\"Assertion failed: Virtual components must be ended by an hexadecimal hash\");let o=x.relative(x.dirname(t),n).split(\"/\"),a=0;for(;a<o.length&&o[a]===\"..\";)a+=1;let l=o.slice(a);return x.join(t,i,String(a),...l)}static resolveVirtual(t){let i=t.match(BS);if(!i||!i[3]&&i[5])return t;let n=x.dirname(i[1]);if(!i[3]||!i[4])return n;if(!Vge.test(i[4]))return t;let o=Number(i[4]),a=\"../\".repeat(o),l=i[5]||\".\";return Br.resolveVirtual(x.join(n,a,l))}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}realpathSync(t){let i=t.match(BS);if(!i)return this.baseFs.realpathSync(t);if(!i[5])return t;let n=this.baseFs.realpathSync(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}async realpathPromise(t){let i=t.match(BS);if(!i)return await this.baseFs.realpathPromise(t);if(!i[5])return t;let n=await this.baseFs.realpathPromise(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}mapToBase(t){if(t===\"\")return t;if(this.pathUtils.isAbsolute(t))return Br.resolveVirtual(t);let i=Br.resolveVirtual(this.baseFs.resolve(Me.dot)),n=Br.resolveVirtual(this.baseFs.resolve(t));return x.relative(i,n)||Me.dot}mapFromBase(t){return t}};var qp=J(\"fs\");var gn=4278190080,Vi=704643072,mK=(r,e)=>{let t=r.indexOf(e);if(t<=0)return null;let i=t;for(;t>=0&&(i=t+e.length,r[i]!==x.sep);){if(r[t-1]===x.sep)return null;t=r.indexOf(e,i)}return r.length>i&&r[i]!==x.sep?null:r.slice(0,i)},Kn=class extends xA{constructor({libzip:t,baseFs:i=new $t,filter:n=null,maxOpenFiles:s=1/0,readOnlyArchives:o=!1,useCache:a=!0,maxAge:l=5e3,fileExtensions:c=null}){super();this.fdMap=new Map;this.nextFd=3;this.isZip=new Set;this.notZip=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.libzipFactory=typeof t!=\"function\"?()=>t:t,this.baseFs=i,this.zipInstances=a?new Map:null,this.filter=n,this.maxOpenFiles=s,this.readOnlyArchives=o,this.maxAge=l,this.fileExtensions=c}static async openPromise(t,i){let n=new Kn(i);try{return await t(n)}finally{n.saveAndClose()}}get libzip(){return typeof this.libzipInstance>\"u\"&&(this.libzipInstance=this.libzipFactory()),this.libzipInstance}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.saveAndClose(),this.zipInstances.delete(t)}discardAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.discardAndClose(),this.zipInstances.delete(t)}resolve(t){return this.baseFs.resolve(t)}remapFd(t,i){let n=this.nextFd++|Vi;return this.fdMap.set(n,[t,i]),n}async openPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.openPromise(t,i,n),async(s,{subPath:o})=>this.remapFd(s,await s.openPromise(o,i,n)))}openSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.openSync(t,i,n),(s,{subPath:o})=>this.remapFd(s,s.openSync(o,i,n)))}async opendirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.opendirPromise(t,i),async(n,{subPath:s})=>await n.opendirPromise(s,i),{requireSubpath:!1})}opendirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.opendirSync(t,i),(n,{subPath:s})=>n.opendirSync(s,i),{requireSubpath:!1})}async readPromise(t,i,n,s,o){if((t&gn)!==Vi)return await this.baseFs.readPromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"read\");let[l,c]=a;return await l.readPromise(c,i,n,s,o)}readSync(t,i,n,s,o){if((t&gn)!==Vi)return this.baseFs.readSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"readSync\");let[l,c]=a;return l.readSync(c,i,n,s,o)}async writePromise(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?await this.baseFs.writePromise(t,i,n):await this.baseFs.writePromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"write\");let[l,c]=a;return typeof i==\"string\"?await l.writePromise(c,i,n):await l.writePromise(c,i,n,s,o)}writeSync(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?this.baseFs.writeSync(t,i,n):this.baseFs.writeSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"writeSync\");let[l,c]=a;return typeof i==\"string\"?l.writeSync(c,i,n):l.writeSync(c,i,n,s,o)}async closePromise(t){if((t&gn)!==Vi)return await this.baseFs.closePromise(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"close\");this.fdMap.delete(t);let[n,s]=i;return await n.closePromise(s)}closeSync(t){if((t&gn)!==Vi)return this.baseFs.closeSync(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"closeSync\");this.fdMap.delete(t);let[n,s]=i;return n.closeSync(s)}createReadStream(t,i){return t===null?this.baseFs.createReadStream(t,i):this.makeCallSync(t,()=>this.baseFs.createReadStream(t,i),(n,{archivePath:s,subPath:o})=>{let a=n.createReadStream(o,i);return a.path=K.fromPortablePath(this.pathUtils.join(s,o)),a})}createWriteStream(t,i){return t===null?this.baseFs.createWriteStream(t,i):this.makeCallSync(t,()=>this.baseFs.createWriteStream(t,i),(n,{subPath:s})=>n.createWriteStream(s,i))}async realpathPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.realpathPromise(t),async(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=await this.baseFs.realpathPromise(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,await i.realpathPromise(s)))})}realpathSync(t){return this.makeCallSync(t,()=>this.baseFs.realpathSync(t),(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=this.baseFs.realpathSync(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,i.realpathSync(s)))})}async existsPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.existsPromise(t),async(i,{subPath:n})=>await i.existsPromise(n))}existsSync(t){return this.makeCallSync(t,()=>this.baseFs.existsSync(t),(i,{subPath:n})=>i.existsSync(n))}async accessPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.accessPromise(t,i),async(n,{subPath:s})=>await n.accessPromise(s,i))}accessSync(t,i){return this.makeCallSync(t,()=>this.baseFs.accessSync(t,i),(n,{subPath:s})=>n.accessSync(s,i))}async statPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.statPromise(t,i),async(n,{subPath:s})=>await n.statPromise(s,i))}statSync(t,i){return this.makeCallSync(t,()=>this.baseFs.statSync(t,i),(n,{subPath:s})=>n.statSync(s,i))}async fstatPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fstatPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstat\");let[s,o]=n;return s.fstatPromise(o,i)}fstatSync(t,i){if((t&gn)!==Vi)return this.baseFs.fstatSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let[s,o]=n;return s.fstatSync(o,i)}async lstatPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.lstatPromise(t,i),async(n,{subPath:s})=>await n.lstatPromise(s,i))}lstatSync(t,i){return this.makeCallSync(t,()=>this.baseFs.lstatSync(t,i),(n,{subPath:s})=>n.lstatSync(s,i))}async fchmodPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmod\");let[s,o]=n;return s.fchmodPromise(o,i)}fchmodSync(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmodSync\");let[s,o]=n;return s.fchmodSync(o,i)}async chmodPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.chmodPromise(t,i),async(n,{subPath:s})=>await n.chmodPromise(s,i))}chmodSync(t,i){return this.makeCallSync(t,()=>this.baseFs.chmodSync(t,i),(n,{subPath:s})=>n.chmodSync(s,i))}async fchownPromise(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownPromise(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchown\");let[o,a]=s;return o.fchownPromise(a,i,n)}fchownSync(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownSync(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchownSync\");let[o,a]=s;return o.fchownSync(a,i,n)}async chownPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.chownPromise(t,i,n),async(s,{subPath:o})=>await s.chownPromise(o,i,n))}chownSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.chownSync(t,i,n),(s,{subPath:o})=>s.chownSync(o,i,n))}async renamePromise(t,i){return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.renamePromise(t,i),async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),async(n,{subPath:s})=>await this.makeCallPromise(i,async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},async(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return await n.renamePromise(s,a)}))}renameSync(t,i){return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.renameSync(t,i),()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),(n,{subPath:s})=>this.makeCallSync(i,()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return n.renameSync(s,a)}))}async copyFilePromise(t,i,n=0){let s=async(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&await this.existsPromise(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=await o.readFilePromise(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}await l.writeFilePromise(c,u)};return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.copyFilePromise(t,i,n),async(o,{subPath:a})=>await s(this.baseFs,t,o,a)),async(o,{subPath:a})=>await this.makeCallPromise(i,async()=>await s(o,a,this.baseFs,i),async(l,{subPath:c})=>o!==l?await s(o,a,l,c):await o.copyFilePromise(a,c,n)))}copyFileSync(t,i,n=0){let s=(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&this.existsSync(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=o.readFileSync(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}l.writeFileSync(c,u)};return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.copyFileSync(t,i,n),(o,{subPath:a})=>s(this.baseFs,t,o,a)),(o,{subPath:a})=>this.makeCallSync(i,()=>s(o,a,this.baseFs,i),(l,{subPath:c})=>o!==l?s(o,a,l,c):o.copyFileSync(a,c,n)))}async appendFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.appendFilePromise(t,i,n),async(s,{subPath:o})=>await s.appendFilePromise(o,i,n))}appendFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.appendFileSync(t,i,n),(s,{subPath:o})=>s.appendFileSync(o,i,n))}async writeFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.writeFilePromise(t,i,n),async(s,{subPath:o})=>await s.writeFilePromise(o,i,n))}writeFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.writeFileSync(t,i,n),(s,{subPath:o})=>s.writeFileSync(o,i,n))}async unlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.unlinkPromise(t),async(i,{subPath:n})=>await i.unlinkPromise(n))}unlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.unlinkSync(t),(i,{subPath:n})=>i.unlinkSync(n))}async utimesPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.utimesPromise(t,i,n),async(s,{subPath:o})=>await s.utimesPromise(o,i,n))}utimesSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.utimesSync(t,i,n),(s,{subPath:o})=>s.utimesSync(o,i,n))}async mkdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.mkdirPromise(t,i),async(n,{subPath:s})=>await n.mkdirPromise(s,i))}mkdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.mkdirSync(t,i),(n,{subPath:s})=>n.mkdirSync(s,i))}async rmdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.rmdirPromise(t,i),async(n,{subPath:s})=>await n.rmdirPromise(s,i))}rmdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.rmdirSync(t,i),(n,{subPath:s})=>n.rmdirSync(s,i))}async linkPromise(t,i){return await this.makeCallPromise(i,async()=>await this.baseFs.linkPromise(t,i),async(n,{subPath:s})=>await n.linkPromise(t,s))}linkSync(t,i){return this.makeCallSync(i,()=>this.baseFs.linkSync(t,i),(n,{subPath:s})=>n.linkSync(t,s))}async symlinkPromise(t,i,n){return await this.makeCallPromise(i,async()=>await this.baseFs.symlinkPromise(t,i,n),async(s,{subPath:o})=>await s.symlinkPromise(t,o))}symlinkSync(t,i,n){return this.makeCallSync(i,()=>this.baseFs.symlinkSync(t,i,n),(s,{subPath:o})=>s.symlinkSync(t,o))}async readFilePromise(t,i){return this.makeCallPromise(t,async()=>{switch(i){case\"utf8\":return await this.baseFs.readFilePromise(t,i);default:return await this.baseFs.readFilePromise(t,i)}},async(n,{subPath:s})=>await n.readFilePromise(s,i))}readFileSync(t,i){return this.makeCallSync(t,()=>{switch(i){case\"utf8\":return this.baseFs.readFileSync(t,i);default:return this.baseFs.readFileSync(t,i)}},(n,{subPath:s})=>n.readFileSync(s,i))}async readdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.readdirPromise(t,i),async(n,{subPath:s})=>await n.readdirPromise(s,i),{requireSubpath:!1})}readdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.readdirSync(t,i),(n,{subPath:s})=>n.readdirSync(s,i),{requireSubpath:!1})}async readlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.readlinkPromise(t),async(i,{subPath:n})=>await i.readlinkPromise(n))}readlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.readlinkSync(t),(i,{subPath:n})=>i.readlinkSync(n))}async truncatePromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.truncatePromise(t,i),async(n,{subPath:s})=>await n.truncatePromise(s,i))}truncateSync(t,i){return this.makeCallSync(t,()=>this.baseFs.truncateSync(t,i),(n,{subPath:s})=>n.truncateSync(s,i))}async ftruncatePromise(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncatePromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncate\");let[s,o]=n;return s.ftruncatePromise(o,i)}ftruncateSync(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncateSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncateSync\");let[s,o]=n;return s.ftruncateSync(o,i)}watch(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watch(t,i,n),(s,{subPath:o})=>s.watch(o,i,n))}watchFile(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watchFile(t,i,n),()=>iI(this,t,i,n))}unwatchFile(t,i){return this.makeCallSync(t,()=>this.baseFs.unwatchFile(t,i),()=>Gp(this,t,i))}async makeCallPromise(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return await i();let o=this.resolve(t),a=this.findZip(o);return a?s&&a.subPath===\"/\"?await i():await this.getZipPromise(a.archivePath,async l=>await n(l,a)):await i()}makeCallSync(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return i();let o=this.resolve(t),a=this.findZip(o);return!a||s&&a.subPath===\"/\"?i():this.getZipSync(a.archivePath,l=>n(l,a))}findZip(t){if(this.filter&&!this.filter.test(t))return null;let i=\"\";for(;;){let n=t.substring(i.length),s;if(!this.fileExtensions)s=mK(n,\".zip\");else for(let o of this.fileExtensions)if(s=mK(n,o),s)break;if(!s)return null;if(i=this.pathUtils.join(i,s),this.isZip.has(i)===!1){if(this.notZip.has(i))continue;try{if(!this.baseFs.lstatSync(i).isFile()){this.notZip.add(i);continue}}catch{return null}this.isZip.add(i)}return{archivePath:i,subPath:this.pathUtils.join(Me.root,t.substring(i.length))}}}limitOpenFiles(t){if(this.zipInstances===null)return;let i=Date.now(),n=i+this.maxAge,s=t===null?0:this.zipInstances.size-t;for(let[o,{zipFs:a,expiresAt:l,refCount:c}]of this.zipInstances.entries())if(!(c!==0||a.hasOpenFileHandles())){if(i>=l){a.saveAndClose(),this.zipInstances.delete(o),s-=1;continue}else if(t===null||s<=0){n=l;break}a.saveAndClose(),this.zipInstances.delete(o),s-=1}this.limitOpenFilesTimeout===null&&(t===null&&this.zipInstances.size>0||t!==null)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},n-i).unref())}async getZipPromise(t,i){let n=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(t)});if(this.zipInstances){let s=this.zipInstances.get(t);if(!s){let o=await n();s=this.zipInstances.get(t),s||(s={zipFs:new Wr(t,o),expiresAt:0,refCount:0})}this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,s.refCount+=1;try{return await i(s.zipFs)}finally{s.refCount-=1}}else{let s=new Wr(t,await n());try{return await i(s)}finally{s.saveAndClose()}}}getZipSync(t,i){let n=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(t)});if(this.zipInstances){let s=this.zipInstances.get(t);return s||(s={zipFs:new Wr(t,n()),expiresAt:0,refCount:0}),this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,i(s.zipFs)}else{let s=new Wr(t,n());try{return i(s)}finally{s.saveAndClose()}}}};var Pg=J(\"util\");var sI=J(\"url\"),EK=J(\"util\");var nI=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return t}mapToBase(t){if(typeof t==\"string\")return t;if(t instanceof sI.URL)return(0,sI.fileURLToPath)(t);if(Buffer.isBuffer(t)){let i=t.toString();if(Buffer.byteLength(i)!==t.byteLength)throw new Error(\"Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942\");return i}throw new Error(`Unsupported path type: ${(0,EK.inspect)(t)}`)}};var IK=J(\"readline\"),Fi=Symbol(\"kBaseFs\"),wa=Symbol(\"kFd\"),PA=Symbol(\"kClosePromise\"),oI=Symbol(\"kCloseResolve\"),aI=Symbol(\"kCloseReject\"),xg=Symbol(\"kRefs\"),Ws=Symbol(\"kRef\"),zs=Symbol(\"kUnref\"),Zge,_ge,$ge,efe,Jp=class{constructor(e,t){this[Zge]=1;this[_ge]=void 0;this[$ge]=void 0;this[efe]=void 0;this[Fi]=t,this[wa]=e}get fd(){return this[wa]}async appendFile(e,t){var i;try{this[Ws](this.appendFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;return await this[Fi].appendFilePromise(this.fd,e,n?{encoding:n}:void 0)}finally{this[zs]()}}async chown(e,t){try{return this[Ws](this.chown),await this[Fi].fchownPromise(this.fd,e,t)}finally{this[zs]()}}async chmod(e){try{return this[Ws](this.chmod),await this[Fi].fchmodPromise(this.fd,e)}finally{this[zs]()}}createReadStream(e){return this[Fi].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Fi].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error(\"Method not implemented.\")}sync(){throw new Error(\"Method not implemented.\")}async read(e,t,i,n){var s,o,a;try{this[Ws](this.read);let l;return Buffer.isBuffer(e)?l=e:(e!=null||(e={}),l=(s=e.buffer)!=null?s:Buffer.alloc(16384),t=e.offset||0,i=(o=e.length)!=null?o:l.byteLength,n=(a=e.position)!=null?a:null),t!=null||(t=0),i!=null||(i=0),i===0?{bytesRead:i,buffer:l}:{bytesRead:await this[Fi].readPromise(this.fd,l,t,i,n),buffer:l}}finally{this[zs]()}}async readFile(e){var t;try{this[Ws](this.readFile);let i=(t=typeof e==\"string\"?e:e==null?void 0:e.encoding)!=null?t:void 0;return await this[Fi].readFilePromise(this.fd,i)}finally{this[zs]()}}readLines(e){return(0,IK.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Ws](this.stat),await this[Fi].fstatPromise(this.fd,e)}finally{this[zs]()}}async truncate(e){try{return this[Ws](this.truncate),await this[Fi].ftruncatePromise(this.fd,e)}finally{this[zs]()}}utimes(e,t){throw new Error(\"Method not implemented.\")}async writeFile(e,t){var i;try{this[Ws](this.writeFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;await this[Fi].writeFilePromise(this.fd,e,n)}finally{this[zs]()}}async write(...e){try{if(this[Ws](this.write),ArrayBuffer.isView(e[0])){let[t,i,n,s]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i!=null?i:void 0,n!=null?n:void 0,s!=null?s:void 0),buffer:t}}else{let[t,i,n]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i,n),buffer:t}}}finally{this[zs]()}}async writev(e,t){try{this[Ws](this.writev);let i=0;if(typeof t<\"u\")for(let n of e){let s=await this.write(n,void 0,void 0,t);i+=s.bytesWritten,t+=s.bytesWritten}else for(let n of e){let s=await this.write(n);i+=s.bytesWritten}return{buffers:e,bytesWritten:i}}finally{this[zs]()}}readv(e,t){throw new Error(\"Method not implemented.\")}close(){if(this[wa]===-1)return Promise.resolve();if(this[PA])return this[PA];if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[PA]=this[Fi].closePromise(e).finally(()=>{this[PA]=void 0})}else this[PA]=new Promise((e,t)=>{this[oI]=e,this[aI]=t}).finally(()=>{this[PA]=void 0,this[aI]=void 0,this[oI]=void 0});return this[PA]}[(Fi,wa,Zge=xg,_ge=PA,$ge=oI,efe=aI,Ws)](e){if(this[wa]===-1){let t=new Error(\"file closed\");throw t.code=\"EBADF\",t.syscall=e.name,t}this[xg]++}[zs](){if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[Fi].closePromise(e).then(this[oI],this[aI])}}};var tfe=new Set([\"accessSync\",\"appendFileSync\",\"createReadStream\",\"createWriteStream\",\"chmodSync\",\"fchmodSync\",\"chownSync\",\"fchownSync\",\"closeSync\",\"copyFileSync\",\"linkSync\",\"lstatSync\",\"fstatSync\",\"lutimesSync\",\"mkdirSync\",\"openSync\",\"opendirSync\",\"readlinkSync\",\"readFileSync\",\"readdirSync\",\"readlinkSync\",\"realpathSync\",\"renameSync\",\"rmdirSync\",\"statSync\",\"symlinkSync\",\"truncateSync\",\"ftruncateSync\",\"unlinkSync\",\"unwatchFile\",\"utimesSync\",\"watch\",\"watchFile\",\"writeFileSync\",\"writeSync\"]),yK=new Set([\"accessPromise\",\"appendFilePromise\",\"fchmodPromise\",\"chmodPromise\",\"fchownPromise\",\"chownPromise\",\"closePromise\",\"copyFilePromise\",\"linkPromise\",\"fstatPromise\",\"lstatPromise\",\"lutimesPromise\",\"mkdirPromise\",\"openPromise\",\"opendirPromise\",\"readdirPromise\",\"realpathPromise\",\"readFilePromise\",\"readdirPromise\",\"readlinkPromise\",\"renamePromise\",\"rmdirPromise\",\"statPromise\",\"symlinkPromise\",\"truncatePromise\",\"ftruncatePromise\",\"unlinkPromise\",\"utimesPromise\",\"writeFilePromise\",\"writeSync\"]);function bS(r,e){e=new nI(e);let t=(i,n,s)=>{let o=i[n];i[n]=s,typeof(o==null?void 0:o[Pg.promisify.custom])<\"u\"&&(s[Pg.promisify.custom]=o[Pg.promisify.custom])};{t(r,\"exists\",(i,...n)=>{let o=typeof n[n.length-1]==\"function\"?n.pop():()=>{};process.nextTick(()=>{e.existsPromise(i).then(a=>{o(a)},()=>{o(!1)})})}),t(r,\"read\",(...i)=>{let[n,s,o,a,l,c]=i;if(i.length<=3){let u={};i.length<3?c=i[1]:(u=i[1],c=i[2]),{buffer:s=Buffer.alloc(16384),offset:o=0,length:a=s.byteLength,position:l}=u}if(o==null&&(o=0),a|=0,a===0){process.nextTick(()=>{c(null,0,s)});return}l==null&&(l=-1),process.nextTick(()=>{e.readPromise(n,s,o,a,l).then(u=>{c(null,u,s)},u=>{c(u,0,s)})})});for(let i of yK){let n=i.replace(/Promise$/,\"\");if(typeof r[n]>\"u\")continue;let s=e[i];if(typeof s>\"u\")continue;t(r,n,(...a)=>{let c=typeof a[a.length-1]==\"function\"?a.pop():()=>{};process.nextTick(()=>{s.apply(e,a).then(u=>{c(null,u)},u=>{c(u)})})})}r.realpath.native=r.realpath}{t(r,\"existsSync\",i=>{try{return e.existsSync(i)}catch{return!1}}),t(r,\"readSync\",(...i)=>{let[n,s,o,a,l]=i;return i.length<=3&&({offset:o=0,length:a=s.byteLength,position:l}=i[2]||{}),o==null&&(o=0),a|=0,a===0?0:(l==null&&(l=-1),e.readSync(n,s,o,a,l))});for(let i of tfe){let n=i;if(typeof r[n]>\"u\")continue;let s=e[i];typeof s>\"u\"||t(r,n,s.bind(e))}r.realpathSync.native=r.realpathSync}{let i=process.emitWarning;process.emitWarning=()=>{};let n;try{n=r.promises}finally{process.emitWarning=i}if(typeof n<\"u\"){for(let s of yK){let o=s.replace(/Promise$/,\"\");if(typeof n[o]>\"u\")continue;let a=e[s];typeof a>\"u\"||s!==\"open\"&&t(n,o,(l,...c)=>l instanceof Jp?l[o].apply(l,c):a.call(e,l,...c))}t(n,\"open\",async(...s)=>{let o=await e.openPromise(...s);return new Jp(o,e)})}}r.read[Pg.promisify.custom]=async(i,n,...s)=>({bytesRead:await e.readPromise(i,n,...s),buffer:n}),r.write[Pg.promisify.custom]=async(i,n,...s)=>({bytesWritten:await e.writePromise(i,n,...s),buffer:n})}function AI(r,e){let t=Object.create(r);return bS(t,e),t}var bK=Pe(J(\"os\"));function wK(r){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,\"0\");return`${r}${e}`}var Vs=new Set,QS=null;function BK(){if(QS)return QS;let r=K.toPortablePath(bK.default.tmpdir()),e=O.realpathSync(r);return process.once(\"exit\",()=>{O.rmtempSync()}),QS={tmpdir:r,realTmpdir:e}}var O=Object.assign(new $t,{detachTemp(r){Vs.delete(r)},mktempSync(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{this.mkdirSync(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{this.removeSync(n)}catch{}}}}},async mktempPromise(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{await this.mkdirPromise(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return await r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{await this.removePromise(n)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Vs.values()).map(async r=>{try{await O.removePromise(r,{maxRetries:0}),Vs.delete(r)}catch{}}))},rmtempSync(){for(let r of Vs)try{O.removeSync(r),Vs.delete(r)}catch{}}});var fk=Pe(TS());var td={};ut(td,{parseResolution:()=>hI,parseShell:()=>uI,parseSyml:()=>yi,stringifyArgument:()=>KS,stringifyArgumentSegment:()=>US,stringifyArithmeticExpression:()=>fI,stringifyCommand:()=>OS,stringifyCommandChain:()=>Fg,stringifyCommandChainThen:()=>MS,stringifyCommandLine:()=>gI,stringifyCommandLineThen:()=>LS,stringifyEnvSegment:()=>cI,stringifyRedirectArgument:()=>zp,stringifyResolution:()=>pI,stringifyShell:()=>Rg,stringifyShellLine:()=>Rg,stringifySyml:()=>ba,stringifyValueArgument:()=>_l});var hU=Pe(fU());function uI(r,e={isGlobPattern:()=>!1}){try{return(0,hU.parse)(r,e)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function Rg(r,{endSemicolon:e=!1}={}){return r.map(({command:t,type:i},n)=>`${gI(t)}${i===\";\"?n!==r.length-1||e?\";\":\"\":\" &\"}`).join(\" \")}function gI(r){return`${Fg(r.chain)}${r.then?` ${LS(r.then)}`:\"\"}`}function LS(r){return`${r.type} ${gI(r.line)}`}function Fg(r){return`${OS(r)}${r.then?` ${MS(r.then)}`:\"\"}`}function MS(r){return`${r.type} ${Fg(r.chain)}`}function OS(r){switch(r.type){case\"command\":return`${r.envs.length>0?`${r.envs.map(e=>cI(e)).join(\" \")} `:\"\"}${r.args.map(e=>KS(e)).join(\" \")}`;case\"subshell\":return`(${Rg(r.subshell)})${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"group\":return`{ ${Rg(r.group,{endSemicolon:!0})} }${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"envs\":return r.envs.map(e=>cI(e)).join(\" \");default:throw new Error(`Unsupported command type:  \"${r.type}\"`)}}function cI(r){return`${r.name}=${r.args[0]?_l(r.args[0]):\"\"}`}function KS(r){switch(r.type){case\"redirection\":return zp(r);case\"argument\":return _l(r);default:throw new Error(`Unsupported argument type: \"${r.type}\"`)}}function zp(r){return`${r.subtype} ${r.args.map(e=>_l(e)).join(\" \")}`}function _l(r){return r.segments.map(e=>US(e)).join(\"\")}function US(r){let e=(i,n)=>n?`\"${i}\"`:i,t=i=>i===\"\"?'\"\"':i.match(/[(){}<>$|&; \\t\"']/)?`$'${i.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\f/g,\"\\\\f\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\").replace(/\\v/g,\"\\\\v\").replace(/\\0/g,\"\\\\0\")}'`:i;switch(r.type){case\"text\":return t(r.text);case\"glob\":return r.pattern;case\"shell\":return e(`\\${${Rg(r.shell)}}`,r.quoted);case\"variable\":return e(typeof r.defaultValue>\"u\"?typeof r.alternativeValue>\"u\"?`\\${${r.name}}`:r.alternativeValue.length===0?`\\${${r.name}:+}`:`\\${${r.name}:+${r.alternativeValue.map(i=>_l(i)).join(\" \")}}`:r.defaultValue.length===0?`\\${${r.name}:-}`:`\\${${r.name}:-${r.defaultValue.map(i=>_l(i)).join(\" \")}}`,r.quoted);case\"arithmetic\":return`$(( ${fI(r.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: \"${r.type}\"`)}}function fI(r){let e=n=>{switch(n){case\"addition\":return\"+\";case\"subtraction\":return\"-\";case\"multiplication\":return\"*\";case\"division\":return\"/\";default:throw new Error(`Can't extract operator from arithmetic expression of type \"${n}\"`)}},t=(n,s)=>s?`( ${n} )`:n,i=n=>t(fI(n),![\"number\",\"variable\"].includes(n.type));switch(r.type){case\"number\":return String(r.value);case\"variable\":return r.name;default:return`${i(r.left)} ${e(r.type)} ${i(r.right)}`}}var CU=Pe(dU());function hI(r){let e=r.match(/^\\*{1,2}\\/(.*)/);if(e)throw new Error(`The override for '${r}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${e[1]}' instead.`);try{return(0,CU.parse)(r)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function pI(r){let e=\"\";return r.from&&(e+=r.from.fullName,r.from.description&&(e+=`@${r.from.description}`),e+=\"/\"),e+=r.descriptor.fullName,r.descriptor.description&&(e+=`@${r.descriptor.description}`),e}var vI=Pe(aH()),gH=Pe(lH()),cde=/^(?![-?:,\\][{}#&*!|>'\"%@` \\t\\r\\n]).([ \\t]*(?![,\\][{}:# \\t\\r\\n]).)*$/,cH=[\"__metadata\",\"version\",\"resolution\",\"dependencies\",\"peerDependencies\",\"dependenciesMeta\",\"peerDependenciesMeta\",\"binaries\"],SI=class{constructor(e){this.data=e}};function uH(r){return r.match(cde)?r:JSON.stringify(r)}function fH(r){return typeof r>\"u\"?!0:typeof r==\"object\"&&r!==null?Object.keys(r).every(e=>fH(r[e])):!1}function $S(r,e,t){if(r===null)return`null\n`;if(typeof r==\"number\"||typeof r==\"boolean\")return`${r.toString()}\n`;if(typeof r==\"string\")return`${uH(r)}\n`;if(Array.isArray(r)){if(r.length===0)return`[]\n`;let i=\"  \".repeat(e);return`\n${r.map(s=>`${i}- ${$S(s,e+1,!1)}`).join(\"\")}`}if(typeof r==\"object\"&&r){let i,n;r instanceof SI?(i=r.data,n=!1):(i=r,n=!0);let s=\"  \".repeat(e),o=Object.keys(i);n&&o.sort((l,c)=>{let u=cH.indexOf(l),g=cH.indexOf(c);return u===-1&&g===-1?l<c?-1:l>c?1:0:u!==-1&&g===-1?-1:u===-1&&g!==-1?1:u-g});let a=o.filter(l=>!fH(i[l])).map((l,c)=>{let u=i[l],g=uH(l),f=$S(u,e+1,!0),h=c>0||t?s:\"\",p=g.length>1024?`? ${g}\n${h}:`:`${g}:`,C=f.startsWith(`\n`)?f:` ${f}`;return`${h}${p}${C}`}).join(e===0?`\n`:\"\")||`\n`;return t?`\n${a}`:`${a}`}throw new Error(`Unsupported value type (${r})`)}function ba(r){try{let e=$S(r,0,!1);return e!==`\n`?e:\"\"}catch(e){throw e.location&&(e.message=e.message.replace(/(\\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}ba.PreserveOrdering=SI;function ude(r){return r.endsWith(`\n`)||(r+=`\n`),(0,gH.parse)(r)}var gde=/^(#.*(\\r?\\n))*?#\\s+yarn\\s+lockfile\\s+v1\\r?\\n/i;function fde(r){if(gde.test(r))return ude(r);let e=(0,vI.safeLoad)(r,{schema:vI.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!=\"object\")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error(\"Expected an indexed object, got an array instead. Does your file follow Yaml's rules?\");return e}function yi(r){return fde(r)}var mz=Pe(pH()),Kw=Pe(Ac());var ud={};ut(ud,{Builtins:()=>hv,Cli:()=>Gn,Command:()=>ve,Option:()=>z,UsageError:()=>Qe,formatMarkdownish:()=>Ti});var tv=\"\u0001\",wi=\"\\0\";var rv=/^(-h|--help)(?:=([0-9]+))?$/,xI=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,EH=/^-[a-zA-Z]{2,}$/,iv=/^([^=]+)=([\\s\\S]*)$/,nv=process.env.DEBUG_CLI===\"1\";var Qe=class extends Error{constructor(e){super(e),this.clipanion={type:\"usage\"},this.name=\"UsageError\"}},Hg=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:\"none\"},this.name=\"UnknownSyntaxError\",this.candidates.length===0)this.message=\"Command not found, but we're not sure what's the alternative.\";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i}\n\n${this.candidates.map(({usage:n})=>`$ ${n}`).join(`\n`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean:\n\n$ ${i}\n${sv(e)}`}else this.message=`Command not found; did you mean one of:\n\n${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},PI=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:\"none\"},this.name=\"AmbiguousSyntaxError\",this.message=`Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},sv=r=>`While running ${r.filter(e=>e!==wi).map(e=>{let t=JSON.stringify(e);return e.match(/\\s/)||e.length===0||t!==`\"${e}\"`?t:e}).join(\" \")}`;var rd=Symbol(\"clipanion/isOption\");function Xi(r){return{...r,[rd]:!0}}function Do(r,e){return typeof r>\"u\"?[r,e]:typeof r==\"object\"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function DI(r,e=!1){let t=r.replace(/^\\.: /,\"\");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function id(r,e){return e.length===1?new Qe(`${r}: ${DI(e[0],!0)}`):new Qe(`${r}:\n${e.map(t=>`\n- ${DI(t)}`).join(\"\")}`)}function nd(r,e,t){if(typeof t>\"u\")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw id(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}var ve=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(()=>(ls(),hn)),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw id(\"Invalid option schema\",l);for(let[,g]of c)g()}else if(t!=null)throw new Error(\"Invalid command schema\");let i=await this.execute();return typeof i<\"u\"?i:0}};ve.isOption=rd;ve.Default=[];var Av=Array(80).fill(\"\\u2501\");for(let r=0;r<=24;++r)Av[Av.length-r]=`\\x1B[38;5;${232+r}m\\u2501`;var lv={header:r=>`\\x1B[1m\\u2501\\u2501\\u2501 ${r}${r.length<80-5?` ${Av.slice(r.length+5).join(\"\")}`:\":\"}\\x1B[0m`,bold:r=>`\\x1B[1m${r}\\x1B[22m`,error:r=>`\\x1B[31m\\x1B[1m${r}\\x1B[22m\\x1B[39m`,code:r=>`\\x1B[36m${r}\\x1B[39m`},PH={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function Xde(r){let e=r.split(`\n`),t=e.filter(n=>n.match(/\\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(`\n`)}function Ti(r,{format:e,paragraphs:t}){return r=r.replace(/\\r\\n?/g,`\n`),r=Xde(r),r=r.replace(/^\\n+|\\n+$/g,\"\"),r=r.replace(/^(\\s*)-([^\\n]*?)\\n+/gm,`$1-$2\n\n`),r=r.replace(/\\n(\\n)?\\n*/g,\"$1\"),t&&(r=r.split(/\\n/).map(i=>{let n=i.match(/^\\s*[*-][\\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(`\n`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,\"g\")).map((o,a)=>\" \".repeat(s)+(a===0?\"- \":\"  \")+o).join(`\n`)}).join(`\n\n`)),r=r.replace(/(`+)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\\*\\*)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r}\n`:\"\"}var fv=Pe(J(\"tty\"),1);function pn(r){nv&&console.log(r)}var DH={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:-1};function kH(){return{nodes:[_i(),_i(),_i()]}}function Zde(r){let e=kH(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s<n.nodes.length;++s)NH(s)||e.nodes.push(oCe(n.nodes[s],i));i+=n.nodes.length-2}for(let n of t)Gg(e,0,n);return e}function Xs(r,e){return r.nodes.push(e),r.nodes.length-1}function _de(r){let e=new Set,t=i=>{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(0)}function $de(r,{prefix:e=\"\"}={}){if(nv){pn(`${e}Nodes are:`);for(let t=0;t<r.nodes.length;++t)pn(`${e}  ${t}: ${JSON.stringify(r.nodes[t])}`)}}function RH(r,e,t=!1){pn(`Running a vm on ${JSON.stringify(e)}`);let i=[{node:0,state:{candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,options:[],path:[],positionals:[],remainder:null,selectedIndex:null}}];$de(r,{prefix:\"  \"});let n=[tv,...e];for(let s=0;s<n.length;++s){let o=n[s];pn(`  Processing ${JSON.stringify(o)}`);let a=[];for(let{node:l,state:c}of i){pn(`    Current node is ${l}`);let u=r.nodes[l];if(l===2){a.push({node:l,state:c});continue}console.assert(u.shortcuts.length===0,\"Shortcuts should have been eliminated by now\");let g=Object.prototype.hasOwnProperty.call(u.statics,o);if(!t||s<n.length-1||g)if(g){let f=u.statics[o];for(let{to:h,reducer:p}of f)a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Static transition to ${h} found`)}else pn(\"      No static transition found\");else{let f=!1;for(let h of Object.keys(u.statics))if(!!h.startsWith(o)){if(o===h)for(let{to:p,reducer:C}of u.statics[h])a.push({node:p,state:typeof C<\"u\"?RI(uv,C,c,o):c}),pn(`      Static transition to ${p} found`);else for(let{to:p}of u.statics[h])a.push({node:p,state:{...c,remainder:h.slice(o.length)}}),pn(`      Static transition to ${p} found (partial match)`);f=!0}f||pn(\"      No partial static transition found\")}if(o!==wi)for(let[f,{to:h,reducer:p}]of u.dynamics)RI(NI,f,c,o)&&(a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Dynamic transition to ${h} found (via ${f})`))}if(a.length===0&&o===wi&&e.length===1)return[{node:0,state:DH}];if(a.length===0)throw new Hg(e,i.filter(({node:l})=>l!==2).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===2))throw new Hg(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=iCe(a)}if(i.length>0){pn(\"  Results:\");for(let s of i)pn(`    - ${s.node} -> ${JSON.stringify(s.state)}`)}else pn(\"  No results\");return i}function eCe(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,wi)){for(let{to:t}of r.statics[wi])if(t===1)return!0}return!1}function tCe(r,e,t){let i=t&&e.length>0?[\"\"]:[],n=RH(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],y=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=y[0];for(let{to:D,reducer:T}of C.statics[v])T===\"pushPath\"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=eCe(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==wi||!f.startsWith(\"-\")&&h.some(({reducer:p})=>p===\"pushPath\"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===2)continue;let p=aCe(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function rCe(r,e){let t=RH(r,[...e,wi]);return nCe(e,t.map(({state:i})=>i))}function iCe(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function nCe(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new Hg(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=sCe(c);if(u.length>1)throw new PI(r,u.map(g=>g.candidateUsage));return u[0]}function sCe(r){let e=[],t=[];for(let i of r)i.selectedIndex===-1?t.push(i):e.push(i);return t.length>0&&e.push({...DH,path:FH(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function FH(r,e,...t){return e===void 0?Array.from(r):FH(r.filter((i,n)=>i===e[n]),...t)}function _i(){return{dynamics:[],shortcuts:[],statics:{}}}function NH(r){return r===1||r===2}function cv(r,e=0){return{to:NH(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function oCe(r,e=0){let t=_i();for(let[i,n]of r.dynamics)t.dynamics.push([i,cv(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(cv(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>cv(s,e));return t}function Bi(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Gg(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function Qa(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function RI(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function aCe(r,e){let t=Array.isArray(r)?NI[r[0]]:NI[r];if(typeof t.suggest>\"u\")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var NI={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!==\"-\"&&e.startsWith(\"-\"),isNotOptionLike:(r,e)=>r.ignoreOptions||e===\"-\"||!e.startsWith(\"-\"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&&EH.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(iv);return!r.ignoreOptions&&!!n&&xI.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&&rv.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith(\"-\")&&xI.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith(\"-\")&&!xI.test(e)};NI.isOption.suggest=(r,e,t=!0)=>t?null:[e];var uv={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(iv);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Hn})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(rv);return typeof i<\"u\"?{...r,options:[{name:\"-c\",value:String(t)},{name:\"-i\",value:i}]}:{...r,options:[{name:\"-c\",value:String(t)}]}},setError:(r,e,t)=>e===wi?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} (\"${e}\").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Hn=Symbol(),gv=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e=\"arg\",required:t=!0}={}){if(!t&&this.arity.extra===Hn)throw new Error(\"Optional parameters cannot be declared when using .rest() or .proxy()\");if(!t&&this.arity.trailing.length>0)throw new Error(\"Optional parameters cannot be declared after the required trailing positional arguments\");!t&&this.arity.extra!==Hn?this.arity.extra.push(e):this.arity.extra!==Hn&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e=\"arg\",required:t=0}={}){if(this.arity.extra===Hn)throw new Error(\"Infinite lists cannot be declared multiple times in the same command\");if(this.arity.trailing.length>0)throw new Error(\"Infinite lists cannot be declared after the required trailing positional arguments\");for(let i=0;i<t;++i)this.addPositional({name:e});this.arity.extra=Hn}addProxy({required:e=0}={}){this.addRest({required:e}),this.arity.proxy=!0}addOption({names:e,description:t,arity:i=0,hidden:n=!1,required:s=!1,allowBinding:o=!0}){if(!o&&i>1)throw new Error(\"The arity cannot be higher than 1 when the option only supports the --arg=value syntax\");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h<a;++h)g.push(` #${h}`);let f=`${o.join(\",\")}${g.join(\"\")}`;!t&&c?n.push({definition:f,description:c,required:u}):i.push(u?`<${f}>`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Hn?i.push(\"...\"):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(\" \"),options:n}}compile(){if(typeof this.context>\"u\")throw new Error(\"Assertion failed: No context attached\");let e=kH(),t=0,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=Xs(e,_i()),Qa(e,0,tv,t,[\"setCandidateState\",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?\"always\":\"isNotOptionLike\",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=Xs(e,_i());Gg(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f<a.length;++f){let h=Xs(e,_i());Qa(e,l,a[f],h,\"pushPath\"),l=h}if(this.arity.leading.length>0||!this.arity.proxy){let f=Xs(e,_i());Bi(e,l,\"isHelp\",f,[\"useHelp\",this.cliIndex]),Qa(e,f,wi,1,[\"setSelectedIndex\",-1]),this.registerOptions(e,l)}this.arity.leading.length>0&&Qa(e,l,wi,2,[\"setError\",\"Not enough positional arguments\"]);let c=l;for(let f=0;f<this.arity.leading.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),(this.arity.trailing.length>0||f+1!==this.arity.leading.length)&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,c,\"isNotOptionLike\",h,\"pushPositional\"),c=h}let u=c;if(this.arity.extra===Hn||this.arity.extra.length>0){let f=Xs(e,_i());if(Gg(e,c,f),this.arity.extra===Hn){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),Bi(e,c,s,h,\"pushExtraNoLimits\"),Bi(e,h,s,h,\"pushExtraNoLimits\"),Gg(e,h,f)}else for(let h=0;h<this.arity.extra.length;++h){let p=Xs(e,_i());this.arity.proxy||this.registerOptions(e,p),Bi(e,u,s,p,\"pushExtra\"),Gg(e,p,f),u=p}u=f}this.arity.trailing.length>0&&Qa(e,u,wi,2,[\"setError\",\"Not enough positional arguments\"]);let g=u;for(let f=0;f<this.arity.trailing.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),f+1<this.arity.trailing.length&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,g,\"isNotOptionLike\",h,\"pushPositional\"),g=h}Bi(e,g,s,2,[\"setError\",\"Extraneous positional argument\"]),Qa(e,g,wi,1,[\"setSelectedIndex\",this.cliIndex])}return{machine:e,context:this.context}}registerOptions(e,t){Bi(e,t,[\"isOption\",\"--\"],t,\"inhibateOptions\"),Bi(e,t,[\"isBatchOption\",this.allOptionNames],t,\"pushBatch\"),Bi(e,t,[\"isBoundOption\",this.allOptionNames,this.options],t,\"pushBound\"),Bi(e,t,[\"isUnsupportedOption\",this.allOptionNames],2,[\"setError\",\"Unsupported option name\"]),Bi(e,t,[\"isInvalidOption\"],2,[\"setError\",\"Invalid option name\"]);for(let i of this.options){let n=i.names.reduce((s,o)=>o.length>s.length?o:s,\"\");if(i.arity===0)for(let s of i.names)Bi(e,t,[\"isOption\",s,i.hidden||s!==n],t,\"pushTrue\"),s.startsWith(\"--\")&&!s.startsWith(\"--no-\")&&Bi(e,t,[\"isNegatedOption\",s],t,[\"pushFalse\",s]);else{let s=Xs(e,_i());for(let o of i.names)Bi(e,t,[\"isOption\",o,i.hidden||o!==n],s,\"pushUndefined\");for(let o=0;o<i.arity;++o){let a=Xs(e,_i());Qa(e,s,wi,2,\"setOptionArityError\"),Bi(e,s,\"isOptionLike\",2,\"setOptionArityError\");let l=i.arity===1?\"setStringValue\":\"pushStringValue\";Bi(e,s,\"isNotOptionLike\",a,l),s=a}Gg(e,s,t)}}}},jg=class{constructor({binaryName:e=\"...\"}={}){this.builders=[],this.opts={binaryName:e}}static build(e,t={}){return new jg(t).commands(e).compile()}getBuilderByIndex(e){if(!(e>=0&&e<this.builders.length))throw new Error(`Assertion failed: Out-of-bound command index (${e})`);return this.builders[e]}commands(e){for(let t of e)t(this.command());return this}command(){let e=new gv(this.builders.length,this.opts);return this.builders.push(e),e}compile(){let e=[],t=[];for(let n of this.builders){let{machine:s,context:o}=n.compile();e.push(s),t.push(o)}let i=Zde(e);return _de(i),{machine:i,contexts:t,process:n=>rCe(i,n),suggest:(n,s)=>tCe(i,n,s)}}};var qg=class extends ve{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new qg(t);i.path=e.path;for(let n of e.options)switch(n.name){case\"-c\":i.commands.push(Number(n.value));break;case\"-i\":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<\"u\"&&this.index>=0&&this.index<e.length&&(e=[e[this.index]]),e.length===0)this.context.stdout.write(this.cli.usage());else if(e.length===1)this.context.stdout.write(this.cli.usage(this.contexts[e[0]].commandClass,{detailed:!0}));else if(e.length>1){this.context.stdout.write(`Multiple commands match your selection:\n`),this.context.stdout.write(`\n`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(`\n`),this.context.stdout.write(`Run again with -h=<index> to see the longer details of any of those commands.\n`)}}};var TH=Symbol(\"clipanion/errorCommand\");function ACe(){return process.env.FORCE_COLOR===\"0\"?1:process.env.FORCE_COLOR===\"1\"||typeof process.stdout<\"u\"&&process.stdout.isTTY?8:1}var Gn=class{constructor({binaryLabel:e,binaryName:t=\"...\",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new jg({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new Gn(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c==\"object\"&&c!==null&&c[ve.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<\"u\")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case-1:return qg.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>\"u\")throw new Error(\"Assertion failed: Expected the command class to have been registered.\");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[TH]=a,l}}break}}async run(e,t){var i;let n,s={...Gn.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?lCe(s):MH,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>\"u\")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<\"u\"?Ti(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<\"u\"?Ti(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<\"u\"?Ti(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<\"u\"?i.usage.examples.map(([f,h])=>[Ti(f,{format:this.format(e),paragraphs:!1}),h.replace(/\\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n=\"$ \"}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<\"u\";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof ve?e.constructor:e,a=\"\";if(o)if(i){let{description:l=\"\",details:c=\"\",examples:u=[]}=o.usage||{};l!==\"\"&&(a+=Ti(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=`\n`),(c!==\"\"||u.length>0)&&(a+=`${this.format(t).header(\"Usage\")}\n`,a+=`\n`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g}\n`,f.length>0){a+=`\n`,a+=`${lv.header(\"Options\")}\n`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=`\n`;for(let{definition:p,description:C}of f)a+=`  ${this.format(t).bold(p.padEnd(h))}    ${Ti(C,{format:this.format(t),paragraphs:!1})}`}if(c!==\"\"&&(a+=`\n`,a+=`${this.format(t).header(\"Details\")}\n`,a+=`\n`,a+=Ti(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=`\n`,a+=`${this.format(t).header(\"Examples\")}\n`;for(let[h,p]of u)a+=`\n`,a+=Ti(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,`  ${this.format(t).bold(n)}`).replace(/\\$0/g,this.binaryName)}\n`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l}\n`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>\"u\")continue;let p=typeof f.usage.category<\"u\"?Ti(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>\"u\"&&l.set(p,C=[]);let{usage:y}=this.getUsageByIndex(h);C.push({commandClass:f,usage:y})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),u=typeof this.binaryLabel<\"u\",g=typeof this.binaryVersion<\"u\";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)}\n`:a+=`${this.format(t).header(`${this.binaryVersion}`)}\n`,a+=`  ${this.format(t).bold(n)}${this.binaryName} <command>\n`):a+=`${this.format(t).bold(n)}${this.binaryName} <command>\n`;for(let f of c){let h=l.get(f).slice().sort((C,y)=>C.usage.localeCompare(y.usage,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),p=f!==null?f.trim():\"General commands\";a+=`\n`,a+=`${this.format(t).header(`${p}`)}\n`;for(let{commandClass:C,usage:y}of h){let B=C.usage.description||\"undocumented\";a+=`\n`,a+=`  ${this.format(t).bold(y)}\n`,a+=`    ${Ti(B,{format:this.format(t),paragraphs:!1})}`}}a+=`\n`,a+=Ti(\"You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.\",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[TH])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o=\"\",a=e.name.replace(/([a-z])([A-Z])/g,\"$1 $2\");a===\"Error\"&&(a=\"Internal Error\"),o+=`${this.format(n).error(a)}: ${e.message}\n`;let l=e.clipanion;return typeof l<\"u\"?l.type===\"usage\"&&(o+=`\n`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\\n/,\"\")}\n`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:Gn.defaultContext.colorDepth>1)?lv:PH}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>\"u\")throw new Error(\"Assertion failed: Unregistered command\");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};Gn.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:\"getColorDepth\"in fv.default.WriteStream.prototype?fv.default.WriteStream.prototype.getColorDepth():ACe()};var LH;function lCe(r){let e=LH;if(typeof e>\"u\"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return MH;let{AsyncLocalStorage:t}=J(\"async_hooks\");e=LH=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function MH(r){return r()}var hv={};ut(hv,{DefinitionsCommand:()=>Ad,HelpCommand:()=>ld,VersionCommand:()=>cd});var Ad=class extends ve{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)}\n`)}};Ad.paths=[[\"--clipanion=definitions\"]];var ld=class extends ve{async execute(){this.context.stdout.write(this.cli.usage())}};ld.paths=[[\"-h\"],[\"--help\"]];var cd=class extends ve{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:\"<unknown>\"}\n`)}};cd.paths=[[\"-v\"],[\"--version\"]];var z={};ut(z,{Array:()=>OH,Boolean:()=>KH,Counter:()=>UH,Proxy:()=>HH,Rest:()=>GH,String:()=>YH,applyValidator:()=>nd,cleanValidationError:()=>DI,formatError:()=>id,isOptionSymbol:()=>rd,makeCommandOption:()=>Xi,rerouteArguments:()=>Do});function OH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<\"u\"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}function KH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}function UH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}function HH(r={}){return Xi({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}function GH(r={}){return Xi({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Hn||a.extra===!1&&o<e.arity.leading.length},s=0;for(;s<i.positionals.length&&n(s);)s+=1;return i.positionals.splice(0,s).map(({value:o})=>o)}})}function cCe(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f==\"string\"?nd(g!=null?g:c,f,n.validator):f}})}function uCe(r={}){let{required:e=!0}=r;return Xi({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o<n.positionals.length;++o){if(n.positionals[o].extra===Hn||e&&n.positionals[o].extra===!0||!e&&n.positionals[o].extra===!1)continue;let[a]=n.positionals.splice(o,1);return nd((s=r.name)!==null&&s!==void 0?s:i,a.value,r.validator)}}})}function YH(r,...e){return typeof r==\"string\"?cCe(r,...e):uCe(r)}var Ez=Pe(Jg()),nk=J(\"stream\");var Ct=(se=>(se[se.UNNAMED=0]=\"UNNAMED\",se[se.EXCEPTION=1]=\"EXCEPTION\",se[se.MISSING_PEER_DEPENDENCY=2]=\"MISSING_PEER_DEPENDENCY\",se[se.CYCLIC_DEPENDENCIES=3]=\"CYCLIC_DEPENDENCIES\",se[se.DISABLED_BUILD_SCRIPTS=4]=\"DISABLED_BUILD_SCRIPTS\",se[se.BUILD_DISABLED=5]=\"BUILD_DISABLED\",se[se.SOFT_LINK_BUILD=6]=\"SOFT_LINK_BUILD\",se[se.MUST_BUILD=7]=\"MUST_BUILD\",se[se.MUST_REBUILD=8]=\"MUST_REBUILD\",se[se.BUILD_FAILED=9]=\"BUILD_FAILED\",se[se.RESOLVER_NOT_FOUND=10]=\"RESOLVER_NOT_FOUND\",se[se.FETCHER_NOT_FOUND=11]=\"FETCHER_NOT_FOUND\",se[se.LINKER_NOT_FOUND=12]=\"LINKER_NOT_FOUND\",se[se.FETCH_NOT_CACHED=13]=\"FETCH_NOT_CACHED\",se[se.YARN_IMPORT_FAILED=14]=\"YARN_IMPORT_FAILED\",se[se.REMOTE_INVALID=15]=\"REMOTE_INVALID\",se[se.REMOTE_NOT_FOUND=16]=\"REMOTE_NOT_FOUND\",se[se.RESOLUTION_PACK=17]=\"RESOLUTION_PACK\",se[se.CACHE_CHECKSUM_MISMATCH=18]=\"CACHE_CHECKSUM_MISMATCH\",se[se.UNUSED_CACHE_ENTRY=19]=\"UNUSED_CACHE_ENTRY\",se[se.MISSING_LOCKFILE_ENTRY=20]=\"MISSING_LOCKFILE_ENTRY\",se[se.WORKSPACE_NOT_FOUND=21]=\"WORKSPACE_NOT_FOUND\",se[se.TOO_MANY_MATCHING_WORKSPACES=22]=\"TOO_MANY_MATCHING_WORKSPACES\",se[se.CONSTRAINTS_MISSING_DEPENDENCY=23]=\"CONSTRAINTS_MISSING_DEPENDENCY\",se[se.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]=\"CONSTRAINTS_INCOMPATIBLE_DEPENDENCY\",se[se.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]=\"CONSTRAINTS_EXTRANEOUS_DEPENDENCY\",se[se.CONSTRAINTS_INVALID_DEPENDENCY=26]=\"CONSTRAINTS_INVALID_DEPENDENCY\",se[se.CANT_SUGGEST_RESOLUTIONS=27]=\"CANT_SUGGEST_RESOLUTIONS\",se[se.FROZEN_LOCKFILE_EXCEPTION=28]=\"FROZEN_LOCKFILE_EXCEPTION\",se[se.CROSS_DRIVE_VIRTUAL_LOCAL=29]=\"CROSS_DRIVE_VIRTUAL_LOCAL\",se[se.FETCH_FAILED=30]=\"FETCH_FAILED\",se[se.DANGEROUS_NODE_MODULES=31]=\"DANGEROUS_NODE_MODULES\",se[se.NODE_GYP_INJECTED=32]=\"NODE_GYP_INJECTED\",se[se.AUTHENTICATION_NOT_FOUND=33]=\"AUTHENTICATION_NOT_FOUND\",se[se.INVALID_CONFIGURATION_KEY=34]=\"INVALID_CONFIGURATION_KEY\",se[se.NETWORK_ERROR=35]=\"NETWORK_ERROR\",se[se.LIFECYCLE_SCRIPT=36]=\"LIFECYCLE_SCRIPT\",se[se.CONSTRAINTS_MISSING_FIELD=37]=\"CONSTRAINTS_MISSING_FIELD\",se[se.CONSTRAINTS_INCOMPATIBLE_FIELD=38]=\"CONSTRAINTS_INCOMPATIBLE_FIELD\",se[se.CONSTRAINTS_EXTRANEOUS_FIELD=39]=\"CONSTRAINTS_EXTRANEOUS_FIELD\",se[se.CONSTRAINTS_INVALID_FIELD=40]=\"CONSTRAINTS_INVALID_FIELD\",se[se.AUTHENTICATION_INVALID=41]=\"AUTHENTICATION_INVALID\",se[se.PROLOG_UNKNOWN_ERROR=42]=\"PROLOG_UNKNOWN_ERROR\",se[se.PROLOG_SYNTAX_ERROR=43]=\"PROLOG_SYNTAX_ERROR\",se[se.PROLOG_EXISTENCE_ERROR=44]=\"PROLOG_EXISTENCE_ERROR\",se[se.STACK_OVERFLOW_RESOLUTION=45]=\"STACK_OVERFLOW_RESOLUTION\",se[se.AUTOMERGE_FAILED_TO_PARSE=46]=\"AUTOMERGE_FAILED_TO_PARSE\",se[se.AUTOMERGE_IMMUTABLE=47]=\"AUTOMERGE_IMMUTABLE\",se[se.AUTOMERGE_SUCCESS=48]=\"AUTOMERGE_SUCCESS\",se[se.AUTOMERGE_REQUIRED=49]=\"AUTOMERGE_REQUIRED\",se[se.DEPRECATED_CLI_SETTINGS=50]=\"DEPRECATED_CLI_SETTINGS\",se[se.PLUGIN_NAME_NOT_FOUND=51]=\"PLUGIN_NAME_NOT_FOUND\",se[se.INVALID_PLUGIN_REFERENCE=52]=\"INVALID_PLUGIN_REFERENCE\",se[se.CONSTRAINTS_AMBIGUITY=53]=\"CONSTRAINTS_AMBIGUITY\",se[se.CACHE_OUTSIDE_PROJECT=54]=\"CACHE_OUTSIDE_PROJECT\",se[se.IMMUTABLE_INSTALL=55]=\"IMMUTABLE_INSTALL\",se[se.IMMUTABLE_CACHE=56]=\"IMMUTABLE_CACHE\",se[se.INVALID_MANIFEST=57]=\"INVALID_MANIFEST\",se[se.PACKAGE_PREPARATION_FAILED=58]=\"PACKAGE_PREPARATION_FAILED\",se[se.INVALID_RANGE_PEER_DEPENDENCY=59]=\"INVALID_RANGE_PEER_DEPENDENCY\",se[se.INCOMPATIBLE_PEER_DEPENDENCY=60]=\"INCOMPATIBLE_PEER_DEPENDENCY\",se[se.DEPRECATED_PACKAGE=61]=\"DEPRECATED_PACKAGE\",se[se.INCOMPATIBLE_OS=62]=\"INCOMPATIBLE_OS\",se[se.INCOMPATIBLE_CPU=63]=\"INCOMPATIBLE_CPU\",se[se.FROZEN_ARTIFACT_EXCEPTION=64]=\"FROZEN_ARTIFACT_EXCEPTION\",se[se.TELEMETRY_NOTICE=65]=\"TELEMETRY_NOTICE\",se[se.PATCH_HUNK_FAILED=66]=\"PATCH_HUNK_FAILED\",se[se.INVALID_CONFIGURATION_VALUE=67]=\"INVALID_CONFIGURATION_VALUE\",se[se.UNUSED_PACKAGE_EXTENSION=68]=\"UNUSED_PACKAGE_EXTENSION\",se[se.REDUNDANT_PACKAGE_EXTENSION=69]=\"REDUNDANT_PACKAGE_EXTENSION\",se[se.AUTO_NM_SUCCESS=70]=\"AUTO_NM_SUCCESS\",se[se.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]=\"NM_CANT_INSTALL_EXTERNAL_SOFT_LINK\",se[se.NM_PRESERVE_SYMLINKS_REQUIRED=72]=\"NM_PRESERVE_SYMLINKS_REQUIRED\",se[se.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]=\"UPDATE_LOCKFILE_ONLY_SKIP_LINK\",se[se.NM_HARDLINKS_MODE_DOWNGRADED=74]=\"NM_HARDLINKS_MODE_DOWNGRADED\",se[se.PROLOG_INSTANTIATION_ERROR=75]=\"PROLOG_INSTANTIATION_ERROR\",se[se.INCOMPATIBLE_ARCHITECTURE=76]=\"INCOMPATIBLE_ARCHITECTURE\",se[se.GHOST_ARCHITECTURE=77]=\"GHOST_ARCHITECTURE\",se[se.PROLOG_LIMIT_EXCEEDED=79]=\"PROLOG_LIMIT_EXCEEDED\",se))(Ct||{});function FA(r){return`YN${r.toString(10).padStart(4,\"0\")}`}function LI(r){let e=Number(r.slice(2));if(typeof Ct[e]>\"u\")throw new Error(`Unknown message name: \"${r}\"`);return e}var P={};ut(P,{areDescriptorsEqual:()=>S8,areIdentsEqual:()=>sC,areLocatorsEqual:()=>oC,areVirtualPackagesEquivalent:()=>LSe,bindDescriptor:()=>NSe,bindLocator:()=>TSe,convertDescriptorToLocator:()=>Sw,convertLocatorToDescriptor:()=>HD,convertPackageToLocator:()=>FSe,convertToIdent:()=>RSe,convertToManifestRange:()=>KSe,copyPackage:()=>rC,devirtualizeDescriptor:()=>iC,devirtualizeLocator:()=>nC,getIdentVendorPath:()=>qD,isPackageCompatible:()=>kw,isVirtualDescriptor:()=>JA,isVirtualLocator:()=>qo,makeDescriptor:()=>_t,makeIdent:()=>Jo,makeLocator:()=>nn,makeRange:()=>xw,parseDescriptor:()=>WA,parseFileStyleRange:()=>MSe,parseIdent:()=>tn,parseLocator:()=>Dc,parseRange:()=>vf,prettyDependent:()=>nP,prettyDescriptor:()=>tr,prettyIdent:()=>Ai,prettyLocator:()=>mt,prettyLocatorNoColors:()=>jD,prettyRange:()=>Dw,prettyReference:()=>AC,prettyResolution:()=>iP,prettyWorkspace:()=>lC,renamePackage:()=>tC,slugifyIdent:()=>UD,slugifyLocator:()=>xf,sortDescriptors:()=>Pf,stringifyDescriptor:()=>Sn,stringifyIdent:()=>Mt,stringifyLocator:()=>Es,tryParseDescriptor:()=>aC,tryParseIdent:()=>v8,tryParseLocator:()=>vw,virtualizeDescriptor:()=>GD,virtualizePackage:()=>YD});var Sf=Pe(J(\"querystring\")),B8=Pe(Xr()),b8=Pe(mJ());var ee={};ut(ee,{LogLevel:()=>Xy,Style:()=>_x,Type:()=>Ue,addLogFilterSupport:()=>Xd,applyColor:()=>Qn,applyHyperlink:()=>If,applyStyle:()=>Vy,json:()=>Bc,jsonOrPretty:()=>h0e,mark:()=>rP,pretty:()=>$e,prettyField:()=>Go,prettyList:()=>tP,supportsColor:()=>zy,supportsHyperlinks:()=>eP,tuple:()=>no});var Vd=Pe(wx()),zd=Pe(Ac());var p3=Pe(Bn()),d3=Pe(n3());var Ie={};ut(Ie,{AsyncActions:()=>Gx,BufferStream:()=>Hx,CachingStrategy:()=>f3,DefaultStream:()=>Yx,allSettledSafe:()=>io,assertNever:()=>qx,bufferStream:()=>Cf,buildIgnorePattern:()=>c0e,convertMapsToIndexableObjects:()=>Jy,dynamicRequire:()=>mf,escapeRegExp:()=>n0e,getArrayWithDefault:()=>hf,getFactoryWithDefault:()=>Ta,getMapWithDefault:()=>pf,getSetWithDefault:()=>wc,isIndexableObject:()=>Ux,isPathLike:()=>u0e,isTaggedYarnVersion:()=>i0e,mapAndFilter:()=>Ho,mapAndFind:()=>Jd,overrideType:()=>s0e,parseBoolean:()=>Wd,parseOptionalBoolean:()=>h3,prettifyAsyncErrors:()=>df,prettifySyncErrors:()=>Jx,releaseAfterUseAsync:()=>a0e,replaceEnvVariables:()=>Wx,sortMap:()=>bn,tryParseOptionalBoolean:()=>zx,validateEnum:()=>o0e});var o3=Pe(Bn()),a3=Pe(Jg()),A3=Pe(Xr()),jx=J(\"stream\");function i0e(r){return!!(A3.default.valid(r)&&r.match(/^[^-]+(-rc\\.[0-9]+)?$/))}function n0e(r){return r.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function s0e(r){}function qx(r){throw new Error(`Assertion failed: Unexpected object '${r}'`)}function o0e(r,e){let t=Object.values(r);if(!t.includes(e))throw new Qe(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${t.map(i=>JSON.stringify(i)).join(\", \")})`);return e}function Ho(r,e){let t=[];for(let i of r){let n=e(i);n!==l3&&t.push(n)}return t}var l3=Symbol();Ho.skip=l3;function Jd(r,e){for(let t of r){let i=e(t);if(i!==c3)return i}}var c3=Symbol();Jd.skip=c3;function Ux(r){return typeof r==\"object\"&&r!==null}async function io(r){let e=await Promise.allSettled(r),t=[];for(let i of e){if(i.status===\"rejected\")throw i.reason;t.push(i.value)}return t}function Jy(r){if(r instanceof Map&&(r=Object.fromEntries(r)),Ux(r))for(let e of Object.keys(r)){let t=r[e];Ux(t)&&(r[e]=Jy(t))}return r}function Ta(r,e,t){let i=r.get(e);return typeof i>\"u\"&&r.set(e,i=t()),i}function hf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=[]),t}function wc(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Set),t}function pf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Map),t}async function a0e(r,e){if(e==null)return await r();try{return await r()}finally{await e()}}async function df(r,e){try{return await r()}catch(t){throw t.message=e(t.message),t}}function Jx(r,e){try{return r()}catch(t){throw t.message=e(t.message),t}}async function Cf(r){return await new Promise((e,t)=>{let i=[];r.on(\"error\",n=>{t(n)}),r.on(\"data\",n=>{i.push(n)}),r.on(\"end\",()=>{e(Buffer.concat(i))})})}var Hx=class extends jx.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: BufferStream only accept buffers\");this.chunks.push(t),n(null,null)}_flush(t){t(null,Buffer.concat(this.chunks))}};function A0e(){let r,e;return{promise:new Promise((i,n)=>{r=i,e=n}),resolve:r,reject:e}}var Gx=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,a3.default)(e)}set(e,t){let i=this.deferred.get(e);typeof i>\"u\"&&this.deferred.set(e,i=A0e());let n=this.limit(()=>t());return this.promises.set(e,n),n.then(()=>{this.promises.get(e)===n&&i.resolve()},s=>{this.promises.get(e)===n&&i.reject(s)}),i.promise}reduce(e,t){var n;let i=(n=this.promises.get(e))!=null?n:Promise.resolve();this.set(e,()=>t(i))}async wait(){await Promise.all(this.promises.values())}},Yx=class extends jx.Transform{constructor(t=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=t}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: DefaultStream only accept buffers\");this.active=!1,n(null,t)}_flush(t){this.active&&this.ifEmpty.length>0?t(null,this.ifEmpty):t(null)}},qd=eval(\"require\");function u3(r){return qd(K.fromPortablePath(r))}function g3(path){let physicalPath=K.fromPortablePath(path),currentCacheEntry=qd.cache[physicalPath];delete qd.cache[physicalPath];let result;try{result=u3(physicalPath);let freshCacheEntry=qd.cache[physicalPath],dynamicModule=eval(\"module\"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{qd.cache[physicalPath]=currentCacheEntry}return result}var s3=new Map;function l0e(r){let e=s3.get(r),t=O.statSync(r);if((e==null?void 0:e.mtime)===t.mtimeMs)return e.instance;let i=g3(r);return s3.set(r,{mtime:t.mtimeMs,instance:i}),i}var f3=(i=>(i[i.NoCache=0]=\"NoCache\",i[i.FsTime=1]=\"FsTime\",i[i.Node=2]=\"Node\",i))(f3||{});function mf(r,{cachingStrategy:e=2}={}){switch(e){case 0:return g3(r);case 1:return l0e(r);case 2:return u3(r);default:throw new Error(\"Unsupported caching strategy\")}}function bn(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function c0e(r){return r.length===0?null:r.map(e=>`(${o3.default.makeRe(e,{windows:!1,dot:!0}).source})`).join(\"|\")}function Wx(r,{env:e}){let t=/\\${(?<variableName>[\\d\\w_]+)(?<colon>:)?(?:-(?<fallback>[^}]*))?}/g;return r.replace(t,(...i)=>{let{variableName:n,colon:s,fallback:o}=i[i.length-1],a=Object.prototype.hasOwnProperty.call(e,n),l=e[n];if(l||a&&!s)return l;if(o!=null)return o;throw new Qe(`Environment variable not found (${n})`)})}function Wd(r){switch(r){case\"true\":case\"1\":case 1:case!0:return!0;case\"false\":case\"0\":case 0:case!1:return!1;default:throw new Error(`Couldn't parse \"${r}\" as a boolean`)}}function h3(r){return typeof r>\"u\"?r:Wd(r)}function zx(r){try{return h3(r)}catch{return null}}function u0e(r){return!!(K.isAbsolute(r)||r.match(/^(\\.{1,2}|~)\\//))}var Ef=(t=>(t.HARD=\"HARD\",t.SOFT=\"SOFT\",t))(Ef||{}),Vx=(i=>(i.Dependency=\"Dependency\",i.PeerDependency=\"PeerDependency\",i.PeerDependencyMeta=\"PeerDependencyMeta\",i))(Vx||{}),Xx=(i=>(i.Inactive=\"inactive\",i.Redundant=\"redundant\",i.Active=\"active\",i))(Xx||{});var Ue={NO_HINT:\"NO_HINT\",NULL:\"NULL\",SCOPE:\"SCOPE\",NAME:\"NAME\",RANGE:\"RANGE\",REFERENCE:\"REFERENCE\",NUMBER:\"NUMBER\",PATH:\"PATH\",URL:\"URL\",ADDED:\"ADDED\",REMOVED:\"REMOVED\",CODE:\"CODE\",DURATION:\"DURATION\",SIZE:\"SIZE\",IDENT:\"IDENT\",DESCRIPTOR:\"DESCRIPTOR\",LOCATOR:\"LOCATOR\",RESOLUTION:\"RESOLUTION\",DEPENDENT:\"DEPENDENT\",PACKAGE_EXTENSION:\"PACKAGE_EXTENSION\",SETTING:\"SETTING\",MARKDOWN:\"MARKDOWN\"},_x=(e=>(e[e.BOLD=2]=\"BOLD\",e))(_x||{}),$x=zd.default.GITHUB_ACTIONS?{level:2}:Vd.default.supportsColor?{level:Vd.default.supportsColor.level}:{level:0},zy=$x.level!==0,eP=zy&&!zd.default.GITHUB_ACTIONS&&!zd.default.CIRCLE&&!zd.default.GITLAB,Zx=new Vd.default.Instance($x),g0e=new Map([[Ue.NO_HINT,null],[Ue.NULL,[\"#a853b5\",129]],[Ue.SCOPE,[\"#d75f00\",166]],[Ue.NAME,[\"#d7875f\",173]],[Ue.RANGE,[\"#00afaf\",37]],[Ue.REFERENCE,[\"#87afff\",111]],[Ue.NUMBER,[\"#ffd700\",220]],[Ue.PATH,[\"#d75fd7\",170]],[Ue.URL,[\"#d75fd7\",170]],[Ue.ADDED,[\"#5faf00\",70]],[Ue.REMOVED,[\"#d70000\",160]],[Ue.CODE,[\"#87afff\",111]],[Ue.SIZE,[\"#ffd700\",220]]]),ms=r=>r,Wy={[Ue.NUMBER]:ms({pretty:(r,e)=>Qn(r,`${e}`,Ue.NUMBER),json:r=>r}),[Ue.IDENT]:ms({pretty:(r,e)=>Ai(r,e),json:r=>Mt(r)}),[Ue.LOCATOR]:ms({pretty:(r,e)=>mt(r,e),json:r=>Es(r)}),[Ue.DESCRIPTOR]:ms({pretty:(r,e)=>tr(r,e),json:r=>Sn(r)}),[Ue.RESOLUTION]:ms({pretty:(r,{descriptor:e,locator:t})=>iP(r,e,t),json:({descriptor:r,locator:e})=>({descriptor:Sn(r),locator:e!==null?Es(e):null})}),[Ue.DEPENDENT]:ms({pretty:(r,{locator:e,descriptor:t})=>nP(r,e,t),json:({locator:r,descriptor:e})=>({locator:Es(r),descriptor:Sn(e)})}),[Ue.PACKAGE_EXTENSION]:ms({pretty:(r,e)=>{switch(e.type){case\"Dependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"dependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependencyMeta\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependenciesMeta\",Ue.CODE)} \\u27A4 ${Ai(r,tn(e.selector))} \\u27A4 ${Qn(r,e.key,Ue.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:r=>{switch(r.type){case\"Dependency\":return`${Mt(r.parentDescriptor)} > ${Mt(r.descriptor)}`;case\"PeerDependency\":return`${Mt(r.parentDescriptor)} >> ${Mt(r.descriptor)}`;case\"PeerDependencyMeta\":return`${Mt(r.parentDescriptor)} >> ${r.selector} / ${r.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${r.type}`)}}}),[Ue.SETTING]:ms({pretty:(r,e)=>(r.get(e),If(r,Qn(r,e,Ue.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:r=>r}),[Ue.DURATION]:ms({pretty:(r,e)=>{if(e>1e3*60){let t=Math.floor(e/1e3/60),i=Math.ceil((e-t*60*1e3)/1e3);return i===0?`${t}m`:`${t}m ${i}s`}else{let t=Math.floor(e/1e3),i=e-t*1e3;return i===0?`${t}s`:`${t}s ${i}ms`}},json:r=>r}),[Ue.SIZE]:ms({pretty:(r,e)=>{let t=[\"KB\",\"MB\",\"GB\",\"TB\"],i=t.length;for(;i>1&&e<1024**i;)i-=1;let n=1024**i,s=Math.floor(e*100/n)/100;return Qn(r,`${s} ${t[i-1]}`,Ue.NUMBER)},json:r=>r}),[Ue.PATH]:ms({pretty:(r,e)=>Qn(r,K.fromPortablePath(e),Ue.PATH),json:r=>K.fromPortablePath(r)}),[Ue.MARKDOWN]:ms({pretty:(r,{text:e,format:t,paragraphs:i})=>Ti(e,{format:t,paragraphs:i}),json:({text:r})=>r})};function no(r,e){return[e,r]}function Vy(r,e,t){return r.get(\"enableColors\")&&t&2&&(e=Vd.default.bold(e)),e}function Qn(r,e,t){if(!r.get(\"enableColors\"))return e;let i=g0e.get(t);if(i===null)return e;let n=typeof i>\"u\"?t:$x.level>=3?i[0]:i[1],s=typeof n==\"number\"?Zx.ansi256(n):n.startsWith(\"#\")?Zx.hex(n):Zx[n];if(typeof s!=\"function\")throw new Error(`Invalid format type ${n}`);return s(e)}var f0e=!!process.env.KONSOLE_VERSION;function If(r,e,t){return r.get(\"enableHyperlinks\")?f0e?`\\x1B]8;;${t}\\x1B\\\\${e}\\x1B]8;;\\x1B\\\\`:`\\x1B]8;;${t}\\x07${e}\\x1B]8;;\\x07`:e}function $e(r,e,t){if(e===null)return Qn(r,\"null\",Ue.NULL);if(Object.prototype.hasOwnProperty.call(Wy,t))return Wy[t].pretty(r,e);if(typeof e!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Qn(r,e,t)}function tP(r,e,t,{separator:i=\", \"}={}){return[...e].map(n=>$e(r,n,t)).join(i)}function Bc(r,e){if(r===null)return null;if(Object.prototype.hasOwnProperty.call(Wy,e))return Wy[e].json(r);if(typeof r!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof r}`);return r}function h0e(r,e,[t,i]){return r?Bc(t,i):$e(e,t,i)}function rP(r){return{Check:Qn(r,\"\\u2713\",\"green\"),Cross:Qn(r,\"\\u2718\",\"red\"),Question:Qn(r,\"?\",\"cyan\")}}function Go(r,{label:e,value:[t,i]}){return`${$e(r,e,Ue.CODE)}: ${$e(r,t,i)}`}var Xy=(n=>(n.Error=\"error\",n.Warning=\"warning\",n.Info=\"info\",n.Discard=\"discard\",n))(Xy||{});function Xd(r,{configuration:e}){let t=e.get(\"logFilters\"),i=new Map,n=new Map,s=[];for(let g of t){let f=g.get(\"level\");if(typeof f>\"u\")continue;let h=g.get(\"code\");typeof h<\"u\"&&i.set(h,f);let p=g.get(\"text\");typeof p<\"u\"&&n.set(p,f);let C=g.get(\"pattern\");typeof C<\"u\"&&s.push([p3.default.matcher(C,{contains:!0}),f])}s.reverse();let o=(g,f,h)=>{if(g===null||g===0)return h;let p=n.size>0||s.length>0?(0,d3.default)(f):f;if(n.size>0){let C=n.get(p);if(typeof C<\"u\")return C!=null?C:h}if(s.length>0){for(let[C,y]of s)if(C(p))return y!=null?y:h}if(i.size>0){let C=i.get(FA(g));if(typeof C<\"u\")return C!=null?C:h}return h},a=r.reportInfo,l=r.reportWarning,c=r.reportError,u=function(g,f,h,p){switch(o(f,h,p)){case\"info\":a.call(g,f,h);break;case\"warning\":l.call(g,f!=null?f:0,h);break;case\"error\":c.call(g,f!=null?f:0,h);break}};r.reportInfo=function(...g){return u(this,...g,\"info\")},r.reportWarning=function(...g){return u(this,...g,\"warning\")},r.reportError=function(...g){return u(this,...g,\"error\")}}var li={};ut(li,{checksumFile:()=>bw,checksumPattern:()=>Qw,makeHash:()=>rn});var Bw=J(\"crypto\"),KD=Pe(OD());function rn(...r){let e=(0,Bw.createHash)(\"sha512\"),t=\"\";for(let i of r)typeof i==\"string\"?t+=i:i&&(t&&(e.update(t),t=\"\"),e.update(i));return t&&e.update(t),e.digest(\"hex\")}async function bw(r,{baseFs:e,algorithm:t}={baseFs:O,algorithm:\"sha512\"}){let i=await e.openPromise(r,\"r\");try{let s=Buffer.allocUnsafeSlow(65536),o=(0,Bw.createHash)(t),a=0;for(;(a=await e.readPromise(i,s,0,65536))!==0;)o.update(a===65536?s:s.slice(0,a));return o.digest(\"hex\")}finally{await e.closePromise(i)}}async function Qw(r,{cwd:e}){let i=(await(0,KD.default)(r,{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(a=>`${a}/**/*`),n=await(0,KD.default)([r,...i],{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyFiles:!1,unique:!0});n.sort();let s=await Promise.all(n.map(async a=>{let l=[Buffer.from(a)],c=K.toPortablePath(a),u=await O.lstatPromise(c);return u.isSymbolicLink()?l.push(Buffer.from(await O.readlinkPromise(c))):u.isFile()&&l.push(await O.readFilePromise(c)),l.join(\"\\0\")})),o=(0,Bw.createHash)(\"sha512\");for(let a of s)o.update(a);return o.digest(\"hex\")}var eC=\"virtual:\",DSe=5,Q8=/(os|cpu|libc)=([a-z0-9_-]+)/,kSe=(0,b8.makeParser)(Q8);function Jo(r,e){if(r!=null&&r.startsWith(\"@\"))throw new Error(\"Invalid scope: don't prefix it with '@'\");return{identHash:rn(r,e),scope:r,name:e}}function _t(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:rn(r.identHash,e),range:e}}function nn(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:rn(r.identHash,e),reference:e}}function RSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name}}function Sw(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.descriptorHash,reference:r.range}}function HD(r){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:r.locatorHash,range:r.reference}}function FSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.locatorHash,reference:r.reference}}function tC(r,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:r.version,languageName:r.languageName,linkType:r.linkType,conditions:r.conditions,dependencies:new Map(r.dependencies),peerDependencies:new Map(r.peerDependencies),dependenciesMeta:new Map(r.dependenciesMeta),peerDependenciesMeta:new Map(r.peerDependenciesMeta),bin:new Map(r.bin)}}function rC(r){return tC(r,r)}function GD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return _t(r,`virtual:${e}#${r.range}`)}function YD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return tC(r,nn(r,`virtual:${e}#${r.reference}`))}function JA(r){return r.range.startsWith(eC)}function qo(r){return r.reference.startsWith(eC)}function iC(r){if(!JA(r))throw new Error(\"Not a virtual descriptor\");return _t(r,r.range.replace(/^[^#]*#/,\"\"))}function nC(r){if(!qo(r))throw new Error(\"Not a virtual descriptor\");return nn(r,r.reference.replace(/^[^#]*#/,\"\"))}function NSe(r,e){return r.range.includes(\"::\")?r:_t(r,`${r.range}::${Sf.default.stringify(e)}`)}function TSe(r,e){return r.reference.includes(\"::\")?r:nn(r,`${r.reference}::${Sf.default.stringify(e)}`)}function sC(r,e){return r.identHash===e.identHash}function S8(r,e){return r.descriptorHash===e.descriptorHash}function oC(r,e){return r.locatorHash===e.locatorHash}function LSe(r,e){if(!qo(r))throw new Error(\"Invalid package type\");if(!qo(e))throw new Error(\"Invalid package type\");if(!sC(r,e)||r.dependencies.size!==e.dependencies.size)return!1;for(let t of r.dependencies.values()){let i=e.dependencies.get(t.identHash);if(!i||!S8(t,i))return!1}return!0}function tn(r){let e=v8(r);if(!e)throw new Error(`Invalid ident (${r})`);return e}function v8(r){let e=r.match(/^(?:@([^/]+?)\\/)?([^/]+)$/);if(!e)return null;let[,t,i]=e;return Jo(typeof t<\"u\"?t:null,i)}function WA(r,e=!1){let t=aC(r,e);if(!t)throw new Error(`Invalid descriptor (${r})`);return t}function aC(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid range (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return _t(Jo(o,n),a)}function Dc(r,e=!1){let t=vw(r,e);if(!t)throw new Error(`Invalid locator (${r})`);return t}function vw(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid reference (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return nn(Jo(o,n),a)}function vf(r,e){let t=r.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(t===null)throw new Error(`Invalid range (${r})`);let i=typeof t[1]<\"u\"?t[1]:null;if(typeof(e==null?void 0:e.requireProtocol)==\"string\"&&i!==e.requireProtocol)throw new Error(`Invalid protocol (${i})`);if((e==null?void 0:e.requireProtocol)&&i===null)throw new Error(`Missing protocol (${i})`);let n=typeof t[3]<\"u\"?decodeURIComponent(t[2]):null;if((e==null?void 0:e.requireSource)&&n===null)throw new Error(`Missing source (${r})`);let s=typeof t[3]<\"u\"?decodeURIComponent(t[3]):decodeURIComponent(t[2]),o=e!=null&&e.parseSelector?Sf.default.parse(s):s,a=typeof t[4]<\"u\"?Sf.default.parse(t[4]):null;return{protocol:i,source:n,selector:o,params:a}}function MSe(r,{protocol:e}){let{selector:t,params:i}=vf(r,{requireProtocol:e,requireBindings:!0});if(typeof i.locator!=\"string\")throw new Error(`Assertion failed: Invalid bindings for ${r}`);return{parentLocator:Dc(i.locator,!0),path:t}}function w8(r){return r=r.replace(/%/g,\"%25\"),r=r.replace(/:/g,\"%3A\"),r=r.replace(/#/g,\"%23\"),r}function OSe(r){return r===null?!1:Object.entries(r).length>0}function xw({protocol:r,source:e,selector:t,params:i}){let n=\"\";return r!==null&&(n+=`${r}`),e!==null&&(n+=`${w8(e)}#`),n+=w8(t),OSe(i)&&(n+=`::${Sf.default.stringify(i)}`),n}function KSe(r){let{params:e,protocol:t,source:i,selector:n}=vf(r);for(let s in e)s.startsWith(\"__\")&&delete e[s];return xw({protocol:t,source:i,params:e,selector:n})}function Mt(r){return r.scope?`@${r.scope}/${r.name}`:`${r.name}`}function Sn(r){return r.scope?`@${r.scope}/${r.name}@${r.range}`:`${r.name}@${r.range}`}function Es(r){return r.scope?`@${r.scope}/${r.name}@${r.reference}`:`${r.name}@${r.reference}`}function UD(r){return r.scope!==null?`@${r.scope}-${r.name}`:r.name}function xf(r){let{protocol:e,selector:t}=vf(r.reference),i=e!==null?e.replace(/:$/,\"\"):\"exotic\",n=B8.default.valid(t),s=n!==null?`${i}-${n}`:`${i}`,o=10,a=r.scope?`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`:`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`;return Jr(a)}function Ai(r,e){return e.scope?`${$e(r,`@${e.scope}/`,Ue.SCOPE)}${$e(r,e.name,Ue.NAME)}`:`${$e(r,e.name,Ue.NAME)}`}function Pw(r){if(r.startsWith(eC)){let e=Pw(r.substring(r.indexOf(\"#\")+1)),t=r.substring(eC.length,eC.length+DSe);return`${e} [${t}]`}else return r.replace(/\\?.*/,\"?[...]\")}function Dw(r,e){return`${$e(r,Pw(e),Ue.RANGE)}`}function tr(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.RANGE)}${Dw(r,e.range)}`}function AC(r,e){return`${$e(r,Pw(e),Ue.REFERENCE)}`}function mt(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.REFERENCE)}${AC(r,e.reference)}`}function jD(r){return`${Mt(r)}@${Pw(r.reference)}`}function Pf(r){return bn(r,[e=>Mt(e),e=>e.range])}function lC(r,e){return Ai(r,e.locator)}function iP(r,e,t){let i=JA(e)?iC(e):e;return t===null?`${tr(r,i)} \\u2192 ${rP(r).Cross}`:i.identHash===t.identHash?`${tr(r,i)} \\u2192 ${AC(r,t.reference)}`:`${tr(r,i)} \\u2192 ${mt(r,t)}`}function nP(r,e,t){return t===null?`${mt(r,e)}`:`${mt(r,e)} (via ${Dw(r,t.range)})`}function qD(r){return`node_modules/${Mt(r)}`}function kw(r,e){return r.conditions?kSe(r.conditions,t=>{let[,i,n]=t.match(Q8),s=e[i];return s?s.includes(n):!0}):!0}var x8={hooks:{reduceDependency:(r,e,t,i,{resolver:n,resolveOptions:s})=>{for(let{pattern:o,reference:a}of e.topLevelWorkspace.manifest.resolutions){if(o.from&&o.from.fullName!==Mt(t)||o.from&&o.from.description&&o.from.description!==t.reference||o.descriptor.fullName!==Mt(r)||o.descriptor.description&&o.descriptor.description!==r.range)continue;return n.bindDescriptor(_t(r,a),e.topLevelWorkspace.anchoredLocator,s)}return r},validateProject:async(r,e)=>{for(let t of r.workspaces){let i=lC(r.configuration,t);await r.configuration.triggerHook(n=>n.validateWorkspace,t,{reportWarning:(n,s)=>e.reportWarning(n,`${i}: ${s}`),reportError:(n,s)=>e.reportError(n,`${i}: ${s}`)})}},validateWorkspace:async(r,e)=>{let{manifest:t}=r;t.resolutions.length&&r.cwd!==r.project.cwd&&t.errors.push(new Error(\"Resolutions field will be ignored\"));for(let i of t.errors)e.reportWarning(57,i.message)}}};var T8=Pe(Xr());var cC=class{supportsDescriptor(e,t){return!!(e.range.startsWith(cC.protocol)||t.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,t){return!!e.reference.startsWith(cC.protocol)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[i.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.getWorkspaceByCwd(e.reference.slice(cC.protocol.length));return{...e,version:i.manifest.version||\"0.0.0\",languageName:\"unknown\",linkType:\"SOFT\",conditions:null,dependencies:new Map([...i.manifest.dependencies,...i.manifest.devDependencies]),peerDependencies:new Map([...i.manifest.peerDependencies]),dependenciesMeta:i.manifest.dependenciesMeta,peerDependenciesMeta:i.manifest.peerDependenciesMeta,bin:i.manifest.bin}}},Yr=cC;Yr.protocol=\"workspace:\";var vt={};ut(vt,{SemVer:()=>k8.SemVer,clean:()=>HSe,satisfiesWithPrereleases:()=>kc,validRange:()=>so});var Rw=Pe(Xr()),k8=Pe(Xr()),P8=new Map;function kc(r,e,t=!1){if(!r)return!1;let i=`${e}${t}`,n=P8.get(i);if(typeof n>\"u\")try{n=new Rw.default.Range(e,{includePrerelease:!0,loose:t})}catch{return!1}finally{P8.set(i,n||null)}else if(n===null)return!1;let s;try{s=new Rw.default.SemVer(r,n)}catch{return!1}return n.test(s)?!0:(s.prerelease&&(s.prerelease=[]),n.set.some(o=>{for(let a of o)a.semver.prerelease&&(a.semver.prerelease=[]);return o.every(a=>a.test(s))}))}var D8=new Map;function so(r){if(r.indexOf(\":\")!==-1)return null;let e=D8.get(r);if(typeof e<\"u\")return e;try{e=new Rw.default.Range(r)}catch{e=null}return D8.set(r,e),e}var USe=/^(?:[\\sv=]*?)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(?:\\s*)$/;function HSe(r){let e=USe.exec(r);return e?e[1]:null}var zA=class{constructor(){this.indent=\"  \";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:t=new $t}={}){let i=x.join(e,\"package.json\");try{return await zA.fromFile(i,{baseFs:t})}catch(n){if(n.code===\"ENOENT\")return null;throw n}}static async find(e,{baseFs:t}={}){let i=await zA.tryFind(e,{baseFs:t});if(i===null)throw new Error(\"Manifest not found\");return i}static async fromFile(e,{baseFs:t=new $t}={}){let i=new zA;return await i.loadFile(e,{baseFs:t}),i}static fromText(e){let t=new zA;return t.loadFromText(e),t}static isManifestFieldCompatible(e,t){if(e===null)return!0;let i=!0,n=!1;for(let s of e)if(s[0]===\"!\"){if(n=!0,t===s.slice(1))return!1}else if(i=!1,s===t)return!0;return n&&i}loadFromText(e){let t;try{t=JSON.parse(F8(e)||\"{}\")}catch(i){throw i.message+=` (when parsing ${e})`,i}this.load(t),this.indent=R8(e)}async loadFile(e,{baseFs:t=new $t}){let i=await t.readFilePromise(e,\"utf8\"),n;try{n=JSON.parse(F8(i)||\"{}\")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(n),this.indent=R8(i)}load(e,{yamlCompatibilityMode:t=!1}={}){if(typeof e!=\"object\"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let i=[];if(this.name=null,typeof e.name==\"string\")try{this.name=tn(e.name)}catch{i.push(new Error(\"Parsing failed for the 'name' field\"))}if(typeof e.version==\"string\"?this.version=e.version:this.version=null,Array.isArray(e.os)){let s=[];this.os=s;for(let o of e.os)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'os' field\")):s.push(o)}else this.os=null;if(Array.isArray(e.cpu)){let s=[];this.cpu=s;for(let o of e.cpu)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'cpu' field\")):s.push(o)}else this.cpu=null;if(Array.isArray(e.libc)){let s=[];this.libc=s;for(let o of e.libc)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'libc' field\")):s.push(o)}else this.libc=null;if(typeof e.type==\"string\"?this.type=e.type:this.type=null,typeof e.packageManager==\"string\"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private==\"boolean\"?this.private=e.private:this.private=!1,typeof e.license==\"string\"?this.license=e.license:this.license=null,typeof e.languageName==\"string\"?this.languageName=e.languageName:this.languageName=null,typeof e.main==\"string\"?this.main=sn(e.main):this.main=null,typeof e.module==\"string\"?this.module=sn(e.module):this.module=null,e.browser!=null)if(typeof e.browser==\"string\")this.browser=sn(e.browser);else{this.browser=new Map;for(let[s,o]of Object.entries(e.browser))this.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}else this.browser=null;if(this.bin=new Map,typeof e.bin==\"string\")this.name!==null?this.bin.set(this.name.name,sn(e.bin)):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.bin==\"object\"&&e.bin!==null)for(let[s,o]of Object.entries(e.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}let a=tn(s);this.bin.set(a.name,sn(o))}if(this.scripts=new Map,typeof e.scripts==\"object\"&&e.scripts!==null)for(let[s,o]of Object.entries(e.scripts)){if(typeof o!=\"string\"){i.push(new Error(`Invalid script definition for '${s}'`));continue}this.scripts.set(s,o)}if(this.dependencies=new Map,typeof e.dependencies==\"object\"&&e.dependencies!==null)for(let[s,o]of Object.entries(e.dependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l)}if(this.devDependencies=new Map,typeof e.devDependencies==\"object\"&&e.devDependencies!==null)for(let[s,o]of Object.entries(e.devDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.devDependencies.set(l.identHash,l)}if(this.peerDependencies=new Map,typeof e.peerDependencies==\"object\"&&e.peerDependencies!==null)for(let[s,o]of Object.entries(e.peerDependencies)){let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}(typeof o!=\"string\"||!o.startsWith(Yr.protocol)&&!so(o))&&(i.push(new Error(`Invalid dependency range for '${s}'`)),o=\"*\");let l=_t(a,o);this.peerDependencies.set(l.identHash,l)}typeof e.workspaces==\"object\"&&e.workspaces!==null&&e.workspaces.nohoist&&i.push(new Error(\"'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead\"));let n=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces==\"object\"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let s of n){if(typeof s!=\"string\"){i.push(new Error(`Invalid workspace definition for '${s}'`));continue}this.workspaceDefinitions.push({pattern:s})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta==\"object\"&&e.dependenciesMeta!==null)for(let[s,o]of Object.entries(e.dependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}`));continue}let a=WA(s),l=this.ensureDependencyMeta(a),c=Fw(o.built,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid built meta field for '${s}'`));continue}let u=Fw(o.optional,{yamlCompatibilityMode:t});if(u===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}let g=Fw(o.unplugged,{yamlCompatibilityMode:t});if(g===null){i.push(new Error(`Invalid unplugged meta field for '${s}'`));continue}Object.assign(l,{built:c,optional:u,unplugged:g})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta==\"object\"&&e.peerDependenciesMeta!==null)for(let[s,o]of Object.entries(e.peerDependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}'`));continue}let a=WA(s),l=this.ensurePeerDependencyMeta(a),c=Fw(o.optional,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}Object.assign(l,{optional:c})}if(this.resolutions=[],typeof e.resolutions==\"object\"&&e.resolutions!==null)for(let[s,o]of Object.entries(e.resolutions)){if(typeof o!=\"string\"){i.push(new Error(`Invalid resolution entry for '${s}'`));continue}try{this.resolutions.push({pattern:hI(s),reference:o})}catch(a){i.push(a);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let s of e.files){if(typeof s!=\"string\"){i.push(new Error(`Invalid files entry for '${s}'`));continue}this.files.add(s)}}else this.files=null;if(typeof e.publishConfig==\"object\"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access==\"string\"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main==\"string\"&&(this.publishConfig.main=sn(e.publishConfig.main)),typeof e.publishConfig.module==\"string\"&&(this.publishConfig.module=sn(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser==\"string\")this.publishConfig.browser=sn(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[s,o]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}if(typeof e.publishConfig.registry==\"string\"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin==\"string\")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,sn(e.publishConfig.bin)]]):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.publishConfig.bin==\"object\"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[s,o]of Object.entries(e.publishConfig.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.publishConfig.bin.set(s,sn(o))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let s of e.publishConfig.executableFiles){if(typeof s!=\"string\"){i.push(new Error(\"Invalid executable file definition\"));continue}this.publishConfig.executableFiles.add(sn(s))}}}else this.publishConfig=null;if(typeof e.installConfig==\"object\"&&e.installConfig!==null){this.installConfig={};for(let s of Object.keys(e.installConfig))s===\"hoistingLimits\"?typeof e.installConfig.hoistingLimits==\"string\"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:i.push(new Error(\"Invalid hoisting limits definition\")):s==\"selfReferences\"?typeof e.installConfig.selfReferences==\"boolean\"?this.installConfig.selfReferences=e.installConfig.selfReferences:i.push(new Error(\"Invalid selfReferences definition, must be a boolean value\")):i.push(new Error(`Unrecognized installConfig key: ${s}`))}else this.installConfig=null;if(typeof e.optionalDependencies==\"object\"&&e.optionalDependencies!==null)for(let[s,o]of Object.entries(e.optionalDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l);let c=_t(a,\"unknown\"),u=this.ensureDependencyMeta(c);Object.assign(u,{optional:!0})}typeof e.preferUnplugged==\"boolean\"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=i}getForScope(e){switch(e){case\"dependencies\":return this.dependencies;case\"devDependencies\":return this.devDependencies;case\"peerDependencies\":return this.peerDependencies;default:throw new Error(`Unsupported value (\"${e}\")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(JD(\"os\",this.os)),this.cpu&&this.cpu.length>0&&e.push(JD(\"cpu\",this.cpu)),this.libc&&this.libc.length>0&&e.push(JD(\"libc\",this.libc)),e.length>0?e.join(\" & \"):null}isCompatibleWithOS(e){return zA.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return zA.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if(e.range!==\"unknown\"&&!T8.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=e.range!==\"unknown\"?e.range:null,n=this.dependenciesMeta.get(t);n||this.dependenciesMeta.set(t,n=new Map);let s=n.get(i);return s||n.set(i,s={}),s}ensurePeerDependencyMeta(e){if(e.range!==\"unknown\")throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=this.peerDependenciesMeta.get(t);return i||this.peerDependenciesMeta.set(t,i={}),i}setRawField(e,t,{after:i=[]}={}){let n=new Set(i.filter(s=>Object.prototype.hasOwnProperty.call(this.raw,s)));if(n.size===0||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=t;else{let s=this.raw,o=this.raw={},a=!1;for(let l of Object.keys(s))o[l]=s[l],a||(n.delete(l),n.size===0&&(o[e]=t,a=!0))}}exportTo(e,{compatibilityMode:t=!0}={}){var s;if(Object.assign(e,this.raw),this.name!==null?e.name=Mt(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let o=this.browser;typeof o==\"string\"?e.browser=o:o instanceof Map&&(e.browser=Object.assign({},...Array.from(o.keys()).sort().map(a=>({[a]:o.get(a)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(o=>({[o]:this.bin.get(o)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:o})=>o)}:e.workspaces=this.workspaceDefinitions.map(({pattern:o})=>o):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let i=[],n=[];for(let o of this.dependencies.values()){let a=this.dependenciesMeta.get(Mt(o)),l=!1;if(t&&a){let c=a.get(null);c&&c.optional&&(l=!0)}l?n.push(o):i.push(o)}i.length>0?e.dependencies=Object.assign({},...Pf(i).map(o=>({[Mt(o)]:o.range}))):delete e.dependencies,n.length>0?e.optionalDependencies=Object.assign({},...Pf(n).map(o=>({[Mt(o)]:o.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...Pf(this.devDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...Pf(this.peerDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[o,a]of bn(this.dependenciesMeta.entries(),([l,c])=>l))for(let[l,c]of bn(a.entries(),([u,g])=>u!==null?`0${u}`:\"1\")){let u=l!==null?Sn(_t(tn(o),l)):o,g={...c};t&&l===null&&delete g.optional,Object.keys(g).length!==0&&(e.dependenciesMeta[u]=g)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...bn(this.peerDependenciesMeta.entries(),([o,a])=>o).map(([o,a])=>({[o]:a}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:o,reference:a})=>({[pI(o)]:a}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){(s=e.scripts)!=null||(e.scripts={});for(let o of Object.keys(e.scripts))this.scripts.has(o)||delete e.scripts[o];for(let[o,a]of this.scripts.entries())e.scripts[o]=a}else delete e.scripts;return e}},ot=zA;ot.fileName=\"package.json\",ot.allDependencies=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],ot.hardDependencies=[\"dependencies\",\"devDependencies\"];function R8(r){let e=r.match(/^[ \\t]+/m);return e?e[0]:\"  \"}function F8(r){return r.charCodeAt(0)===65279?r.slice(1):r}function sn(r){return r.replace(/\\\\/g,\"/\")}function Fw(r,{yamlCompatibilityMode:e}){return e?zx(r):typeof r>\"u\"||typeof r==\"boolean\"?r:null}function N8(r,e){let t=e.search(/[^!]/);if(t===-1)return\"invalid\";let i=t%2===0?\"\":\"!\",n=e.slice(t);return`${i}${r}=${n}`}function JD(r,e){return e.length===1?N8(r,e[0]):`(${e.map(t=>N8(r,t)).join(\" | \")})`}var gz=Pe(uz()),fz=J(\"stream\"),hz=J(\"string_decoder\");var Nve=15,at=class extends Error{constructor(t,i,n){super(i);this.reportExtra=n;this.reportCode=t}};function Tve(r){return typeof r.reportCode<\"u\"}var vi=class{constructor(){this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}static progressViaCounter(e){let t=0,i,n=new Promise(l=>{i=l}),s=l=>{let c=i;n=new Promise(u=>{i=u}),t=l,c()},o=(l=0)=>{s(t+1)},a=async function*(){for(;t<e;)await n,yield{progress:t/e}}();return{[Symbol.asyncIterator](){return a},hasProgress:!0,hasTitle:!1,set:s,tick:o}}static progressViaTitle(){let e,t,i=new Promise(o=>{t=o}),n=(0,gz.default)(o=>{let a=t;i=new Promise(l=>{t=l}),e=o,a()},1e3/Nve),s=async function*(){for(;;)await i,yield{title:e}}();return{[Symbol.asyncIterator](){return s},hasProgress:!1,hasTitle:!0,setTitle:n}}async startProgressPromise(e,t){let i=this.reportProgress(e);try{return await t(e)}finally{i.stop()}}startProgressSync(e,t){let i=this.reportProgress(e);try{return t(e)}finally{i.stop()}}reportInfoOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedInfos.has(n)||(this.reportedInfos.add(n),this.reportInfo(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportWarningOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedWarnings.has(n)||(this.reportedWarnings.add(n),this.reportWarning(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportErrorOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedErrors.has(n)||(this.reportedErrors.add(n),this.reportError(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportExceptionOnce(e){Tve(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let t=new fz.PassThrough,i=new hz.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",e!==null?this.reportInfo(null,`${e} ${l}`):this.reportInfo(null,l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&(e!==null?this.reportInfo(null,`${e} ${s}`):this.reportInfo(null,s))}),t}};var Df=class{constructor(e){this.fetchers=e}supports(e,t){return!!this.tryFetcher(e,t)}getLocalPath(e,t){return this.getFetcher(e,t).getLocalPath(e,t)}async fetch(e,t){return await this.getFetcher(e,t).fetch(e,t)}tryFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));return i||null}getFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));if(!i)throw new at(11,`${mt(t.project.configuration,e)} isn't supported by any available fetcher`);return i}};var kf=class{constructor(e){this.resolvers=e.filter(t=>t)}supportsDescriptor(e,t){return!!this.tryResolverByDescriptor(e,t)}supportsLocator(e,t){return!!this.tryResolverByLocator(e,t)}shouldPersistResolution(e,t){return this.getResolverByLocator(e,t).shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.getResolverByDescriptor(e,i).bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.getResolverByDescriptor(e,t).getResolutionDependencies(e,t)}async getCandidates(e,t,i){return await this.getResolverByDescriptor(e,i).getCandidates(e,t,i)}async getSatisfying(e,t,i){return this.getResolverByDescriptor(e,i).getSatisfying(e,t,i)}async resolve(e,t){return await this.getResolverByLocator(e,t).resolve(e,t)}tryResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));return i||null}getResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));if(!i)throw new Error(`${tr(t.project.configuration,e)} isn't supported by any available resolver`);return i}tryResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));return i||null}getResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));if(!i)throw new Error(`${mt(t.project.configuration,e)} isn't supported by any available resolver`);return i}};var pz=Pe(Xr());var Rf=/^(?!v)[a-z0-9._-]+$/i,Nw=class{supportsDescriptor(e,t){return!!(so(e.range)||Rf.test(e.range))}supportsLocator(e,t){return!!(pz.default.valid(e.reference)||Rf.test(e.reference))}shouldPersistResolution(e,t){return t.resolver.shouldPersistResolution(this.forwardLocator(e,t),t)}bindDescriptor(e,t,i){return i.resolver.bindDescriptor(this.forwardDescriptor(e,i),t,i)}getResolutionDependencies(e,t){return t.resolver.getResolutionDependencies(this.forwardDescriptor(e,t),t)}async getCandidates(e,t,i){return await i.resolver.getCandidates(this.forwardDescriptor(e,i),t,i)}async getSatisfying(e,t,i){return await i.resolver.getSatisfying(this.forwardDescriptor(e,i),t,i)}async resolve(e,t){let i=await t.resolver.resolve(this.forwardLocator(e,t),t);return tC(i,e)}forwardDescriptor(e,t){return _t(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.range}`)}forwardLocator(e,t){return nn(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.reference}`)}};var Ff=class{supports(e){return!!e.reference.startsWith(\"virtual:\")}getLocalPath(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n);return t.fetcher.getLocalPath(s,t)}async fetch(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n),o=await t.fetcher.fetch(s,t);return await this.ensureVirtualLink(e,o,t)}getLocatorFilename(e){return xf(e)}async ensureVirtualLink(e,t,i){let n=t.packageFs.getRealPath(),s=i.project.configuration.get(\"virtualFolder\"),o=this.getLocatorFilename(e),a=Br.makeVirtualPath(s,o,n),l=new So(a,{baseFs:t.packageFs,pathUtils:x});return{...t,packageFs:l}}};var Nf=class{static isVirtualDescriptor(e){return!!e.range.startsWith(Nf.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(Nf.protocol)}supportsDescriptor(e,t){return Nf.isVirtualDescriptor(e)}supportsLocator(e,t){return Nf.isVirtualLocator(e)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){throw new Error('Assertion failed: calling \"bindDescriptor\" on a virtual descriptor is unsupported')}getResolutionDependencies(e,t){throw new Error('Assertion failed: calling \"getResolutionDependencies\" on a virtual descriptor is unsupported')}async getCandidates(e,t,i){throw new Error('Assertion failed: calling \"getCandidates\" on a virtual descriptor is unsupported')}async getSatisfying(e,t,i){throw new Error('Assertion failed: calling \"getSatisfying\" on a virtual descriptor is unsupported')}async resolve(e,t){throw new Error('Assertion failed: calling \"resolve\" on a virtual locator is unsupported')}},fC=Nf;fC.protocol=\"virtual:\";var Tf=class{supports(e){return!!e.reference.startsWith(Yr.protocol)}getLocalPath(e,t){return this.getWorkspace(e,t).cwd}async fetch(e,t){let i=this.getWorkspace(e,t).cwd;return{packageFs:new qt(i),prefixPath:Me.dot,localPath:i}}getWorkspace(e,t){return t.project.getWorkspaceByCwd(e.reference.slice(Yr.protocol.length))}};var Tw={};ut(Tw,{getDefaultGlobalFolder:()=>XD,getHomeFolder:()=>hC,isFolderInside:()=>ZD});var VD=J(\"os\");function XD(){if(process.platform===\"win32\"){let r=K.toPortablePath(process.env.LOCALAPPDATA||K.join((0,VD.homedir)(),\"AppData\",\"Local\"));return x.resolve(r,\"Yarn/Berry\")}if(process.env.XDG_DATA_HOME){let r=K.toPortablePath(process.env.XDG_DATA_HOME);return x.resolve(r,\"yarn/berry\")}return x.resolve(hC(),\".yarn/berry\")}function hC(){return K.toPortablePath((0,VD.homedir)()||\"/usr/local/share\")}function ZD(r,e){let t=x.relative(e,r);return t&&!t.startsWith(\"..\")&&!x.isAbsolute(t)}var ws={};ut(ws,{availableParallelism:()=>ek,builtinModules:()=>_D,getArchitecture:()=>pC,getArchitectureName:()=>Ove,getArchitectureSet:()=>$D,openUrl:()=>Lve});var Cz=Pe(J(\"module\")),Ow=Pe(J(\"os\"));var dz=new Map([[\"darwin\",\"open\"],[\"linux\",\"xdg-open\"],[\"win32\",\"explorer.exe\"]]).get(process.platform),Lve=typeof dz<\"u\"?async r=>{try{return await tk(dz,[r],{cwd:x.cwd()}),!0}catch{return!1}}:void 0;function _D(){return new Set(Cz.default.builtinModules||Object.keys(process.binding(\"natives\")))}function Mve(){var i,n,s,o;if(process.platform===\"win32\")return null;let e=(s=((n=(i=process.report)==null?void 0:i.getReport())!=null?n:{}).sharedObjects)!=null?s:[],t=/\\/(?:(ld-linux-|[^/]+-linux-gnu\\/)|(libc.musl-|ld-musl-))/;return(o=Jd(e,a=>{let l=a.match(t);if(!l)return Jd.skip;if(l[1])return\"glibc\";if(l[2])return\"musl\";throw new Error(\"Assertion failed: Expected the libc variant to have been detected\")}))!=null?o:null}var Lw,Mw;function pC(){return Lw=Lw!=null?Lw:{os:process.platform,cpu:process.arch,libc:Mve()}}function Ove(r=pC()){return r.libc?`${r.os}-${r.cpu}-${r.libc}`:`${r.os}-${r.cpu}`}function $D(){let r=pC();return Mw=Mw!=null?Mw:{os:[r.os],cpu:[r.cpu],libc:r.libc?[r.libc]:[]}}function ek(){return\"availableParallelism\"in Ow.default?Ow.default.availableParallelism():Math.max(1,Ow.default.cpus().length)}var Kve=new Set([\"isTestEnv\",\"injectNpmUser\",\"injectNpmPassword\",\"injectNpm2FaToken\",\"binFolder\",\"version\",\"flags\",\"profile\",\"gpg\",\"ignoreNode\",\"wrapOutput\",\"home\",\"confDir\",\"registry\"]),Gw=\"yarn_\",sk=\".yarnrc.yml\",ok=\"yarn.lock\",Uve=\"********\",ak=(u=>(u.ANY=\"ANY\",u.BOOLEAN=\"BOOLEAN\",u.ABSOLUTE_PATH=\"ABSOLUTE_PATH\",u.LOCATOR=\"LOCATOR\",u.LOCATOR_LOOSE=\"LOCATOR_LOOSE\",u.NUMBER=\"NUMBER\",u.STRING=\"STRING\",u.SECRET=\"SECRET\",u.SHAPE=\"SHAPE\",u.MAP=\"MAP\",u))(ak||{}),xi=Ue,rk={lastUpdateCheck:{description:\"Last timestamp we checked whether new Yarn versions were available\",type:\"STRING\",default:null},yarnPath:{description:\"Path to the local executable that must be used over the global one\",type:\"ABSOLUTE_PATH\",default:null},ignorePath:{description:\"If true, the local executable will be ignored when using the global one\",type:\"BOOLEAN\",default:!1},ignoreCwd:{description:\"If true, the `--cwd` flag will be ignored\",type:\"BOOLEAN\",default:!1},cacheKeyOverride:{description:\"A global cache key override; used only for test purposes\",type:\"STRING\",default:null},globalFolder:{description:\"Folder where all system-global files are stored\",type:\"ABSOLUTE_PATH\",default:XD()},cacheFolder:{description:\"Folder where the cache files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/cache\"},compressionLevel:{description:\"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)\",type:\"NUMBER\",values:[\"mixed\",0,1,2,3,4,5,6,7,8,9],default:Xl},virtualFolder:{description:\"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/__virtual__\"},lockfileFilename:{description:\"Name of the files where the Yarn dependency tree entries must be stored\",type:\"STRING\",default:ok},installStatePath:{description:\"Path of the file where the install state will be persisted\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/install-state.gz\"},immutablePatterns:{description:\"Array of glob patterns; files matching them won't be allowed to change during immutable installs\",type:\"STRING\",default:[],isArray:!0},rcFilename:{description:\"Name of the files where the configuration can be found\",type:\"STRING\",default:Hw()},enableGlobalCache:{description:\"If true, the system-wide cache folder will be used regardless of `cache-folder`\",type:\"BOOLEAN\",default:!1},enableColors:{description:\"If true, the CLI is allowed to use colors in its output\",type:\"BOOLEAN\",default:zy,defaultText:\"<dynamic>\"},enableHyperlinks:{description:\"If true, the CLI is allowed to use hyperlinks in its output\",type:\"BOOLEAN\",default:eP,defaultText:\"<dynamic>\"},enableInlineBuilds:{description:\"If true, the CLI will print the build output on the command line\",type:\"BOOLEAN\",default:Kw.isCI,defaultText:\"<dynamic>\"},enableMessageNames:{description:\"If true, the CLI will prefix most messages with codes suitable for search engines\",type:\"BOOLEAN\",default:!0},enableProgressBars:{description:\"If true, the CLI is allowed to show a progress bar for long-running events\",type:\"BOOLEAN\",default:!Kw.isCI,defaultText:\"<dynamic>\"},enableTimers:{description:\"If true, the CLI is allowed to print the time spent executing commands\",type:\"BOOLEAN\",default:!0},preferAggregateCacheInfo:{description:\"If true, the CLI will only print a one-line report of any cache changes\",type:\"BOOLEAN\",default:Kw.isCI},preferInteractive:{description:\"If true, the CLI will automatically use the interactive mode when called from a TTY\",type:\"BOOLEAN\",default:!1},preferTruncatedLines:{description:\"If true, the CLI will truncate lines that would go beyond the size of the terminal\",type:\"BOOLEAN\",default:!1},progressBarStyle:{description:\"Which style of progress bar should be used (only when progress bars are enabled)\",type:\"STRING\",default:void 0,defaultText:\"<dynamic>\"},defaultLanguageName:{description:\"Default language mode that should be used when a package doesn't offer any insight\",type:\"STRING\",default:\"node\"},defaultProtocol:{description:\"Default resolution protocol used when resolving pure semver and tag ranges\",type:\"STRING\",default:\"npm:\"},enableTransparentWorkspaces:{description:\"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol\",type:\"BOOLEAN\",default:!0},supportedArchitectures:{description:\"Architectures that Yarn will fetch and inject into the resolver\",type:\"SHAPE\",properties:{os:{description:\"Array of supported process.platform strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},cpu:{description:\"Array of supported process.arch strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},libc:{description:\"Array of supported libc libraries, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]}}},enableMirror:{description:\"If true, the downloaded packages will be retrieved and stored in both the local and global folders\",type:\"BOOLEAN\",default:!0},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:!0},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},unsafeHttpWhitelist:{description:\"List of the hostnames for which http queries are allowed (glob patterns are supported)\",type:\"STRING\",default:[],isArray:!0},httpTimeout:{description:\"Timeout of each http request in milliseconds\",type:\"NUMBER\",default:6e4},httpRetry:{description:\"Retry times on http failure\",type:\"NUMBER\",default:3},networkConcurrency:{description:\"Maximal number of concurrent requests\",type:\"NUMBER\",default:50},networkSettings:{description:\"Network settings per hostname (glob patterns are supported)\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{caFilePath:{description:\"Path to file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:null},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null}}}},caFilePath:{description:\"A path to a file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null},enableStrictSsl:{description:\"If false, SSL certificate errors will be ignored\",type:\"BOOLEAN\",default:!0},logFilters:{description:\"Overrides for log levels\",type:\"SHAPE\",isArray:!0,concatenateValues:!0,properties:{code:{description:\"Code of the messages covered by this override\",type:\"STRING\",default:void 0},text:{description:\"Code of the texts covered by this override\",type:\"STRING\",default:void 0},pattern:{description:\"Code of the patterns covered by this override\",type:\"STRING\",default:void 0},level:{description:\"Log level override, set to null to remove override\",type:\"STRING\",values:Object.values(Xy),isNullable:!0,default:void 0}}},enableTelemetry:{description:\"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry\",type:\"BOOLEAN\",default:!0},telemetryInterval:{description:\"Minimal amount of time between two telemetry uploads, in days\",type:\"NUMBER\",default:7},telemetryUserId:{description:\"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.\",type:\"STRING\",default:null},enableScripts:{description:\"If true, packages are allowed to have install scripts by default\",type:\"BOOLEAN\",default:!0},enableStrictSettings:{description:\"If true, unknown settings will cause Yarn to abort\",type:\"BOOLEAN\",default:!0},enableImmutableCache:{description:\"If true, the cache is reputed immutable and actions that would modify it will throw\",type:\"BOOLEAN\",default:!1},checksumBehavior:{description:\"Enumeration defining what to do when a checksum doesn't match expectations\",type:\"STRING\",default:\"throw\"},packageExtensions:{description:\"Map of package corrections to apply on the dependency tree\",type:\"MAP\",valueDefinition:{description:\"The extension that will be applied to any package whose version matches the specified range\",type:\"SHAPE\",properties:{dependencies:{description:\"The set of dependencies that must be made available to the current package in order for it to work properly\",type:\"MAP\",valueDefinition:{description:\"A range\",type:\"STRING\"}},peerDependencies:{description:\"Inherited dependencies - the consumer of the package will be tasked to provide them\",type:\"MAP\",valueDefinition:{description:\"A semver range\",type:\"STRING\"}},peerDependenciesMeta:{description:\"Extra information related to the dependencies listed in the peerDependencies field\",type:\"MAP\",valueDefinition:{description:\"The peerDependency meta\",type:\"SHAPE\",properties:{optional:{description:\"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error\",type:\"BOOLEAN\",default:!1}}}}}}}};function Ak(r,e,t,i,n){if(i.isArray||i.type===\"ANY\"&&Array.isArray(t))return Array.isArray(t)?t.map((s,o)=>ik(r,`${e}[${o}]`,s,i,n)):String(t).split(/,/).map(s=>ik(r,e,s,i,n));if(Array.isArray(t))throw new Error(`Non-array configuration settings \"${e}\" cannot be an array`);return ik(r,e,t,i,n)}function ik(r,e,t,i,n){var a;switch(i.type){case\"ANY\":return t;case\"SHAPE\":return Hve(r,e,t,i,n);case\"MAP\":return Gve(r,e,t,i,n)}if(t===null&&!i.isNullable&&i.default!==null)throw new Error(`Non-nullable configuration settings \"${e}\" cannot be set to null`);if((a=i.values)!=null&&a.includes(t))return t;let o=(()=>{if(i.type===\"BOOLEAN\"&&typeof t!=\"string\")return Wd(t);if(typeof t!=\"string\")throw new Error(`Expected configuration setting \"${e}\" to be a string, got ${typeof t}`);let l=Wx(t,{env:process.env});switch(i.type){case\"ABSOLUTE_PATH\":return x.resolve(n,K.toPortablePath(l));case\"LOCATOR_LOOSE\":return Dc(l,!1);case\"NUMBER\":return parseInt(l);case\"LOCATOR\":return Dc(l);case\"BOOLEAN\":return Wd(l);default:return l}})();if(i.values&&!i.values.includes(o))throw new Error(`Invalid value, expected one of ${i.values.join(\", \")}`);return o}function Hve(r,e,t,i,n){if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Object configuration settings \"${e}\" must be an object`);let s=lk(r,i,{ignoreArrays:!0});if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=`${e}.${o}`;if(!i.properties[o])throw new Qe(`Unrecognized configuration settings found: ${e}.${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);s.set(o,Ak(r,l,a,i.properties[o],n))}return s}function Gve(r,e,t,i,n){let s=new Map;if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Map configuration settings \"${e}\" must be an object`);if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=i.normalizeKeys?i.normalizeKeys(o):o,c=`${e}['${l}']`,u=i.valueDefinition;s.set(l,Ak(r,c,a,u,n))}return s}function lk(r,e,{ignoreArrays:t=!1}={}){switch(e.type){case\"SHAPE\":{if(e.isArray&&!t)return[];let i=new Map;for(let[n,s]of Object.entries(e.properties))i.set(n,lk(r,s));return i}break;case\"MAP\":return e.isArray&&!t?[]:new Map;case\"ABSOLUTE_PATH\":return e.default===null?null:r.projectCwd===null?x.isAbsolute(e.default)?x.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(i=>x.resolve(r.projectCwd,i)):x.resolve(r.projectCwd,e.default);default:return e.default}}function Uw(r,e,t){if(e.type===\"SECRET\"&&typeof r==\"string\"&&t.hideSecrets)return Uve;if(e.type===\"ABSOLUTE_PATH\"&&typeof r==\"string\"&&t.getNativePaths)return K.fromPortablePath(r);if(e.isArray&&Array.isArray(r)){let i=[];for(let n of r)i.push(Uw(n,e,t));return i}if(e.type===\"MAP\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries())i.set(n,Uw(s,e.valueDefinition,t));return i}if(e.type===\"SHAPE\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries()){let o=e.properties[n];i.set(n,Uw(s,o,t))}return i}return r}function Yve(){let r={};for(let[e,t]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(Gw)&&(e=(0,mz.default)(e.slice(Gw.length)),r[e]=t);return r}function Hw(){let r=`${Gw}rc_filename`;for(let[e,t]of Object.entries(process.env))if(e.toLowerCase()===r&&typeof t==\"string\")return t;return sk}var ck=(i=>(i[i.LOCKFILE=0]=\"LOCKFILE\",i[i.MANIFEST=1]=\"MANIFEST\",i[i.NONE=2]=\"NONE\",i))(ck||{}),Ha=class{constructor(e){this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.packageExtensions=new Map;this.limits=new Map;this.startingCwd=e}static create(e,t,i){let n=new Ha(e);typeof t<\"u\"&&!(t instanceof Map)&&(n.projectCwd=t),n.importSettings(rk);let s=typeof i<\"u\"?i:t instanceof Map?t:new Map;for(let[o,a]of s)n.activatePlugin(o,a);return n}static async find(e,t,{lookup:i=0,strict:n=!0,usePath:s=!1,useRc:o=!0}={}){let a=Yve();delete a.rcFilename;let l=await Ha.findRcFiles(e),c=await Ha.findHomeRcFile();if(c){let B=l.find(v=>v.path===c.path);B?B.strict=!1:l.push({...c,strict:!1})}let u=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T})=>({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T}),g=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T,...H})=>H,f=new Ha(e);f.importSettings(u(rk)),f.useWithSource(\"<environment>\",u(a),e,{strict:!1});for(let{path:B,cwd:v,data:D}of l)f.useWithSource(B,u(D),v,{strict:!1});if(s){let B=f.get(\"yarnPath\"),v=f.get(\"ignorePath\");if(B!==null&&!v)return f}let h=f.get(\"lockfileFilename\"),p;switch(i){case 0:p=await Ha.findProjectCwd(e,h);break;case 1:p=await Ha.findProjectCwd(e,null);break;case 2:O.existsSync(x.join(e,\"package.json\"))?p=x.resolve(e):p=null;break}f.startingCwd=e,f.projectCwd=p,f.importSettings(g(rk));let C=new Map([[\"@@core\",x8]]),y=B=>\"default\"in B?B.default:B;if(t!==null){for(let T of t.plugins.keys())C.set(T,y(t.modules.get(T)));let B=new Map;for(let T of _D())B.set(T,()=>mf(T));for(let[T,H]of t.modules)B.set(T,()=>H);let v=new Set,D=async(T,H)=>{let{factory:j,name:$}=mf(T);if(v.has($))return;let V=new Map(B),W=A=>{if(V.has(A))return V.get(A)();throw new Qe(`This plugin cannot access the package referenced via ${A} which is neither a builtin, nor an exposed entry`)},_=await df(async()=>y(await j(W)),A=>`${A} (when initializing ${$}, defined in ${H})`);B.set($,()=>_),v.add($),C.set($,_)};if(a.plugins)for(let T of a.plugins.split(\";\")){let H=x.resolve(e,K.toPortablePath(T));await D(H,\"<environment>\")}for(let{path:T,cwd:H,data:j}of l)if(!!o&&!!Array.isArray(j.plugins))for(let $ of j.plugins){let V=typeof $!=\"string\"?$.path:$,W=x.resolve(H,K.toPortablePath(V));await D(W,T)}}for(let[B,v]of C)f.activatePlugin(B,v);f.useWithSource(\"<environment>\",g(a),e,{strict:n});for(let{path:B,cwd:v,data:D,strict:T}of l)f.useWithSource(B,g(D),v,{strict:T!=null?T:n});return f.get(\"enableGlobalCache\")&&(f.values.set(\"cacheFolder\",`${f.get(\"globalFolder\")}/cache`),f.sources.set(\"cacheFolder\",\"<internal>\")),await f.refreshPackageExtensions(),f}static async findRcFiles(e){let t=Hw(),i=[],n=e,s=null;for(;n!==s;){s=n;let o=x.join(s,t);if(O.existsSync(o)){let a=await O.readFilePromise(o,\"utf8\"),l;try{l=yi(a)}catch{let u=\"\";throw a.match(/^\\s+(?!-)[^:]+\\s+\\S+/m)&&(u=\" (in particular, make sure you list the colons after each key name)\"),new Qe(`Parse error when loading ${o}; please check it's proper Yaml${u}`)}i.push({path:o,cwd:s,data:l})}n=x.dirname(s)}return i}static async findHomeRcFile(){let e=Hw(),t=hC(),i=x.join(t,e);if(O.existsSync(i)){let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);return{path:i,cwd:t,data:s}}return null}static async findProjectCwd(e,t){let i=null,n=e,s=null;for(;n!==s;){if(s=n,O.existsSync(x.join(s,\"package.json\"))&&(i=s),t!==null){if(O.existsSync(x.join(s,t))){i=s;break}}else if(i!==null)break;n=x.dirname(s)}return i}static async updateConfiguration(e,t){let i=Hw(),n=x.join(e,i),s=O.existsSync(n)?yi(await O.readFilePromise(n,\"utf8\")):{},o=!1,a;if(typeof t==\"function\"){try{a=t(s)}catch{a=t({})}if(a===s)return}else{a=s;for(let l of Object.keys(t)){let c=s[l],u=t[l],g;if(typeof u==\"function\")try{g=u(c)}catch{g=u(void 0)}else g=u;c!==g&&(a[l]=g,o=!0)}if(!o)return}await O.changeFilePromise(n,ba(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){let t=hC();return await Ha.updateConfiguration(t,e)}activatePlugin(e,t){this.plugins.set(e,t),typeof t.configuration<\"u\"&&this.importSettings(t.configuration)}importSettings(e){for(let[t,i]of Object.entries(e))if(i!=null){if(this.settings.has(t))throw new Error(`Cannot redefine settings \"${t}\"`);this.settings.set(t,i),this.values.set(t,lk(this,i))}}useWithSource(e,t,i,n){try{this.use(e,t,i,n)}catch(s){throw s.message+=` (in ${$e(this,e,Ue.PATH)})`,s}}use(e,t,i,{strict:n=!0,overwrite:s=!1}={}){n=n&&this.get(\"enableStrictSettings\");for(let o of[\"enableStrictSettings\",...Object.keys(t)]){if(typeof t[o]>\"u\"||o===\"plugins\"||e===\"<environment>\"&&Kve.has(o))continue;if(o===\"rcFilename\")throw new Qe(`The rcFilename settings can only be set via ${`${Gw}RC_FILENAME`.toUpperCase()}, not via a rc file`);let l=this.settings.get(o);if(!l){if(n)throw new Qe(`Unrecognized or legacy configuration settings found: ${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(s||l.type===\"MAP\"||l.isArray&&l.concatenateValues))continue;let c;try{c=Ak(this,o,t[o],l,i)}catch(u){throw u.message+=` in ${$e(this,e,Ue.PATH)}`,u}if(o===\"enableStrictSettings\"&&e!==\"<environment>\"){n=c;continue}if(l.type===\"MAP\"){let u=this.values.get(o);this.values.set(o,new Map(s?[...u,...c]:[...c,...u])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(l.isArray&&l.concatenateValues){let u=this.values.get(o);this.values.set(o,s?[...u,...c]:[...c,...u]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,c),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key \"${e}\"`);return this.values.get(e)}getSpecial(e,{hideSecrets:t=!1,getNativePaths:i=!1}){let n=this.get(e),s=this.settings.get(e);if(typeof s>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${e}\"`);return Uw(n,s,{hideSecrets:t,getNativePaths:i})}getSubprocessStreams(e,{header:t,prefix:i,report:n}){let s,o,a=O.createWriteStream(e);if(this.get(\"enableInlineBuilds\")){let l=n.createStreamReporter(`${i} ${$e(this,\"STDOUT\",\"green\")}`),c=n.createStreamReporter(`${i} ${$e(this,\"STDERR\",\"red\")}`);s=new nk.PassThrough,s.pipe(l),s.pipe(a),o=new nk.PassThrough,o.pipe(c),o.pipe(a)}else s=a,o=a,typeof t<\"u\"&&s.write(`${t}\n`);return{stdout:s,stderr:o}}makeResolver(){let e=[];for(let t of this.plugins.values())for(let i of t.resolvers||[])e.push(new i);return new kf([new fC,new Yr,new Nw,...e])}makeFetcher(){let e=[];for(let t of this.plugins.values())for(let i of t.fetchers||[])e.push(new i);return new Df([new Ff,new Tf,...e])}getLinkers(){let e=[];for(let t of this.plugins.values())for(let i of t.linkers||[])e.push(new i);return e}getSupportedArchitectures(){let e=pC(),t=this.get(\"supportedArchitectures\"),i=t.get(\"os\");i!==null&&(i=i.map(o=>o===\"current\"?e.os:o));let n=t.get(\"cpu\");n!==null&&(n=n.map(o=>o===\"current\"?e.cpu:o));let s=t.get(\"libc\");return s!==null&&(s=Ho(s,o=>{var a;return o===\"current\"?(a=e.libc)!=null?a:Ho.skip:o})),{os:i,cpu:n,libc:s}}async refreshPackageExtensions(){this.packageExtensions=new Map;let e=this.packageExtensions,t=(i,n,{userProvided:s=!1}={})=>{if(!so(i.range))throw new Error(\"Only semver ranges are allowed as keys for the packageExtensions setting\");let o=new ot;o.load(n,{yamlCompatibilityMode:!0});let a=hf(e,i.identHash),l=[];a.push([i.range,l]);let c={status:\"inactive\",userProvided:s,parentDescriptor:i};for(let u of o.dependencies.values())l.push({...c,type:\"Dependency\",descriptor:u});for(let u of o.peerDependencies.values())l.push({...c,type:\"PeerDependency\",descriptor:u});for(let[u,g]of o.peerDependenciesMeta)for(let[f,h]of Object.entries(g))l.push({...c,type:\"PeerDependencyMeta\",selector:u,key:f,value:h})};await this.triggerHook(i=>i.registerPackageExtensions,this,t);for(let[i,n]of this.get(\"packageExtensions\"))t(WA(i,!0),Jy(n),{userProvided:!0})}normalizePackage(e){let t=rC(e);if(this.packageExtensions==null)throw new Error(\"refreshPackageExtensions has to be called before normalizing packages\");let i=this.packageExtensions.get(e.identHash);if(typeof i<\"u\"){let s=e.version;if(s!==null){for(let[o,a]of i)if(!!kc(s,o))for(let l of a)switch(l.status===\"inactive\"&&(l.status=\"redundant\"),l.type){case\"Dependency\":typeof t.dependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.dependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependency\":typeof t.peerDependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.peerDependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependencyMeta\":{let c=t.peerDependenciesMeta.get(l.selector);(typeof c>\"u\"||!Object.prototype.hasOwnProperty.call(c,l.key)||c[l.key]!==l.value)&&(l.status=\"active\",Ta(t.peerDependenciesMeta,l.selector,()=>({}))[l.key]=l.value)}break;default:qx(l);break}}}let n=s=>s.scope?`${s.scope}__${s.name}`:`${s.name}`;for(let s of t.peerDependenciesMeta.keys()){let o=tn(s);t.peerDependencies.has(o.identHash)||t.peerDependencies.set(o.identHash,_t(o,\"*\"))}for(let s of t.peerDependencies.values()){if(s.scope===\"types\")continue;let o=n(s),a=Jo(\"types\",o),l=Mt(a);t.peerDependencies.has(a.identHash)||t.peerDependenciesMeta.has(l)||(t.peerDependencies.set(a.identHash,_t(a,\"*\")),t.peerDependenciesMeta.set(l,{optional:!0}))}return t.dependencies=new Map(bn(t.dependencies,([,s])=>Sn(s))),t.peerDependencies=new Map(bn(t.peerDependencies,([,s])=>Sn(s))),t}getLimit(e){return Ta(this.limits,e,()=>(0,Ez.default)(this.get(e)))}async triggerHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);!s||await s(...t)}}async triggerMultipleHooks(e,t){for(let i of t)await this.triggerHook(e,...i)}async reduceHook(e,t,...i){let n=t;for(let s of this.plugins.values()){let o=s.hooks;if(!o)continue;let a=e(o);!a||(n=await a(n,...i))}return n}async firstHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);if(!s)continue;let o=await s(...t);if(typeof o<\"u\")return o}return null}},ye=Ha;ye.telemetry=null;var hk=(i=>(i[i.Never=0]=\"Never\",i[i.ErrorCode=1]=\"ErrorCode\",i[i.Always=2]=\"Always\",i))(hk||{}),dC=class extends at{constructor({fileName:t,code:i,signal:n}){let s=ye.create(x.cwd()),o=$e(s,t,Ue.PATH);super(1,`Child ${o} reported an error`,a=>{qve(i,n,{configuration:s,report:a})});this.code=pk(i,n)}},Yw=class extends dC{constructor({fileName:t,code:i,signal:n,stdout:s,stderr:o}){super({fileName:t,code:i,signal:n});this.stdout=s,this.stderr=o}};function Nc(r){return r!==null&&typeof r.fd==\"number\"}var Tc=new Set;function uk(){}function gk(){for(let r of Tc)r.kill()}async function oo(r,e,{cwd:t,env:i=process.env,strict:n=!1,stdin:s=null,stdout:o,stderr:a,end:l=2}){let c=[\"pipe\",\"pipe\",\"pipe\"];s===null?c[0]=\"ignore\":Nc(s)&&(c[0]=s),Nc(o)&&(c[1]=o),Nc(a)&&(c[2]=a);let u=(0,fk.default)(r,e,{cwd:K.fromPortablePath(t),env:{...i,PWD:K.fromPortablePath(t)},stdio:c});Tc.add(u),Tc.size===1&&(process.on(\"SIGINT\",uk),process.on(\"SIGTERM\",gk)),!Nc(s)&&s!==null&&s.pipe(u.stdin),Nc(o)||u.stdout.pipe(o,{end:!1}),Nc(a)||u.stderr.pipe(a,{end:!1});let g=()=>{for(let f of new Set([o,a]))Nc(f)||f.end()};return new Promise((f,h)=>{u.on(\"error\",p=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1)&&g(),h(p)}),u.on(\"close\",(p,C)=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1&&p>0)&&g(),p===0||!n?f({code:pk(p,C)}):h(new dC({fileName:r,code:p,signal:C}))})})}async function tk(r,e,{cwd:t,env:i=process.env,encoding:n=\"utf8\",strict:s=!1}){let o=[\"ignore\",\"pipe\",\"pipe\"],a=[],l=[],c=K.fromPortablePath(t);typeof i.PWD<\"u\"&&(i={...i,PWD:c});let u=(0,fk.default)(r,e,{cwd:c,env:i,stdio:o});return u.stdout.on(\"data\",g=>{a.push(g)}),u.stderr.on(\"data\",g=>{l.push(g)}),await new Promise((g,f)=>{u.on(\"error\",h=>{let p=ye.create(t),C=$e(p,r,Ue.PATH);f(new at(1,`Process ${C} failed to spawn`,y=>{y.reportError(1,`  ${Go(p,{label:\"Thrown Error\",value:no(Ue.NO_HINT,h.message)})}`)}))}),u.on(\"close\",(h,p)=>{let C=n===\"buffer\"?Buffer.concat(a):Buffer.concat(a).toString(n),y=n===\"buffer\"?Buffer.concat(l):Buffer.concat(l).toString(n);h===0||!s?g({code:pk(h,p),stdout:C,stderr:y}):f(new Yw({fileName:r,code:h,signal:p,stdout:C,stderr:y}))})})}var jve=new Map([[\"SIGINT\",2],[\"SIGQUIT\",3],[\"SIGKILL\",9],[\"SIGTERM\",15]]);function pk(r,e){let t=jve.get(e);return typeof t<\"u\"?128+t:r!=null?r:1}function qve(r,e,{configuration:t,report:i}){i.reportError(1,`  ${Go(t,r!==null?{label:\"Exit Code\",value:no(Ue.NUMBER,r)}:{label:\"Exit Signal\",value:no(Ue.CODE,e)})}`)}var Xt={};ut(Xt,{Method:()=>eV,RequestError:()=>tV.RequestError,del:()=>nke,get:()=>rke,getNetworkSettings:()=>$6,post:()=>kR,put:()=>ike,request:()=>vC});var X6=Pe(CB()),Z6=J(\"https\"),_6=J(\"http\"),DR=Pe(Bn()),PR=Pe(J6()),mB=J(\"url\");var tV=Pe(CB()),W6=new Map,z6=new Map,$De=new _6.Agent({keepAlive:!0}),eke=new Z6.Agent({keepAlive:!0});function V6(r){let e=new mB.URL(r),t={host:e.hostname,headers:{}};return e.port&&(t.port=Number(e.port)),{proxy:t}}async function xR(r){return Ta(z6,r,()=>O.readFilePromise(r).then(e=>(z6.set(r,e),e)))}function tke({statusCode:r,statusMessage:e},t){let i=$e(t,r,Ue.NUMBER),n=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${r}`;return If(t,`${i}${e?` (${e})`:\"\"}`,n)}async function EB(r,{configuration:e,customErrorMessage:t}){var i,n;try{return await r}catch(s){if(s.name!==\"HTTPError\")throw s;let o=(n=t==null?void 0:t(s))!=null?n:(i=s.response.body)==null?void 0:i.error;o==null&&(s.message.startsWith(\"Response code\")?o=\"The remote server failed to provide the requested resource\":o=s.message),s instanceof X6.TimeoutError&&s.event===\"socket\"&&(o+=`(can be increased via ${$e(e,\"httpTimeout\",Ue.SETTING)})`);let a=new at(35,o,l=>{s.response&&l.reportError(35,`  ${Go(e,{label:\"Response Code\",value:no(Ue.NO_HINT,tke(s.response,e))})}`),s.request&&(l.reportError(35,`  ${Go(e,{label:\"Request Method\",value:no(Ue.NO_HINT,s.request.options.method)})}`),l.reportError(35,`  ${Go(e,{label:\"Request URL\",value:no(Ue.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&l.reportError(35,`  ${Go(e,{label:\"Request Redirects\",value:no(Ue.NO_HINT,tP(e,s.request.redirects,Ue.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&l.reportError(35,`  ${Go(e,{label:\"Request Retry Count\",value:no(Ue.NO_HINT,`${$e(e,s.request.retryCount,Ue.NUMBER)} (can be increased via ${$e(e,\"httpRetry\",Ue.SETTING)})`)})}`)});throw a.originalError=s,a}}function $6(r,e){let t=[...e.configuration.get(\"networkSettings\")].sort(([o],[a])=>a.length-o.length),i={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},n=Object.keys(i),s=typeof r==\"string\"?new mB.URL(r):r;for(let[o,a]of t)if(DR.default.isMatch(s.hostname,o))for(let l of n){let c=a.get(l);c!==null&&typeof i[l]>\"u\"&&(i[l]=c)}for(let o of n)typeof i[o]>\"u\"&&(i[o]=e.configuration.get(o));return i}var eV=(n=>(n.GET=\"GET\",n.PUT=\"PUT\",n.POST=\"POST\",n.DELETE=\"DELETE\",n))(eV||{});async function vC(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=async()=>await ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o});return await(await t.reduceHook(c=>c.wrapNetworkRequest,a,{target:r,body:e,configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o}))()}async function rke(r,{configuration:e,jsonResponse:t,...i}){let n=Ta(W6,r,()=>EB(vC(r,null,{configuration:e,...i}),{configuration:e}).then(s=>(W6.set(r,s.body),s.body)));return Buffer.isBuffer(n)===!1&&(n=await n),t?JSON.parse(n.toString()):n}async function ike(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"PUT\"}),i)).body}async function kR(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"POST\"}),i)).body}async function nke(r,{customErrorMessage:e,...t}){return(await EB(vC(r,null,{...t,method:\"DELETE\"}),t)).body}async function ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=typeof r==\"string\"?new mB.URL(r):r,l=$6(a,{configuration:t});if(l.enableNetwork===!1)throw new Error(`Request to '${a.href}' has been blocked because of your configuration settings`);if(a.protocol===\"http:\"&&!DR.default.isMatch(a.hostname,t.get(\"unsafeHttpWhitelist\")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${a.hostname})`);let u={agent:{http:l.httpProxy?PR.default.httpOverHttp(V6(l.httpProxy)):$De,https:l.httpsProxy?PR.default.httpsOverHttp(V6(l.httpsProxy)):eke},headers:i,method:o};u.responseType=s?\"json\":\"buffer\",e!==null&&(Buffer.isBuffer(e)||!n&&typeof e==\"string\"?u.body=e:u.json=e);let g=t.get(\"httpTimeout\"),f=t.get(\"httpRetry\"),h=t.get(\"enableStrictSsl\"),p=l.caFilePath,C=l.httpsCertFilePath,y=l.httpsKeyFilePath,{default:B}=await Promise.resolve().then(()=>Pe(CB())),v=p?await xR(p):void 0,D=C?await xR(C):void 0,T=y?await xR(y):void 0,H=B.extend({timeout:{socket:g},retry:f,https:{rejectUnauthorized:h,certificateAuthority:v,certificate:D,key:T},...u});return t.getLimit(\"networkConcurrency\")(()=>H(a))}var Wt={};ut(Wt,{PackageManager:()=>f9,detectPackageManager:()=>h9,executePackageAccessibleBinary:()=>E9,executePackageScript:()=>TB,executePackageShellcode:()=>JR,executeWorkspaceAccessibleBinary:()=>bRe,executeWorkspaceLifecycleScript:()=>C9,executeWorkspaceScript:()=>d9,getPackageAccessibleBinaries:()=>LB,getWorkspaceAccessibleBinaries:()=>m9,hasPackageScript:()=>yRe,hasWorkspaceScript:()=>WR,isNodeScript:()=>zR,makeScriptEnv:()=>FC,maybeExecuteWorkspaceLifecycleScript:()=>BRe,prepareExternalProject:()=>IRe});var xC={};ut(xC,{getLibzipPromise:()=>an,getLibzipSync:()=>aV});var oV=Pe(iV());var Ja=[\"number\",\"number\"],nV=(F=>(F[F.ZIP_ER_OK=0]=\"ZIP_ER_OK\",F[F.ZIP_ER_MULTIDISK=1]=\"ZIP_ER_MULTIDISK\",F[F.ZIP_ER_RENAME=2]=\"ZIP_ER_RENAME\",F[F.ZIP_ER_CLOSE=3]=\"ZIP_ER_CLOSE\",F[F.ZIP_ER_SEEK=4]=\"ZIP_ER_SEEK\",F[F.ZIP_ER_READ=5]=\"ZIP_ER_READ\",F[F.ZIP_ER_WRITE=6]=\"ZIP_ER_WRITE\",F[F.ZIP_ER_CRC=7]=\"ZIP_ER_CRC\",F[F.ZIP_ER_ZIPCLOSED=8]=\"ZIP_ER_ZIPCLOSED\",F[F.ZIP_ER_NOENT=9]=\"ZIP_ER_NOENT\",F[F.ZIP_ER_EXISTS=10]=\"ZIP_ER_EXISTS\",F[F.ZIP_ER_OPEN=11]=\"ZIP_ER_OPEN\",F[F.ZIP_ER_TMPOPEN=12]=\"ZIP_ER_TMPOPEN\",F[F.ZIP_ER_ZLIB=13]=\"ZIP_ER_ZLIB\",F[F.ZIP_ER_MEMORY=14]=\"ZIP_ER_MEMORY\",F[F.ZIP_ER_CHANGED=15]=\"ZIP_ER_CHANGED\",F[F.ZIP_ER_COMPNOTSUPP=16]=\"ZIP_ER_COMPNOTSUPP\",F[F.ZIP_ER_EOF=17]=\"ZIP_ER_EOF\",F[F.ZIP_ER_INVAL=18]=\"ZIP_ER_INVAL\",F[F.ZIP_ER_NOZIP=19]=\"ZIP_ER_NOZIP\",F[F.ZIP_ER_INTERNAL=20]=\"ZIP_ER_INTERNAL\",F[F.ZIP_ER_INCONS=21]=\"ZIP_ER_INCONS\",F[F.ZIP_ER_REMOVE=22]=\"ZIP_ER_REMOVE\",F[F.ZIP_ER_DELETED=23]=\"ZIP_ER_DELETED\",F[F.ZIP_ER_ENCRNOTSUPP=24]=\"ZIP_ER_ENCRNOTSUPP\",F[F.ZIP_ER_RDONLY=25]=\"ZIP_ER_RDONLY\",F[F.ZIP_ER_NOPASSWD=26]=\"ZIP_ER_NOPASSWD\",F[F.ZIP_ER_WRONGPASSWD=27]=\"ZIP_ER_WRONGPASSWD\",F[F.ZIP_ER_OPNOTSUPP=28]=\"ZIP_ER_OPNOTSUPP\",F[F.ZIP_ER_INUSE=29]=\"ZIP_ER_INUSE\",F[F.ZIP_ER_TELL=30]=\"ZIP_ER_TELL\",F[F.ZIP_ER_COMPRESSED_DATA=31]=\"ZIP_ER_COMPRESSED_DATA\",F))(nV||{}),sV=r=>({get HEAP8(){return r.HEAP8},get HEAPU8(){return r.HEAPU8},errors:nV,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:r._malloc(1),uint16S:r._malloc(2),uint32S:r._malloc(4),uint64S:r._malloc(8),malloc:r._malloc,free:r._free,getValue:r.getValue,open:r.cwrap(\"zip_open\",\"number\",[\"string\",\"number\",\"number\"]),openFromSource:r.cwrap(\"zip_open_from_source\",\"number\",[\"number\",\"number\",\"number\"]),close:r.cwrap(\"zip_close\",\"number\",[\"number\"]),discard:r.cwrap(\"zip_discard\",null,[\"number\"]),getError:r.cwrap(\"zip_get_error\",\"number\",[\"number\"]),getName:r.cwrap(\"zip_get_name\",\"string\",[\"number\",\"number\",\"number\"]),getNumEntries:r.cwrap(\"zip_get_num_entries\",\"number\",[\"number\",\"number\"]),delete:r.cwrap(\"zip_delete\",\"number\",[\"number\",\"number\"]),stat:r.cwrap(\"zip_stat\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),statIndex:r.cwrap(\"zip_stat_index\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fopen:r.cwrap(\"zip_fopen\",\"number\",[\"number\",\"string\",\"number\"]),fopenIndex:r.cwrap(\"zip_fopen_index\",\"number\",[\"number\",...Ja,\"number\"]),fread:r.cwrap(\"zip_fread\",\"number\",[\"number\",\"number\",\"number\",\"number\"]),fclose:r.cwrap(\"zip_fclose\",\"number\",[\"number\"]),dir:{add:r.cwrap(\"zip_dir_add\",\"number\",[\"number\",\"string\"])},file:{add:r.cwrap(\"zip_file_add\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),getError:r.cwrap(\"zip_file_get_error\",\"number\",[\"number\"]),getExternalAttributes:r.cwrap(\"zip_file_get_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setExternalAttributes:r.cwrap(\"zip_file_set_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setMtime:r.cwrap(\"zip_file_set_mtime\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),setCompression:r.cwrap(\"zip_set_file_compression\",\"number\",[\"number\",...Ja,\"number\",\"number\"])},ext:{countSymlinks:r.cwrap(\"zip_ext_count_symlinks\",\"number\",[\"number\"])},error:{initWithCode:r.cwrap(\"zip_error_init_with_code\",null,[\"number\",\"number\"]),strerror:r.cwrap(\"zip_error_strerror\",\"string\",[\"number\"])},name:{locate:r.cwrap(\"zip_name_locate\",\"number\",[\"number\",\"string\",\"number\"])},source:{fromUnattachedBuffer:r.cwrap(\"zip_source_buffer_create\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fromBuffer:r.cwrap(\"zip_source_buffer\",\"number\",[\"number\",\"number\",...Ja,\"number\"]),free:r.cwrap(\"zip_source_free\",null,[\"number\"]),keep:r.cwrap(\"zip_source_keep\",null,[\"number\"]),open:r.cwrap(\"zip_source_open\",\"number\",[\"number\"]),close:r.cwrap(\"zip_source_close\",\"number\",[\"number\"]),seek:r.cwrap(\"zip_source_seek\",\"number\",[\"number\",...Ja,\"number\"]),tell:r.cwrap(\"zip_source_tell\",\"number\",[\"number\"]),read:r.cwrap(\"zip_source_read\",\"number\",[\"number\",\"number\",\"number\"]),error:r.cwrap(\"zip_source_error\",\"number\",[\"number\"]),setMtime:r.cwrap(\"zip_source_set_mtime\",\"number\",[\"number\",\"number\"])},struct:{stat:r.cwrap(\"zipstruct_stat\",\"number\",[]),statS:r.cwrap(\"zipstruct_statS\",\"number\",[]),statName:r.cwrap(\"zipstruct_stat_name\",\"string\",[\"number\"]),statIndex:r.cwrap(\"zipstruct_stat_index\",\"number\",[\"number\"]),statSize:r.cwrap(\"zipstruct_stat_size\",\"number\",[\"number\"]),statCompSize:r.cwrap(\"zipstruct_stat_comp_size\",\"number\",[\"number\"]),statCompMethod:r.cwrap(\"zipstruct_stat_comp_method\",\"number\",[\"number\"]),statMtime:r.cwrap(\"zipstruct_stat_mtime\",\"number\",[\"number\"]),statCrc:r.cwrap(\"zipstruct_stat_crc\",\"number\",[\"number\"]),error:r.cwrap(\"zipstruct_error\",\"number\",[]),errorS:r.cwrap(\"zipstruct_errorS\",\"number\",[]),errorCodeZip:r.cwrap(\"zipstruct_error_code_zip\",\"number\",[\"number\"])}});var NR=null;function aV(){return NR===null&&(NR=sV((0,oV.default)())),NR}async function an(){return aV()}var RC={};ut(RC,{ShellError:()=>zn,execute:()=>xB,globUtils:()=>BB});var yV=Pe(wx()),wV=J(\"os\"),Vn=J(\"stream\"),BV=J(\"util\");var zn=class extends Error{constructor(e){super(e),this.name=\"ShellError\"}};var BB={};ut(BB,{fastGlobOptions:()=>cV,isBraceExpansion:()=>TR,isGlobPattern:()=>oke,match:()=>ake,micromatchOptions:()=>wB});var AV=Pe(dw()),lV=Pe(J(\"fs\")),yB=Pe(Bn()),wB={strictBrackets:!0},cV={onlyDirectories:!1,onlyFiles:!1};function oke(r){if(!yB.default.scan(r,wB).isGlob)return!1;try{yB.default.parse(r,wB)}catch{return!1}return!0}function ake(r,{cwd:e,baseFs:t}){return(0,AV.default)(r,{...cV,cwd:K.fromPortablePath(e),fs:AI(lV.default,new vg(t))})}function TR(r){return yB.default.scan(r,wB).isBrace}var gV=Pe(TS()),Vo=J(\"stream\"),fV=J(\"string_decoder\");var Oc=new Set;function LR(){}function MR(){for(let r of Oc)r.kill()}function hV(r,e,t,i){return n=>{let s=n[0]instanceof Vo.Transform?\"pipe\":n[0],o=n[1]instanceof Vo.Transform?\"pipe\":n[1],a=n[2]instanceof Vo.Transform?\"pipe\":n[2],l=(0,gV.default)(r,e,{...i,stdio:[s,o,a]});return Oc.add(l),Oc.size===1&&(process.on(\"SIGINT\",LR),process.on(\"SIGTERM\",MR)),n[0]instanceof Vo.Transform&&n[0].pipe(l.stdin),n[1]instanceof Vo.Transform&&l.stdout.pipe(n[1],{end:!1}),n[2]instanceof Vo.Transform&&l.stderr.pipe(n[2],{end:!1}),{stdin:l.stdin,promise:new Promise(c=>{l.on(\"error\",u=>{switch(Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),u.code){case\"ENOENT\":n[2].write(`command not found: ${r}\n`),c(127);break;case\"EACCES\":n[2].write(`permission denied: ${r}\n`),c(128);break;default:n[2].write(`uncaught error: ${u.message}\n`),c(1);break}}),l.on(\"close\",u=>{Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),c(u!==null?u:129)})})}}}function pV(r){return e=>{let t=e[0]===\"pipe\"?new Vo.PassThrough:e[0];return{stdin:t,promise:Promise.resolve().then(()=>r({stdin:t,stdout:e[1],stderr:e[2]}))}}}var Ss=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},OR=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");return this.stream}},zf=class{constructor(e,t){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=t}static start(e,{stdin:t,stdout:i,stderr:n}){let s=new zf(null,e);return s.stdin=t,s.stdout=i,s.stderr=n,s}pipeTo(e,t=1){let i=new zf(this,e),n=new OR;return i.pipe=n,i.stdout=this.stdout,i.stderr=this.stderr,(t&1)===1?this.stdout=n:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(t&2)===2?this.stderr=n:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),i}async exec(){let e=[\"ignore\",\"ignore\",\"ignore\"];if(this.pipe)e[0]=\"pipe\";else{if(this.stdin===null)throw new Error(\"Assertion failed: No input stream registered\");e[0]=this.stdin.get()}let t;if(this.stdout===null)throw new Error(\"Assertion failed: No output stream registered\");t=this.stdout,e[1]=t.get();let i;if(this.stderr===null)throw new Error(\"Assertion failed: No error stream registered\");i=this.stderr,e[2]=i.get();let n=this.implementation(e);return this.pipe&&this.pipe.attach(n.stdin),await n.promise.then(s=>(t.close(),i.close(),s))}async run(){let e=[];for(let i=this;i;i=i.ancestor)e.push(i.exec());return(await Promise.all(e))[0]}};function bB(r,e){return zf.start(r,e)}function uV(r,e=null){let t=new Vo.PassThrough,i=new fV.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",r(e!==null?`${e} ${l}`:l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&r(e!==null?`${e} ${s}`:s)}),t}function dV(r,{prefix:e}){return{stdout:uV(t=>r.stdout.write(`${t}\n`),r.stdout.isTTY?e:null),stderr:uV(t=>r.stderr.write(`${t}\n`),r.stderr.isTTY?e:null)}}var Ake=(0,BV.promisify)(setTimeout);function CV(r,e,t){let i=new Vn.PassThrough({autoDestroy:!0});switch(r){case 0:(e&1)===1&&t.stdin.pipe(i,{end:!1}),(e&2)===2&&t.stdin instanceof Vn.Writable&&i.pipe(t.stdin,{end:!1});break;case 1:(e&1)===1&&t.stdout.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stdout,{end:!1});break;case 2:(e&1)===1&&t.stderr.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stderr,{end:!1});break;default:throw new zn(`Bad file descriptor: \"${r}\"`)}return i}function SB(r,e={}){let t={...r,...e};return t.environment={...r.environment,...e.environment},t.variables={...r.variables,...e.variables},t}var lke=new Map([[\"cd\",async([r=(0,wV.homedir)(),...e],t,i)=>{let n=x.resolve(i.cwd,K.toPortablePath(r));if(!(await t.baseFs.statPromise(n).catch(o=>{throw o.code===\"ENOENT\"?new zn(`cd: no such file or directory: ${r}`):o})).isDirectory())throw new zn(`cd: not a directory: ${r}`);return i.cwd=n,0}],[\"pwd\",async(r,e,t)=>(t.stdout.write(`${K.fromPortablePath(t.cwd)}\n`),0)],[\":\",async(r,e,t)=>0],[\"true\",async(r,e,t)=>0],[\"false\",async(r,e,t)=>1],[\"exit\",async([r,...e],t,i)=>i.exitCode=parseInt(r!=null?r:i.variables[\"?\"],10)],[\"echo\",async(r,e,t)=>(t.stdout.write(`${r.join(\" \")}\n`),0)],[\"sleep\",async([r],e,t)=>{if(typeof r>\"u\")throw new zn(\"sleep: missing operand\");let i=Number(r);if(Number.isNaN(i))throw new zn(`sleep: invalid time interval '${r}'`);return await Ake(1e3*i,0)}],[\"__ysh_run_procedure\",async(r,e,t)=>{let i=t.procedures[r[0]];return await bB(i,{stdin:new Ss(t.stdin),stdout:new Ss(t.stdout),stderr:new Ss(t.stderr)}).run()}],[\"__ysh_set_redirects\",async(r,e,t)=>{let i=t.stdin,n=t.stdout,s=t.stderr,o=[],a=[],l=[],c=0;for(;r[c]!==\"--\";){let g=r[c++],{type:f,fd:h}=JSON.parse(g),p=v=>{switch(h){case null:case 0:o.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},C=v=>{switch(h){case null:case 1:a.push(v);break;case 2:l.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},y=Number(r[c++]),B=c+y;for(let v=c;v<B;++c,++v)switch(f){case\"<\":p(()=>e.baseFs.createReadStream(x.resolve(t.cwd,K.toPortablePath(r[v]))));break;case\"<<<\":p(()=>{let D=new Vn.PassThrough;return process.nextTick(()=>{D.write(`${r[v]}\n`),D.end()}),D});break;case\"<&\":p(()=>CV(Number(r[v]),1,t));break;case\">\":case\">>\":{let D=x.resolve(t.cwd,K.toPortablePath(r[v]));C(D===\"/dev/null\"?new Vn.Writable({autoDestroy:!0,emitClose:!0,write(T,H,j){setImmediate(j)}}):e.baseFs.createWriteStream(D,f===\">>\"?{flags:\"a\"}:void 0))}break;case\">&\":C(CV(Number(r[v]),2,t));break;default:throw new Error(`Assertion failed: Unsupported redirection type: \"${f}\"`)}}if(o.length>0){let g=new Vn.PassThrough;i=g;let f=h=>{if(h===o.length)g.end();else{let p=o[h]();p.pipe(g,{end:!1}),p.on(\"end\",()=>{f(h+1)})}};f(0)}if(a.length>0){let g=new Vn.PassThrough;n=g;for(let f of a)g.pipe(f)}if(l.length>0){let g=new Vn.PassThrough;s=g;for(let f of l)g.pipe(f)}let u=await bB(DC(r.slice(c+1),e,t),{stdin:new Ss(i),stdout:new Ss(n),stderr:new Ss(s)}).run();return await Promise.all(a.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),await Promise.all(l.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),u}]]);async function cke(r,e,t){let i=[],n=new Vn.PassThrough;return n.on(\"data\",s=>i.push(s)),await vB(r,e,SB(t,{stdout:n})),Buffer.concat(i).toString().replace(/[\\r\\n]+$/,\"\")}async function mV(r,e,t){let i=r.map(async s=>{let o=await Kc(s.args,e,t);return{name:s.name,value:o.join(\" \")}});return(await Promise.all(i)).reduce((s,o)=>(s[o.name]=o.value,s),{})}function QB(r){return r.match(/[^ \\r\\n\\t]+/g)||[]}async function bV(r,e,t,i,n=i){switch(r.name){case\"$\":i(String(process.pid));break;case\"#\":i(String(e.args.length));break;case\"@\":if(r.quoted)for(let s of e.args)n(s);else for(let s of e.args){let o=QB(s);for(let a=0;a<o.length-1;++a)n(o[a]);i(o[o.length-1])}break;case\"*\":{let s=e.args.join(\" \");if(r.quoted)i(s);else for(let o of QB(s))n(o)}break;case\"PPID\":i(String(process.ppid));break;case\"RANDOM\":i(String(Math.floor(Math.random()*32768)));break;default:{let s=parseInt(r.name,10),o,a=Number.isFinite(s);if(a?s>=0&&s<e.args.length&&(o=e.args[s]):Object.prototype.hasOwnProperty.call(t.variables,r.name)?o=t.variables[r.name]:Object.prototype.hasOwnProperty.call(t.environment,r.name)&&(o=t.environment[r.name]),typeof o<\"u\"&&r.alternativeValue?o=(await Kc(r.alternativeValue,e,t)).join(\" \"):typeof o>\"u\"&&(r.defaultValue?o=(await Kc(r.defaultValue,e,t)).join(\" \"):r.alternativeValue&&(o=\"\")),typeof o>\"u\")throw a?new zn(`Unbound argument #${s}`):new zn(`Unbound variable \"${r.name}\"`);if(r.quoted)i(o);else{let l=QB(o);for(let u=0;u<l.length-1;++u)n(l[u]);let c=l[l.length-1];typeof c<\"u\"&&i(c)}}break}}var uke={addition:(r,e)=>r+e,subtraction:(r,e)=>r-e,multiplication:(r,e)=>r*e,division:(r,e)=>Math.trunc(r/e)};async function PC(r,e,t){if(r.type===\"number\"){if(Number.isInteger(r.value))return r.value;throw new Error(`Invalid number: \"${r.value}\", only integers are allowed`)}else if(r.type===\"variable\"){let i=[];await bV({...r,quoted:!0},e,t,s=>i.push(s));let n=Number(i.join(\" \"));return Number.isNaN(n)?PC({type:\"variable\",name:i.join(\" \")},e,t):PC({type:\"number\",value:n},e,t)}else return uke[r.type](await PC(r.left,e,t),await PC(r.right,e,t))}async function Kc(r,e,t){let i=new Map,n=[],s=[],o=u=>{s.push(u)},a=()=>{s.length>0&&n.push(s.join(\"\")),s=[]},l=u=>{o(u),a()},c=(u,g,f)=>{let h=JSON.stringify({type:u,fd:g}),p=i.get(h);typeof p>\"u\"&&i.set(h,p=[]),p.push(f)};for(let u of r){let g=!1;switch(u.type){case\"redirection\":{let f=await Kc(u.args,e,t);for(let h of f)c(u.subtype,u.fd,h)}break;case\"argument\":for(let f of u.segments)switch(f.type){case\"text\":o(f.text);break;case\"glob\":o(f.pattern),g=!0;break;case\"shell\":{let h=await cke(f.shell,e,t);if(f.quoted)o(h);else{let p=QB(h);for(let C=0;C<p.length-1;++C)l(p[C]);o(p[p.length-1])}}break;case\"variable\":await bV(f,e,t,o,l);break;case\"arithmetic\":o(String(await PC(f.arithmetic,e,t)));break}break}if(a(),g){let f=n.pop();if(typeof f>\"u\")throw new Error(\"Assertion failed: Expected a glob pattern to have been set\");let h=await e.glob.match(f,{cwd:t.cwd,baseFs:e.baseFs});if(h.length===0){let p=TR(f)?\". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22\":\"\";throw new zn(`No matches found: \"${f}\"${p}`)}for(let p of h.sort())l(p)}}if(i.size>0){let u=[];for(let[g,f]of i.entries())u.splice(u.length,0,g,String(f.length),...f);n.splice(0,0,\"__ysh_set_redirects\",...u,\"--\")}return n}function DC(r,e,t){e.builtins.has(r[0])||(r=[\"command\",...r]);let i=K.fromPortablePath(t.cwd),n=t.environment;typeof n.PWD<\"u\"&&(n={...n,PWD:i});let[s,...o]=r;if(s===\"command\")return hV(o[0],o.slice(1),e,{cwd:i,env:n});let a=e.builtins.get(s);if(typeof a>\"u\")throw new Error(`Assertion failed: A builtin should exist for \"${s}\"`);return pV(async({stdin:l,stdout:c,stderr:u})=>{let{stdin:g,stdout:f,stderr:h}=t;t.stdin=l,t.stdout=c,t.stderr=u;try{return await a(o,e,t)}finally{t.stdin=g,t.stdout=f,t.stderr=h}})}function gke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,SB(t,{stdin:n}));return{stdin:n,promise:s}}}function fke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,t);return{stdin:n,promise:s}}}function EV(r,e,t,i){if(e.length===0)return r;{let n;do n=String(Math.random());while(Object.prototype.hasOwnProperty.call(i.procedures,n));return i.procedures={...i.procedures},i.procedures[n]=r,DC([...e,\"__ysh_run_procedure\",n],t,i)}}async function IV(r,e,t){let i=r,n=null,s=null;for(;i;){let o=i.then?{...t}:t,a;switch(i.type){case\"command\":{let l=await Kc(i.args,e,t),c=await mV(i.envs,e,t);a=i.envs.length?DC(l,e,SB(o,{environment:c})):DC(l,e,o)}break;case\"subshell\":{let l=await Kc(i.args,e,t),c=gke(i.subshell,e,o);a=EV(c,l,e,o)}break;case\"group\":{let l=await Kc(i.args,e,t),c=fke(i.group,e,o);a=EV(c,l,e,o)}break;case\"envs\":{let l=await mV(i.envs,e,t);o.environment={...o.environment,...l},a=DC([\"true\"],e,o)}break}if(typeof a>\"u\")throw new Error(\"Assertion failed: An action should have been generated\");if(n===null)s=bB(a,{stdin:new Ss(o.stdin),stdout:new Ss(o.stdout),stderr:new Ss(o.stderr)});else{if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");switch(n){case\"|\":s=s.pipeTo(a,1);break;case\"|&\":s=s.pipeTo(a,3);break}}i.then?(n=i.then.type,i=i.then.chain):i=null}if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");return await s.run()}async function hke(r,e,t,{background:i=!1}={}){function n(s){let o=[\"#2E86AB\",\"#A23B72\",\"#F18F01\",\"#C73E1D\",\"#CCE2A3\"],a=o[s%o.length];return yV.default.hex(a)}if(i){let s=t.nextBackgroundJobIndex++,o=n(s),a=`[${s}]`,l=o(a),{stdout:c,stderr:u}=dV(t,{prefix:l});return t.backgroundJobs.push(IV(r,e,SB(t,{stdout:c,stderr:u})).catch(g=>u.write(`${g.message}\n`)).finally(()=>{t.stdout.isTTY&&t.stdout.write(`Job ${l}, '${o(Fg(r))}' has ended\n`)})),0}return await IV(r,e,t)}async function pke(r,e,t,{background:i=!1}={}){let n,s=a=>{n=a,t.variables[\"?\"]=String(a)},o=async a=>{try{return await hke(a.chain,e,t,{background:i&&typeof a.then>\"u\"})}catch(l){if(!(l instanceof zn))throw l;return t.stderr.write(`${l.message}\n`),1}};for(s(await o(r));r.then;){if(t.exitCode!==null)return t.exitCode;switch(r.then.type){case\"&&\":n===0&&s(await o(r.then.line));break;case\"||\":n!==0&&s(await o(r.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: \"${r.then.type}\"`)}r=r.then.line}return n}async function vB(r,e,t){let i=t.backgroundJobs;t.backgroundJobs=[];let n=0;for(let{command:s,type:o}of r){if(n=await pke(s,e,t,{background:o===\"&\"}),t.exitCode!==null)return t.exitCode;t.variables[\"?\"]=String(n)}return await Promise.all(t.backgroundJobs),t.backgroundJobs=i,n}function QV(r){switch(r.type){case\"variable\":return r.name===\"@\"||r.name===\"#\"||r.name===\"*\"||Number.isFinite(parseInt(r.name,10))||\"defaultValue\"in r&&!!r.defaultValue&&r.defaultValue.some(e=>kC(e))||\"alternativeValue\"in r&&!!r.alternativeValue&&r.alternativeValue.some(e=>kC(e));case\"arithmetic\":return KR(r.arithmetic);case\"shell\":return UR(r.shell);default:return!1}}function kC(r){switch(r.type){case\"redirection\":return r.args.some(e=>kC(e));case\"argument\":return r.segments.some(e=>QV(e));default:throw new Error(`Assertion failed: Unsupported argument type: \"${r.type}\"`)}}function KR(r){switch(r.type){case\"variable\":return QV(r);case\"number\":return!1;default:return KR(r.left)||KR(r.right)}}function UR(r){return r.some(({command:e})=>{for(;e;){let t=e.chain;for(;t;){let i;switch(t.type){case\"subshell\":i=UR(t.subshell);break;case\"command\":i=t.envs.some(n=>n.args.some(s=>kC(s)))||t.args.some(n=>kC(n));break}if(i)return!0;if(!t.then)break;t=t.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function xB(r,e=[],{baseFs:t=new $t,builtins:i={},cwd:n=K.toPortablePath(process.cwd()),env:s=process.env,stdin:o=process.stdin,stdout:a=process.stdout,stderr:l=process.stderr,variables:c={},glob:u=BB}={}){let g={};for(let[p,C]of Object.entries(s))typeof C<\"u\"&&(g[p]=C);let f=new Map(lke);for(let[p,C]of Object.entries(i))f.set(p,C);o===null&&(o=new Vn.PassThrough,o.end());let h=uI(r,u);if(!UR(h)&&h.length>0&&e.length>0){let{command:p}=h[h.length-1];for(;p.then;)p=p.then.line;let C=p.chain;for(;C.then;)C=C.then.chain;C.type===\"command\"&&(C.args=C.args.concat(e.map(y=>({type:\"argument\",segments:[{type:\"text\",text:y}]}))))}return await vB(h,{args:e,baseFs:t,builtins:f,initialStdin:o,initialStdout:a,initialStderr:l,glob:u},{cwd:n,environment:g,exitCode:null,procedures:{},stdin:o,stdout:a,stderr:l,variables:Object.assign({},c,{[\"?\"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var u9=Pe(PB()),g9=Pe(Jg()),tl=J(\"stream\");var l9=Pe(s9()),FB=Pe(Ac());var o9=[\"\\u280B\",\"\\u2819\",\"\\u2839\",\"\\u2838\",\"\\u283C\",\"\\u2834\",\"\\u2826\",\"\\u2827\",\"\\u2807\",\"\\u280F\"],a9=80,fRe=new Set([13,19]),hRe=5,RB=FB.default.GITHUB_ACTIONS?{start:r=>`::group::${r}\n`,end:r=>`::endgroup::\n`}:FB.default.TRAVIS?{start:r=>`travis_fold:start:${r}\n`,end:r=>`travis_fold:end:${r}\n`}:FB.default.GITLAB?{start:r=>`section_start:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}[collapsed=true]\\r\\x1B[0K${r}\n`,end:r=>`section_end:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}\\r\\x1B[0K`}:null,A9=new Date,pRe=[\"iTerm.app\",\"Apple_Terminal\",\"WarpTerminal\",\"vscode\"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,dRe=r=>r,NB=dRe({patrick:{date:[17,3],chars:[\"\\u{1F340}\",\"\\u{1F331}\"],size:40},simba:{date:[19,7],chars:[\"\\u{1F981}\",\"\\u{1F334}\"],size:40},jack:{date:[31,10],chars:[\"\\u{1F383}\",\"\\u{1F987}\"],size:40},hogsfather:{date:[31,12],chars:[\"\\u{1F389}\",\"\\u{1F384}\"],size:40},default:{chars:[\"=\",\"-\"],size:80}}),CRe=pRe&&Object.keys(NB).find(r=>{let e=NB[r];return!(e.date&&(e.date[0]!==A9.getDate()||e.date[1]!==A9.getMonth()+1))})||\"default\";function c9(r,{configuration:e,json:t}){if(!e.get(\"enableMessageNames\"))return\"\";let n=FA(r===null?0:r);return!t&&r===null?$e(e,n,\"grey\"):n}function qR(r,{configuration:e,json:t}){let i=c9(r,{configuration:e,json:t});if(!i||r===null||r===0)return i;let n=Ct[r],s=`https://yarnpkg.com/advanced/error-codes#${i}---${n}`.toLowerCase();return If(e,i,s)}var Ge=class extends vi{constructor({configuration:t,stdout:i,json:n=!1,includePrefix:s=!0,includeFooter:o=!0,includeLogs:a=!n,includeInfos:l=a,includeWarnings:c=a,forgettableBufferSize:u=hRe,forgettableNames:g=new Set}){super();this.uncommitted=new Set;this.cacheHitCount=0;this.cacheMissCount=0;this.lastCacheMiss=null;this.warningCount=0;this.errors=[];this.startTime=Date.now();this.indent=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;this.forgettableLines=[];if(Xd(this,{configuration:t}),this.configuration=t,this.forgettableBufferSize=u,this.forgettableNames=new Set([...g,...fRe]),this.includePrefix=s,this.includeFooter=o,this.includeInfos=l,this.includeWarnings=c,this.json=n,this.stdout=i,t.get(\"enableProgressBars\")&&!n&&i.isTTY&&i.columns>22){let f=t.get(\"progressBarStyle\")||CRe;if(!Object.prototype.hasOwnProperty.call(NB,f))throw new Error(\"Assertion failed: Invalid progress bar style\");this.progressStyle=NB[f];let h=12,p=Math.max(0,Math.min(i.columns-h,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*p/80)}}static async start(t,i){let n=new this(t),s=process.emitWarning;process.emitWarning=(o,a)=>{if(typeof o!=\"string\"){let c=o;o=c.message,a=a!=null?a:c.name}let l=typeof a<\"u\"?`${a}: ${o}`:o;n.reportWarning(0,l)};try{await i(n)}catch(o){n.reportExceptionOnce(o)}finally{await n.finalize(),process.emitWarning=s}return n}hasErrors(){return this.errors.length>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){this.cacheHitCount+=1}reportCacheMiss(t,i){this.lastCacheMiss=t,this.cacheMissCount+=1,typeof i<\"u\"&&!this.configuration.get(\"preferAggregateCacheInfo\")&&this.reportInfo(13,i)}startSectionSync({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}async startSectionPromise({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return await s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}startTimerImpl(t,i,n){return{cb:typeof i==\"function\"?i:n,reportHeader:()=>{this.reportInfo(null,`\\u250C ${t}`),this.indent+=1,RB!==null&&!this.json&&this.includeInfos&&this.stdout.write(RB.start(t))},reportFooter:a=>{if(this.indent-=1,RB!==null&&!this.json&&this.includeInfos){this.stdout.write(RB.end(t));for(let[l,c]of this.errors)this.reportErrorImpl(l,c)}this.configuration.get(\"enableTimers\")&&a>200?this.reportInfo(null,`\\u2514 Completed in ${$e(this.configuration,a,Ue.DURATION)}`):this.reportInfo(null,\"\\u2514 Completed\")},skipIfEmpty:(typeof i==\"function\"?{}:i).skipIfEmpty}}startTimerSync(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionSync(o,s)}async startTimerPromise(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionPromise(o,s)}async startCacheReport(t){let i=this.configuration.get(\"preferAggregateCacheInfo\")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await t()}catch(n){throw this.reportExceptionOnce(n),n}finally{i!==null&&this.reportCacheChanges(i)}}reportSeparator(){this.indent===0?this.writeLineWithForgettableReset(\"\"):this.reportInfo(null,\"\")}reportInfo(t,i){if(!this.includeInfos)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\",o=`${this.formatPrefix(s,\"blueBright\")}${i}`;if(this.json)this.reportJson({type:\"info\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i});else if(this.forgettableNames.has(t))if(this.forgettableLines.push(o),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(o,{truncate:!0});else this.writeLineWithForgettableReset(o)}reportWarning(t,i){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"warning\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"yellowBright\")}${i}`)}reportError(t,i){this.errors.push([t,i]),this.reportErrorImpl(t,i)}reportErrorImpl(t,i){this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"error\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"redBright\")}${i}`,{truncate:!1})}reportProgress(t){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(t.hasProgress&&t.hasTitle)throw new Error(\"Unimplemented: Progress bars can't have both progress and titles.\");let i=!1,n=Promise.resolve().then(async()=>{let o={progress:t.hasProgress?0:void 0,title:t.hasTitle?\"\":void 0};this.progress.set(t,{definition:o,lastScaledSize:t.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:a,title:l}of t)i||o.progress===a&&o.title===l||(o.progress=a,o.title=l,this.refreshProgress());s()}),s=()=>{i||(i=!0,this.progress.delete(t),this.refreshProgress({delta:1}))};return{...n,stop:s}}reportJson(t){this.json&&this.writeLineWithForgettableReset(`${JSON.stringify(t)}`)}async finalize(){if(!this.includeFooter)return;let t=\"\";this.errors.length>0?t=\"Failed with errors\":this.warningCount>0?t=\"Done with warnings\":t=\"Done\";let i=$e(this.configuration,Date.now()-this.startTime,Ue.DURATION),n=this.configuration.get(\"enableTimers\")?`${t} in ${i}`:t;this.errors.length>0?this.reportError(0,n):this.warningCount>0?this.reportWarning(0,n):this.reportInfo(0,n)}writeLine(t,{truncate:i}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(t,{truncate:i})}\n`),this.writeProgress()}writeLineWithForgettableReset(t,{truncate:i}={}){this.forgettableLines=[],this.writeLine(t,{truncate:i})}writeLines(t,{truncate:i}={}){this.clearProgress({delta:t.length});for(let n of t)this.stdout.write(`${this.truncate(n,{truncate:i})}\n`);this.writeProgress()}reportCacheChanges({cacheHitCount:t,cacheMissCount:i}){let n=this.cacheHitCount-t,s=this.cacheMissCount-i;if(n===0&&s===0)return;let o=\"\";this.cacheHitCount>1?o+=`${this.cacheHitCount} packages were already cached`:this.cacheHitCount===1?o+=\" - one package was already cached\":o+=\"No packages were cached\",this.cacheHitCount>0?this.cacheMissCount>1?o+=`, ${this.cacheMissCount} had to be fetched`:this.cacheMissCount===1&&(o+=`, one had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`):this.cacheMissCount>1?o+=` - ${this.cacheMissCount} packages had to be fetched`:this.cacheMissCount===1&&(o+=` - one package had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`),this.reportInfo(13,o)}commit(){let t=this.uncommitted;this.uncommitted=new Set;for(let i of t)i.committed=!0,i.action()}clearProgress({delta:t=0,clear:i=!1}){this.progressStyle!==null&&this.progress.size+t>0&&(this.stdout.write(`\\x1B[${this.progress.size+t}A`),(t>0||i)&&this.stdout.write(\"\\x1B[0J\"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let t=Date.now();t-this.progressTime>a9&&(this.progressFrame=(this.progressFrame+1)%o9.length,this.progressTime=t);let i=o9[this.progressFrame];for(let n of this.progress.values()){let s=\"\";if(typeof n.lastScaledSize<\"u\"){let c=this.progressStyle.chars[0].repeat(n.lastScaledSize),u=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-n.lastScaledSize);s=` ${c}${u}`}let o=this.formatName(null),a=o?`${o}: `:\"\",l=n.definition.title?` ${n.definition.title}`:\"\";this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"blueBright\")} ${a}${i}${s}${l}\n`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},a9)}refreshProgress({delta:t=0,force:i=!1}={}){let n=!1,s=!1;if(i||this.progress.size===0)n=!0;else for(let o of this.progress.values()){let a=typeof o.definition.progress<\"u\"?Math.trunc(this.progressMaxScaledSize*o.definition.progress):void 0,l=o.lastScaledSize;o.lastScaledSize=a;let c=o.lastTitle;if(o.lastTitle=o.definition.title,a!==l||(s=c!==o.definition.title)){n=!0;break}}n&&(this.clearProgress({delta:t,clear:s}),this.writeProgress())}truncate(t,{truncate:i}={}){return this.progressStyle===null&&(i=!1),typeof i>\"u\"&&(i=this.configuration.get(\"preferTruncatedLines\")),i&&(t=(0,l9.default)(t,0,this.stdout.columns-1)),t}formatName(t){return c9(t,{configuration:this.configuration,json:this.json})}formatPrefix(t,i){return this.includePrefix?`${$e(this.configuration,\"\\u27A4\",i)} ${t}${this.formatIndent()}`:\"\"}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:this.json})}formatIndent(){return\"\\u2502 \".repeat(this.indent)}};var Tr=\"3.6.3\";var f9=(n=>(n.Yarn1=\"Yarn Classic\",n.Yarn2=\"Yarn\",n.Npm=\"npm\",n.Pnpm=\"pnpm\",n))(f9||{});async function el(r,e,t,i=[]){if(process.platform===\"win32\"){let n=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @\"${t}\" ${i.map(s=>`\"${s.replace('\"','\"\"')}\"`).join(\" \")} %*`;await O.writeFilePromise(x.format({dir:r,name:e,ext:\".cmd\"}),n)}await O.writeFilePromise(x.join(r,e),`#!/bin/sh\nexec \"${t}\" ${i.map(n=>`'${n.replace(/'/g,`'\"'\"'`)}'`).join(\" \")} \"$@\"\n`,{mode:493})}async function h9(r){let e=await ot.tryFind(r);if(e!=null&&e.packageManager){let i=vw(e.packageManager);if(i!=null&&i.name){let n=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[s]=i.reference.split(\".\");switch(i.name){case\"yarn\":return{packageManagerField:!0,packageManager:Number(s)===1?\"Yarn Classic\":\"Yarn\",reason:n};case\"npm\":return{packageManagerField:!0,packageManager:\"npm\",reason:n};case\"pnpm\":return{packageManagerField:!0,packageManager:\"pnpm\",reason:n}}}}let t;try{t=await O.readFilePromise(x.join(r,xt.lockfile),\"utf8\")}catch{}return t!==void 0?t.match(/^__metadata:$/m)?{packageManager:\"Yarn\",reason:'\"__metadata\" key found in yarn.lock'}:{packageManager:\"Yarn Classic\",reason:'\"__metadata\" key not found in yarn.lock, must be a Yarn classic lockfile'}:O.existsSync(x.join(r,\"package-lock.json\"))?{packageManager:\"npm\",reason:`found npm's \"package-lock.json\" lockfile`}:O.existsSync(x.join(r,\"pnpm-lock.yaml\"))?{packageManager:\"pnpm\",reason:`found pnpm's \"pnpm-lock.yaml\" lockfile`}:null}async function FC({project:r,locator:e,binFolder:t,ignoreCorepack:i,lifecycleScript:n}){var c,u;let s={};for(let[g,f]of Object.entries(process.env))typeof f<\"u\"&&(s[g.toLowerCase()!==\"path\"?g:\"PATH\"]=f);let o=K.fromPortablePath(t);s.BERRY_BIN_FOLDER=K.fromPortablePath(o);let a=process.env.COREPACK_ROOT&&!i?K.join(process.env.COREPACK_ROOT,\"dist/yarn.js\"):process.argv[1];if(await Promise.all([el(t,\"node\",process.execPath),...Tr!==null?[el(t,\"run\",process.execPath,[a,\"run\"]),el(t,\"yarn\",process.execPath,[a]),el(t,\"yarnpkg\",process.execPath,[a]),el(t,\"node-gyp\",process.execPath,[a,\"run\",\"--top-level\",\"node-gyp\"])]:[]]),r&&(s.INIT_CWD=K.fromPortablePath(r.configuration.startingCwd),s.PROJECT_CWD=K.fromPortablePath(r.cwd)),s.PATH=s.PATH?`${o}${K.delimiter}${s.PATH}`:`${o}`,s.npm_execpath=`${o}${K.sep}yarn`,s.npm_node_execpath=`${o}${K.sep}node`,e){if(!r)throw new Error(\"Assertion failed: Missing project\");let g=r.tryWorkspaceByLocator(e),f=g?(c=g.manifest.version)!=null?c:\"\":(u=r.storedPackages.get(e.locatorHash).version)!=null?u:\"\";s.npm_package_name=Mt(e),s.npm_package_version=f;let h;if(g)h=g.cwd;else{let p=r.storedPackages.get(e.locatorHash);if(!p)throw new Error(`Package for ${mt(r.configuration,e)} not found in the project`);let C=r.configuration.getLinkers(),y={project:r,report:new Ge({stdout:new tl.PassThrough,configuration:r.configuration})},B=C.find(v=>v.supportsPackage(p,y));if(!B)throw new Error(`The package ${mt(r.configuration,p)} isn't supported by any of the available linkers`);h=await B.findPackageLocation(p,y)}s.npm_package_json=K.fromPortablePath(x.join(h,xt.manifest))}let l=Tr!==null?`yarn/${Tr}`:`yarn/${mf(\"@yarnpkg/core\").version}-core`;return s.npm_config_user_agent=`${l} npm/? node/${process.version} ${process.platform} ${process.arch}`,n&&(s.npm_lifecycle_event=n),r&&await r.configuration.triggerHook(g=>g.setupScriptEnvironment,r,s,async(g,f,h)=>await el(t,Jr(g),f,h)),s}var mRe=2,ERe=(0,g9.default)(mRe);async function IRe(r,e,{configuration:t,report:i,workspace:n=null,locator:s=null}){await ERe(async()=>{await O.mktempPromise(async o=>{let a=x.join(o,\"pack.log\"),l=null,{stdout:c,stderr:u}=t.getSubprocessStreams(a,{prefix:K.fromPortablePath(r),report:i}),g=s&&qo(s)?nC(s):s,f=g?Es(g):\"an external project\";c.write(`Packing ${f} from sources\n`);let h=await h9(r),p;h!==null?(c.write(`Using ${h.packageManager} for bootstrap. Reason: ${h.reason}\n\n`),p=h.packageManager):(c.write(`No package manager configuration detected; defaulting to Yarn\n\n`),p=\"Yarn\");let C=p===\"Yarn\"&&!(h!=null&&h.packageManagerField);await O.mktempPromise(async y=>{let B=await FC({binFolder:y,ignoreCorepack:C}),D=new Map([[\"Yarn Classic\",async()=>{let H=n!==null?[\"workspace\",n]:[],j=x.join(r,xt.manifest),$=await O.readFilePromise(j),V=await oo(process.execPath,[process.argv[1],\"set\",\"version\",\"classic\",\"--only-if-needed\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(V.code!==0)return V.code;await O.writeFilePromise(j,$),await O.appendFilePromise(x.join(r,\".npmignore\"),`/.yarn\n`),c.write(`\n`),delete B.NODE_ENV;let W=await oo(\"yarn\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(W.code!==0)return W.code;c.write(`\n`);let _=await oo(\"yarn\",[...H,\"pack\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return _.code!==0?_.code:0}],[\"Yarn\",async()=>{let H=n!==null?[\"workspace\",n]:[];B.YARN_ENABLE_INLINE_BUILDS=\"1\";let j=x.join(r,xt.lockfile);await O.existsPromise(j)||await O.writeFilePromise(j,\"\");let $=await oo(\"yarn\",[...H,\"pack\",\"--install-if-needed\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return $.code!==0?$.code:0}],[\"npm\",async()=>{if(n!==null){let Ae=new tl.PassThrough,ge=Cf(Ae);Ae.pipe(c,{end:!1});let re=await oo(\"npm\",[\"--version\"],{cwd:r,env:B,stdin:l,stdout:Ae,stderr:u,end:0});if(Ae.end(),re.code!==0)return c.end(),u.end(),re.code;let M=(await ge).toString().trim();if(!kc(M,\">=7.x\")){let F=Jo(null,\"npm\"),ue=_t(F,M),pe=_t(F,\">=7.x\");throw new Error(`Workspaces aren't supported by ${tr(t,ue)}; please upgrade to ${tr(t,pe)} (npm has been detected as the primary package manager for ${$e(t,r,Ue.PATH)})`)}}let H=n!==null?[\"--workspace\",n]:[];delete B.npm_config_user_agent,delete B.npm_config_production,delete B.NPM_CONFIG_PRODUCTION,delete B.NODE_ENV;let j=await oo(\"npm\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(j.code!==0)return j.code;let $=new tl.PassThrough,V=Cf($);$.pipe(c);let W=await oo(\"npm\",[\"pack\",\"--silent\",...H],{cwd:r,env:B,stdin:l,stdout:$,stderr:u});if(W.code!==0)return W.code;let _=(await V).toString().trim().replace(/^.*\\n/s,\"\"),A=x.resolve(r,K.toPortablePath(_));return await O.renamePromise(A,e),0}]]).get(p);if(typeof D>\"u\")throw new Error(\"Assertion failed: Unsupported workflow\");let T=await D();if(!(T===0||typeof T>\"u\"))throw O.detachTemp(o),new at(58,`Packing the package failed (exit code ${T}, logs can be found here: ${$e(t,a,Ue.PATH)})`)})})})}async function yRe(r,e,{project:t}){let i=t.tryWorkspaceByLocator(r);if(i!==null)return WR(i,e);let n=t.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t.configuration,r)} not found in the project`);return await Kn.openPromise(async s=>{let o=t.configuration,a=t.configuration.getLinkers(),l={project:t,report:new Ge({stdout:new tl.PassThrough,configuration:o})},c=a.find(h=>h.supportsPackage(n,l));if(!c)throw new Error(`The package ${mt(t.configuration,n)} isn't supported by any of the available linkers`);let u=await c.findPackageLocation(n,l),g=new qt(u,{baseFs:s});return(await ot.find(Me.dot,{baseFs:g})).scripts.has(e)},{libzip:await an()})}async function TB(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{manifest:c,env:u,cwd:g}=await p9(r,{project:n,binFolder:l,cwd:i,lifecycleScript:e}),f=c.scripts.get(e);if(typeof f>\"u\")return 1;let h=async()=>await xB(f,t,{cwd:g,env:u,stdin:s,stdout:o,stderr:a});return await(await n.configuration.reduceHook(C=>C.wrapScriptExecution,h,n,r,e,{script:f,args:t,cwd:g,env:u,stdin:s,stdout:o,stderr:a}))()})}async function JR(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{env:c,cwd:u}=await p9(r,{project:n,binFolder:l,cwd:i});return await xB(e,t,{cwd:u,env:c,stdin:s,stdout:o,stderr:a})})}async function wRe(r,{binFolder:e,cwd:t,lifecycleScript:i}){let n=await FC({project:r.project,locator:r.anchoredLocator,binFolder:e,lifecycleScript:i});return await VR(e,await m9(r)),typeof t>\"u\"&&(t=x.dirname(await O.realpathPromise(x.join(r.cwd,\"package.json\")))),{manifest:r.manifest,binFolder:e,env:n,cwd:t}}async function p9(r,{project:e,binFolder:t,cwd:i,lifecycleScript:n}){let s=e.tryWorkspaceByLocator(r);if(s!==null)return wRe(s,{binFolder:t,cwd:i,lifecycleScript:n});let o=e.storedPackages.get(r.locatorHash);if(!o)throw new Error(`Package for ${mt(e.configuration,r)} not found in the project`);return await Kn.openPromise(async a=>{let l=e.configuration,c=e.configuration.getLinkers(),u={project:e,report:new Ge({stdout:new tl.PassThrough,configuration:l})},g=c.find(y=>y.supportsPackage(o,u));if(!g)throw new Error(`The package ${mt(e.configuration,o)} isn't supported by any of the available linkers`);let f=await FC({project:e,locator:r,binFolder:t,lifecycleScript:n});await VR(t,await LB(r,{project:e}));let h=await g.findPackageLocation(o,u),p=new qt(h,{baseFs:a}),C=await ot.find(Me.dot,{baseFs:p});return typeof i>\"u\"&&(i=h),{manifest:C,binFolder:t,env:f,cwd:i}},{libzip:await an()})}async function d9(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o}){return await TB(r.anchoredLocator,e,t,{cwd:i,project:r.project,stdin:n,stdout:s,stderr:o})}function WR(r,e){return r.manifest.scripts.has(e)}async function C9(r,e,{cwd:t,report:i}){let{configuration:n}=r.project,s=null;await O.mktempPromise(async o=>{let a=x.join(o,`${e}.log`),l=`# This file contains the result of Yarn calling the \"${e}\" lifecycle script inside a workspace (\"${K.fromPortablePath(r.cwd)}\")\n`,{stdout:c,stderr:u}=n.getSubprocessStreams(a,{report:i,prefix:mt(n,r.anchoredLocator),header:l});i.reportInfo(36,`Calling the \"${e}\" lifecycle script`);let g=await d9(r,e,[],{cwd:t,stdin:s,stdout:c,stderr:u});if(c.end(),u.end(),g!==0)throw O.detachTemp(o),new at(36,`${(0,u9.default)(e)} script failed (exit code ${$e(n,g,Ue.NUMBER)}, logs can be found here: ${$e(n,a,Ue.PATH)}); run ${$e(n,`yarn ${e}`,Ue.CODE)} to investigate`)})}async function BRe(r,e,t){WR(r,e)&&await C9(r,e,t)}function zR(r){let e=x.extname(r);if(e.match(/\\.[cm]?[jt]sx?$/))return!0;if(e===\".exe\"||e===\".bin\")return!1;let t=Buffer.alloc(4),i;try{i=O.openSync(r,\"r\")}catch{return!0}try{O.readSync(i,t,0,t.length,0)}finally{O.closeSync(i)}let n=t.readUint32BE();return!(n===3405691582||n===3489328638||n===2135247942||(n&4294901760)===1297743872)}async function LB(r,{project:e}){let t=e.configuration,i=new Map,n=e.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t,r)} not found in the project`);let s=new tl.Writable,o=t.getLinkers(),a={project:e,report:new Ge({configuration:t,stdout:s})},l=new Set([r.locatorHash]);for(let u of n.dependencies.values()){let g=e.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(`Assertion failed: The resolution (${tr(t,u)}) should have been registered`);l.add(g)}let c=await Promise.all(Array.from(l,async u=>{let g=e.storedPackages.get(u);if(!g)throw new Error(`Assertion failed: The package (${u}) should have been registered`);if(g.bin.size===0)return Ho.skip;let f=o.find(p=>p.supportsPackage(g,a));if(!f)return Ho.skip;let h=null;try{h=await f.findPackageLocation(g,a)}catch(p){if(p.code===\"LOCATOR_NOT_INSTALLED\")return Ho.skip;throw p}return{dependency:g,packageLocation:h}}));for(let u of c){if(u===Ho.skip)continue;let{dependency:g,packageLocation:f}=u;for(let[h,p]of g.bin){let C=x.resolve(f,p);i.set(h,[g,K.fromPortablePath(C),zR(C)])}}return i}async function m9(r){return await LB(r.anchoredLocator,{project:r.project})}async function VR(r,e){await Promise.all(Array.from(e,([t,[,i,n]])=>n?el(r,Jr(t),process.execPath,[i]):el(r,Jr(t),i,[])))}async function E9(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a,nodeArgs:l=[],packageAccessibleBinaries:c}){c!=null||(c=await LB(r,{project:n}));let u=c.get(e);if(!u)throw new Error(`Binary not found (${e}) for ${mt(n.configuration,r)}`);return await O.mktempPromise(async g=>{let[,f]=u,h=await FC({project:n,locator:r,binFolder:g});await VR(h.BERRY_BIN_FOLDER,c);let p=zR(K.toPortablePath(f))?oo(process.execPath,[...l,f,...t],{cwd:i,env:h,stdin:s,stdout:o,stderr:a}):oo(f,t,{cwd:i,env:h,stdin:s,stdout:o,stderr:a}),C;try{C=await p}finally{await O.removePromise(h.BERRY_BIN_FOLDER)}return C.code})}async function bRe(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a}){return await E9(r.anchoredLocator,e,t,{project:r.project,cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a})}var mi={};ut(mi,{convertToZip:()=>ZNe,extractArchiveTo:()=>$Ne,makeArchiveFromDirectory:()=>XNe});var lZ=J(\"stream\"),cZ=Pe(iZ());var nZ=Pe(Jg()),sZ=J(\"worker_threads\");var hl=Symbol(\"kTaskInfo\"),L0=class{constructor(e){this.source=e;this.workers=[];this.limit=(0,nZ.default)(ek());this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let t=this.workers.pop();t?t.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new sZ.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,\"--unhandled-rejections=strict\"]});return e.on(\"message\",t=>{if(!e[hl])throw new Error(\"Assertion failed: Worker sent a result without having a task assigned\");e[hl].resolve(t),e[hl]=null,e.unref(),this.workers.push(e)}),e.on(\"error\",t=>{var i;(i=e[hl])==null||i.reject(t),e[hl]=null}),e.on(\"exit\",t=>{var i;t!==0&&((i=e[hl])==null||i.reject(new Error(`Worker exited with code ${t}`))),e[hl]=null}),e}run(e){return this.limit(()=>{var i;let t=(i=this.workers.pop())!=null?i:this.createWorker();return t.ref(),new Promise((n,s)=>{t[hl]={resolve:n,reject:s},t.postMessage(e)})})}};var uZ=Pe(aZ());async function XNe(r,{baseFs:e=new $t,prefixPath:t=Me.root,compressionLevel:i,inMemory:n=!1}={}){let s=await an(),o;if(n)o=new Wr(null,{libzip:s,level:i});else{let l=await O.mktempPromise(),c=x.join(l,\"archive.zip\");o=new Wr(c,{create:!0,libzip:s,level:i})}let a=x.resolve(Me.root,t);return await o.copyPromise(a,r,{baseFs:e,stableTime:!0,stableSort:!0}),o}var AZ;async function ZNe(r,e){let t=await O.mktempPromise(),i=x.join(t,\"archive.zip\");return AZ||(AZ=new L0((0,uZ.getContent)())),await AZ.run({tmpFile:i,tgz:r,opts:e}),new Wr(i,{libzip:await an(),level:e.compressionLevel})}async function*_Ne(r){let e=new cZ.default.Parse,t=new lZ.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on(\"entry\",i=>{t.write(i)}),e.on(\"error\",i=>{t.destroy(i)}),e.on(\"close\",()=>{t.destroyed||t.end()}),e.end(r);for await(let i of t){let n=i;yield n,n.resume()}}async function $Ne(r,e,{stripComponents:t=0,prefixPath:i=Me.dot}={}){var s,o;function n(a){if(a.path[0]===\"/\")return!0;let l=a.path.split(/\\//g);return!!(l.some(c=>c===\"..\")||l.length<=t)}for await(let a of _Ne(r)){if(n(a))continue;let l=x.normalize(K.toPortablePath(a.path)).replace(/\\/$/,\"\").split(/\\//g);if(l.length<=t)continue;let c=l.slice(t).join(\"/\"),u=x.join(i,c),g=420;switch((a.type===\"Directory\"||(((s=a.mode)!=null?s:0)&73)!==0)&&(g|=73),a.type){case\"Directory\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.mkdirSync(u,{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"OldFile\":case\"File\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.writeFileSync(u,await Cf(a),{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"SymbolicLink\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.symlinkSync(a.linkpath,u),(o=e.lutimesSync)==null||o.call(e,u,xr.SAFE_TIME,xr.SAFE_TIME);break}}return e}var es={};ut(es,{emitList:()=>eTe,emitTree:()=>CZ,treeNodeToJson:()=>dZ,treeNodeToTreeify:()=>pZ});var hZ=Pe(fZ());function pZ(r,{configuration:e}){let t={},i=(n,s)=>{let o=Array.isArray(n)?n.entries():Object.entries(n);for(let[a,{label:l,value:c,children:u}]of o){let g=[];typeof l<\"u\"&&g.push(Vy(e,l,2)),typeof c<\"u\"&&g.push($e(e,c[0],c[1])),g.length===0&&g.push(Vy(e,`${a}`,2));let f=g.join(\": \"),h=s[f]={};typeof u<\"u\"&&i(u,h)}};if(typeof r.children>\"u\")throw new Error(\"The root node must only contain children\");return i(r.children,t),t}function dZ(r){let e=t=>{var s;if(typeof t.children>\"u\"){if(typeof t.value>\"u\")throw new Error(\"Assertion failed: Expected a value to be set if the children are missing\");return Bc(t.value[0],t.value[1])}let i=Array.isArray(t.children)?t.children.entries():Object.entries((s=t.children)!=null?s:{}),n=Array.isArray(t.children)?[]:{};for(let[o,a]of i)n[o]=e(a);return typeof t.value>\"u\"?n:{value:Bc(t.value[0],t.value[1]),children:n}};return e(r)}function eTe(r,{configuration:e,stdout:t,json:i}){let n=r.map(s=>({value:s}));CZ({children:n},{configuration:e,stdout:t,json:i})}function CZ(r,{configuration:e,stdout:t,json:i,separators:n=0}){var o;if(i){let a=Array.isArray(r.children)?r.children.values():Object.values((o=r.children)!=null?o:{});for(let l of a)t.write(`${JSON.stringify(dZ(l))}\n`);return}let s=(0,hZ.asTree)(pZ(r,{configuration:e}),!1,!1);if(n>=1&&(s=s.replace(/^([├└]─)/gm,`\\u2502\n$1`).replace(/^│\\n/,\"\")),n>=2)for(let a=0;a<2;++a)s=s.replace(/^([│ ].{2}[├│ ].{2}[^\\n]+\\n)(([│ ]).{2}[├└].{2}[^\\n]*\\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3  \\u2502\n$2`).replace(/^│\\n/,\"\");if(n>=3)throw new Error(\"Only the first two levels are accepted by treeUtils.emitTree\");t.write(s)}var mZ=J(\"crypto\"),kN=Pe(J(\"fs\"));var tTe=8,Rt=class{constructor(e,{configuration:t,immutable:i=t.get(\"enableImmutableCache\"),check:n=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,mZ.randomBytes)(8).toString(\"hex\")}.tmp`;this.configuration=t,this.cwd=e,this.immutable=i,this.check=n;let s=t.get(\"cacheKeyOverride\");if(s!==null)this.cacheKey=`${s}`;else{let o=t.get(\"compressionLevel\"),a=o!==Xl?`c${o}`:\"\";this.cacheKey=[tTe,a].join(\"\")}}static async find(e,{immutable:t,check:i}={}){let n=new Rt(e.get(\"cacheFolder\"),{configuration:e,immutable:t,check:i});return await n.setup(),n}get mirrorCwd(){if(!this.configuration.get(\"enableMirror\"))return null;let e=`${this.configuration.get(\"globalFolder\")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${xf(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,t){let n=rTe(t).slice(0,10);return`${xf(e)}-${n}.zip`}getLocatorPath(e,t,i={}){var s;return this.mirrorCwd===null||((s=i.unstablePackages)==null?void 0:s.has(e.locatorHash))?x.resolve(this.cwd,this.getVersionFilename(e)):t===null||DN(t)!==this.cacheKey?null:x.resolve(this.cwd,this.getChecksumFilename(e,t))}getLocatorMirrorPath(e){let t=this.mirrorCwd;return t!==null?x.resolve(t,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get(\"enableGlobalCache\"))if(this.immutable){if(!await O.existsPromise(this.cwd))throw new at(56,\"Cache path does not exist.\")}else{await O.mkdirPromise(this.cwd,{recursive:!0});let e=x.resolve(this.cwd,\".gitignore\");await O.changeFilePromise(e,`/.gitignore\n*.flock\n*.tmp\n`)}(this.mirrorCwd||!this.immutable)&&await O.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,t,{onHit:i,onMiss:n,loader:s,...o}){var W;let a=this.getLocatorMirrorPath(e),l=new $t,c=()=>{let _=new Wr(null,{libzip:D}),A=x.join(Me.root,qD(e));return _.mkdirSync(A,{recursive:!0}),_.writeJsonSync(x.join(A,xt.manifest),{name:Mt(e),mocked:!0}),_},u=async(_,A=null)=>{var ge;if(A===null&&((ge=o.unstablePackages)==null?void 0:ge.has(e.locatorHash)))return{isValid:!0,hash:null};let Ae=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(_)}`:t;if(A!==null){let re=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(A)}`:t;if(Ae!==re)throw new at(18,\"The remote archive doesn't match the local checksum - has the local cache been corrupted?\")}if(t!==null&&Ae!==t){let re;switch(this.check?re=\"throw\":DN(t)!==DN(Ae)?re=\"update\":re=this.configuration.get(\"checksumBehavior\"),re){case\"ignore\":return{isValid:!0,hash:t};case\"update\":return{isValid:!0,hash:Ae};case\"reset\":return{isValid:!1,hash:t};default:case\"throw\":throw new at(18,\"The remote archive doesn't match the expected checksum\")}}return{isValid:!0,hash:Ae}},g=async _=>{if(!s)throw new Error(`Cache check required but no loader configured for ${mt(this.configuration,e)}`);let A=await s(),Ae=A.getRealPath();A.saveAndClose(),await O.chmodPromise(Ae,420);let ge=await u(_,Ae);if(!ge.isValid)throw new Error(\"Assertion failed: Expected a valid checksum\");return ge.hash},f=async()=>{if(a===null||!await O.existsPromise(a)){let _=await s(),A=_.getRealPath();return _.saveAndClose(),{source:\"loader\",path:A}}return{source:\"mirror\",path:a}},h=async()=>{if(!s)throw new Error(`Cache entry required but missing for ${mt(this.configuration,e)}`);if(this.immutable)throw new at(56,`Cache entry required but missing for ${mt(this.configuration,e)}`);let{path:_,source:A}=await f(),Ae=(await u(_)).hash,ge=this.getLocatorPath(e,Ae,o);if(!ge)throw new Error(\"Assertion failed: Expected the cache path to be available\");let re=[];A!==\"mirror\"&&a!==null&&re.push(async()=>{let F=`${a}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,a)}),(!o.mirrorWriteOnly||a===null)&&re.push(async()=>{let F=`${ge}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,ge)});let M=o.mirrorWriteOnly&&a!=null?a:ge;return await Promise.all(re.map(F=>F())),[!1,M,Ae]},p=async()=>{let A=(async()=>{var ue;let Ae=this.getLocatorPath(e,t,o),ge=Ae!==null?await l.existsPromise(Ae):!1,re=!!((ue=o.mockedPackages)!=null&&ue.has(e.locatorHash))&&(!this.check||!ge),M=re||ge,F=M?i:n;if(F&&F(),M){let pe=null,ke=Ae;if(!re)if(this.check)pe=await g(ke);else{let Fe=await u(ke);if(Fe.isValid)pe=Fe.hash;else return h()}return[re,ke,pe]}else return h()})();this.mutexes.set(e.locatorHash,A);try{return await A}finally{this.mutexes.delete(e.locatorHash)}};for(let _;_=this.mutexes.get(e.locatorHash);)await _;let[C,y,B]=await p();this.markedFiles.add(y);let v,D=await an(),T=C?()=>c():()=>new Wr(y,{baseFs:l,libzip:D,readOnly:!0}),H=new Sg(()=>Jx(()=>v=T(),_=>`Failed to open the cache entry for ${mt(this.configuration,e)}: ${_}`),x),j=new So(y,{baseFs:H,pathUtils:x}),$=()=>{v==null||v.discardAndClose()},V=(W=o.unstablePackages)!=null&&W.has(e.locatorHash)?null:B;return[j,$,V]}};function DN(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(0,e):null}function rTe(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(e+1):r}var M0=(t=>(t[t.SCRIPT=0]=\"SCRIPT\",t[t.SHELLCODE=1]=\"SHELLCODE\",t))(M0||{});var ra=class extends vi{constructor({configuration:t,stdout:i,suggestInstall:n=!0}){super();this.errorCount=0;Xd(this,{configuration:t}),this.configuration=t,this.stdout=i,this.suggestInstall=n}static async start(t,i){let n=new this(t);try{await i(n)}catch(s){n.reportExceptionOnce(s)}finally{await n.finalize()}return n}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){}reportCacheMiss(t){}startSectionSync(t,i){return i()}async startSectionPromise(t,i){return await i()}startTimerSync(t,i,n){return(typeof i==\"function\"?i:n)()}async startTimerPromise(t,i,n){return await(typeof i==\"function\"?i:n)()}async startCacheReport(t){return await t()}reportSeparator(){}reportInfo(t,i){}reportWarning(t,i){}reportError(t,i){this.errorCount+=1,this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} ${this.formatNameWithHyperlink(t)}: ${i}\n`)}reportProgress(t){return{...Promise.resolve().then(async()=>{for await(let{}of t);}),stop:()=>{}}}reportJson(t){}async finalize(){this.errorCount>0&&(this.stdout.write(`\n`),this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} Errors happened when preparing the environment required to run this command.\n`),this.suggestInstall&&this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} This might be caused by packages being missing from the lockfile, in which case running \"yarn install\" might help.\n`))}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:!1})}};var X0=J(\"crypto\");function rA(){}rA.prototype={diff:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=i.callback;typeof i==\"function\"&&(n=i,i={}),this.options=i;var s=this;function o(C){return n?(setTimeout(function(){n(void 0,C)},0),!0):C}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e)),t=this.removeEmpty(this.tokenize(t));var a=t.length,l=e.length,c=1,u=a+l;i.maxEditLength&&(u=Math.min(u,i.maxEditLength));var g=[{newPos:-1,components:[]}],f=this.extractCommon(g[0],t,e,0);if(g[0].newPos+1>=a&&f+1>=l)return o([{value:this.join(t),count:t.length}]);function h(){for(var C=-1*c;C<=c;C+=2){var y=void 0,B=g[C-1],v=g[C+1],D=(v?v.newPos:0)-C;B&&(g[C-1]=void 0);var T=B&&B.newPos+1<a,H=v&&0<=D&&D<l;if(!T&&!H){g[C]=void 0;continue}if(!T||H&&B.newPos<v.newPos?(y=nTe(v),s.pushComponent(y.components,void 0,!0)):(y=B,y.newPos++,s.pushComponent(y.components,!0,void 0)),D=s.extractCommon(y,t,e,C),y.newPos+1>=a&&D+1>=l)return o(iTe(s,y.components,t,e,s.useLongestToken));g[C]=y}c++}if(n)(function C(){setTimeout(function(){if(c>u)return n();h()||C()},0)})();else for(;c<=u;){var p=h();if(p)return p}},pushComponent:function(e,t,i){var n=e[e.length-1];n&&n.added===t&&n.removed===i?e[e.length-1]={count:n.count+1,added:t,removed:i}:e.push({count:1,added:t,removed:i})},extractCommon:function(e,t,i,n){for(var s=t.length,o=i.length,a=e.newPos,l=a-n,c=0;a+1<s&&l+1<o&&this.equals(t[a+1],i[l+1]);)a++,l++,c++;return c&&e.components.push({count:c}),e.newPos=a,l},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],i=0;i<e.length;i++)e[i]&&t.push(e[i]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(\"\")},join:function(e){return e.join(\"\")}};function iTe(r,e,t,i,n){for(var s=0,o=e.length,a=0,l=0;s<o;s++){var c=e[s];if(c.removed){if(c.value=r.join(i.slice(l,l+c.count)),l+=c.count,s&&e[s-1].added){var g=e[s-1];e[s-1]=e[s],e[s]=g}}else{if(!c.added&&n){var u=t.slice(a,a+c.count);u=u.map(function(h,p){var C=i[l+p];return C.length>h.length?C:h}),c.value=r.join(u)}else c.value=r.join(t.slice(a,a+c.count));a+=c.count,c.added||(l+=c.count)}}var f=e[o-1];return o>1&&typeof f.value==\"string\"&&(f.added||f.removed)&&r.equals(\"\",f.value)&&(e[o-2].value+=f.value,e.pop()),e}function nTe(r){return{newPos:r.newPos,components:r.components.slice(0)}}var Oat=new rA;var EZ=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,IZ=/\\S/,yZ=new rA;yZ.equals=function(r,e){return this.options.ignoreCase&&(r=r.toLowerCase(),e=e.toLowerCase()),r===e||this.options.ignoreWhitespace&&!IZ.test(r)&&!IZ.test(e)};yZ.tokenize=function(r){for(var e=r.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),t=0;t<e.length-1;t++)!e[t+1]&&e[t+2]&&EZ.test(e[t])&&EZ.test(e[t+2])&&(e[t]+=e[t+2],e.splice(t+1,2),t--);return e};var LN=new rA;LN.tokenize=function(r){var e=[],t=r.split(/(\\n|\\r\\n)/);t[t.length-1]||t.pop();for(var i=0;i<t.length;i++){var n=t[i];i%2&&!this.options.newlineIsToken?e[e.length-1]+=n:(this.options.ignoreWhitespace&&(n=n.trim()),e.push(n))}return e};function sTe(r,e,t){return LN.diff(r,e,t)}var oTe=new rA;oTe.tokenize=function(r){return r.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var aTe=new rA;aTe.tokenize=function(r){return r.split(/([{}:;,]|\\s+)/)};function O0(r){return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?O0=function(e){return typeof e}:O0=function(e){return e&&typeof Symbol==\"function\"&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},O0(r)}function RN(r){return ATe(r)||lTe(r)||cTe(r)||uTe()}function ATe(r){if(Array.isArray(r))return FN(r)}function lTe(r){if(typeof Symbol<\"u\"&&Symbol.iterator in Object(r))return Array.from(r)}function cTe(r,e){if(!!r){if(typeof r==\"string\")return FN(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t===\"Object\"&&r.constructor&&(t=r.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(r);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return FN(r,e)}}function FN(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,i=new Array(e);t<e;t++)i[t]=r[t];return i}function uTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var gTe=Object.prototype.toString,ZC=new rA;ZC.useLongestToken=!0;ZC.tokenize=LN.tokenize;ZC.castInput=function(r){var e=this.options,t=e.undefinedReplacement,i=e.stringifyReplacer,n=i===void 0?function(s,o){return typeof o>\"u\"?t:o}:i;return typeof r==\"string\"?r:JSON.stringify(NN(r,null,null,n),n,\"  \")};ZC.equals=function(r,e){return rA.prototype.equals.call(ZC,r.replace(/,([\\r\\n])/g,\"$1\"),e.replace(/,([\\r\\n])/g,\"$1\"))};function NN(r,e,t,i,n){e=e||[],t=t||[],i&&(r=i(n,r));var s;for(s=0;s<e.length;s+=1)if(e[s]===r)return t[s];var o;if(gTe.call(r)===\"[object Array]\"){for(e.push(r),o=new Array(r.length),t.push(o),s=0;s<r.length;s+=1)o[s]=NN(r[s],e,t,i,n);return e.pop(),t.pop(),o}if(r&&r.toJSON&&(r=r.toJSON()),O0(r)===\"object\"&&r!==null){e.push(r),o={},t.push(o);var a=[],l;for(l in r)r.hasOwnProperty(l)&&a.push(l);for(a.sort(),s=0;s<a.length;s+=1)l=a[s],o[l]=NN(r[l],e,t,i,l);e.pop(),t.pop()}else o=r;return o}var TN=new rA;TN.tokenize=function(r){return r.slice()};TN.join=TN.removeEmpty=function(r){return r};function wZ(r,e,t,i,n,s,o){o||(o={}),typeof o.context>\"u\"&&(o.context=4);var a=sTe(t,i,o);if(!a)return;a.push({value:\"\",lines:[]});function l(B){return B.map(function(v){return\" \"+v})}for(var c=[],u=0,g=0,f=[],h=1,p=1,C=function(v){var D=a[v],T=D.lines||D.value.replace(/\\n$/,\"\").split(`\n`);if(D.lines=T,D.added||D.removed){var H;if(!u){var j=a[v-1];u=h,g=p,j&&(f=o.context>0?l(j.lines.slice(-o.context)):[],u-=f.length,g-=f.length)}(H=f).push.apply(H,RN(T.map(function(re){return(D.added?\"+\":\"-\")+re}))),D.added?p+=T.length:h+=T.length}else{if(u)if(T.length<=o.context*2&&v<a.length-2){var $;($=f).push.apply($,RN(l(T)))}else{var V,W=Math.min(T.length,o.context);(V=f).push.apply(V,RN(l(T.slice(0,W))));var _={oldStart:u,oldLines:h-u+W,newStart:g,newLines:p-g+W,lines:f};if(v>=a.length-2&&T.length<=o.context){var A=/\\n$/.test(t),Ae=/\\n$/.test(i),ge=T.length==0&&f.length>_.oldLines;!A&&ge&&t.length>0&&f.splice(_.oldLines,0,\"\\\\ No newline at end of file\"),(!A&&!ge||!Ae)&&f.push(\"\\\\ No newline at end of file\")}c.push(_),u=0,g=0,f=[]}h+=T.length,p+=T.length}},y=0;y<a.length;y++)C(y);return{oldFileName:r,newFileName:e,oldHeader:n,newHeader:s,hunks:c}}var Z0=Pe(x$()),_0=Pe(Jg()),F$=Pe(Xr()),zN=J(\"util\"),WN=Pe(J(\"v8\")),VN=Pe(J(\"zlib\"));var UOe=[[/^(git(?:\\+(?:https|ssh))?:\\/\\/.*(?:\\.git)?)#(.*)$/,(r,e,t,i)=>`${t}#commit=${i}`],[/^https:\\/\\/((?:[^/]+?)@)?codeload\\.github\\.com\\/([^/]+\\/[^/]+)\\/tar\\.gz\\/([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https:\\/\\/((?:[^/]+?)@)?github\\.com\\/([^/]+\\/[^/]+?)(?:\\.git)?#([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https?:\\/\\/[^/]+\\/(?:[^/]+\\/)*(?:@.+(?:\\/|(?:%2f)))?([^/]+)\\/(?:-|download)\\/\\1-[^/]+\\.tgz(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.pkg\\.github\\.com\\/download\\/(?:@[^/]+)\\/(?:[^/]+)\\/(?:[^/]+)\\/(?:[0-9a-f]+)(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.fontawesome\\.com\\/(?:@[^/]+)\\/([^/]+)\\/-\\/([^/]+)\\/\\1-\\2.tgz(?:#|$)/,r=>`npm:${r}`],[/^https?:\\/\\/[^/]+\\/.*\\/(@[^/]+)\\/([^/]+)\\/-\\/\\1\\/\\2-(?:[.\\d\\w-]+)\\.tgz(?:#|$)/,(r,e)=>xw({protocol:\"npm:\",source:null,selector:r,params:{__archiveUrl:e}})],[/^[^/]+\\.tgz#[0-9a-f]+$/,r=>`npm:${r}`]],W0=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:t}){let i=x.join(e.cwd,e.configuration.get(\"lockfileFilename\"));if(!O.existsSync(i))return;let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);if(Object.prototype.hasOwnProperty.call(s,\"__metadata\"))return;let o=this.resolutions=new Map;for(let a of Object.keys(s)){let l=aC(a);if(!l){t.reportWarning(14,`Failed to parse the string \"${a}\" into a proper descriptor`);continue}let c=so(l.range)?_t(l,`npm:${l.range}`):l,{version:u,resolved:g}=s[a];if(!g)continue;let f;for(let[p,C]of UOe){let y=g.match(p);if(y){f=C(u,...y);break}}if(!f){t.reportWarning(14,`${tr(e.configuration,c)}: Only some patterns can be imported from legacy lockfiles (not \"${g}\")`);continue}let h=c;try{let p=vf(c.range),C=aC(p.selector,!0);C&&(h=C)}catch{}o.set(c.descriptorHash,nn(h,f))}}supportsDescriptor(e,t){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!this.resolutions)throw new Error(\"Assertion failed: The resolution store should have been setup\");let n=this.resolutions.get(e.descriptorHash);if(!n)throw new Error(\"Assertion failed: The resolution should have been registered\");return await this.resolver.getCandidates(HD(n),t,i)}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}};var z0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return!!(t.project.storedResolutions.get(e.descriptorHash)||t.project.originalPackages.has(Sw(e).locatorHash))}supportsLocator(e,t){return!!(t.project.originalPackages.has(e.locatorHash)&&!t.project.lockfileNeedsRefresh)}shouldPersistResolution(e,t){throw new Error(\"The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){let n=i.project.originalPackages.get(Sw(e).locatorHash);if(n)return[n];let s=i.project.storedResolutions.get(e.descriptorHash);if(!s)throw new Error(\"Expected the resolution to have been successful - resolution not found\");if(n=i.project.originalPackages.get(s),!n)throw new Error(\"Expected the resolution to have been successful - package not found\");return[n]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.originalPackages.get(e.locatorHash);if(!i)throw new Error(\"The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache\");return i}};var V0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return this.resolver.supportsDescriptor(e,t)}supportsLocator(e,t){return this.resolver.supportsLocator(e,t)}shouldPersistResolution(e,t){return this.resolver.shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.resolver.bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async getSatisfying(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async resolve(e,t){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}};var ti=class extends vi{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,t){return t()}async startSectionPromise(e,t){return await t()}startTimerSync(e,t,i){return(typeof t==\"function\"?t:i)()}async startTimerPromise(e,t,i){return await(typeof t==\"function\"?t:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,t){}reportWarning(e,t){}reportError(e,t){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}async finalize(){}};var P$=Pe(OD());var Qh=class{constructor(e,{project:t}){this.workspacesCwds=new Set;this.dependencies=new Map;this.project=t,this.cwd=e}async setup(){var s;this.manifest=(s=await ot.tryFind(this.cwd))!=null?s:new ot,this.relativeCwd=x.relative(this.project.cwd,this.cwd)||Me.dot;let e=this.manifest.name?this.manifest.name:Jo(null,`${this.computeCandidateName()}-${rn(this.relativeCwd).substring(0,6)}`),t=this.manifest.version?this.manifest.version:\"0.0.0\";this.locator=nn(e,t),this.anchoredDescriptor=_t(this.locator,`${Yr.protocol}${this.relativeCwd}`),this.anchoredLocator=nn(this.locator,`${Yr.protocol}${this.relativeCwd}`);let i=this.manifest.workspaceDefinitions.map(({pattern:o})=>o);if(i.length===0)return;let n=await(0,P$.default)(i,{cwd:K.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:[\"**/node_modules\",\"**/.git\",\"**/.yarn\"]});n.sort(),await n.reduce(async(o,a)=>{let l=x.resolve(this.cwd,K.toPortablePath(a)),c=await O.existsPromise(x.join(l,\"package.json\"));await o,c&&this.workspacesCwds.add(l)},Promise.resolve())}accepts(e){var o;let t=e.indexOf(\":\"),i=t!==-1?e.slice(0,t+1):null,n=t!==-1?e.slice(t+1):e;if(i===Yr.protocol&&x.normalize(n)===this.relativeCwd||i===Yr.protocol&&(n===\"*\"||n===\"^\"||n===\"~\"))return!0;let s=so(n);return s?i===Yr.protocol?s.test((o=this.manifest.version)!=null?o:\"0.0.0\"):this.project.configuration.get(\"enableTransparentWorkspaces\")&&this.manifest.version!==null?s.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?\"root-workspace\":`${x.basename(this.cwd)}`||\"unnamed-workspace\"}getRecursiveWorkspaceDependencies({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of e)for(let o of n.manifest[s].values()){let a=this.project.tryWorkspaceByDescriptor(o);a===null||t.has(a)||(t.add(a),i(a))}};return i(this),t}getRecursiveWorkspaceDependents({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of this.project.workspaces)e.some(a=>[...s.manifest[a].values()].some(l=>{let c=this.project.tryWorkspaceByDescriptor(l);return c!==null&&oC(c.anchoredLocator,n.anchoredLocator)}))&&!t.has(s)&&(t.add(s),i(s))};return i(this),t}getRecursiveWorkspaceChildren(){let e=[];for(let t of this.workspacesCwds){let i=this.project.workspacesByCwd.get(t);i&&e.push(i,...i.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let t=x.join(this.cwd,ot.fileName),i=`${JSON.stringify(e,null,this.manifest.indent)}\n`;await O.changeFilePromise(t,i,{automaticNewlines:!0}),this.manifest.raw=e}};var D$=6,HOe=1,GOe=/ *, */g,k$=/\\/$/,YOe=32,jOe=(0,zN.promisify)(VN.default.gzip),qOe=(0,zN.promisify)(VN.default.gunzip),ts=(t=>(t.UpdateLockfile=\"update-lockfile\",t.SkipBuild=\"skip-build\",t))(ts||{}),JN={restoreInstallersCustomData:[\"installersCustomData\"],restoreResolutions:[\"accessibleLocators\",\"conditionalLocators\",\"disabledLocators\",\"optionalBuilds\",\"storedDescriptors\",\"storedResolutions\",\"storedPackages\",\"lockFileChecksum\"],restoreBuildState:[\"storedBuildState\"]},R$=r=>rn(`${HOe}`,r),je=class{constructor(e,{configuration:t}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.installersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=t,this.cwd=e}static async find(e,t){var p,C,y;if(!e.projectCwd)throw new Qe(`No project found in ${t}`);let i=e.projectCwd,n=t,s=null;for(;s!==e.projectCwd;){if(s=n,O.existsSync(x.join(s,xt.manifest))){i=s;break}n=x.dirname(s)}let o=new je(e.projectCwd,{configuration:e});(p=ye.telemetry)==null||p.reportProject(o.cwd),await o.setupResolutions(),await o.setupWorkspaces(),(C=ye.telemetry)==null||C.reportWorkspaceCount(o.workspaces.length),(y=ye.telemetry)==null||y.reportDependencyCount(o.workspaces.reduce((B,v)=>B+v.manifest.dependencies.size+v.manifest.devDependencies.size,0));let a=o.tryWorkspaceByCwd(i);if(a)return{project:o,workspace:a,locator:a.anchoredLocator};let l=await o.findLocatorForLocation(`${i}/`,{strict:!0});if(l)return{project:o,locator:l,workspace:null};let c=$e(e,o.cwd,Ue.PATH),u=$e(e,x.relative(o.cwd,i),Ue.PATH),g=`- If ${c} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,f=`- If ${c} is intended to be a project, it might be that you forgot to list ${u} in its workspace configuration.`,h=`- Finally, if ${c} is fine and you intend ${u} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new Qe(`The nearest package directory (${$e(e,i,Ue.PATH)}) doesn't seem to be part of the project declared in ${$e(e,o.cwd,Ue.PATH)}.\n\n${[g,f,h].join(`\n`)}`)}async setupResolutions(){var i;this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=this.configuration.get(\"defaultLanguageName\");if(O.existsSync(e)){let n=await O.readFilePromise(e,\"utf8\");this.lockFileChecksum=R$(n);let s=yi(n);if(s.__metadata){let o=s.__metadata.version,a=s.__metadata.cacheKey;this.lockfileNeedsRefresh=o<D$;for(let l of Object.keys(s)){if(l===\"__metadata\")continue;let c=s[l];if(typeof c.resolution>\"u\")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${l})`);let u=Dc(c.resolution,!0),g=new ot;g.load(c,{yamlCompatibilityMode:!0});let f=g.version,h=g.languageName||t,p=c.linkType.toUpperCase(),C=(i=c.conditions)!=null?i:null,y=g.dependencies,B=g.peerDependencies,v=g.dependenciesMeta,D=g.peerDependenciesMeta,T=g.bin;if(c.checksum!=null){let j=typeof a<\"u\"&&!c.checksum.includes(\"/\")?`${a}/${c.checksum}`:c.checksum;this.storedChecksums.set(u.locatorHash,j)}let H={...u,version:f,languageName:h,linkType:p,conditions:C,dependencies:y,peerDependencies:B,dependenciesMeta:v,peerDependenciesMeta:D,bin:T};this.originalPackages.set(H.locatorHash,H);for(let j of l.split(GOe)){let $=WA(j);this.storedDescriptors.set($.descriptorHash,$),this.storedResolutions.set($.descriptorHash,u.locatorHash)}}}}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,t=(0,_0.default)(4),i=async(n,s)=>{if(e.has(s))return n;e.add(s);let o=new Qh(s,{project:this});await t(()=>o.setup());let a=n.then(()=>{this.addWorkspace(o);let l=this.storedPackages.get(o.anchoredLocator.locatorHash);l&&(o.dependencies=l.dependencies)});return Array.from(o.workspacesCwds).reduce(i,a)};await i(Promise.resolve(),this.cwd)}addWorkspace(e){let t=this.workspacesByIdent.get(e.locator.identHash);if(typeof t<\"u\")throw new Error(`Duplicate workspace name ${Ai(this.configuration,e.locator)}: ${K.fromPortablePath(e.cwd)} conflicts with ${K.fromPortablePath(t.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.locator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){x.isAbsolute(e)||(e=x.resolve(this.cwd,e)),e=x.normalize(e).replace(/\\/+$/,\"\");let t=this.workspacesByCwd.get(e);return t||null}getWorkspaceByCwd(e){let t=this.tryWorkspaceByCwd(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByFilePath(e){let t=null;for(let i of this.workspaces)x.relative(i.cwd,e).startsWith(\"../\")||t&&t.cwd.length>=i.cwd.length||(t=i);return t||null}getWorkspaceByFilePath(e){let t=this.tryWorkspaceByFilePath(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByIdent(e){let t=this.workspacesByIdent.get(e.identHash);return typeof t>\"u\"?null:t}getWorkspaceByIdent(e){let t=this.tryWorkspaceByIdent(e);if(!t)throw new Error(`Workspace not found (${Ai(this.configuration,e)})`);return t}tryWorkspaceByDescriptor(e){let t=this.tryWorkspaceByIdent(e);return t===null||(JA(e)&&(e=iC(e)),!t.accepts(e.range))?null:t}getWorkspaceByDescriptor(e){let t=this.tryWorkspaceByDescriptor(e);if(t===null)throw new Error(`Workspace not found (${tr(this.configuration,e)})`);return t}tryWorkspaceByLocator(e){let t=this.tryWorkspaceByIdent(e);return t===null||(qo(e)&&(e=nC(e)),t.locator.locatorHash!==e.locatorHash&&t.anchoredLocator.locatorHash!==e.locatorHash)?null:t}getWorkspaceByLocator(e){let t=this.tryWorkspaceByLocator(e);if(!t)throw new Error(`Workspace not found (${mt(this.configuration,e)})`);return t}refreshWorkspaceDependencies(){for(let e of this.workspaces){let t=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!t)throw new Error(`Assertion failed: Expected workspace ${lC(this.configuration,e)} (${$e(this.configuration,x.join(e.cwd,xt.manifest),Ue.PATH)}) to have been resolved. Run \"yarn install\" to update the lockfile`);e.dependencies=new Map(t.dependencies)}}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if(\"descriptorHash\"in e){let t=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let i=new Set(this.storedResolutions.values());typeof t<\"u\"&&!i.has(t)&&this.deleteLocator(t)}if(\"locatorHash\"in e){this.deleteLocator(e.locatorHash);for(let[t,i]of this.storedResolutions)i===e.locatorHash&&this.deleteDescriptor(t)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),t=new Map;for(let[i,n]of this.storedResolutions.entries()){let s=t.get(n);s||t.set(n,s=new Set),s.add(i)}for(let i of this.originalPackages.values()){let n;try{n=e.shouldPersistResolution(i,{project:this,resolver:e})}catch{n=!1}if(!n){this.deleteLocator(i.locatorHash);let s=t.get(i.locatorHash);if(s){t.delete(i.locatorHash);for(let o of s)this.deleteDescriptor(o)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[t,i]of e.dependencies)JA(i)&&e.dependencies.set(t,iC(i))}getDependencyMeta(e,t){let i={},s=this.topLevelWorkspace.manifest.dependenciesMeta.get(Mt(e));if(!s)return i;let o=s.get(null);if(o&&Object.assign(i,o),t===null||!F$.default.valid(t))return i;for(let[a,l]of s)a!==null&&a===t&&Object.assign(i,l);return i}async findLocatorForLocation(e,{strict:t=!1}={}){let i=new ti,n=this.configuration.getLinkers(),s={project:this,report:i};for(let o of n){let a=await o.findPackageLocator(e,s);if(a){if(t&&(await o.findPackageLocation(a,s)).replace(k$,\"\")!==e.replace(k$,\"\"))continue;return a}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error(\"Workspaces must have been setup before calling this function\");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();let t=e.resolver||this.configuration.makeResolver(),i=new W0(t);await i.setup(this,{report:e.report});let n=e.lockfileOnly?[new V0(t)]:[i,t],s=new kf([new z0(t),...n]),o=this.configuration.makeFetcher(),a=e.lockfileOnly?{project:this,report:e.report,resolver:s}:{project:this,report:e.report,resolver:s,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:o,cacheOptions:{mirrorWriteOnly:!0}}},l=new Map,c=new Map,u=new Map,g=new Map,f=new Map,h=new Map,p=this.topLevelWorkspace.anchoredLocator,C=new Set,y=[],B=$D(),v=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(vi.progressViaTitle(),async W=>{let _=async M=>{let F=await df(async()=>await s.resolve(M,a),ke=>`${mt(this.configuration,M)}: ${ke}`);if(!oC(M,F))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${mt(this.configuration,M)} to ${mt(this.configuration,F)})`);g.set(F.locatorHash,F);let ue=this.configuration.normalizePackage(F);for(let[ke,Fe]of ue.dependencies){let Ne=await this.configuration.reduceHook(le=>le.reduceDependency,Fe,this,ue,Fe,{resolver:s,resolveOptions:a});if(!sC(Fe,Ne))throw new Error(\"Assertion failed: The descriptor ident cannot be changed through aliases\");let oe=s.bindDescriptor(Ne,M,a);ue.dependencies.set(ke,oe)}let pe=io([...ue.dependencies.values()].map(ke=>re(ke)));return y.push(pe),pe.catch(()=>{}),c.set(ue.locatorHash,ue),ue},A=async M=>{let F=f.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=Promise.resolve().then(()=>_(M));return f.set(M.locatorHash,ue),ue},Ae=async(M,F)=>{let ue=await re(F);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,ue.locatorHash),ue},ge=async M=>{W.setTitle(tr(this.configuration,M));let F=this.resolutionAliases.get(M.descriptorHash);if(typeof F<\"u\")return Ae(M,this.storedDescriptors.get(F));let ue=s.getResolutionDependencies(M,a),pe=new Map(await io(ue.map(async Ne=>{let oe=s.bindDescriptor(Ne,p,a),le=await re(oe);return C.add(le.locatorHash),[Ne.descriptorHash,le]}))),Fe=(await df(async()=>await s.getCandidates(M,pe,a),Ne=>`${tr(this.configuration,M)}: ${Ne}`))[0];if(typeof Fe>\"u\")throw new Error(`${tr(this.configuration,M)}: No candidates found`);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,Fe.locatorHash),A(Fe)},re=M=>{let F=h.get(M.descriptorHash);if(typeof F<\"u\")return F;l.set(M.descriptorHash,M);let ue=Promise.resolve().then(()=>ge(M));return h.set(M.descriptorHash,ue),ue};for(let M of this.workspaces){let F=M.anchoredDescriptor;y.push(re(F))}for(;y.length>0;){let M=[...y];y.length=0,await io(M)}});let D=new Set(this.resolutionAliases.values()),T=new Set(c.keys()),H=new Set,j=new Map;JOe({project:this,report:e.report,accessibleLocators:H,volatileDescriptors:D,optionalBuilds:T,peerRequirements:j,allDescriptors:l,allResolutions:u,allPackages:c});for(let W of C)T.delete(W);for(let W of D)l.delete(W),u.delete(W);let $=new Set,V=new Set;for(let W of c.values())W.conditions!=null&&(!T.has(W.locatorHash)||(kw(W,v)||(kw(W,B)&&e.report.reportWarningOnce(77,`${mt(this.configuration,W)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${$e(this.configuration,\"supportedArchitectures\",xi.SETTING)} setting`),V.add(W.locatorHash)),$.add(W.locatorHash)));this.storedResolutions=u,this.storedDescriptors=l,this.storedPackages=c,this.accessibleLocators=H,this.conditionalLocators=$,this.disabledLocators=V,this.originalPackages=g,this.optionalBuilds=T,this.peerRequirements=j,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:t,fetcher:i,mode:n}){let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,cacheOptions:s},l=Array.from(new Set(bn(this.storedResolutions.values(),[f=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");return Es(h)}])));n===\"update-lockfile\"&&(l=l.filter(f=>!this.storedChecksums.has(f)));let c=!1,u=vi.progressViaCounter(l.length);await t.reportProgress(u);let g=(0,_0.default)(YOe);if(await t.startCacheReport(async()=>{await io(l.map(f=>g(async()=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");if(qo(h))return;let p;try{p=await o.fetch(h,a)}catch(C){C.message=`${mt(this.configuration,h)}: ${C.message}`,t.reportExceptionOnce(C),c=C;return}p.checksum!=null?this.storedChecksums.set(h.locatorHash,p.checksum):this.storedChecksums.delete(h.locatorHash),p.releaseFs&&p.releaseFs()}).finally(()=>{u.tick()})))}),c)throw c}async linkEverything({cache:e,report:t,fetcher:i,mode:n}){var Ae,ge,re;let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,skipIntegrityCheck:!0,cacheOptions:s},l=this.configuration.getLinkers(),c={project:this,report:t},u=new Map(l.map(M=>{let F=M.makeInstaller(c),ue=F.getCustomDataKey(),pe=this.installersCustomData.get(ue);return typeof pe<\"u\"&&F.attachCustomData(pe),[M,F]})),g=new Map,f=new Map,h=new Map,p=new Map(await io([...this.accessibleLocators].map(async M=>{let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");return[M,await o.fetch(F,a)]}))),C=[];for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(typeof F>\"u\")throw new Error(\"Assertion failed: The locator should have been registered\");let ue=p.get(F.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The fetch result should have been registered\");let pe=[],ke=Ne=>{pe.push(Ne)},Fe=this.tryWorkspaceByLocator(F);if(Fe!==null){let Ne=[],{scripts:oe}=Fe.manifest;for(let Be of[\"preinstall\",\"install\",\"postinstall\"])oe.has(Be)&&Ne.push([0,Be]);try{for(let[Be,fe]of u)if(Be.supportsPackage(F,c)&&(await fe.installPackage(F,ue,{holdFetchResult:ke})).buildDirective!==null)throw new Error(\"Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core\")}finally{pe.length===0?(Ae=ue.releaseFs)==null||Ae.call(ue):C.push(io(pe).catch(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}let le=x.join(ue.packageFs.getRealPath(),ue.prefixPath);f.set(F.locatorHash,le),!qo(F)&&Ne.length>0&&h.set(F.locatorHash,{directives:Ne,buildLocations:[le]})}else{let Ne=l.find(Be=>Be.supportsPackage(F,c));if(!Ne)throw new at(12,`${mt(this.configuration,F)} isn't supported by any available linker`);let oe=u.get(Ne);if(!oe)throw new Error(\"Assertion failed: The installer should have been registered\");let le;try{le=await oe.installPackage(F,ue,{holdFetchResult:ke})}finally{pe.length===0?(ge=ue.releaseFs)==null||ge.call(ue):C.push(io(pe).then(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}g.set(F.locatorHash,Ne),f.set(F.locatorHash,le.packageLocation),le.buildDirective&&le.buildDirective.length>0&&le.packageLocation&&h.set(F.locatorHash,{directives:le.buildDirective,buildLocations:[le.packageLocation]})}}let y=new Map;for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");let ue=this.tryWorkspaceByLocator(F)!==null,pe=async(ke,Fe)=>{let Ne=f.get(F.locatorHash);if(typeof Ne>\"u\")throw new Error(`Assertion failed: The package (${mt(this.configuration,F)}) should have been registered`);let oe=[];for(let le of F.dependencies.values()){let Be=this.storedResolutions.get(le.descriptorHash);if(typeof Be>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,le)}, from ${mt(this.configuration,F)})should have been registered`);let fe=this.storedPackages.get(Be);if(typeof fe>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);let ae=this.tryWorkspaceByLocator(fe)===null?g.get(Be):null;if(typeof ae>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);ae===ke||ae===null?f.get(fe.locatorHash)!==null&&oe.push([le,fe]):!ue&&Ne!==null&&hf(y,Be).push(Ne)}Ne!==null&&await Fe.attachInternalDependencies(F,oe)};if(ue)for(let[ke,Fe]of u)ke.supportsPackage(F,c)&&await pe(ke,Fe);else{let ke=g.get(F.locatorHash);if(!ke)throw new Error(\"Assertion failed: The linker should have been found\");let Fe=u.get(ke);if(!Fe)throw new Error(\"Assertion failed: The installer should have been registered\");await pe(ke,Fe)}}for(let[M,F]of y){let ue=this.storedPackages.get(M);if(!ue)throw new Error(\"Assertion failed: The package should have been registered\");let pe=g.get(ue.locatorHash);if(!pe)throw new Error(\"Assertion failed: The linker should have been found\");let ke=u.get(pe);if(!ke)throw new Error(\"Assertion failed: The installer should have been registered\");await ke.attachExternalDependents(ue,F)}let B=new Map;for(let M of u.values()){let F=await M.finalizeInstall();for(let ue of(re=F==null?void 0:F.records)!=null?re:[])h.set(ue.locatorHash,{directives:ue.buildDirective,buildLocations:ue.buildLocations});typeof(F==null?void 0:F.customData)<\"u\"&&B.set(M.getCustomDataKey(),F.customData)}if(this.installersCustomData=B,await io(C),n===\"skip-build\")return;let v=new Set(this.storedPackages.keys()),D=new Set(h.keys());for(let M of D)v.delete(M);let T=(0,X0.createHash)(\"sha512\");T.update(process.versions.node),await this.configuration.triggerHook(M=>M.globalHashGeneration,this,M=>{T.update(\"\\0\"),T.update(M)});let H=T.digest(\"hex\"),j=new Map,$=M=>{let F=j.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=this.storedPackages.get(M.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");let pe=(0,X0.createHash)(\"sha512\");pe.update(M.locatorHash),j.set(M.locatorHash,\"<recursive>\");for(let ke of ue.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(typeof Fe>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);let Ne=this.storedPackages.get(Fe);if(typeof Ne>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");pe.update($(Ne))}return F=pe.digest(\"hex\"),j.set(M.locatorHash,F),F},V=(M,F)=>{let ue=(0,X0.createHash)(\"sha512\");ue.update(H),ue.update($(M));for(let pe of F)ue.update(pe);return ue.digest(\"hex\")},W=new Map,_=!1,A=M=>{let F=new Set([M.locatorHash]);for(let ue of F){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");for(let ke of pe.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(!Fe)throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);if(Fe!==M.locatorHash&&D.has(Fe))return!1;let Ne=this.storedPackages.get(Fe);if(!Ne)throw new Error(\"Assertion failed: The package should have been registered\");let oe=this.tryWorkspaceByLocator(Ne);if(oe){if(oe.anchoredLocator.locatorHash!==M.locatorHash&&D.has(oe.anchoredLocator.locatorHash))return!1;F.add(oe.anchoredLocator.locatorHash)}F.add(Fe)}}return!0};for(;D.size>0;){let M=D.size,F=[];for(let ue of D){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");if(!A(pe))continue;let ke=h.get(pe.locatorHash);if(!ke)throw new Error(\"Assertion failed: The build directive should have been registered\");let Fe=V(pe,ke.buildLocations);if(this.storedBuildState.get(pe.locatorHash)===Fe){W.set(pe.locatorHash,Fe),D.delete(ue);continue}_||(await this.persistInstallStateFile(),_=!0),this.storedBuildState.has(pe.locatorHash)?t.reportInfo(8,`${mt(this.configuration,pe)} must be rebuilt because its dependency tree changed`):t.reportInfo(7,`${mt(this.configuration,pe)} must be built because it never has been before or the last one failed`);let Ne=ke.buildLocations.map(async oe=>{if(!x.isAbsolute(oe))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${oe})`);for(let[le,Be]of ke.directives){let fe=`# This file contains the result of Yarn building a package (${Es(pe)})\n`;switch(le){case 0:fe+=`# Script name: ${Be}\n`;break;case 1:fe+=`# Script code: ${Be}\n`;break}let ae=null;if(!await O.mktempPromise(async ne=>{let Y=x.join(ne,\"build.log\"),{stdout:he,stderr:ie}=this.configuration.getSubprocessStreams(Y,{header:fe,prefix:mt(this.configuration,pe),report:t}),de;try{switch(le){case 0:de=await TB(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break;case 1:de=await JR(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break}}catch(Pt){ie.write(Pt.stack),de=1}if(he.end(),ie.end(),de===0)return!0;O.detachTemp(ne);let _e=`${mt(this.configuration,pe)} couldn't be built successfully (exit code ${$e(this.configuration,de,Ue.NUMBER)}, logs can be found here: ${$e(this.configuration,Y,Ue.PATH)})`;return this.optionalBuilds.has(pe.locatorHash)?(t.reportInfo(9,_e),!0):(t.reportError(9,_e),!1)}))return!1}return!0});F.push(...Ne,Promise.allSettled(Ne).then(oe=>{D.delete(ue),oe.every(le=>le.status===\"fulfilled\"&&le.value===!0)&&W.set(pe.locatorHash,Fe)}))}if(await io(F),M===D.size){let ue=Array.from(D).map(pe=>{let ke=this.storedPackages.get(pe);if(!ke)throw new Error(\"Assertion failed: The package should have been registered\");return mt(this.configuration,ke)}).join(\", \");t.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ue})`);break}}this.storedBuildState=W}async install(e){var a,l;let t=this.configuration.get(\"nodeLinker\");(a=ye.telemetry)==null||a.reportInstall(t),await e.report.startTimerPromise(\"Project validation\",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(c=>c.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.status=\"inactive\";let i=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),n=null;if(e.immutable)try{n=await O.readFilePromise(i,\"utf8\")}catch(c){throw c.code===\"ENOENT\"?new at(28,\"The lockfile would have been created by this install, which is explicitly forbidden.\"):c}await e.report.startTimerPromise(\"Resolution step\",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise(\"Post-resolution validation\",{skipIfEmpty:!0},async()=>{for(let[,c]of this.configuration.packageExtensions)for(let[,u]of c)for(let g of u)if(g.userProvided){let f=$e(this.configuration,g,Ue.PACKAGE_EXTENSION);switch(g.status){case\"inactive\":e.report.reportWarning(68,`${f}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case\"redundant\":e.report.reportWarning(69,`${f}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(n!==null){let c=Vl(n,this.generateLockfile());if(c!==n){let u=wZ(i,i,n,c,void 0,void 0,{maxEditLength:100});if(u){e.report.reportSeparator();for(let g of u.hunks){e.report.reportInfo(null,`@@ -${g.oldStart},${g.oldLines} +${g.newStart},${g.newLines} @@`);for(let f of g.lines)f.startsWith(\"+\")?e.report.reportError(28,$e(this.configuration,f,Ue.ADDED)):f.startsWith(\"-\")?e.report.reportError(28,$e(this.configuration,f,Ue.REMOVED)):e.report.reportInfo(null,$e(this.configuration,f,\"grey\"))}e.report.reportSeparator()}throw new at(28,\"The lockfile would have been modified by this install, which is explicitly forbidden.\")}}});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.userProvided&&g.status===\"active\"&&((l=ye.telemetry)==null||l.reportPackageExtension(Bc(g,Ue.PACKAGE_EXTENSION)));await e.report.startTimerPromise(\"Fetch step\",async()=>{await this.fetchEverything(e),(typeof e.persistProject>\"u\"||e.persistProject)&&e.mode!==\"update-lockfile\"&&await this.cacheCleanup(e)});let s=e.immutable?[...new Set(this.configuration.get(\"immutablePatterns\"))].sort():[],o=await Promise.all(s.map(async c=>Qw(c,{cwd:this.cwd})));(typeof e.persistProject>\"u\"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise(\"Link step\",async()=>{if(e.mode===\"update-lockfile\"){e.report.reportWarning(73,`Skipped due to ${$e(this.configuration,\"mode=update-lockfile\",Ue.CODE)}`);return}await this.linkEverything(e);let c=await Promise.all(s.map(async u=>Qw(u,{cwd:this.cwd})));for(let u=0;u<s.length;++u)o[u]!==c[u]&&e.report.reportError(64,`The checksum for ${s[u]} has been modified by this install, which is explicitly forbidden.`)}),await this.persistInstallStateFile(),await this.configuration.triggerHook(c=>c.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,s]of this.storedResolutions.entries()){let o=e.get(s);o||e.set(s,o=new Set),o.add(n)}let t={};t.__metadata={version:D$,cacheKey:void 0};for(let[n,s]of e.entries()){let o=this.originalPackages.get(n);if(!o)continue;let a=[];for(let f of s){let h=this.storedDescriptors.get(f);if(!h)throw new Error(\"Assertion failed: The descriptor should have been registered\");a.push(h)}let l=a.map(f=>Sn(f)).sort().join(\", \"),c=new ot;c.version=o.linkType===\"HARD\"?o.version:\"0.0.0-use.local\",c.languageName=o.languageName,c.dependencies=new Map(o.dependencies),c.peerDependencies=new Map(o.peerDependencies),c.dependenciesMeta=new Map(o.dependenciesMeta),c.peerDependenciesMeta=new Map(o.peerDependenciesMeta),c.bin=new Map(o.bin);let u,g=this.storedChecksums.get(o.locatorHash);if(typeof g<\"u\"){let f=g.indexOf(\"/\");if(f===-1)throw new Error(\"Assertion failed: Expected the checksum to reference its cache key\");let h=g.slice(0,f),p=g.slice(f+1);typeof t.__metadata.cacheKey>\"u\"&&(t.__metadata.cacheKey=h),h===t.__metadata.cacheKey?u=p:u=g}t[l]={...c.exportTo({},{compatibilityMode:!1}),linkType:o.linkType.toLowerCase(),resolution:Es(o),checksum:u,conditions:o.conditions||void 0}}return`${[`# This file is generated by running \"yarn install\" inside your project.\n`,`# Manual changes might be lost - proceed with caution!\n`].join(\"\")}\n`+ba(t)}async persistLockfile(){let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=\"\";try{t=await O.readFilePromise(e,\"utf8\")}catch{}let i=this.generateLockfile(),n=Vl(t,i);n!==t&&(await O.writeFilePromise(e,n),this.lockFileChecksum=R$(n),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let o of Object.values(JN))e.push(...o);let t=(0,Z0.default)(this,e),i=WN.default.serialize(t),n=rn(i);if(this.installStateChecksum===n)return;let s=this.configuration.get(\"installStatePath\");await O.mkdirPromise(x.dirname(s),{recursive:!0}),await O.writeFilePromise(s,await jOe(i)),this.installStateChecksum=n}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:t=!0,restoreBuildState:i=!0}={}){let n=this.configuration.get(\"installStatePath\"),s;try{let o=await qOe(await O.readFilePromise(n));s=WN.default.deserialize(o),this.installStateChecksum=rn(o)}catch{t&&await this.applyLightResolution();return}e&&typeof s.installersCustomData<\"u\"&&(this.installersCustomData=s.installersCustomData),i&&Object.assign(this,(0,Z0.default)(s,JN.restoreBuildState)),t&&(s.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,(0,Z0.default)(s,JN.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new ti}),await this.persistInstallStateFile()}async persist(){let e=(0,_0.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(t=>e(()=>t.persistManifest()))])}async cacheCleanup({cache:e,report:t}){if(this.configuration.get(\"enableGlobalCache\"))return;let i=new Set([\".gitignore\"]);if(!ZD(e.cwd,this.cwd)||!await O.existsPromise(e.cwd))return;let n=this.configuration.get(\"preferAggregateCacheInfo\"),s=0,o=null;for(let a of await O.readdirPromise(e.cwd)){if(i.has(a))continue;let l=x.resolve(e.cwd,a);e.markedFiles.has(l)||(o=a,e.immutable?t.reportError(56,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused and would be marked for deletion, but the cache is immutable`):(n?s+=1:t.reportInfo(19,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused - removing`),await O.removePromise(l)))}n&&s!==0&&t.reportInfo(19,s>1?`${s} packages appeared to be unused and were removed`:`${o} appeared to be unused and was removed`),e.markedFiles.clear()}};function JOe({project:r,allDescriptors:e,allResolutions:t,allPackages:i,accessibleLocators:n=new Set,optionalBuilds:s=new Set,peerRequirements:o=new Map,volatileDescriptors:a=new Set,report:l}){var V;let c=new Map,u=[],g=new Map,f=new Map,h=new Map,p=new Map,C=new Map,y=new Map(r.workspaces.map(W=>{let _=W.anchoredLocator.locatorHash,A=i.get(_);if(typeof A>\"u\")throw new Error(\"Assertion failed: The workspace should have an associated package\");return[_,rC(A)]})),B=()=>{let W=O.mktempSync(),_=x.join(W,\"stacktrace.log\"),A=String(u.length+1).length,Ae=u.map((ge,re)=>`${`${re+1}.`.padStart(A,\" \")} ${Es(ge)}\n`).join(\"\");throw O.writeFileSync(_,Ae),O.detachTemp(W),new at(45,`Encountered a stack overflow when resolving peer dependencies; cf ${K.fromPortablePath(_)}`)},v=W=>{let _=t.get(W.descriptorHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: The resolution should have been registered\");let A=i.get(_);if(!A)throw new Error(\"Assertion failed: The package could not be found\");return A},D=(W,_,A,{top:Ae,optional:ge})=>{u.length>1e3&&B(),u.push(_);let re=T(W,_,A,{top:Ae,optional:ge});return u.pop(),re},T=(W,_,A,{top:Ae,optional:ge})=>{if(n.has(_.locatorHash))return;n.add(_.locatorHash),ge||s.delete(_.locatorHash);let re=i.get(_.locatorHash);if(!re)throw new Error(`Assertion failed: The package (${mt(r.configuration,_)}) should have been registered`);let M=[],F=[],ue=[],pe=[],ke=[];for(let Ne of Array.from(re.dependencies.values())){if(re.peerDependencies.has(Ne.identHash)&&re.locatorHash!==Ae)continue;if(JA(Ne))throw new Error(\"Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch\");a.delete(Ne.descriptorHash);let oe=ge;if(!oe){let Y=re.dependenciesMeta.get(Mt(Ne));if(typeof Y<\"u\"){let he=Y.get(null);typeof he<\"u\"&&he.optional&&(oe=!0)}}let le=t.get(Ne.descriptorHash);if(!le)throw new Error(`Assertion failed: The resolution (${tr(r.configuration,Ne)}) should have been registered`);let Be=y.get(le)||i.get(le);if(!Be)throw new Error(`Assertion failed: The package (${le}, resolved from ${tr(r.configuration,Ne)}) should have been registered`);if(Be.peerDependencies.size===0){D(Ne,Be,new Map,{top:Ae,optional:oe});continue}let fe,ae,qe=new Set,ne;F.push(()=>{fe=GD(Ne,_.locatorHash),ae=YD(Be,_.locatorHash),re.dependencies.delete(Ne.identHash),re.dependencies.set(fe.identHash,fe),t.set(fe.descriptorHash,ae.locatorHash),e.set(fe.descriptorHash,fe),i.set(ae.locatorHash,ae),M.push([Be,fe,ae])}),ue.push(()=>{var Y;ne=new Map;for(let he of ae.peerDependencies.values()){let ie=re.dependencies.get(he.identHash);if(!ie&&sC(_,he)&&(W.identHash===_.identHash?ie=W:(ie=_t(_,W.range),e.set(ie.descriptorHash,ie),t.set(ie.descriptorHash,_.locatorHash),a.delete(ie.descriptorHash))),(!ie||ie.range===\"missing:\")&&ae.dependencies.has(he.identHash)){ae.peerDependencies.delete(he.identHash);continue}ie||(ie=_t(he,\"missing:\")),ae.dependencies.set(ie.identHash,ie),JA(ie)&&wc(h,ie.descriptorHash).add(ae.locatorHash),g.set(ie.identHash,ie),ie.range===\"missing:\"&&qe.add(ie.identHash),ne.set(he.identHash,(Y=A.get(he.identHash))!=null?Y:ae.locatorHash)}ae.dependencies=new Map(bn(ae.dependencies,([he,ie])=>Mt(ie)))}),pe.push(()=>{if(!i.has(ae.locatorHash))return;let Y=c.get(Be.locatorHash);typeof Y==\"number\"&&Y>=2&&B();let he=c.get(Be.locatorHash),ie=typeof he<\"u\"?he+1:1;c.set(Be.locatorHash,ie),D(fe,ae,ne,{top:Ae,optional:oe}),c.set(Be.locatorHash,ie-1)}),ke.push(()=>{let Y=re.dependencies.get(Ne.identHash);if(typeof Y>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to have been turned into a dependency\");let he=t.get(Y.descriptorHash);if(typeof he>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");if(wc(C,he).add(_.locatorHash),!!i.has(ae.locatorHash)){for(let ie of ae.peerDependencies.values()){let de=ne.get(ie.identHash);if(typeof de>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency ident to be registered\");hf(pf(p,de),Mt(ie)).push(ae.locatorHash)}for(let ie of qe)ae.dependencies.delete(ie)}})}for(let Ne of[...F,...ue])Ne();let Fe;do{Fe=!0;for(let[Ne,oe,le]of M){let Be=pf(f,Ne.locatorHash),fe=rn(...[...le.dependencies.values()].map(Y=>{let he=Y.range!==\"missing:\"?t.get(Y.descriptorHash):\"missing:\";if(typeof he>\"u\")throw new Error(`Assertion failed: Expected the resolution for ${tr(r.configuration,Y)} to have been registered`);return he===Ae?`${he} (top)`:he}),oe.identHash),ae=Be.get(fe);if(typeof ae>\"u\"){Be.set(fe,oe);continue}if(ae===oe)continue;i.delete(le.locatorHash),e.delete(oe.descriptorHash),t.delete(oe.descriptorHash),n.delete(le.locatorHash);let qe=h.get(oe.descriptorHash)||[],ne=[re.locatorHash,...qe];h.delete(oe.descriptorHash);for(let Y of ne){let he=i.get(Y);typeof he>\"u\"||(he.dependencies.get(oe.identHash).descriptorHash!==ae.descriptorHash&&(Fe=!1),he.dependencies.set(oe.identHash,ae))}}}while(!Fe);for(let Ne of[...pe,...ke])Ne()};for(let W of r.workspaces){let _=W.anchoredLocator;a.delete(W.anchoredDescriptor.descriptorHash),D(W.anchoredDescriptor,_,new Map,{top:_.locatorHash,optional:!1})}let H;(A=>(A[A.NotProvided=0]=\"NotProvided\",A[A.NotCompatible=1]=\"NotCompatible\"))(H||(H={}));let j=[];for(let[W,_]of C){let A=i.get(W);if(typeof A>\"u\")throw new Error(\"Assertion failed: Expected the root to be registered\");let Ae=p.get(W);if(!(typeof Ae>\"u\"))for(let ge of _){let re=i.get(ge);if(!(typeof re>\"u\"))for(let[M,F]of Ae){let ue=tn(M);if(re.peerDependencies.has(ue.identHash))continue;let pe=`p${rn(ge,M,W).slice(0,5)}`;o.set(pe,{subject:ge,requested:ue,rootRequester:W,allRequesters:F});let ke=A.dependencies.get(ue.identHash);if(typeof ke<\"u\"){let Fe=v(ke),Ne=(V=Fe.version)!=null?V:\"0.0.0\",oe=new Set;for(let Be of F){let fe=i.get(Be);if(typeof fe>\"u\")throw new Error(\"Assertion failed: Expected the link to be registered\");let ae=fe.peerDependencies.get(ue.identHash);if(typeof ae>\"u\")throw new Error(\"Assertion failed: Expected the ident to be registered\");oe.add(ae.range)}[...oe].every(Be=>{if(Be.startsWith(Yr.protocol)){if(!r.tryWorkspaceByLocator(Fe))return!1;Be=Be.slice(Yr.protocol.length),(Be===\"^\"||Be===\"~\")&&(Be=\"*\")}return kc(Ne,Be)})||j.push({type:1,subject:re,requested:ue,requester:A,version:Ne,hash:pe,requirementCount:F.length})}else{let Fe=A.peerDependenciesMeta.get(M);Fe!=null&&Fe.optional||j.push({type:0,subject:re,requested:ue,requester:A,hash:pe})}}}}let $=[W=>jD(W.subject),W=>Mt(W.requested),W=>`${W.type}`];l==null||l.startSectionSync({reportFooter:()=>{l.reportWarning(0,`Some peer dependencies are incorrectly met; run ${$e(r.configuration,\"yarn explain peer-requirements <hash>\",Ue.CODE)} for details, where ${$e(r.configuration,\"<hash>\",Ue.CODE)} is the six-letter p-prefixed code`)},skipIfEmpty:!0},()=>{for(let W of bn(j,$))switch(W.type){case 0:l.reportWarning(2,`${mt(r.configuration,W.subject)} doesn't provide ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}), requested by ${Ai(r.configuration,W.requester)}`);break;case 1:{let _=W.requirementCount>1?\"and some of its descendants request\":\"requests\";l.reportWarning(60,`${mt(r.configuration,W.subject)} provides ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}) with version ${AC(r.configuration,W.version)}, which doesn't satisfy what ${Ai(r.configuration,W.requester)} ${_}`)}break}})}var Sh=class{constructor(e,t){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.configuration=e;let i=this.getRegistryPath();this.isNew=!O.existsSync(i),this.sendReport(t),this.startBuffer()}reportVersion(e){this.reportValue(\"version\",e.replace(/-git\\..*/,\"-git\"))}reportCommandName(e){this.reportValue(\"commandName\",e||\"<none>\")}reportPluginName(e){this.reportValue(\"pluginName\",e)}reportProject(e){this.reportEnumerator(\"projectCount\",e)}reportInstall(e){this.reportHit(\"installCount\",e)}reportPackageExtension(e){this.reportValue(\"packageExtension\",e)}reportWorkspaceCount(e){this.reportValue(\"workspaceCount\",String(e))}reportDependencyCount(e){this.reportValue(\"dependencyCount\",String(e))}reportValue(e,t){wc(this.values,e).add(t)}reportEnumerator(e,t){wc(this.enumerators,e).add(rn(t))}reportHit(e,t=\"*\"){let i=pf(this.hits,e),n=Ta(i,t,()=>0);i.set(t,n+1)}getRegistryPath(){let e=this.configuration.get(\"globalFolder\");return x.join(e,\"telemetry.json\")}sendReport(e){var u,g,f;let t=this.getRegistryPath(),i;try{i=O.readJsonSync(t)}catch{i={}}let n=Date.now(),s=this.configuration.get(\"telemetryInterval\")*24*60*60*1e3,a=((u=i.lastUpdate)!=null?u:n+s+Math.floor(s*Math.random()))+s;if(a>n&&i.lastUpdate!=null)return;try{O.mkdirSync(x.dirname(t),{recursive:!0}),O.writeJsonSync(t,{lastUpdate:n})}catch{return}if(a>n||!i.blocks)return;let l=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,c=h=>kR(l,h,{configuration:this.configuration}).catch(()=>{});for(let[h,p]of Object.entries((g=i.blocks)!=null?g:{})){if(Object.keys(p).length===0)continue;let C=p;C.userId=h,C.reportType=\"primary\";for(let v of Object.keys((f=C.enumerators)!=null?f:{}))C.enumerators[v]=C.enumerators[v].length;c(C);let y=new Map,B=20;for(let[v,D]of Object.entries(C.values))D.length>0&&y.set(v,D.slice(0,B));for(;y.size>0;){let v={};v.userId=h,v.reportType=\"secondary\",v.metrics={};for(let[D,T]of y)v.metrics[D]=T.shift(),T.length===0&&y.delete(D);c(v)}}}applyChanges(){var o,a,l,c,u,g,f,h,p;let e=this.getRegistryPath(),t;try{t=O.readJsonSync(e)}catch{t={}}let i=(o=this.configuration.get(\"telemetryUserId\"))!=null?o:\"*\",n=t.blocks=(a=t.blocks)!=null?a:{},s=n[i]=(l=n[i])!=null?l:{};for(let C of this.hits.keys()){let y=s.hits=(c=s.hits)!=null?c:{},B=y[C]=(u=y[C])!=null?u:{};for(let[v,D]of this.hits.get(C))B[v]=((g=B[v])!=null?g:0)+D}for(let C of[\"values\",\"enumerators\"])for(let y of this[C].keys()){let B=s[C]=(f=s[C])!=null?f:{};B[y]=[...new Set([...(h=B[y])!=null?h:[],...(p=this[C].get(y))!=null?p:[]])]}O.mkdirSync(x.dirname(e),{recursive:!0}),O.writeJsonSync(e,t)}startBuffer(){process.on(\"exit\",()=>{try{this.applyChanges()}catch{}})}};var XN=J(\"child_process\"),N$=Pe(Ac());var ZN=J(\"fs\");var vh=new Map([[\"constraints\",[[\"constraints\",\"query\"],[\"constraints\",\"source\"],[\"constraints\"]]],[\"exec\",[]],[\"interactive-tools\",[[\"search\"],[\"upgrade-interactive\"]]],[\"stage\",[[\"stage\"]]],[\"typescript\",[]],[\"version\",[[\"version\",\"apply\"],[\"version\",\"check\"],[\"version\"]]],[\"workspace-tools\",[[\"workspaces\",\"focus\"],[\"workspaces\",\"foreach\"]]]]);function WOe(r){let e=K.fromPortablePath(r);process.on(\"SIGINT\",()=>{}),e?(0,XN.execFileSync)(process.execPath,[e,...process.argv.slice(2)],{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}}):(0,XN.execFileSync)(e,process.argv.slice(2),{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}})}async function $0({binaryVersion:r,pluginConfiguration:e}){async function t(){let n=new Gn({binaryLabel:\"Yarn Package Manager\",binaryName:\"yarn\",binaryVersion:r});try{await i(n)}catch(s){process.stdout.write(n.error(s)),process.exitCode=1}}async function i(n){var C,y,B,v,D;let s=process.versions.node,o=\">=12 <14 || 14.2 - 14.9 || >14.10.0\";if(!Ie.parseOptionalBoolean(process.env.YARN_IGNORE_NODE)&&!vt.satisfiesWithPrereleases(s,o))throw new Qe(`This tool requires a Node version compatible with ${o} (got ${s}). Upgrade Node, or set \\`YARN_IGNORE_NODE=1\\` in your environment.`);let l=await ye.find(K.toPortablePath(process.cwd()),e,{usePath:!0,strict:!1}),c=l.get(\"yarnPath\"),u=l.get(\"ignorePath\"),g=l.get(\"ignoreCwd\"),f=K.toPortablePath(K.resolve(process.argv[1])),h=T=>O.readFilePromise(T).catch(()=>Buffer.of());if(!u&&!g&&await(async()=>c===f||Buffer.compare(...await Promise.all([h(c),h(f)]))===0)()){process.env.YARN_IGNORE_PATH=\"1\",process.env.YARN_IGNORE_CWD=\"1\",await i(n);return}else if(c!==null&&!u)if(!O.existsSync(c))process.stdout.write(n.error(new Error(`The \"yarn-path\" option has been set (in ${l.sources.get(\"yarnPath\")}), but the specified location doesn't exist (${c}).`))),process.exitCode=1;else try{WOe(c)}catch(T){process.exitCode=T.code||1}else{u&&delete process.env.YARN_IGNORE_PATH,l.get(\"enableTelemetry\")&&!N$.isCI&&process.stdout.isTTY&&(ye.telemetry=new Sh(l,\"puba9cdc10ec5790a2cf4969dd413a47270\")),(C=ye.telemetry)==null||C.reportVersion(r);for(let[$,V]of l.plugins.entries()){vh.has((B=(y=$.match(/^@yarnpkg\\/plugin-(.*)$/))==null?void 0:y[1])!=null?B:\"\")&&((v=ye.telemetry)==null||v.reportPluginName($));for(let W of V.commands||[])n.register(W)}let H=n.process(process.argv.slice(2));H.help||(D=ye.telemetry)==null||D.reportCommandName(H.path.join(\" \"));let j=H.cwd;if(typeof j<\"u\"&&!g){let $=(0,ZN.realpathSync)(process.cwd()),V=(0,ZN.realpathSync)(j);if($!==V){process.chdir(j),await t();return}}await n.runExit(H,{cwd:K.toPortablePath(process.cwd()),plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}}return t().catch(n=>{process.stdout.write(n.stack||n.message),process.exitCode=1}).finally(()=>O.rmtempPromise())}function T$(r){r.Command.Path=(...e)=>t=>{t.paths=t.paths||[],t.paths.push(e)};for(let e of[\"Array\",\"Boolean\",\"String\",\"Proxy\",\"Rest\",\"Counter\"])r.Command[e]=(...t)=>(i,n)=>{let s=r.Option[e](...t);Object.defineProperty(i,`__${n}`,{configurable:!1,enumerable:!0,get(){return s},set(o){this[n]=o}})};return r}var Nm={};ut(Nm,{BaseCommand:()=>De,WorkspaceRequiredError:()=>ct,getDynamicLibs:()=>zie,getPluginConfiguration:()=>Bb,main:()=>$0,openWorkspace:()=>Hh,pluginCommands:()=>vh});var De=class extends ve{constructor(){super(...arguments);this.cwd=z.String(\"--cwd\",{hidden:!0})}};var ct=class extends Qe{constructor(e,t){let i=x.relative(e,t),n=x.join(e,ot.fileName);super(`This command can only be run from within a workspace of your project (${i} isn't a workspace of ${n}).`)}};var $Ye=Pe(Xr());ls();var eje=Pe(VT()),zie=()=>new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",ud],[\"semver\",$Ye],[\"typanion\",hn],[\"yup\",eje]]);async function Hh(r,e){let{project:t,workspace:i}=await je.find(r,e);if(!i)throw new ct(t.cwd,e);return i}var P9e=Pe(Xr());ls();var D9e=Pe(VT());var CM={};ut(CM,{dedupeUtils:()=>Nb,default:()=>g4e,suggestUtils:()=>qh});var Wae=Pe(Ac());var Lse=Pe(Km());ls();var qh={};ut(qh,{Modifier:()=>HL,Strategy:()=>Db,Target:()=>Um,WorkspaceModifier:()=>Dse,applyModifier:()=>Rse,extractDescriptorFromPath:()=>GL,extractRangeModifier:()=>kse,fetchDescriptorFrom:()=>YL,findProjectDescriptors:()=>Tse,getModifier:()=>Hm,getSuggestedDescriptors:()=>Gm,makeWorkspaceDescriptor:()=>Nse,toWorkspaceModifier:()=>Fse});var UL=Pe(Xr()),mqe=\"workspace:\",Um=(i=>(i.REGULAR=\"dependencies\",i.DEVELOPMENT=\"devDependencies\",i.PEER=\"peerDependencies\",i))(Um||{}),HL=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"\",i))(HL||{}),Dse=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"*\",i))(Dse||{}),Db=(s=>(s.KEEP=\"keep\",s.REUSE=\"reuse\",s.PROJECT=\"project\",s.LATEST=\"latest\",s.CACHE=\"cache\",s))(Db||{});function Hm(r,e){return r.exact?\"\":r.caret?\"^\":r.tilde?\"~\":e.configuration.get(\"defaultSemverRangePrefix\")}var Eqe=/^([\\^~]?)[0-9]+(?:\\.[0-9]+){0,2}(?:-\\S+)?$/;function kse(r,{project:e}){let t=r.match(Eqe);return t?t[1]:e.configuration.get(\"defaultSemverRangePrefix\")}function Rse(r,e){let{protocol:t,source:i,params:n,selector:s}=P.parseRange(r.range);return UL.default.valid(s)&&(s=`${e}${r.range}`),P.makeDescriptor(r,P.makeRange({protocol:t,source:i,params:n,selector:s}))}function Fse(r){switch(r){case\"^\":return\"^\";case\"~\":return\"~\";case\"\":return\"*\";default:throw new Error(`Assertion failed: Unknown modifier: \"${r}\"`)}}function Nse(r,e){return P.makeDescriptor(r.anchoredDescriptor,`${mqe}${Fse(e)}`)}async function Tse(r,{project:e,target:t}){let i=new Map,n=s=>{let o=i.get(s.descriptorHash);return o||i.set(s.descriptorHash,o={descriptor:s,locators:[]}),o};for(let s of e.workspaces)if(t===\"peerDependencies\"){let o=s.manifest.peerDependencies.get(r.identHash);o!==void 0&&n(o).locators.push(s.anchoredLocator)}else{let o=s.manifest.dependencies.get(r.identHash),a=s.manifest.devDependencies.get(r.identHash);t===\"devDependencies\"?a!==void 0?n(a).locators.push(s.anchoredLocator):o!==void 0&&n(o).locators.push(s.anchoredLocator):o!==void 0?n(o).locators.push(s.anchoredLocator):a!==void 0&&n(a).locators.push(s.anchoredLocator)}return i}async function GL(r,{cwd:e,workspace:t}){return await Iqe(async i=>{x.isAbsolute(r)||(r=x.relative(t.cwd,x.resolve(e,r)),r.match(/^\\.{0,2}\\//)||(r=`./${r}`));let{project:n}=t,s=await YL(P.makeIdent(null,\"archive\"),r,{project:t.project,cache:i,workspace:t});if(!s)throw new Error(\"Assertion failed: The descriptor should have been found\");let o=new ti,a=n.configuration.makeResolver(),l=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:i,fetcher:l,report:o,resolver:a},u=a.bindDescriptor(s,t.anchoredLocator,c),g=P.convertDescriptorToLocator(u),f=await l.fetch(g,c),h=await ot.find(f.prefixPath,{baseFs:f.packageFs});if(!h.name)throw new Error(\"Target path doesn't have a name\");return P.makeDescriptor(h.name,r)})}async function Gm(r,{project:e,workspace:t,cache:i,target:n,modifier:s,strategies:o,maxResults:a=1/0}){if(!(a>=0))throw new Error(`Invalid maxResults (${a})`);if(r.range!==\"unknown\")return{suggestions:[{descriptor:r,name:`Use ${P.prettyDescriptor(e.configuration,r)}`,reason:\"(unambiguous explicit request)\"}],rejections:[]};let l=typeof t<\"u\"&&t!==null&&t.manifest[n].get(r.identHash)||null,c=[],u=[],g=async f=>{try{await f()}catch(h){u.push(h)}};for(let f of o){if(c.length>=a)break;switch(f){case\"keep\":await g(async()=>{l&&c.push({descriptor:l,name:`Keep ${P.prettyDescriptor(e.configuration,l)}`,reason:\"(no changes)\"})});break;case\"reuse\":await g(async()=>{for(let{descriptor:h,locators:p}of(await Tse(r,{project:e,target:n})).values()){if(p.length===1&&p[0].locatorHash===t.anchoredLocator.locatorHash&&o.includes(\"keep\"))continue;let C=`(originally used by ${P.prettyLocator(e.configuration,p[0])}`;C+=p.length>1?` and ${p.length-1} other${p.length>2?\"s\":\"\"})`:\")\",c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:C})}});break;case\"cache\":await g(async()=>{for(let h of e.storedDescriptors.values())h.identHash===r.identHash&&c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(already used somewhere in the lockfile)\"})});break;case\"project\":await g(async()=>{if(t.manifest.name!==null&&r.identHash===t.manifest.name.identHash)return;let h=e.tryWorkspaceByIdent(r);if(h===null)return;let p=Nse(h,s);c.push({descriptor:p,name:`Attach ${P.prettyDescriptor(e.configuration,p)}`,reason:`(local workspace at ${ee.pretty(e.configuration,h.relativeCwd,ee.Type.PATH)})`})});break;case\"latest\":await g(async()=>{if(r.range!==\"unknown\")c.push({descriptor:r,name:`Use ${P.prettyRange(e.configuration,r.range)}`,reason:\"(explicit range requested)\"});else if(n===\"peerDependencies\")c.push({descriptor:P.makeDescriptor(r,\"*\"),name:\"Use *\",reason:\"(catch-all peer dependency pattern)\"});else if(!e.configuration.get(\"enableNetwork\"))c.push({descriptor:null,name:\"Resolve from latest\",reason:ee.pretty(e.configuration,\"(unavailable because enableNetwork is toggled off)\",\"grey\")});else{let h=await YL(r,\"latest\",{project:e,cache:i,workspace:t,preserveModifier:!1});h&&(h=Rse(h,s),c.push({descriptor:h,name:`Use ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(resolved from latest)\"}))}});break}}return{suggestions:c.slice(0,a),rejections:u.slice(0,a)}}async function YL(r,e,{project:t,cache:i,workspace:n,preserveModifier:s=!0}){let o=P.makeDescriptor(r,e),a=new ti,l=t.configuration.makeFetcher(),c=t.configuration.makeResolver(),u={project:t,fetcher:l,cache:i,checksums:t.storedChecksums,report:a,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},g={...u,resolver:c,fetchOptions:u},f=c.bindDescriptor(o,n.anchoredLocator,g),h=await c.getCandidates(f,new Map,g);if(h.length===0)return null;let p=h[0],{protocol:C,source:y,params:B,selector:v}=P.parseRange(P.convertToManifestRange(p.reference));if(C===t.configuration.get(\"defaultProtocol\")&&(C=null),UL.default.valid(v)&&s!==!1){let D=typeof s==\"string\"?s:o.range;v=kse(D,{project:t})+v}return P.makeDescriptor(p,P.makeRange({protocol:C,source:y,params:B,selector:v}))}async function Iqe(r){return await O.mktempPromise(async e=>{let t=ye.create(e);return t.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await r(new Rt(e,{configuration:t,check:!1,immutable:!1}))})}var Au=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.dev=z.Boolean(\"-D,--dev\",!1,{description:\"Add a package as a dev dependency\"});this.peer=z.Boolean(\"-P,--peer\",!1,{description:\"Add a package as a peer dependency\"});this.optional=z.Boolean(\"-O,--optional\",!1,{description:\"Add / upgrade a package to an optional regular / peer dependency\"});this.preferDev=z.Boolean(\"--prefer-dev\",!1,{description:\"Add / upgrade a package to a dev dependency\"});this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Reuse the specified package from other workspaces in the project\"});this.cached=z.Boolean(\"--cached\",!1,{description:\"Reuse the highest version already used somewhere within the project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.packages=z.Rest()}async execute(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=[...o?[\"reuse\"]:[],\"project\",...this.cached?[\"cache\"]:[],\"latest\"],c=o?1/0:1,u=await Promise.all(this.packages.map(async B=>{let v=B.match(/^\\.{0,2}\\//)?await GL(B,{cwd:this.context.cwd,workspace:n}):P.tryParseDescriptor(B),D=B.match(/^(https?:|git@github)/);if(D)throw new Qe(`It seems you are trying to add a package using a ${ee.pretty(t,`${D[0]}...`,xi.RANGE)} url; we now require package names to be explicitly specified.\nTry running the command again with the package name prefixed: ${ee.pretty(t,\"yarn add\",xi.CODE)} ${ee.pretty(t,P.makeDescriptor(P.makeIdent(null,\"my-package\"),`${D[0]}...`),xi.DESCRIPTOR)}`);if(!v)throw new Qe(`The ${ee.pretty(t,B,xi.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let T=yqe(n,v,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(T.map(async j=>{let $=await Gm(v,{project:i,workspace:n,cache:s,target:j,modifier:a,strategies:l,maxResults:c});return{request:v,suggestedDescriptors:$,target:j}}))})).then(B=>B.flat()),g=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let{request:v,suggestedDescriptors:{suggestions:D,rejections:T}}of u)if(D.filter(j=>j.descriptor!==null).length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),B.reportSeparator(),B.reportExceptionOnce(j)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[],p=[];for(let{suggestedDescriptors:{suggestions:B},target:v}of u){let D,T=B.filter(V=>V.descriptor!==null),H=T[0].descriptor,j=T.every(V=>P.areDescriptorsEqual(V.descriptor,H));T.length===1||j?D=H:(f=!0,{answer:D}=await(0,Lse.prompt)({type:\"select\",name:\"answer\",message:\"Which range do you want to use?\",choices:B.map(({descriptor:V,name:W,reason:_})=>V?{name:W,hint:_,descriptor:V}:{name:W,hint:_,disabled:!0}),onCancel:()=>process.exit(130),result(V){return this.find(V,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let $=n.manifest[v].get(D.identHash);(typeof $>\"u\"||$.descriptorHash!==D.descriptorHash)&&(n.manifest[v].set(D.identHash,D),this.optional&&(v===\"dependencies\"?n.manifest.ensureDependencyMeta({...D,range:\"unknown\"}).optional=!0:v===\"peerDependencies\"&&(n.manifest.ensurePeerDependencyMeta({...D,range:\"unknown\"}).optional=!0)),typeof $>\"u\"?h.push([n,v,D,l]):p.push([n,v,$,D]))}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyAddition,h),await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),f&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};Au.paths=[[\"add\"]],Au.usage=ve.Usage({description:\"add dependencies to the project\",details:\"\\n      This command adds a package to the package.json for the nearest workspace.\\n\\n      - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\\n\\n      - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\\n\\n      - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\\n\\n      - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\\\"peerDependenciesMeta\\\": { \\\"<package>\\\": { \\\"optional\\\": true } }`\\n\\n      - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\\n\\n      - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\\n\\n      If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\\n\\n      If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\\n    \",examples:[[\"Add a regular package to the current workspace\",\"$0 add lodash\"],[\"Add a specific version for a package to the current workspace\",\"$0 add lodash@1.2.3\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using a URL\",\"$0 add lodash@https://github.com/lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol\",\"$0 add lodash@github:lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash@lodash/lodash\"],[\"Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash-es@lodash/lodash#es\"]]});function yqe(r,e,{dev:t,peer:i,preferDev:n,optional:s}){let o=r.manifest[\"dependencies\"].has(e.identHash),a=r.manifest[\"devDependencies\"].has(e.identHash),l=r.manifest[\"peerDependencies\"].has(e.identHash);if((t||i)&&o)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!t&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(s&&a)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(s&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((t||n)&&s)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" cannot simultaneously be a dev dependency and an optional dependency`);let c=[];return i&&c.push(\"peerDependencies\"),(t||n)&&c.push(\"devDependencies\"),s&&c.push(\"dependencies\"),c.length>0?c:a?[\"devDependencies\"]:l?[\"peerDependencies\"]:[\"dependencies\"]}var lu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print both the binary name and the locator of the package that provides the binary\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.name=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);if(await i.restoreInstallState(),this.name){let a=(await Wt.getPackageAccessibleBinaries(n,{project:i})).get(this.name);if(!a)throw new Qe(`Couldn't find a binary named \"${this.name}\" for package \"${P.prettyLocator(t,n)}\"`);let[,l]=a;return this.context.stdout.write(`${l}\n`),0}return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async o=>{let a=await Wt.getPackageAccessibleBinaries(n,{project:i}),c=Array.from(a.keys()).reduce((u,g)=>Math.max(u,g.length),0);for(let[u,[g,f]]of a)o.reportJson({name:u,source:P.stringifyIdent(g),path:f});if(this.verbose)for(let[u,[g]]of a)o.reportInfo(null,`${u.padEnd(c,\" \")}   ${P.prettyLocator(t,g)}`);else for(let u of a.keys())o.reportInfo(null,u)})).exitCode()}};lu.paths=[[\"bin\"]],lu.usage=ve.Usage({description:\"get the path to a binary script\",details:`\n      When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \\`-v,--verbose\\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary.\n\n      When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive.\n    `,examples:[[\"List all the available binaries\",\"$0 bin\"],[\"Print the path to a specific binary\",\"$0 bin eslint\"]]});var cu=class extends De{constructor(){super(...arguments);this.mirror=z.Boolean(\"--mirror\",!1,{description:\"Remove the global cache files instead of the local cache files\"});this.all=z.Boolean(\"--all\",!1,{description:\"Remove both the global cache files and the local cache files of the current project\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await Rt.find(t);return(await Ge.start({configuration:t,stdout:this.context.stdout},async()=>{let s=(this.all||this.mirror)&&i.mirrorCwd!==null,o=!this.mirror;s&&(await O.removePromise(i.mirrorCwd),await t.triggerHook(a=>a.cleanGlobalArtifacts,t)),o&&await O.removePromise(i.cwd)})).exitCode()}};cu.paths=[[\"cache\",\"clean\"],[\"cache\",\"clear\"]],cu.usage=ve.Usage({description:\"remove the shared cache files\",details:`\n      This command will remove all the files from the cache.\n    `,examples:[[\"Remove all the local archives\",\"$0 cache clean\"],[\"Remove all the archives stored in the ~/.yarn directory\",\"$0 cache clean --mirror\"]]});var Mse=Pe(ub()),jL=J(\"util\"),uu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.unsafe=z.Boolean(\"--no-redacted\",!1,{description:\"Don't redact secrets (such as tokens) from the output\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=this.name.replace(/[.[].*$/,\"\"),n=this.name.replace(/^[^.[]*/,\"\");if(typeof t.settings.get(i)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${i}\"`);let o=t.getSpecial(i,{hideSecrets:!this.unsafe,getNativePaths:!0}),a=Ie.convertMapsToIndexableObjects(o),l=n?(0,Mse.default)(a,n):a,c=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async u=>{u.reportJson(l)});if(!this.json){if(typeof l==\"string\")return this.context.stdout.write(`${l}\n`),c.exitCode();jL.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,jL.inspect)(l,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}\n`)}return c.exitCode()}};uu.paths=[[\"config\",\"get\"]],uu.usage=ve.Usage({description:\"read a configuration settings\",details:`\n      This command will print a configuration setting.\n\n      Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \\`--no-redacted\\` to get the untransformed value.\n    `,examples:[[\"Print a simple configuration setting\",\"yarn config get yarnPath\"],[\"Print a complex configuration setting\",\"yarn config get packageExtensions\"],[\"Print a nested field from the configuration\",`yarn config get 'npmScopes[\"my-company\"].npmRegistryServer'`],[\"Print a token from the configuration\",\"yarn config get npmAuthToken --no-redacted\"],[\"Print a configuration setting as JSON\",\"yarn config get packageExtensions --json\"]]});var Voe=Pe(XL()),Xoe=Pe(ub()),Zoe=Pe(zoe()),ZL=J(\"util\"),gu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Set complex configuration settings to JSON values\"});this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String();this.value=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);if(n===\"enableStrictSettings\")throw new Qe(\"This setting only affects the file it's in, and thus cannot be set from the CLI\");let a=this.json?JSON.parse(this.value):this.value;await(this.home?p=>ye.updateHomeConfiguration(p):p=>ye.updateConfiguration(i(),p))(p=>{if(s){let C=(0,Voe.default)(p);return(0,Zoe.default)(C,this.name,a),C}else return{...p,[n]:a}});let u=(await ye.find(this.context.cwd,this.context.plugins)).getSpecial(n,{hideSecrets:!0,getNativePaths:!0}),g=Ie.convertMapsToIndexableObjects(u),f=s?(0,Xoe.default)(g,s):g;return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async p=>{ZL.inspect.styles.name=\"cyan\",p.reportInfo(0,`Successfully set ${this.name} to ${(0,ZL.inspect)(f,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}`)})).exitCode()}};gu.paths=[[\"config\",\"set\"]],gu.usage=ve.Usage({description:\"change a configuration settings\",details:`\n      This command will set a configuration setting.\n\n      When used without the \\`--json\\` flag, it can only set a simple configuration setting (a string, a number, or a boolean).\n\n      When used with the \\`--json\\` flag, it can set both simple and complex configuration settings, including Arrays and Objects.\n    `,examples:[[\"Set a simple configuration setting (a string, a number, or a boolean)\",\"yarn config set initScope myScope\"],[\"Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag\",'yarn config set initScope --json \\\\\"myScope\\\\\"'],[\"Set a complex configuration setting (an Array) using the `--json` flag\",`yarn config set unsafeHttpWhitelist --json '[\"*.example.com\", \"example.com\"]'`],[\"Set a complex configuration setting (an Object) using the `--json` flag\",`yarn config set packageExtensions --json '{ \"@babel/parser@*\": { \"dependencies\": { \"@babel/types\": \"*\" } } }'`],[\"Set a nested configuration setting\",'yarn config set npmScopes.company.npmRegistryServer \"https://npm.example.com\"'],[\"Set a nested configuration setting using indexed access for non-simple keys\",`yarn config set 'npmRegistries[\"//npm.example.com\"].npmAuthToken' \"ffffffff-ffff-ffff-ffff-ffffffffffff\"`]]});var oae=Pe(XL()),aae=Pe(am()),Aae=Pe(sae()),fu=class extends De{constructor(){super(...arguments);this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);let a=this.home?c=>ye.updateHomeConfiguration(c):c=>ye.updateConfiguration(i(),c);return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async c=>{let u=!1;await a(g=>{if(!(0,aae.default)(g,this.name))return c.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),u=!0,g;let f=s?(0,oae.default)(g):{...g};return(0,Aae.default)(f,this.name),f}),u||c.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};fu.paths=[[\"config\",\"unset\"]],fu.usage=ve.Usage({description:\"unset a configuration setting\",details:`\n      This command will unset a configuration setting.\n    `,examples:[[\"Unset a simple configuration setting\",\"yarn config unset initScope\"],[\"Unset a complex configuration setting\",\"yarn config unset packageExtensions\"],[\"Unset a nested configuration setting\",\"yarn config unset npmScopes.company.npmRegistryServer\"]]});var _L=J(\"util\"),hu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print the setting description on top of the regular key/value information\"});this.why=z.Boolean(\"--why\",!1,{description:\"Print the reason why a setting is set a particular way\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins,{strict:!1});return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{if(t.invalid.size>0&&!this.json){for(let[s,o]of t.invalid)n.reportError(34,`Invalid configuration key \"${s}\" in ${o}`);n.reportSeparator()}if(this.json){let s=Ie.sortMap(t.settings.keys(),o=>o);for(let o of s){let a=t.settings.get(o),l=t.getSpecial(o,{hideSecrets:!0,getNativePaths:!0}),c=t.sources.get(o);this.verbose?n.reportJson({key:o,effective:l,source:c}):n.reportJson({key:o,effective:l,source:c,...a})}}else{let s=Ie.sortMap(t.settings.keys(),l=>l),o=s.reduce((l,c)=>Math.max(l,c.length),0),a={breakLength:1/0,colors:t.get(\"enableColors\"),maxArrayLength:2};if(this.why||this.verbose){let l=s.map(u=>{let g=t.settings.get(u);if(!g)throw new Error(`Assertion failed: This settings (\"${u}\") should have been registered`);let f=this.why?t.sources.get(u)||\"<default>\":g.description;return[u,f]}),c=l.reduce((u,[,g])=>Math.max(u,g.length),0);for(let[u,g]of l)n.reportInfo(null,`${u.padEnd(o,\" \")}   ${g.padEnd(c,\" \")}   ${(0,_L.inspect)(t.getSpecial(u,{hideSecrets:!0,getNativePaths:!0}),a)}`)}else for(let l of s)n.reportInfo(null,`${l.padEnd(o,\" \")}   ${(0,_L.inspect)(t.getSpecial(l,{hideSecrets:!0,getNativePaths:!0}),a)}`)}})).exitCode()}};hu.paths=[[\"config\"]],hu.usage=ve.Usage({description:\"display the current configuration\",details:`\n      This command prints the current active configuration settings.\n    `,examples:[[\"Print the active configuration settings\",\"$0 config\"]]});ls();var Nb={};ut(Nb,{Strategy:()=>jm,acceptedStrategies:()=>b3e,dedupe:()=>$L});var lae=Pe(Bn()),jm=(e=>(e.HIGHEST=\"highest\",e))(jm||{}),b3e=new Set(Object.values(jm)),Q3e={highest:async(r,e,{resolver:t,fetcher:i,resolveOptions:n,fetchOptions:s})=>{let o=new Map;for(let[a,l]of r.storedResolutions){let c=r.storedDescriptors.get(a);if(typeof c>\"u\")throw new Error(`Assertion failed: The descriptor (${a}) should have been registered`);Ie.getSetWithDefault(o,c.identHash).add(l)}return Array.from(r.storedDescriptors.values(),async a=>{if(e.length&&!lae.default.isMatch(P.stringifyIdent(a),e))return null;let l=r.storedResolutions.get(a.descriptorHash);if(typeof l>\"u\")throw new Error(`Assertion failed: The resolution (${a.descriptorHash}) should have been registered`);let c=r.originalPackages.get(l);if(typeof c>\"u\"||!t.shouldPersistResolution(c,n))return null;let u=o.get(a.identHash);if(typeof u>\"u\")throw new Error(`Assertion failed: The resolutions (${a.identHash}) should have been registered`);if(u.size===1)return null;let g=[...u].map(y=>{let B=r.originalPackages.get(y);if(typeof B>\"u\")throw new Error(`Assertion failed: The package (${y}) should have been registered`);return B.reference}),f=await t.getSatisfying(a,g,n),h=f==null?void 0:f[0];if(typeof h>\"u\")return null;let p=h.locatorHash,C=r.originalPackages.get(p);if(typeof C>\"u\")throw new Error(`Assertion failed: The package (${p}) should have been registered`);return p===l?null:{descriptor:a,currentPackage:c,updatedPackage:C}})}};async function $L(r,{strategy:e,patterns:t,cache:i,report:n}){let{configuration:s}=r,o=new ti,a=s.makeResolver(),l=s.makeFetcher(),c={cache:i,checksums:r.storedChecksums,fetcher:l,project:r,report:o,skipIntegrityCheck:!0,cacheOptions:{skipIntegrityCheck:!0}},u={project:r,resolver:a,report:o,fetchOptions:c};return await n.startTimerPromise(\"Deduplication step\",async()=>{let g=Q3e[e],f=await g(r,t,{resolver:a,resolveOptions:u,fetcher:l,fetchOptions:c}),h=vi.progressViaCounter(f.length);await n.reportProgress(h);let p=0;await Promise.all(f.map(B=>B.then(v=>{if(v===null)return;p++;let{descriptor:D,currentPackage:T,updatedPackage:H}=v;n.reportInfo(0,`${P.prettyDescriptor(s,D)} can be deduped from ${P.prettyLocator(s,T)} to ${P.prettyLocator(s,H)}`),n.reportJson({descriptor:P.stringifyDescriptor(D),currentResolution:P.stringifyLocator(T),updatedResolution:P.stringifyLocator(H)}),r.storedResolutions.set(D.descriptorHash,H.locatorHash)}).finally(()=>h.tick())));let C;switch(p){case 0:C=\"No packages\";break;case 1:C=\"One package\";break;default:C=`${p} packages`}let y=ee.pretty(s,e,ee.Type.CODE);return n.reportInfo(0,`${C} can be deduped using the ${y} strategy`),p})}var pu=class extends De{constructor(){super(...arguments);this.strategy=z.String(\"-s,--strategy\",\"highest\",{description:\"The strategy to use when deduping dependencies\",validator:Zi(jm)});this.check=z.Boolean(\"-c,--check\",!1,{description:\"Exit with exit code 1 when duplicates are found, without persisting the dependency tree\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=await Rt.find(t);await i.restoreInstallState({restoreResolutions:!1});let s=0,o=await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout,json:this.json},async a=>{s=await $L(i,{strategy:this.strategy,patterns:this.patterns,cache:n,report:a})});return o.hasErrors()?o.exitCode():this.check?s?1:0:(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async l=>{await i.install({cache:n,report:l,mode:this.mode})})).exitCode()}};pu.paths=[[\"dedupe\"]],pu.usage=ve.Usage({description:\"deduplicate dependencies with overlapping ranges\",details:\"\\n      Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\\n\\n      This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\\n\\n      - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\\n\\n      **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\\n\\n      If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      ### In-depth explanation:\\n\\n      Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\\n\\n      Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\\n    \",examples:[[\"Dedupe all packages\",\"$0 dedupe\"],[\"Dedupe all packages using a specific strategy\",\"$0 dedupe --strategy highest\"],[\"Dedupe a specific package\",\"$0 dedupe lodash\"],[\"Dedupe all packages with the `@babel/*` scope\",\"$0 dedupe '@babel/*'\"],[\"Check for duplicates (can be used as a CI step)\",\"$0 dedupe --check\"]]});var Vh=class extends De{async execute(){let{plugins:e}=await ye.find(this.context.cwd,this.context.plugins),t=[];for(let o of e){let{commands:a}=o[1];if(a){let c=Gn.from(a).definitions();t.push([o[0],c])}}let i=this.cli.definitions(),n=(o,a)=>o.split(\" \").slice(1).join()===a.split(\" \").slice(1).join(),s=cae()[\"@yarnpkg/builder\"].bundles.standard;for(let o of t){let a=o[1];for(let l of a)i.find(c=>n(c.path,l.path)).plugin={name:o[0],isDefault:s.includes(o[0])}}this.context.stdout.write(`${JSON.stringify(i,null,2)}\n`)}};Vh.paths=[[\"--clipanion=definitions\"]];var Xh=class extends De{async execute(){this.context.stdout.write(this.cli.usage(null))}};Xh.paths=[[\"help\"],[\"--help\"],[\"-h\"]];var qm=class extends De{constructor(){super(...arguments);this.leadingArgument=z.String();this.args=z.Proxy()}async execute(){if(this.leadingArgument.match(/[\\\\/]/)&&!P.tryParseIdent(this.leadingArgument)){let t=x.resolve(this.context.cwd,K.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:t})}else return await this.cli.run([\"run\",this.leadingArgument,...this.args])}};var Zh=class extends De{async execute(){this.context.stdout.write(`${Tr||\"<unknown>\"}\n`)}};Zh.paths=[[\"-v\"],[\"--version\"]];var du=class extends De{constructor(){super(...arguments);this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);return await i.restoreInstallState(),await Wt.executePackageShellcode(n,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:i})}};du.paths=[[\"exec\"]],du.usage=ve.Usage({description:\"execute a shell script\",details:`\n      This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell.\n\n      It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n    `,examples:[[\"Execute a single shell command\",\"$0 exec echo Hello World\"],[\"Execute a shell script\",'$0 exec \"tsc & babel src --out-dir lib\"']]});ls();var Cu=class extends De{constructor(){super(...arguments);this.hash=z.String({required:!1,validator:od(sd(),[ad(/^p[0-9a-f]{5}$/)])})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return await i.restoreInstallState({restoreResolutions:!1}),await i.applyLightResolution(),typeof this.hash<\"u\"?await v3e(this.hash,i,{stdout:this.context.stdout}):(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{var a;let o=[([,l])=>P.stringifyLocator(i.storedPackages.get(l.subject)),([,l])=>P.stringifyIdent(l.requested)];for(let[l,c]of Ie.sortMap(i.peerRequirements,o)){let u=i.storedPackages.get(c.subject);if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let g=i.storedPackages.get(c.rootRequester);if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let f=(a=u.dependencies.get(c.requested.identHash))!=null?a:null,h=ee.pretty(t,l,ee.Type.CODE),p=P.prettyLocator(t,u),C=P.prettyIdent(t,c.requested),y=P.prettyIdent(t,g),B=c.allRequesters.length-1,v=`descendant${B===1?\"\":\"s\"}`,D=B>0?` and ${B} ${v}`:\"\",T=f!==null?\"provides\":\"doesn't provide\";s.reportInfo(null,`${h} \\u2192 ${p} ${T} ${C} to ${y}${D}`)}})).exitCode()}};Cu.paths=[[\"explain\",\"peer-requirements\"]],Cu.usage=ve.Usage({description:\"explain a set of peer requirements\",details:`\n      A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants.\n\n      When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not.\n\n      When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set.\n\n      **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\\`yarn explain peer-requirements\\`).\n    `,examples:[[\"Explain the corresponding set of peer requirements for a hash\",\"$0 explain peer-requirements p1a4ed\"],[\"List all sets of peer requirements\",\"$0 explain peer-requirements\"]]});async function v3e(r,e,t){let{configuration:i}=e,n=e.peerRequirements.get(r);if(typeof n>\"u\")throw new Error(`No peerDependency requirements found for hash: \"${r}\"`);return(await Ge.start({configuration:i,stdout:t.stdout,includeFooter:!1},async o=>{var B,v;let a=e.storedPackages.get(n.subject);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let l=e.storedPackages.get(n.rootRequester);if(typeof l>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let c=(B=a.dependencies.get(n.requested.identHash))!=null?B:null,u=c!==null?e.storedResolutions.get(c.descriptorHash):null;if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let g=u!==null?e.storedPackages.get(u):null;if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the provided package to have been registered\");let f=[...n.allRequesters.values()].map(D=>{let T=e.storedPackages.get(D);if(typeof T>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let H=P.devirtualizeLocator(T),j=e.storedPackages.get(H.locatorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let $=j.peerDependencies.get(n.requested.identHash);if(typeof $>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to be registered\");return{pkg:T,peerDependency:$}});if(g!==null){let D=f.every(({peerDependency:T})=>vt.satisfiesWithPrereleases(g.version,T.range));o.reportInfo(0,`${P.prettyLocator(i,a)} provides ${P.prettyLocator(i,g)} with version ${P.prettyReference(i,(v=g.version)!=null?v:\"<missing>\")}, which ${D?\"satisfies\":\"doesn't satisfy\"} the following requirements:`)}else o.reportInfo(0,`${P.prettyLocator(i,a)} doesn't provide ${P.prettyIdent(i,n.requested)}, breaking the following requirements:`);o.reportSeparator();let h=ee.mark(i),p=[];for(let{pkg:D,peerDependency:T}of Ie.sortMap(f,H=>P.stringifyLocator(H.pkg))){let j=(g!==null?vt.satisfiesWithPrereleases(g.version,T.range):!1)?h.Check:h.Cross;p.push({stringifiedLocator:P.stringifyLocator(D),prettyLocator:P.prettyLocator(i,D),prettyRange:P.prettyRange(i,T.range),mark:j})}let C=Math.max(...p.map(({stringifiedLocator:D})=>D.length)),y=Math.max(...p.map(({prettyRange:D})=>D.length));for(let{stringifiedLocator:D,prettyLocator:T,prettyRange:H,mark:j}of Ie.sortMap(p,({stringifiedLocator:$})=>$))o.reportInfo(null,`${T.padEnd(C+(T.length-D.length),\" \")} \\u2192 ${H.padEnd(y,\" \")} ${j}`);p.length>1&&(o.reportSeparator(),o.reportInfo(0,`Note: these requirements start with ${P.prettyLocator(e.configuration,l)}`))})).exitCode()}ls();var uae=Pe(Xr()),mu=class extends De{constructor(){super(...arguments);this.onlyIfNeeded=z.Boolean(\"--only-if-needed\",!1,{description:\"Only lock the Yarn version if it isn't already locked\"});this.version=z.String()}async execute(){var o;let t=await ye.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&t.get(\"yarnPath\")){let a=t.sources.get(\"yarnPath\");if(!a)throw new Error(\"Assertion failed: Expected 'yarnPath' to have a source\");let l=(o=t.projectCwd)!=null?o:t.startingCwd;if(x.contains(l,a))return 0}let i=()=>{if(typeof Tr>\"u\")throw new Qe(\"The --install flag can only be used without explicit version specifier from the Yarn CLI\");return`file://${process.argv[1]}`},n;if(this.version===\"self\")n=i();else if(this.version===\"latest\"||this.version===\"berry\"||this.version===\"stable\")n=`https://repo.yarnpkg.com/${await Jm(t,\"stable\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"canary\")n=`https://repo.yarnpkg.com/${await Jm(t,\"canary\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"classic\")n=\"https://classic.yarnpkg.com/latest.js\";else if(this.version.match(/^https?:/))n=this.version;else if(this.version.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.version))n=`file://${K.resolve(this.version)}`;else if(vt.satisfiesWithPrereleases(this.version,\">=2.0.0\"))n=`https://repo.yarnpkg.com/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else if(vt.satisfiesWithPrereleases(this.version,\"^0.x || ^1.x\"))n=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`;else if(vt.validRange(this.version))n=`https://repo.yarnpkg.com/${await x3e(t,this.version)}/packages/yarnpkg-cli/bin/yarn.js`;else throw new Qe(`Invalid version descriptor \"${this.version}\"`);return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{let l=\"file://\",c;n.startsWith(l)?(a.reportInfo(0,`Downloading ${ee.pretty(t,n,xi.URL)}`),c=await O.readFilePromise(K.toPortablePath(n.slice(l.length)))):(a.reportInfo(0,`Retrieving ${ee.pretty(t,n,xi.PATH)}`),c=await Xt.get(n,{configuration:t})),await eM(t,null,c,{report:a})})).exitCode()}};mu.paths=[[\"set\",\"version\"]],mu.usage=ve.Usage({description:\"lock the Yarn version used by the project\",details:\"\\n      This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\\n\\n      A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\\n\\n      The version specifier can be:\\n\\n      - a tag:\\n        - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\\n        - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\\n        - `classic` -> the most recent classic (`^0.x || ^1.x`) release\\n\\n      - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\\n\\n      - a semver version (e.g. `2.4.1`, `1.22.1`)\\n\\n      - a local file referenced through either a relative or absolute path\\n\\n      - `self` -> the version used to invoke the command\\n    \",examples:[[\"Download the latest release from the Yarn repository\",\"$0 set version latest\"],[\"Download the latest canary release from the Yarn repository\",\"$0 set version canary\"],[\"Download the latest classic release from the Yarn repository\",\"$0 set version classic\"],[\"Download the most recent Yarn 3 build\",\"$0 set version 3.x\"],[\"Download a specific Yarn 2 build\",\"$0 set version 2.0.0-rc.30\"],[\"Switch back to a specific Yarn 1 release\",\"$0 set version 1.22.1\"],[\"Use a release from the local filesystem\",\"$0 set version ./yarn.cjs\"],[\"Use a release from a URL\",\"$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js\"],[\"Download the version used to invoke the command\",\"$0 set version self\"]]});async function x3e(r,e){let i=(await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0})).tags.filter(n=>vt.satisfiesWithPrereleases(n,e));if(i.length===0)throw new Qe(`No matching release found for range ${ee.pretty(r,e,ee.Type.RANGE)}.`);return i[0]}async function Jm(r,e){let t=await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0});if(!t.latest[e])throw new Qe(`Tag ${ee.pretty(r,e,ee.Type.RANGE)} not found`);return t.latest[e]}async function eM(r,e,t,{report:i}){var h;e===null&&await O.mktempPromise(async p=>{let C=x.join(p,\"yarn.cjs\");await O.writeFilePromise(C,t);let{stdout:y}=await Cr.execvp(process.execPath,[K.fromPortablePath(C),\"--version\"],{cwd:p,env:{...process.env,YARN_IGNORE_PATH:\"1\"}});if(e=y.trim(),!uae.default.valid(e))throw new Error(`Invalid semver version. ${ee.pretty(r,\"yarn --version\",ee.Type.CODE)} returned:\n${e}`)});let n=(h=r.projectCwd)!=null?h:r.startingCwd,s=x.resolve(n,\".yarn/releases\"),o=x.resolve(s,`yarn-${e}.cjs`),a=x.relative(r.startingCwd,o),l=x.relative(n,o);i.reportInfo(0,`Saving the new release in ${ee.pretty(r,a,\"magenta\")}`),await O.removePromise(x.dirname(o)),await O.mkdirPromise(x.dirname(o),{recursive:!0}),await O.writeFilePromise(o,t,{mode:493}),await ye.updateConfiguration(n,{yarnPath:l});let c=await ot.tryFind(n)||new ot;c.packageManager=`yarn@${e&&Ie.isTaggedYarnVersion(e)?e:await Jm(r,\"stable\")}`;let u={};c.exportTo(u);let g=x.join(n,ot.fileName),f=`${JSON.stringify(u,null,c.indent)}\n`;await O.changeFilePromise(g,f,{automaticNewlines:!0})}function gae(r){return Ct[LI(r)]}var P3e=/## (?<code>YN[0-9]{4}) - `(?<name>[A-Z_]+)`\\n\\n(?<details>(?:.(?!##))+)/gs;async function D3e(r){let t=`https://repo.yarnpkg.com/${Ie.isTaggedYarnVersion(Tr)?Tr:await Jm(r,\"canary\")}/packages/gatsby/content/advanced/error-codes.md`,i=await Xt.get(t,{configuration:r});return new Map(Array.from(i.toString().matchAll(P3e),({groups:n})=>{if(!n)throw new Error(\"Assertion failed: Expected the match to have been successful\");let s=gae(n.code);if(n.name!==s)throw new Error(`Assertion failed: Invalid error code data: Expected \"${n.name}\" to be named \"${s}\"`);return[n.code,n.details]}))}var Eu=class extends De{constructor(){super(...arguments);this.code=z.String({required:!1,validator:od(sd(),[ad(/^YN[0-9]{4}$/)])});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);if(typeof this.code<\"u\"){let i=gae(this.code),n=ee.pretty(t,i,ee.Type.CODE),s=this.cli.format().header(`${this.code} - ${n}`),a=(await D3e(t)).get(this.code),l=typeof a<\"u\"?ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.MARKDOWN,{text:a,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description.\n\nYou can help us by editing this page on GitHub \\u{1F642}:\n${ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.URL,\"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md\"))}\n`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:i,details:l})}\n`):this.context.stdout.write(`${s}\n\n${l}\n`)}else{let i={children:Ie.mapAndFilter(Object.entries(Ct),([n,s])=>Number.isNaN(Number(n))?Ie.mapAndFilter.skip:{label:FA(Number(n)),value:ee.tuple(ee.Type.CODE,s)})};es.emitTree(i,{configuration:t,stdout:this.context.stdout,json:this.json})}}};Eu.paths=[[\"explain\"]],Eu.usage=ve.Usage({description:\"explain an error code\",details:`\n      When the code argument is specified, this command prints its name and its details.\n\n      When used without arguments, this command lists all error codes and their names.\n    `,examples:[[\"Explain an error code\",\"$0 explain YN0006\"],[\"List all error codes\",\"$0 explain\"]]});var fae=Pe(Bn()),Iu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Print versions of a package from the whole project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Print information for all packages, including transitive dependencies\"});this.extra=z.Array(\"-X,--extra\",[],{description:\"An array of requests of extra data provided by plugins\"});this.cache=z.Boolean(\"--cache\",!1,{description:\"Print information about the cache entry of a package (path, size, checksum)\"});this.dependents=z.Boolean(\"--dependents\",!1,{description:\"Print all dependents for each matching package\"});this.manifest=z.Boolean(\"--manifest\",!1,{description:\"Print data obtained by looking at the package archive (license, homepage, ...)\"});this.nameOnly=z.Boolean(\"--name-only\",!1,{description:\"Only print the name for the matching packages\"});this.virtuals=z.Boolean(\"--virtuals\",!1,{description:\"Print each instance of the virtual packages\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n&&!this.all)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=new Set(this.extra);this.cache&&o.add(\"cache\"),this.dependents&&o.add(\"dependents\"),this.manifest&&o.add(\"manifest\");let a=(T,{recursive:H})=>{let j=T.anchoredLocator.locatorHash,$=new Map,V=[j];for(;V.length>0;){let W=V.shift();if($.has(W))continue;let _=i.storedPackages.get(W);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");if($.set(W,_),P.isVirtualLocator(_)&&V.push(P.devirtualizeLocator(_).locatorHash),!(!H&&W!==j))for(let A of _.dependencies.values()){let Ae=i.storedResolutions.get(A.descriptorHash);if(typeof Ae>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");V.push(Ae)}}return $.values()},l=({recursive:T})=>{let H=new Map;for(let j of i.workspaces)for(let $ of a(j,{recursive:T}))H.set($.locatorHash,$);return H.values()},c=({all:T,recursive:H})=>T&&H?i.storedPackages.values():T?l({recursive:H}):a(n,{recursive:H}),u=({all:T,recursive:H})=>{let j=c({all:T,recursive:H}),$=this.patterns.map(_=>{let A=P.parseLocator(_),Ae=fae.default.makeRe(P.stringifyIdent(A)),ge=P.isVirtualLocator(A),re=ge?P.devirtualizeLocator(A):A;return M=>{let F=P.stringifyIdent(M);if(!Ae.test(F))return!1;if(A.reference===\"unknown\")return!0;let ue=P.isVirtualLocator(M),pe=ue?P.devirtualizeLocator(M):M;return!(ge&&ue&&A.reference!==M.reference||re.reference!==pe.reference)}}),V=Ie.sortMap([...j],_=>P.stringifyLocator(_));return{selection:V.filter(_=>$.length===0||$.some(A=>A(_))),sortedLookup:V}},{selection:g,sortedLookup:f}=u({all:this.all,recursive:this.recursive});if(g.length===0)throw new Qe(\"No package matched your request\");let h=new Map;if(this.dependents)for(let T of f)for(let H of T.dependencies.values()){let j=i.storedResolutions.get(H.descriptorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");Ie.getArrayWithDefault(h,j).push(T)}let p=new Map;for(let T of f){if(!P.isVirtualLocator(T))continue;let H=P.devirtualizeLocator(T);Ie.getArrayWithDefault(p,H.locatorHash).push(T)}let C={},y={children:C},B=t.makeFetcher(),v={project:i,fetcher:B,cache:s,checksums:i.storedChecksums,report:new ti,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},D=[async(T,H,j)=>{var W,_;if(!H.has(\"manifest\"))return;let $=await B.fetch(T,v),V;try{V=await ot.find($.prefixPath,{baseFs:$.packageFs})}finally{(W=$.releaseFs)==null||W.call($)}j(\"Manifest\",{License:ee.tuple(ee.Type.NO_HINT,V.license),Homepage:ee.tuple(ee.Type.URL,(_=V.raw.homepage)!=null?_:null)})},async(T,H,j)=>{var Ae;if(!H.has(\"cache\"))return;let $={mockedPackages:i.disabledLocators,unstablePackages:i.conditionalLocators},V=(Ae=i.storedChecksums.get(T.locatorHash))!=null?Ae:null,W=s.getLocatorPath(T,V,$),_;if(W!==null)try{_=O.statSync(W)}catch{}let A=typeof _<\"u\"?[_.size,ee.Type.SIZE]:void 0;j(\"Cache\",{Checksum:ee.tuple(ee.Type.NO_HINT,V),Path:ee.tuple(ee.Type.PATH,W),Size:A})}];for(let T of g){let H=P.isVirtualLocator(T);if(!this.virtuals&&H)continue;let j={},$={value:[T,ee.Type.LOCATOR],children:j};if(C[P.stringifyLocator(T)]=$,this.nameOnly){delete $.children;continue}let V=p.get(T.locatorHash);typeof V<\"u\"&&(j.Instances={label:\"Instances\",value:ee.tuple(ee.Type.NUMBER,V.length)}),j.Version={label:\"Version\",value:ee.tuple(ee.Type.NO_HINT,T.version)};let W=(A,Ae)=>{let ge={};if(j[A]=ge,Array.isArray(Ae))ge.children=Ae.map(re=>({value:re}));else{let re={};ge.children=re;for(let[M,F]of Object.entries(Ae))typeof F>\"u\"||(re[M]={label:M,value:F})}};if(!H){for(let A of D)await A(T,o,W);await t.triggerHook(A=>A.fetchPackageInfo,T,o,W)}T.bin.size>0&&!H&&W(\"Exported Binaries\",[...T.bin.keys()].map(A=>ee.tuple(ee.Type.PATH,A)));let _=h.get(T.locatorHash);typeof _<\"u\"&&_.length>0&&W(\"Dependents\",_.map(A=>ee.tuple(ee.Type.LOCATOR,A))),T.dependencies.size>0&&!H&&W(\"Dependencies\",[...T.dependencies.values()].map(A=>{var re;let Ae=i.storedResolutions.get(A.descriptorHash),ge=typeof Ae<\"u\"&&(re=i.storedPackages.get(Ae))!=null?re:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:ge})})),T.peerDependencies.size>0&&H&&W(\"Peer dependencies\",[...T.peerDependencies.values()].map(A=>{var M,F;let Ae=T.dependencies.get(A.identHash),ge=typeof Ae<\"u\"&&(M=i.storedResolutions.get(Ae.descriptorHash))!=null?M:null,re=ge!==null&&(F=i.storedPackages.get(ge))!=null?F:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:re})}))}es.emitTree(y,{configuration:t,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Iu.paths=[[\"info\"]],Iu.usage=ve.Usage({description:\"see information related to packages\",details:\"\\n      This command prints various information related to the specified packages, accepting glob patterns.\\n\\n      By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\\n\\n      Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\\n\\n      Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\\n    \",examples:[[\"Show information about Lodash\",\"$0 info lodash\"]]});var Tb=Pe(Ac());ls();var yu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.immutable=z.Boolean(\"--immutable\",{description:\"Abort with an error exit code if the lockfile was to be modified\"});this.immutableCache=z.Boolean(\"--immutable-cache\",{description:\"Abort with an error exit code if the cache folder was to be modified\"});this.checkCache=z.Boolean(\"--check-cache\",!1,{description:\"Always refetch the packages and ensure that their checksums are consistent\"});this.inlineBuilds=z.Boolean(\"--inline-builds\",{description:\"Verbosely print the output of the build steps of dependencies\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.cacheFolder=z.String(\"--cache-folder\",{hidden:!0});this.frozenLockfile=z.Boolean(\"--frozen-lockfile\",{hidden:!0});this.ignoreEngines=z.Boolean(\"--ignore-engines\",{hidden:!0});this.nonInteractive=z.Boolean(\"--non-interactive\",{hidden:!0});this.preferOffline=z.Boolean(\"--prefer-offline\",{hidden:!0});this.production=z.Boolean(\"--production\",{hidden:!0});this.registry=z.String(\"--registry\",{hidden:!0});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.networkTimeout=z.String(\"--network-timeout\",{hidden:!0})}async execute(){var f;let t=await ye.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<\"u\"&&t.useWithSource(\"<cli>\",{enableInlineBuilds:this.inlineBuilds},t.startingCwd,{overwrite:!0});let i=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,n=async(h,{error:p})=>{let C=await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async y=>{p?y.reportError(50,h):y.reportWarning(50,h)});return C.hasErrors()?C.exitCode():null};if(typeof this.ignoreEngines<\"u\"){let h=await n(\"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.registry<\"u\"){let h=await n(\"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file\",{error:!1});if(h!==null)return h}if(typeof this.preferOffline<\"u\"){let h=await n(\"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.production<\"u\"){let h=await n(\"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead\",{error:!0});if(h!==null)return h}if(typeof this.nonInteractive<\"u\"){let h=await n(\"The --non-interactive option is deprecated\",{error:!i});if(h!==null)return h}if(typeof this.frozenLockfile<\"u\"&&(await n(\"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead\",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder<\"u\"){let h=await n(\"The cache-folder option has been deprecated; use rc settings instead\",{error:!Tb.default.NETLIFY});if(h!==null)return h}let s=this.mode===\"update-lockfile\";if(s&&(this.immutable||this.immutableCache))throw new Qe(`${ee.pretty(t,\"--immutable\",ee.Type.CODE)} and ${ee.pretty(t,\"--immutable-cache\",ee.Type.CODE)} cannot be used with ${ee.pretty(t,\"--mode=update-lockfile\",ee.Type.CODE)}`);let o=((f=this.immutable)!=null?f:t.get(\"enableImmutableInstalls\"))&&!s,a=this.immutableCache&&!s;if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{await N3e(t,o)&&(p.reportInfo(48,\"Automatically fixed merge conflicts \\u{1F44D}\"),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}if(t.projectCwd!==null&&typeof t.sources.get(\"nodeLinker\")>\"u\"){let h=t.projectCwd,p;try{p=await O.readFilePromise(x.join(h,xt.lockfile),\"utf8\")}catch{}if(p!=null&&p.includes(\"yarn lockfile v1\")){let C=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async y=>{y.reportInfo(70,\"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \\u{1F44D}\"),y.reportSeparator(),t.use(\"<compat>\",{nodeLinker:\"node-modules\"},h,{overwrite:!0}),await ye.updateConfiguration(h,{nodeLinker:\"node-modules\"})});if(C.hasErrors())return C.exitCode()}}if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{var C;(C=ye.telemetry)!=null&&C.isNew&&(p.reportInfo(65,\"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry\"),p.reportInfo(65,`Run ${ee.pretty(t,\"yarn config set --home enableTelemetry 0\",ee.Type.CODE)} to disable`),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}let{project:l,workspace:c}=await je.find(t,this.context.cwd),u=await Rt.find(t,{immutable:a,check:this.checkCache});if(!c)throw new ct(l.cwd,this.context.cwd);return await l.restoreInstallState({restoreResolutions:!1}),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!0},async h=>{await l.install({cache:u,report:h,immutable:o,mode:this.mode})})).exitCode()}};yu.paths=[[\"install\"],ve.Default],yu.usage=ve.Usage({description:\"install the project dependencies\",details:`\n      This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n      - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n      - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \\`cacheFolder\\` in \\`yarn config\\` to see where the cache files are stored).\n\n      - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n      - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n      Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n      If the \\`--immutable\\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \\`immutablePatterns\\` configuration setting). For backward compatibility we offer an alias under the name of \\`--frozen-lockfile\\`, but it will be removed in a later release.\n\n      If the \\`--immutable-cache\\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n      If the \\`--check-cache\\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n      If the \\`--inline-builds\\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n    `,examples:[[\"Install the project\",\"$0 install\"],[\"Validate a project when using Zero-Installs\",\"$0 install --immutable --immutable-cache\"],[\"Validate a project when using Zero-Installs (slightly safer if you accept external PRs)\",\"$0 install --immutable --immutable-cache --check-cache\"]]});var k3e=\"|||||||\",R3e=\">>>>>>>\",F3e=\"=======\",hae=\"<<<<<<<\";async function N3e(r,e){if(!r.projectCwd)return!1;let t=x.join(r.projectCwd,r.get(\"lockfileFilename\"));if(!await O.existsPromise(t))return!1;let i=await O.readFilePromise(t,\"utf8\");if(!i.includes(hae))return!1;if(e)throw new at(47,\"Cannot autofix a lockfile when running an immutable install\");let[n,s]=T3e(i),o,a;try{o=yi(n),a=yi(s)}catch{throw new at(46,\"The individual variants of the lockfile failed to parse\")}let l={...o,...a};for(let[c,u]of Object.entries(l))typeof u==\"string\"&&delete l[c];return await O.changeFilePromise(t,ba(l),{automaticNewlines:!0}),!0}function T3e(r){let e=[[],[]],t=r.split(/\\r?\\n/g),i=!1;for(;t.length>0;){let n=t.shift();if(typeof n>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(n.startsWith(hae)){for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s===F3e){i=!1;break}else if(i||s.startsWith(k3e)){i=!0;continue}else e[0].push(s)}for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s.startsWith(R3e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(`\n`),e[1].join(`\n`)]}var wu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Link all workspaces belonging to the target project to the current one\"});this.private=z.Boolean(\"-p,--private\",!1,{description:\"Also link private workspaces belonging to the target project to the current one\"});this.relative=z.Boolean(\"-r,--relative\",!1,{description:\"Link workspaces using relative paths instead of absolute paths\"});this.destination=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=x.resolve(this.context.cwd,K.toPortablePath(this.destination)),a=await ye.find(o,this.context.plugins,{useRc:!1,strict:!1}),{project:l,workspace:c}=await je.find(a,o);if(i.cwd===l.cwd)throw new Qe(\"Invalid destination; Can't link the project to itself\");if(!c)throw new ct(l.cwd,o);let u=i.topLevelWorkspace,g=[];if(this.all){for(let h of l.workspaces)h.manifest.name&&(!h.manifest.private||this.private)&&g.push(h);if(g.length===0)throw new Qe(\"No workspace found to be linked in the target project\")}else{if(!c.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be linked\");if(c.manifest.private&&!this.private)throw new Qe(\"The target workspace is marked private - use the --private flag to link it anyway\");g.push(c)}for(let h of g){let p=P.stringifyIdent(h.locator),C=this.relative?x.relative(i.cwd,h.cwd):h.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:p}},reference:`portal:${C}`})}return(await Ge.start({configuration:t,stdout:this.context.stdout},async h=>{await i.install({cache:s,report:h})})).exitCode()}};wu.paths=[[\"link\"]],wu.usage=ve.Usage({description:\"connect the local project to another one\",details:\"\\n      This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\\n    \",examples:[[\"Register a remote workspace for use in the current project\",\"$0 link ~/ts-loader\"],[\"Register all workspaces from a remote project for use in the current project\",\"$0 link ~/jest --all\"]]});var Bu=class extends De{constructor(){super(...arguments);this.args=z.Proxy()}async execute(){return this.cli.run([\"exec\",\"node\",...this.args])}};Bu.paths=[[\"node\"]],Bu.usage=ve.Usage({description:\"run node with the hook already setup\",details:`\n      This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n\n      The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version.\n    `,examples:[[\"Run a Node script\",\"$0 node ./my-script.js\"]]});var Iae=J(\"os\");var pae=J(\"os\");var L3e=\"https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml\";async function Qu(r){let e=await Xt.get(L3e,{configuration:r});return yi(e.toString())}var bu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{let s=await Qu(t);for(let[o,{experimental:a,...l}]of Object.entries(s)){let c=o;a&&(c+=\" [experimental]\"),n.reportJson({name:o,experimental:a,...l}),n.reportInfo(null,c)}})).exitCode()}};bu.paths=[[\"plugin\",\"list\"]],bu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the available official plugins\",details:\"\\n      This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\\n    \",examples:[[\"List the official plugins\",\"$0 plugin list\"]]});var M3e=/^[0-9]+$/;function dae(r){return M3e.test(r)?`pull/${r}/head`:r}var O3e=({repository:r,branch:e},t)=>[[\"git\",\"init\",K.fromPortablePath(t)],[\"git\",\"remote\",\"add\",\"origin\",r],[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(e)],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"]],K3e=({branch:r})=>[[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(r),\"--force\"],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"],[\"git\",\"clean\",\"-dfx\"]],U3e=({plugins:r,noMinify:e},t)=>[[\"yarn\",\"build:cli\",...new Array().concat(...r.map(i=>[\"--plugin\",x.resolve(t,i)])),...e?[\"--no-minify\"]:[],\"|\"]],Su=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.plugins=z.Array(\"--plugin\",[],{description:\"An array of additional plugins that should be included in the bundle\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a bundle for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.skipPlugins=z.Boolean(\"--skip-plugins\",!1,{description:\"Skip updating the contrib plugins\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,pae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async o=>{await tM(this,{configuration:t,report:o,target:n}),o.reportSeparator(),o.reportInfo(0,\"Building a fresh bundle\"),o.reportSeparator(),await Wm(U3e(this,n),{configuration:t,context:this.context,target:n}),o.reportSeparator();let a=x.resolve(n,\"packages/yarnpkg-cli/bundles/yarn.js\"),l=await O.readFilePromise(a);await eM(t,\"sources\",l,{report:o}),this.skipPlugins||await H3e(this,{project:i,report:o,target:n})})).exitCode()}};Su.paths=[[\"set\",\"version\",\"from\",\"sources\"]],Su.usage=ve.Usage({description:\"build Yarn from master\",details:`\n      This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project.\n\n      By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \\`--skip-plugins\\` flag.\n    `,examples:[[\"Build Yarn from master\",\"$0 set version from sources\"]]});async function Wm(r,{configuration:e,context:t,target:i}){for(let[n,...s]of r){let o=s[s.length-1]===\"|\";if(o&&s.pop(),o)await Cr.pipevp(n,s,{cwd:i,stdin:t.stdin,stdout:t.stdout,stderr:t.stderr,strict:!0});else{t.stdout.write(`${ee.pretty(e,`  $ ${[n,...s].join(\" \")}`,\"grey\")}\n`);try{await Cr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw t.stdout.write(a.stdout||a.stack),a}}}}async function tM(r,{configuration:e,report:t,target:i}){let n=!1;if(!r.force&&O.existsSync(x.join(i,\".git\"))){t.reportInfo(0,\"Fetching the latest commits\"),t.reportSeparator();try{await Wm(K3e(r),{configuration:e,context:r.context,target:i}),n=!0}catch{t.reportSeparator(),t.reportWarning(0,\"Repository update failed; we'll try to regenerate it\")}}n||(t.reportInfo(0,\"Cloning the remote repository\"),t.reportSeparator(),await O.removePromise(i),await O.mkdirPromise(i,{recursive:!0}),await Wm(O3e(r,i),{configuration:e,context:r.context,target:i}))}async function H3e(r,{project:e,report:t,target:i}){let n=await Qu(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await rM(o,r,{project:e,report:t,target:i})}var Cae=Pe(Xr()),mae=J(\"url\"),Eae=J(\"vm\");var vu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,stdout:this.context.stdout},async n=>{let{project:s}=await je.find(t,this.context.cwd),o,a;if(this.name.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.name)){let l=x.resolve(this.context.cwd,K.toPortablePath(this.name));n.reportInfo(0,`Reading ${ee.pretty(t,l,ee.Type.PATH)}`),o=x.relative(s.cwd,l),a=await O.readFilePromise(l)}else{let l;if(this.name.match(/^https?:/)){try{new mae.URL(this.name)}catch{throw new at(52,`Plugin specifier \"${this.name}\" is neither a plugin name nor a valid url`)}o=this.name,l=this.name}else{let c=P.parseLocator(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\"));if(c.reference!==\"unknown\"&&!Cae.default.valid(c.reference))throw new at(0,\"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.\");let u=P.stringifyIdent(c),g=await Qu(t);if(!Object.prototype.hasOwnProperty.call(g,u))throw new at(51,`Couldn't find a plugin named \"${u}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);o=u,l=g[u].url,c.reference!==\"unknown\"?l=l.replace(/\\/master\\//,`/${u}/${c.reference}/`):Tr!==null&&(l=l.replace(/\\/master\\//,`/@yarnpkg/cli/${Tr}/`))}n.reportInfo(0,`Downloading ${ee.pretty(t,l,\"green\")}`),a=await Xt.get(l,{configuration:t})}await iM(o,a,{project:s,report:n})})).exitCode()}};vu.paths=[[\"plugin\",\"import\"]],vu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"download a plugin\",details:`\n      This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations.\n\n      Three types of plugin references are accepted:\n\n      - If the plugin is stored within the Yarn repository, it can be referenced by name.\n      - Third-party plugins can be referenced directly through their public urls.\n      - Local plugins can be referenced by their path on the disk.\n\n      Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \\`@yarnpkg/builder\\` package).\n    `,examples:[['Download and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import @yarnpkg/plugin-exec\"],['Download and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import exec\"],[\"Download and activate a community plugin\",\"$0 plugin import https://example.org/path/to/plugin.js\"],[\"Activate a local plugin\",\"$0 plugin import ./path/to/plugin.js\"]]});async function iM(r,e,{project:t,report:i}){let{configuration:n}=t,s={},o={exports:s};(0,Eae.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=x.resolve(t.cwd,l);i.reportInfo(0,`Saving the new plugin in ${ee.pretty(n,l,\"magenta\")}`),await O.mkdirPromise(x.dirname(c),{recursive:!0}),await O.writeFilePromise(c,e);let u={path:l,spec:r};await ye.updateConfiguration(t.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let C=typeof p!=\"string\"?p.path:p,y=x.resolve(t.cwd,K.toPortablePath(C)),{name:B}=Ie.dynamicRequire(y);B!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),{...g,plugins:f}})}var G3e=({pluginName:r,noMinify:e},t)=>[[\"yarn\",`build:${r}`,...e?[\"--no-minify\"]:[],\"|\"]],xu=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a plugin for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,Iae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let{project:o}=await je.find(t,this.context.cwd),a=P.parseIdent(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\")),l=P.stringifyIdent(a),c=await Qu(t);if(!Object.prototype.hasOwnProperty.call(c,l))throw new at(51,`Couldn't find a plugin named \"${l}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let u=l;await tM(this,{configuration:t,report:s,target:i}),await rM(u,this,{project:o,report:s,target:i})})).exitCode()}};xu.paths=[[\"plugin\",\"import\",\"from\",\"sources\"]],xu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"build a plugin from sources\",details:`\n      This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations.\n\n      The plugins can be referenced by their short name if sourced from the official Yarn repository.\n    `,examples:[['Build and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import from sources @yarnpkg/plugin-exec\"],['Build and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import from sources exec\"]]});async function rM(r,{context:e,noMinify:t},{project:i,report:n,target:s}){let o=r.replace(/@yarnpkg\\//,\"\"),{configuration:a}=i;n.reportSeparator(),n.reportInfo(0,`Building a fresh ${o}`),n.reportSeparator(),await Wm(G3e({pluginName:o,noMinify:t},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=x.resolve(s,`packages/${o}/bundles/${r}.js`),c=await O.readFilePromise(l);await iM(r,c,{project:i,report:n})}var Pu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let o=this.name,a=P.parseIdent(o);if(!t.plugins.has(o))throw new Qe(`${P.prettyIdent(t,a)} isn't referenced by the current configuration`);let l=`.yarn/plugins/${o}.cjs`,c=x.resolve(i.cwd,l);O.existsSync(c)&&(s.reportInfo(0,`Removing ${ee.pretty(t,l,ee.Type.PATH)}...`),await O.removePromise(c)),s.reportInfo(0,\"Updating the configuration...\"),await ye.updateConfiguration(i.cwd,u=>{if(!Array.isArray(u.plugins))return u;let g=u.plugins.filter(f=>f.path!==l);return u.plugins.length===g.length?u:{...u,plugins:g}})})).exitCode()}};Pu.paths=[[\"plugin\",\"remove\"]],Pu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"remove a plugin\",details:`\n      This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration.\n\n      **Note:** The plugins have to be referenced by their name property, which can be obtained using the \\`yarn plugin runtime\\` command. Shorthands are not allowed.\n   `,examples:[[\"Remove a plugin imported from the Yarn repository\",\"$0 plugin remove @yarnpkg/plugin-typescript\"],[\"Remove a plugin imported from a local file\",\"$0 plugin remove my-local-plugin\"]]});var Du=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{for(let s of t.plugins.keys()){let o=this.context.plugins.plugins.has(s),a=s;o&&(a+=\" [builtin]\"),n.reportJson({name:s,builtin:o}),n.reportInfo(null,`${a}`)}})).exitCode()}};Du.paths=[[\"plugin\",\"runtime\"]],Du.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the active plugins\",details:`\n      This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins.\n    `,examples:[[\"List the currently active plugins\",\"$0 plugin runtime\"]]});var ku=class extends De{constructor(){super(...arguments);this.idents=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=new Set;for(let l of this.idents)o.add(P.parseIdent(l).identHash);if(await i.restoreInstallState({restoreResolutions:!1}),await i.resolveEverything({cache:s,report:new ti}),o.size>0)for(let l of i.storedPackages.values())o.has(l.identHash)&&i.storedBuildState.delete(l.locatorHash);else i.storedBuildState.clear();return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async l=>{await i.install({cache:s,report:l})})).exitCode()}};ku.paths=[[\"rebuild\"]],ku.usage=ve.Usage({description:\"rebuild the project's native packages\",details:`\n      This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again.\n\n      Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future).\n\n      By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory.\n    `,examples:[[\"Rebuild all packages\",\"$0 rebuild\"],[\"Rebuild fsevents only\",\"$0 rebuild fsevents\"]]});var nM=Pe(Bn());ls();var Ru=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Apply the operation to all workspaces from the current project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=this.all?i.workspaces:[n],a=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],l=[],c=!1,u=[];for(let p of this.patterns){let C=!1,y=P.parseIdent(p);for(let B of o){let v=[...B.manifest.peerDependenciesMeta.keys()];for(let D of(0,nM.default)(v,p))B.manifest.peerDependenciesMeta.delete(D),c=!0,C=!0;for(let D of a){let T=B.manifest.getForScope(D),H=[...T.values()].map(j=>P.stringifyIdent(j));for(let j of(0,nM.default)(H,P.stringifyIdent(y))){let{identHash:$}=P.parseIdent(j),V=T.get($);if(typeof V>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");B.manifest[D].delete($),u.push([B,D,V]),c=!0,C=!0}}}C||l.push(p)}let g=l.length>1?\"Patterns\":\"Pattern\",f=l.length>1?\"don't\":\"doesn't\",h=this.all?\"any\":\"this\";if(l.length>0)throw new Qe(`${g} ${ee.prettyList(t,l,xi.CODE)} ${f} match any packages referenced by ${h} workspace`);return c?(await t.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,u),(await Ge.start({configuration:t,stdout:this.context.stdout},async C=>{await i.install({cache:s,report:C,mode:this.mode})})).exitCode()):0}};Ru.paths=[[\"remove\"]],Ru.usage=ve.Usage({description:\"remove dependencies from the project\",details:`\n      This command will remove the packages matching the specified patterns from the current workspace.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n    `,examples:[[\"Remove a dependency from the current project\",\"$0 remove lodash\"],[\"Remove a dependency from all workspaces at once\",\"$0 remove lodash --all\"],[\"Remove all dependencies starting with `eslint-`\",\"$0 remove 'eslint-*'\"],[\"Remove all dependencies with the `@babel` scope\",\"$0 remove '@babel/*'\"],[\"Remove all dependencies matching `react-dom` or `react-helmet`\",\"$0 remove 'react-{dom,helmet}'\"]]});var yae=J(\"util\"),_h=class extends De{async execute(){let e=await ye.find(this.context.cwd,this.context.plugins),{project:t,workspace:i}=await je.find(e,this.context.cwd);if(!i)throw new ct(t.cwd,this.context.cwd);return(await Ge.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=Ie.sortMap(o.keys(),u=>u),l={breakLength:1/0,colors:e.get(\"enableColors\"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c,\" \")}   ${(0,yae.inspect)(g,l)}`)})).exitCode()}};_h.paths=[[\"run\"]];var Fu=class extends De{constructor(){super(...arguments);this.inspect=z.String(\"--inspect\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.inspectBrk=z.String(\"--inspect-brk\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.topLevel=z.Boolean(\"-T,--top-level\",!1,{description:\"Check the root workspace for scripts and/or binaries instead of the current one\"});this.binariesOnly=z.Boolean(\"-B,--binaries-only\",!1,{description:\"Ignore any user defined scripts and only check for binaries\"});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.scriptName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n,locator:s}=await je.find(t,this.context.cwd);await i.restoreInstallState();let o=this.topLevel?i.topLevelWorkspace.anchoredLocator:s;if(!this.binariesOnly&&await Wt.hasPackageScript(o,this.scriptName,{project:i}))return await Wt.executePackageScript(o,this.scriptName,this.args,{project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let a=await Wt.getPackageAccessibleBinaries(o,{project:i});if(a.get(this.scriptName)){let c=[];return this.inspect&&(typeof this.inspect==\"string\"?c.push(`--inspect=${this.inspect}`):c.push(\"--inspect\")),this.inspectBrk&&(typeof this.inspectBrk==\"string\"?c.push(`--inspect-brk=${this.inspectBrk}`):c.push(\"--inspect-brk\")),await Wt.executePackageAccessibleBinary(o,this.scriptName,this.args,{cwd:this.context.cwd,project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:c,packageAccessibleBinaries:a})}if(!this.topLevel&&!this.binariesOnly&&n&&this.scriptName.includes(\":\")){let u=(await Promise.all(i.workspaces.map(async g=>g.manifest.scripts.has(this.scriptName)?g:null))).filter(g=>g!==null);if(u.length===1)return await Wt.executeWorkspaceScript(u[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName===\"node-gyp\"?new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}). This typically happens because some package depends on \"node-gyp\" to build itself, but didn't list it in their dependencies. To fix that, please run \"yarn add node-gyp\" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}).`);{if(this.scriptName===\"global\")throw new Qe(\"The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead\");let c=[this.scriptName].concat(this.args);for(let[u,g]of vh)for(let f of g)if(c.length>=f.length&&JSON.stringify(c.slice(0,f.length))===JSON.stringify(f))throw new Qe(`Couldn't find a script named \"${this.scriptName}\", but a matching command can be found in the ${u} plugin. You can install it with \"yarn plugin import ${u}\".`);throw new Qe(`Couldn't find a script named \"${this.scriptName}\".`)}}};Fu.paths=[[\"run\"]],Fu.usage=ve.Usage({description:\"run a script defined in the package.json\",details:`\n      This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace:\n\n      - If the \\`scripts\\` field from your local package.json contains a matching script name, its definition will get executed.\n\n      - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed.\n\n      - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed.\n\n      Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax).\n    `,examples:[[\"Run the tests from the local workspace\",\"$0 run test\"],['Same thing, but without the \"run\" keyword',\"$0 test\"],[\"Inspect Webpack while running\",\"$0 run --inspect-brk webpack\"]]});var Nu=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Persist the resolution inside the top-level manifest\"});this.descriptor=z.String();this.resolution=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(await i.restoreInstallState({restoreResolutions:!1}),!n)throw new ct(i.cwd,this.context.cwd);let o=P.parseDescriptor(this.descriptor,!0),a=P.makeDescriptor(o,this.resolution);return i.storedDescriptors.set(o.descriptorHash,o),i.storedDescriptors.set(a.descriptorHash,a),i.resolutionAliases.set(o.descriptorHash,a.descriptorHash),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Nu.paths=[[\"set\",\"resolution\"]],Nu.usage=ve.Usage({description:\"enforce a package resolution\",details:'\\n      This command updates the resolution table so that `descriptor` is resolved by `resolution`.\\n\\n      Note that by default this command only affect the current resolution table - meaning that this \"manual override\" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\\n\\n      Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\\n    ',examples:[[\"Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0\",\"$0 set resolution lodash@npm:^1.2.3 1.5.0\"]]});var wae=Pe(Bn()),Tu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unlink all workspaces belonging to the target project from the current one\"});this.leadingArguments=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=i.topLevelWorkspace,a=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:c,reference:u}of o.manifest.resolutions)u.startsWith(\"portal:\")&&a.add(c.descriptor.fullName);if(this.leadingArguments.length>0)for(let c of this.leadingArguments){let u=x.resolve(this.context.cwd,K.toPortablePath(c));if(Ie.isPathLike(c)){let g=await ye.find(u,this.context.plugins,{useRc:!1,strict:!1}),{project:f,workspace:h}=await je.find(g,u);if(!h)throw new ct(f.cwd,u);if(this.all){for(let p of f.workspaces)p.manifest.name&&a.add(P.stringifyIdent(p.locator));if(a.size===0)throw new Qe(\"No workspace found to be unlinked in the target project\")}else{if(!h.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be unlinked\");a.add(P.stringifyIdent(h.locator))}}else{let g=[...o.manifest.resolutions.map(({pattern:f})=>f.descriptor.fullName)];for(let f of(0,wae.default)(g,c))a.add(f)}}return o.manifest.resolutions=o.manifest.resolutions.filter(({pattern:c})=>!a.has(c.descriptor.fullName)),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Tu.paths=[[\"unlink\"]],Tu.usage=ve.Usage({description:\"disconnect the local project from another one\",details:`\n      This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments.\n    `,examples:[[\"Unregister a remote workspace in the current project\",\"$0 unlink ~/ts-loader\"],[\"Unregister all workspaces from a remote project in the current project\",\"$0 unlink ~/jest --all\"],[\"Unregister all previously linked workspaces\",\"$0 unlink --all\"],[\"Unregister all workspaces matching a glob\",\"$0 unlink '@babel/*' 'pkg-{a,b}'\"]]});var Bae=Pe(Km()),sM=Pe(Bn());ls();var El=class extends De{constructor(){super(...arguments);this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Offer various choices, depending on the detected upgrade paths\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Resolve again ALL resolutions for those packages\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=[...i.storedDescriptors.values()],a=o.map(g=>P.stringifyIdent(g)),l=new Set;for(let g of this.patterns){if(P.parseDescriptor(g).range!==\"unknown\")throw new Qe(\"Ranges aren't allowed when using --recursive\");for(let f of(0,sM.default)(a,g)){let h=P.parseIdent(f);l.add(h.identHash)}}let c=o.filter(g=>l.has(g.identHash));for(let g of c)i.storedDescriptors.delete(g.descriptorHash),i.storedResolutions.delete(g.descriptorHash);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{await i.install({cache:s,report:g})})).exitCode()}async executeUpClassic(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=o?[\"keep\",\"reuse\",\"project\",\"latest\"]:[\"project\",\"latest\"],c=[],u=[];for(let B of this.patterns){let v=!1,D=P.parseDescriptor(B);for(let T of i.workspaces)for(let H of[\"dependencies\",\"devDependencies\"]){let $=[...T.manifest.getForScope(H).values()].map(V=>P.stringifyIdent(V));for(let V of(0,sM.default)($,P.stringifyIdent(D))){let W=P.parseIdent(V),_=T.manifest[H].get(W.identHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");let A=P.makeDescriptor(W,D.range);c.push(Promise.resolve().then(async()=>[T,H,_,await Gm(A,{project:i,workspace:T,cache:s,target:H,modifier:a,strategies:l})])),v=!0}}v||u.push(B)}if(u.length>1)throw new Qe(`Patterns ${ee.prettyList(t,u,xi.CODE)} don't match any packages referenced by any workspace`);if(u.length>0)throw new Qe(`Pattern ${ee.prettyList(t,u,xi.CODE)} doesn't match any packages referenced by any workspace`);let g=await Promise.all(c),f=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let[,,v,{suggestions:D,rejections:T}]of g){let H=D.filter(j=>j.descriptor!==null);if(H.length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");let $=this.cli.error(j);i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range\n\n${$}`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)\n\n${$}`)}else H.length>1&&!o&&B.reportError(27,`${P.prettyDescriptor(t,v)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(f.hasErrors())return f.exitCode();let h=!1,p=[];for(let[B,v,,{suggestions:D}]of g){let T,H=D.filter(W=>W.descriptor!==null),j=H[0].descriptor,$=H.every(W=>P.areDescriptorsEqual(W.descriptor,j));H.length===1||$?T=j:(h=!0,{answer:T}=await(0,Bae.prompt)({type:\"select\",name:\"answer\",message:`Which range to you want to use in ${P.prettyWorkspace(t,B)} \\u276F ${v}?`,choices:D.map(({descriptor:W,name:_,reason:A})=>W?{name:_,hint:A,descriptor:W}:{name:_,hint:A,disabled:!0}),onCancel:()=>process.exit(130),result(W){return this.find(W,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let V=B.manifest[v].get(T.identHash);if(typeof V>\"u\")throw new Error(\"Assertion failed: This descriptor should have a matching entry\");if(V.descriptorHash!==T.descriptorHash)B.manifest[v].set(T.identHash,T),p.push([B,v,V,T]);else{let W=t.makeResolver(),_={project:i,resolver:W},A=W.bindDescriptor(V,B.anchoredLocator,_);i.forgetResolution(A)}}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),h&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,stdout:this.context.stdout},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};El.paths=[[\"up\"]],El.usage=ve.Usage({description:\"upgrade dependencies across the project\",details:\"\\n      This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\\n\\n      If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\\n\\n      If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\\n\\n      The, `-C,--caret`, `-E,--exact` and  `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\\n\\n      This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\\n    \",examples:[[\"Upgrade all instances of lodash to the latest release\",\"$0 up lodash\"],[\"Upgrade all instances of lodash to the latest release, but ask confirmation for each\",\"$0 up lodash -i\"],[\"Upgrade all instances of lodash to 1.2.3\",\"$0 up lodash@1.2.3\"],[\"Upgrade all instances of packages with the `@babel` scope to the latest release\",\"$0 up '@babel/*'\"],[\"Upgrade all instances of packages containing the word `jest` to the latest release\",\"$0 up '*jest*'\"],[\"Upgrade all instances of packages with the `@babel` scope to 7.0.0\",\"$0 up '@babel/*@7.0.0'\"]]}),El.schema=[av(\"recursive\",lc.Forbids,[\"interactive\",\"exact\",\"tilde\",\"caret\"],{ignore:[void 0,!1]})];var Lu=class extends De{constructor(){super(...arguments);this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"List, for each workspace, what are all the paths that lead to the dependency\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.peers=z.Boolean(\"--peers\",!1,{description:\"Also print the peer dependencies that match the specified name\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=P.parseIdent(this.package).identHash,o=this.recursive?j3e(i,s,{configuration:t,peers:this.peers}):Y3e(i,s,{configuration:t,peers:this.peers});es.emitTree(o,{configuration:t,stdout:this.context.stdout,json:this.json,separators:1})}};Lu.paths=[[\"why\"]],Lu.usage=ve.Usage({description:\"display the reason why a package is needed\",details:`\n      This command prints the exact reasons why a package appears in the dependency tree.\n\n      If \\`-R,--recursive\\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named \"Foo\" when looking for \"Bar\", it means that \"Foo\" already got printed higher in the tree.\n    `,examples:[[\"Explain why lodash is used in your project\",\"$0 why lodash\"]]});function Y3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.storedPackages.values(),a=>P.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={};for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=r.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(\"Assertion failed: The resolution should have been registered\");let f=r.storedPackages.get(g);if(!f)throw new Error(\"Assertion failed: The package should have been registered\");if(f.identHash!==e)continue;{let p=P.stringifyLocator(a);s[p]={value:[a,ee.Type.LOCATOR],children:l}}let h=P.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},ee.Type.DEPENDENT]}}}return o}function j3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.workspaces,f=>P.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let C=r.storedResolutions.get(p.descriptorHash);if(!C)throw new Error(\"Assertion failed: The resolution should have been registered\");let y=r.storedPackages.get(C);if(!y)throw new Error(\"Assertion failed: The package should have been registered\");a(y)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let C=p!==null?ee.tuple(ee.Type.DEPENDENT,{locator:f,descriptor:p}):ee.tuple(ee.Type.LOCATOR,f),y={},B={value:C,children:y},v=P.stringifyLocator(f);if(h[v]=B,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&r.tryWorkspaceByLocator(f))))for(let D of f.dependencies.values()){if(!i&&f.peerDependencies.has(D.identHash))continue;let T=r.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=r.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");g(H,y,D)}};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");g(h,c,null)}return u}var dM={};ut(dM,{default:()=>c4e,gitUtils:()=>AA});var AA={};ut(AA,{TreeishProtocols:()=>Lb,clone:()=>pM,fetchBase:()=>qae,fetchChangedFiles:()=>Jae,fetchChangedWorkspaces:()=>A4e,fetchRoot:()=>jae,isGitUrl:()=>ep,lsRemote:()=>Yae,normalizeLocator:()=>fM,normalizeRepoUrl:()=>Vm,resolveUrl:()=>hM,splitRepoUrl:()=>zm});var gM=Pe(Mae()),Hae=Pe(PB()),$h=Pe(J(\"querystring\")),cM=Pe(Xr());var Kae=J(\"url\");function lM(r,e,t){let i=r.indexOf(t);return r.lastIndexOf(e,i>-1?i:1/0)}function Oae(r){try{return new Kae.URL(r)}catch{return}}function o4e(r){let e=lM(r,\"@\",\"#\"),t=lM(r,\":\",\"#\");return t>e&&(r=`${r.slice(0,t)}/${r.slice(t+1)}`),lM(r,\":\",\"#\")===-1&&r.indexOf(\"//\")===-1&&(r=`ssh://${r}`),r}function Uae(r){return Oae(r)||Oae(o4e(r))}function Gae(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||\"ssh\"} -o BatchMode=yes`}}var a4e=[/^ssh:/,/^git(?:\\+[^:]+)?:/,/^(?:git\\+)?https?:[^#]+\\/[^#]+(?:\\.git)(?:#.*)?$/,/^git@[^#]+\\/[^#]+\\.git(?:#.*)?$/,/^(?:github:|https:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z._0-9-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\\.git)?(?:#.*)?$/,/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/],Lb=(n=>(n.Commit=\"commit\",n.Head=\"head\",n.Tag=\"tag\",n.Semver=\"semver\",n))(Lb||{});function ep(r){return r?a4e.some(e=>!!r.match(e)):!1}function zm(r){r=Vm(r);let e=r.indexOf(\"#\");if(e===-1)return{repo:r,treeish:{protocol:\"head\",request:\"HEAD\"},extra:{}};let t=r.slice(0,e),i=r.slice(e+1);if(i.match(/^[a-z]+=/)){let n=$h.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!=\"string\")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(Lb).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s<\"u\"?(o=s,a=n[s]):(o=\"head\",a=\"HEAD\");for(let l of Object.values(Lb))delete n[l];return{repo:t,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(\":\"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:t,treeish:{protocol:s,request:o},extra:{}}}}function Vm(r,{git:e=!1}={}){if(r=r.replace(/^git\\+https:/,\"https:\"),r=r.replace(/^(?:github:|https:\\/\\/github\\.com\\/|git:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\\.git)?(#.*)?$/,\"https://github.com/$1/$2.git$3\"),r=r.replace(/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/,\"https://github.com/$1/$2.git#$3\"),e){let t=Uae(r);t&&(r=t.href),r=r.replace(/^git\\+([^:]+):/,\"$1:\")}return r}function fM(r){return P.makeLocator(r,Vm(r.reference))}async function Yae(r,e){let t=Vm(r,{git:!0});if(!Xt.getNetworkSettings(`https://${(0,gM.default)(t).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${t}' has been blocked because of your configuration settings`);let n=await uM(\"listing refs\",[\"ls-remote\",t],{cwd:e.startingCwd,env:Gae()},{configuration:e,normalizedRepoUrl:t}),s=new Map,o=/^([a-f0-9]{40})\\t([^\\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function hM(r,e){let{repo:t,treeish:{protocol:i,request:n},extra:s}=zm(r),o=await Yae(t,e),a=(c,u)=>{switch(c){case\"commit\":{if(!u.match(/^[a-f0-9]{40}$/))throw new Error(\"Invalid commit hash\");return $h.default.stringify({...s,commit:u})}case\"head\":{let g=o.get(u===\"HEAD\"?u:`refs/heads/${u}`);if(typeof g>\"u\")throw new Error(`Unknown head (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"tag\":{let g=o.get(`refs/tags/${u}`);if(typeof g>\"u\")throw new Error(`Unknown tag (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"semver\":{let g=vt.validRange(u);if(!g)throw new Error(`Invalid range (\"${u}\")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith(\"refs/tags/\")).map(([p,C])=>[cM.default.parse(p.slice(10)),C]).filter(p=>p[0]!==null)),h=cM.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range (\"${u}\")`);return $h.default.stringify({...s,commit:f.get(h)})}case null:{let g;if((g=l(\"commit\",u))!==null||(g=l(\"tag\",u))!==null||(g=l(\"head\",u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol (\"${c}\")`)}},l=(c,u)=>{try{return a(c,u)}catch{return null}};return`${t}#${a(i,n)}`}async function pM(r,e){return await e.getLimit(\"cloneConcurrency\")(async()=>{let{repo:t,treeish:{protocol:i,request:n}}=zm(r);if(i!==\"commit\")throw new Error(\"Invalid treeish protocol when cloning\");let s=Vm(t,{git:!0});if(Xt.getNetworkSettings(`https://${(0,gM.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await O.mktempPromise(),a={cwd:o,env:Gae()};return await uM(\"cloning the repository\",[\"clone\",\"-c core.autocrlf=false\",s,K.fromPortablePath(o)],a,{configuration:e,normalizedRepoUrl:s}),await uM(\"switching branch\",[\"checkout\",`${n}`],a,{configuration:e,normalizedRepoUrl:s}),o})}async function jae(r){let e=null,t,i=r;do t=i,await O.existsPromise(x.join(t,\".git\"))&&(e=t),i=x.dirname(t);while(e===null&&i!==t);return e}async function qae(r,{baseRefs:e}){if(e.length===0)throw new Qe(\"Can't run this command with zero base refs specified.\");let t=[];for(let a of e){let{code:l}=await Cr.execvp(\"git\",[\"merge-base\",a,\"HEAD\"],{cwd:r});l===0&&t.push(a)}if(t.length===0)throw new Qe(`No ancestor could be found between any of HEAD and ${e.join(\", \")}`);let{stdout:i}=await Cr.execvp(\"git\",[\"merge-base\",\"HEAD\",...t],{cwd:r,strict:!0}),n=i.trim(),{stdout:s}=await Cr.execvp(\"git\",[\"show\",\"--quiet\",\"--pretty=format:%s\",n],{cwd:r,strict:!0}),o=s.trim();return{hash:n,title:o}}async function Jae(r,{base:e,project:t}){let i=Ie.buildIgnorePattern(t.configuration.get(\"changesetIgnorePatterns\")),{stdout:n}=await Cr.execvp(\"git\",[\"diff\",\"--name-only\",`${e}`],{cwd:r,strict:!0}),s=n.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),{stdout:o}=await Cr.execvp(\"git\",[\"ls-files\",\"--others\",\"--exclude-standard\"],{cwd:r,strict:!0}),a=o.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),l=[...new Set([...s,...a].sort())];return i?l.filter(c=>!x.relative(t.cwd,c).match(i)):l}async function A4e({ref:r,project:e}){if(e.configuration.projectCwd===null)throw new Qe(\"This command can only be run from within a Yarn project\");let t=[x.resolve(e.cwd,e.configuration.get(\"cacheFolder\")),x.resolve(e.cwd,e.configuration.get(\"installStatePath\")),x.resolve(e.cwd,e.configuration.get(\"lockfileFilename\")),x.resolve(e.cwd,e.configuration.get(\"virtualFolder\"))];await e.configuration.triggerHook(o=>o.populateYarnPaths,e,o=>{o!=null&&t.push(o)});let i=await jae(e.configuration.projectCwd);if(i==null)throw new Qe(\"This command can only be run on Git repositories\");let n=await qae(i,{baseRefs:typeof r==\"string\"?[r]:e.configuration.get(\"changesetBaseRefs\")}),s=await Jae(i,{base:n.hash,project:e});return new Set(Ie.mapAndFilter(s,o=>{let a=e.tryWorkspaceByFilePath(o);return a===null?Ie.mapAndFilter.skip:t.some(l=>o.startsWith(l))?Ie.mapAndFilter.skip:a}))}async function uM(r,e,t,{configuration:i,normalizedRepoUrl:n}){try{return await Cr.execvp(\"git\",e,{...t,strict:!0})}catch(s){if(!(s instanceof Cr.ExecError))throw s;let o=s.reportExtra,a=s.stderr.toString();throw new at(1,`Failed ${r}`,l=>{l.reportError(1,`  ${ee.prettyField(i,{label:\"Repository URL\",value:ee.tuple(ee.Type.URL,n)})}`);for(let c of a.matchAll(/^(.+?): (.*)$/gm)){let[,u,g]=c;u=u.toLowerCase();let f=u===\"error\"?\"Error\":`${(0,Hae.default)(u)} Error`;l.reportError(1,`  ${ee.prettyField(i,{label:f,value:ee.tuple(ee.Type.NO_HINT,g)})}`)}o==null||o(l)})}}var Mb=class{supports(e,t){return ep(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,n=fM(e),s=new Map(t.checksums);s.set(n.locatorHash,i);let o={...t,checksums:s},a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:l,releaseFs:c,prefixPath:P.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,t){return t.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,t)}async cloneFromRemote(e,t){let i=await pM(e.reference,t.project.configuration),n=zm(e.reference),s=x.join(i,\"package.tgz\");await Wt.prepareExternalProject(i,s,{configuration:t.project.configuration,report:t.report,workspace:n.extra.workspace,locator:e});let o=await O.readFilePromise(s);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(o,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}))}};var Ob=class{supportsDescriptor(e,t){return ep(e.range)}supportsLocator(e,t){return ep(e.reference)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=await hM(e.range,i.project.configuration);return[P.makeLocator(e,n)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var l4e={configuration:{changesetBaseRefs:{description:\"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.\",type:\"STRING\",isArray:!0,isNullable:!1,default:[\"master\",\"origin/master\",\"upstream/master\",\"main\",\"origin/main\",\"upstream/main\"]},changesetIgnorePatterns:{description:\"Array of glob patterns; files matching them will be ignored when fetching the changed files\",type:\"STRING\",default:[],isArray:!0},cloneConcurrency:{description:\"Maximal number of concurrent clones\",type:\"NUMBER\",default:2}},fetchers:[Mb],resolvers:[Ob]};var c4e=l4e;var Mu=class extends De{constructor(){super(...arguments);this.since=z.String(\"--since\",{description:\"Only include workspaces that have been changed since the specified ref.\",tolerateBoolean:!0});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Find packages via dependencies/devDependencies instead of using the workspaces field\"});this.noPrivate=z.Boolean(\"--no-private\",{description:\"Exclude workspaces that have the private field set to true\"});this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Also return the cross-dependencies between workspaces\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async s=>{let o=this.since?await AA.fetchChangedWorkspaces({ref:this.since,project:i}):i.workspaces,a=new Set(o);if(this.recursive)for(let l of[...o].map(c=>c.getRecursiveWorkspaceDependents()))for(let c of l)a.add(c);for(let l of a){let{manifest:c}=l;if(c.private&&this.noPrivate)continue;let u;if(this.verbose){let g=new Set,f=new Set;for(let h of ot.hardDependencies)for(let[p,C]of c.getForScope(h)){let y=i.tryWorkspaceByDescriptor(C);y===null?i.workspacesByIdent.has(p)&&f.add(C):g.add(y)}u={workspaceDependencies:Array.from(g).map(h=>h.relativeCwd),mismatchedWorkspaceDependencies:Array.from(f).map(h=>P.stringifyDescriptor(h))}}s.reportInfo(null,`${l.relativeCwd}`),s.reportJson({location:l.relativeCwd,name:c.name?P.stringifyIdent(c.name):null,...u})}})).exitCode()}};Mu.paths=[[\"workspaces\",\"list\"]],Mu.usage=ve.Usage({category:\"Workspace-related commands\",description:\"list all available workspaces\",details:\"\\n      This command will print the list of all workspaces in the project.\\n\\n      - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\\n\\n      - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\\n\\n      - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\\n\\n      - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\\n    \"});var Ou=class extends De{constructor(){super(...arguments);this.workspaceName=z.String();this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=i.workspaces,o=new Map(s.map(l=>[P.stringifyIdent(l.locator),l])),a=o.get(this.workspaceName);if(a===void 0){let l=Array.from(o.keys()).sort();throw new Qe(`Workspace '${this.workspaceName}' not found. Did you mean any of the following:\n  - ${l.join(`\n  - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:a.cwd})}};Ou.paths=[[\"workspace\"]],Ou.usage=ve.Usage({category:\"Workspace-related commands\",description:\"run a command within the specified workspace\",details:`\n      This command will run a given sub-command on a single workspace.\n    `,examples:[[\"Add a package to a single workspace\",\"yarn workspace components add -D react\"],[\"Run build script on a single workspace\",\"yarn workspace components run build\"]]});var u4e={configuration:{enableImmutableInstalls:{description:\"If true (the default on CI), prevents the install command from modifying the lockfile\",type:\"BOOLEAN\",default:Wae.isCI},defaultSemverRangePrefix:{description:\"The default save prefix: '^', '~' or ''\",type:\"STRING\",values:[\"^\",\"~\",\"\"],default:\"^\"}},commands:[cu,uu,gu,fu,Nu,Su,mu,Mu,Vh,Xh,qm,Zh,Au,lu,hu,pu,du,Cu,Eu,Iu,yu,wu,Tu,Bu,xu,vu,Pu,bu,Du,ku,Ru,_h,Fu,El,Lu,Ou]},g4e=u4e;var wM={};ut(wM,{default:()=>h4e});var Te={optional:!0},mM=[[\"@tailwindcss/aspect-ratio@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@tailwindcss/line-clamp@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0\",{peerDependencies:{postcss:\"^8.0.0\"}}],[\"@samverschueren/stream-to-observable@<0.3.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"any-observable@<0.5.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"@pm2/agent@<1.0.4\",{dependencies:{debug:\"*\"}}],[\"debug@<4.2.0\",{peerDependenciesMeta:{[\"supports-color\"]:Te}}],[\"got@<11\",{dependencies:{[\"@types/responselike\"]:\"^1.0.0\",[\"@types/keyv\"]:\"^3.1.1\"}}],[\"cacheable-lookup@<4.1.2\",{dependencies:{[\"@types/keyv\"]:\"^3.1.1\"}}],[\"http-link-dataloader@*\",{peerDependencies:{graphql:\"^0.13.1 || ^14.0.0\"}}],[\"typescript-language-server@*\",{dependencies:{[\"vscode-jsonrpc\"]:\"^5.0.1\",[\"vscode-languageserver-protocol\"]:\"^3.15.0\"}}],[\"postcss-syntax@*\",{peerDependenciesMeta:{[\"postcss-html\"]:Te,[\"postcss-jsx\"]:Te,[\"postcss-less\"]:Te,[\"postcss-markdown\"]:Te,[\"postcss-scss\"]:Te}}],[\"jss-plugin-rule-value-function@<=10.1.1\",{dependencies:{[\"tiny-warning\"]:\"^1.0.2\"}}],[\"ink-select-input@<4.1.0\",{peerDependencies:{react:\"^16.8.2\"}}],[\"license-webpack-plugin@<2.3.18\",{peerDependenciesMeta:{webpack:Te}}],[\"snowpack@>=3.3.0\",{dependencies:{[\"node-gyp\"]:\"^7.1.0\"}}],[\"promise-inflight@*\",{peerDependenciesMeta:{bluebird:Te}}],[\"reactcss@*\",{peerDependencies:{react:\"*\"}}],[\"react-color@<=2.19.0\",{peerDependencies:{react:\"*\"}}],[\"gatsby-plugin-i18n@*\",{dependencies:{ramda:\"^0.24.1\"}}],[\"useragent@^2.0.0\",{dependencies:{request:\"^2.88.0\",yamlparser:\"0.0.x\",semver:\"5.5.x\"}}],[\"@apollographql/apollo-tools@<=0.5.2\",{peerDependencies:{graphql:\"^14.2.1 || ^15.0.0\"}}],[\"material-table@^2.0.0\",{dependencies:{\"@babel/runtime\":\"^7.11.2\"}}],[\"@babel/parser@*\",{dependencies:{\"@babel/types\":\"^7.8.3\"}}],[\"fork-ts-checker-webpack-plugin@<=6.3.4\",{peerDependencies:{eslint:\">= 6\",typescript:\">= 2.7\",webpack:\">= 4\",\"vue-template-compiler\":\"*\"},peerDependenciesMeta:{eslint:Te,\"vue-template-compiler\":Te}}],[\"rc-animate@<=3.1.1\",{peerDependencies:{react:\">=16.9.0\",\"react-dom\":\">=16.9.0\"}}],[\"react-bootstrap-table2-paginator@*\",{dependencies:{classnames:\"^2.2.6\"}}],[\"react-draggable@<=4.4.3\",{peerDependencies:{react:\">= 16.3.0\",\"react-dom\":\">= 16.3.0\"}}],[\"apollo-upload-client@<14\",{peerDependencies:{graphql:\"14 - 15\"}}],[\"react-instantsearch-core@<=6.7.0\",{peerDependencies:{algoliasearch:\">= 3.1 < 5\"}}],[\"react-instantsearch-dom@<=6.7.0\",{dependencies:{\"react-fast-compare\":\"^3.0.0\"}}],[\"ws@<7.2.1\",{peerDependencies:{bufferutil:\"^4.0.1\",\"utf-8-validate\":\"^5.0.2\"},peerDependenciesMeta:{bufferutil:Te,\"utf-8-validate\":Te}}],[\"react-portal@<4.2.2\",{peerDependencies:{\"react-dom\":\"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0\"}}],[\"react-scripts@<=4.0.1\",{peerDependencies:{react:\"*\"}}],[\"testcafe@<=1.10.1\",{dependencies:{\"@babel/plugin-transform-for-of\":\"^7.12.1\",\"@babel/runtime\":\"^7.12.5\"}}],[\"testcafe-legacy-api@<=4.2.0\",{dependencies:{\"testcafe-hammerhead\":\"^17.0.1\",\"read-file-relative\":\"^1.2.0\"}}],[\"@google-cloud/firestore@<=4.9.3\",{dependencies:{protobufjs:\"^6.8.6\"}}],[\"gatsby-source-apiserver@*\",{dependencies:{[\"babel-polyfill\"]:\"^6.26.0\"}}],[\"@webpack-cli/package-utils@<=1.0.1-alpha.4\",{dependencies:{[\"cross-spawn\"]:\"^7.0.3\"}}],[\"gatsby-remark-prismjs@<3.3.28\",{dependencies:{lodash:\"^4\"}}],[\"gatsby-plugin-favicon@*\",{peerDependencies:{webpack:\"*\"}}],[\"gatsby-plugin-sharp@<=4.6.0-next.3\",{dependencies:{debug:\"^4.3.1\"}}],[\"gatsby-react-router-scroll@<=5.6.0-next.0\",{dependencies:{[\"prop-types\"]:\"^15.7.2\"}}],[\"@rebass/forms@*\",{dependencies:{[\"@styled-system/should-forward-prop\"]:\"^5.0.0\"},peerDependencies:{react:\"^16.8.6\"}}],[\"rebass@*\",{peerDependencies:{react:\"^16.8.6\"}}],[\"@ant-design/react-slick@<=0.28.3\",{peerDependencies:{react:\">=16.0.0\"}}],[\"mqtt@<4.2.7\",{dependencies:{duplexify:\"^4.1.1\"}}],[\"vue-cli-plugin-vuetify@<=2.0.3\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te,\"vuetify-loader\":Te}}],[\"vue-cli-plugin-vuetify@<=2.0.4\",{dependencies:{\"null-loader\":\"^3.0.0\"}}],[\"vue-cli-plugin-vuetify@>=2.4.3\",{peerDependencies:{vue:\"*\"}}],[\"@vuetify/cli-plugin-utils@<=0.0.4\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te}}],[\"@vue/cli-plugin-typescript@<=5.0.0-alpha.0\",{dependencies:{\"babel-loader\":\"^8.1.0\"}}],[\"@vue/cli-plugin-typescript@<=5.0.0-beta.0\",{dependencies:{\"@babel/core\":\"^7.12.16\"},peerDependencies:{\"vue-template-compiler\":\"^2.0.0\"},peerDependenciesMeta:{\"vue-template-compiler\":Te}}],[\"cordova-ios@<=6.3.0\",{dependencies:{underscore:\"^1.9.2\"}}],[\"cordova-lib@<=10.0.1\",{dependencies:{underscore:\"^1.9.2\"}}],[\"git-node-fs@*\",{peerDependencies:{\"js-git\":\"^0.7.8\"},peerDependenciesMeta:{\"js-git\":Te}}],[\"consolidate@<0.16.0\",{peerDependencies:{mustache:\"^3.0.0\"},peerDependenciesMeta:{mustache:Te}}],[\"consolidate@<=0.16.0\",{peerDependencies:{velocityjs:\"^2.0.1\",tinyliquid:\"^0.2.34\",\"liquid-node\":\"^3.0.1\",jade:\"^1.11.0\",\"then-jade\":\"*\",dust:\"^0.3.0\",\"dustjs-helpers\":\"^1.7.4\",\"dustjs-linkedin\":\"^2.7.5\",swig:\"^1.4.2\",\"swig-templates\":\"^2.0.3\",\"razor-tmpl\":\"^1.3.1\",atpl:\">=0.7.6\",liquor:\"^0.0.5\",twig:\"^1.15.2\",ejs:\"^3.1.5\",eco:\"^1.1.0-rc-3\",jazz:\"^0.0.18\",jqtpl:\"~1.1.0\",hamljs:\"^0.6.2\",hamlet:\"^0.3.3\",whiskers:\"^0.4.0\",\"haml-coffee\":\"^1.14.1\",\"hogan.js\":\"^3.0.2\",templayed:\">=0.2.3\",handlebars:\"^4.7.6\",underscore:\"^1.11.0\",lodash:\"^4.17.20\",pug:\"^3.0.0\",\"then-pug\":\"*\",qejs:\"^3.0.5\",walrus:\"^0.10.1\",mustache:\"^4.0.1\",just:\"^0.1.8\",ect:\"^0.5.9\",mote:\"^0.2.0\",toffee:\"^0.3.6\",dot:\"^1.1.3\",\"bracket-template\":\"^1.1.5\",ractive:\"^1.3.12\",nunjucks:\"^3.2.2\",htmling:\"^0.0.8\",\"babel-core\":\"^6.26.3\",plates:\"~0.4.11\",\"react-dom\":\"^16.13.1\",react:\"^16.13.1\",\"arc-templates\":\"^0.5.3\",vash:\"^0.13.0\",slm:\"^2.0.0\",marko:\"^3.14.4\",teacup:\"^2.0.0\",\"coffee-script\":\"^1.12.7\",squirrelly:\"^5.1.0\",twing:\"^5.0.2\"},peerDependenciesMeta:{velocityjs:Te,tinyliquid:Te,\"liquid-node\":Te,jade:Te,\"then-jade\":Te,dust:Te,\"dustjs-helpers\":Te,\"dustjs-linkedin\":Te,swig:Te,\"swig-templates\":Te,\"razor-tmpl\":Te,atpl:Te,liquor:Te,twig:Te,ejs:Te,eco:Te,jazz:Te,jqtpl:Te,hamljs:Te,hamlet:Te,whiskers:Te,\"haml-coffee\":Te,\"hogan.js\":Te,templayed:Te,handlebars:Te,underscore:Te,lodash:Te,pug:Te,\"then-pug\":Te,qejs:Te,walrus:Te,mustache:Te,just:Te,ect:Te,mote:Te,toffee:Te,dot:Te,\"bracket-template\":Te,ractive:Te,nunjucks:Te,htmling:Te,\"babel-core\":Te,plates:Te,\"react-dom\":Te,react:Te,\"arc-templates\":Te,vash:Te,slm:Te,marko:Te,teacup:Te,\"coffee-script\":Te,squirrelly:Te,twing:Te}}],[\"vue-loader@<=16.3.3\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",webpack:\"^4.1.0 || ^5.0.0-0\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te}}],[\"vue-loader@^16.7.0\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",vue:\"^3.2.13\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te,vue:Te}}],[\"scss-parser@<=1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"query-ast@<1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"redux-thunk@<=2.3.0\",{peerDependencies:{redux:\"^4.0.0\"}}],[\"skypack@<=0.3.2\",{dependencies:{tar:\"^6.1.0\"}}],[\"@npmcli/metavuln-calculator@<2.0.0\",{dependencies:{\"json-parse-even-better-errors\":\"^2.3.1\"}}],[\"bin-links@<2.3.0\",{dependencies:{\"mkdirp-infer-owner\":\"^1.0.2\"}}],[\"rollup-plugin-polyfill-node@<=0.8.0\",{peerDependencies:{rollup:\"^1.20.0 || ^2.0.0\"}}],[\"snowpack@<3.8.6\",{dependencies:{\"magic-string\":\"^0.25.7\"}}],[\"elm-webpack-loader@*\",{dependencies:{temp:\"^0.9.4\"}}],[\"winston-transport@<=4.4.0\",{dependencies:{logform:\"^2.2.0\"}}],[\"jest-vue-preprocessor@*\",{dependencies:{\"@babel/core\":\"7.8.7\",\"@babel/template\":\"7.8.6\"},peerDependencies:{pug:\"^2.0.4\"},peerDependenciesMeta:{pug:Te}}],[\"redux-persist@*\",{peerDependencies:{react:\">=16\"},peerDependenciesMeta:{react:Te}}],[\"sodium@>=3\",{dependencies:{\"node-gyp\":\"^3.8.0\"}}],[\"babel-plugin-graphql-tag@<=3.1.0\",{peerDependencies:{graphql:\"^14.0.0 || ^15.0.0\"}}],[\"@playwright/test@<=1.14.1\",{dependencies:{\"jest-matcher-utils\":\"^26.4.2\"}}],...[\"babel-plugin-remove-graphql-queries@<3.14.0-next.1\",\"babel-preset-gatsby-package@<1.14.0-next.1\",\"create-gatsby@<1.14.0-next.1\",\"gatsby-admin@<0.24.0-next.1\",\"gatsby-cli@<3.14.0-next.1\",\"gatsby-core-utils@<2.14.0-next.1\",\"gatsby-design-tokens@<3.14.0-next.1\",\"gatsby-legacy-polyfills@<1.14.0-next.1\",\"gatsby-plugin-benchmark-reporting@<1.14.0-next.1\",\"gatsby-plugin-graphql-config@<0.23.0-next.1\",\"gatsby-plugin-image@<1.14.0-next.1\",\"gatsby-plugin-mdx@<2.14.0-next.1\",\"gatsby-plugin-netlify-cms@<5.14.0-next.1\",\"gatsby-plugin-no-sourcemaps@<3.14.0-next.1\",\"gatsby-plugin-page-creator@<3.14.0-next.1\",\"gatsby-plugin-preact@<5.14.0-next.1\",\"gatsby-plugin-preload-fonts@<2.14.0-next.1\",\"gatsby-plugin-schema-snapshot@<2.14.0-next.1\",\"gatsby-plugin-styletron@<6.14.0-next.1\",\"gatsby-plugin-subfont@<3.14.0-next.1\",\"gatsby-plugin-utils@<1.14.0-next.1\",\"gatsby-recipes@<0.25.0-next.1\",\"gatsby-source-shopify@<5.6.0-next.1\",\"gatsby-source-wikipedia@<3.14.0-next.1\",\"gatsby-transformer-screenshot@<3.14.0-next.1\",\"gatsby-worker@<0.5.0-next.1\"].map(r=>[r,{dependencies:{\"@babel/runtime\":\"^7.14.8\"}}]),[\"gatsby-core-utils@<2.14.0-next.1\",{dependencies:{got:\"8.3.2\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.1.0-next.0\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.2.0-next.1\",{peerDependencies:{webpack:\"*\"}}],[\"babel-plugin-remove-graphql-queries@<=3.14.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.8.0-next.1\"}}],[\"gatsby-plugin-netlify@3.13.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"clipanion-v3-codemod@<=0.2.0\",{peerDependencies:{jscodeshift:\"^0.11.0\"}}],[\"react-live@*\",{peerDependencies:{\"react-dom\":\"*\",react:\"*\"}}],[\"webpack@<4.44.1\",{peerDependenciesMeta:{\"webpack-cli\":Te,\"webpack-command\":Te}}],[\"webpack@<5.0.0-beta.23\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"webpack-dev-server@<3.10.2\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"@docusaurus/responsive-loader@<1.5.0\",{peerDependenciesMeta:{sharp:Te,jimp:Te}}],[\"eslint-module-utils@*\",{peerDependenciesMeta:{\"eslint-import-resolver-node\":Te,\"eslint-import-resolver-typescript\":Te,\"eslint-import-resolver-webpack\":Te,\"@typescript-eslint/parser\":Te}}],[\"eslint-plugin-import@*\",{peerDependenciesMeta:{\"@typescript-eslint/parser\":Te}}],[\"critters-webpack-plugin@<3.0.2\",{peerDependenciesMeta:{\"html-webpack-plugin\":Te}}],[\"terser@<=5.10.0\",{dependencies:{acorn:\"^8.5.0\"}}],[\"babel-preset-react-app@10.0.x\",{dependencies:{\"@babel/plugin-proposal-private-property-in-object\":\"^7.16.0\"}}],[\"eslint-config-react-app@*\",{peerDependenciesMeta:{typescript:Te}}],[\"@vue/eslint-config-typescript@<11.0.0\",{peerDependenciesMeta:{typescript:Te}}],[\"unplugin-vue2-script-setup@<0.9.1\",{peerDependencies:{\"@vue/composition-api\":\"^1.4.3\",\"@vue/runtime-dom\":\"^3.2.26\"}}],[\"@cypress/snapshot@*\",{dependencies:{debug:\"^3.2.7\"}}],[\"auto-relay@<=0.14.0\",{peerDependencies:{\"reflect-metadata\":\"^0.1.13\"}}],[\"vue-template-babel-compiler@<1.2.0\",{peerDependencies:{[\"vue-template-compiler\"]:\"^2.6.0\"}}],[\"@parcel/transformer-image@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"@parcel/transformer-js@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"parcel@*\",{peerDependenciesMeta:{[\"@parcel/core\"]:Te}}],[\"react-scripts@*\",{peerDependencies:{eslint:\"*\"}}],[\"focus-trap-react@^8.0.0\",{dependencies:{tabbable:\"^5.3.2\"}}],[\"react-rnd@<10.3.7\",{peerDependencies:{react:\">=16.3.0\",\"react-dom\":\">=16.3.0\"}}],[\"connect-mongo@*\",{peerDependencies:{\"express-session\":\"^1.17.1\"}}],[\"vue-i18n@<9\",{peerDependencies:{vue:\"^2\"}}],[\"vue-router@<4\",{peerDependencies:{vue:\"^2\"}}],[\"unified@<10\",{dependencies:{\"@types/unist\":\"^2.0.0\"}}],[\"react-github-btn@<=1.3.0\",{peerDependencies:{react:\">=16.3.0\"}}],[\"react-dev-utils@*\",{peerDependencies:{typescript:\">=2.7\",webpack:\">=4\"},peerDependenciesMeta:{typescript:Te}}],[\"@asyncapi/react-component@<=1.0.0-next.39\",{peerDependencies:{react:\">=16.8.0\",\"react-dom\":\">=16.8.0\"}}],[\"xo@*\",{peerDependencies:{webpack:\">=1.11.0\"},peerDependenciesMeta:{webpack:Te}}],[\"babel-plugin-remove-graphql-queries@<=4.20.0-next.0\",{dependencies:{\"@babel/types\":\"^7.15.4\"}}],[\"gatsby-plugin-page-creator@<=4.20.0-next.1\",{dependencies:{\"fs-extra\":\"^10.1.0\"}}],[\"gatsby-plugin-utils@<=3.14.0-next.1\",{dependencies:{fastq:\"^1.13.0\"},peerDependencies:{graphql:\"^15.0.0\"}}],[\"gatsby-plugin-mdx@<3.1.0-next.1\",{dependencies:{mkdirp:\"^1.0.4\"}}],[\"gatsby-plugin-mdx@^2\",{peerDependencies:{gatsby:\"^3.0.0-next\"}}],[\"fdir@<=5.2.0\",{peerDependencies:{picomatch:\"2.x\"},peerDependenciesMeta:{picomatch:Te}}],[\"babel-plugin-transform-typescript-metadata@<=0.3.2\",{peerDependencies:{\"@babel/core\":\"^7\",\"@babel/traverse\":\"^7\"},peerDependenciesMeta:{\"@babel/traverse\":Te}}],[\"graphql-compose@>=9.0.10\",{peerDependencies:{graphql:\"^14.2.0 || ^15.0.0 || ^16.0.0\"}}]];var EM;function zae(){return typeof EM>\"u\"&&(EM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==\",\"base64\")).toString()),EM}var IM;function Vae(){return typeof IM>\"u\"&&(IM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=\",\"base64\")).toString()),IM}var yM;function Xae(){return typeof yM>\"u\"&&(yM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),yM}var Zae=new Map([[P.makeIdent(null,\"fsevents\").identHash,zae],[P.makeIdent(null,\"resolve\").identHash,Vae],[P.makeIdent(null,\"typescript\").identHash,Xae]]),f4e={hooks:{registerPackageExtensions:async(r,e)=>{for(let[t,i]of mM)e(P.parseDescriptor(t,!0),i)},getBuiltinPatch:async(r,e)=>{var s;let t=\"compat/\";if(!e.startsWith(t))return;let i=P.parseIdent(e.slice(t.length)),n=(s=Zae.get(i.identHash))==null?void 0:s();return typeof n<\"u\"?n:null},reduceDependency:async(r,e,t,i)=>typeof Zae.get(r.identHash)>\"u\"?r:P.makeDescriptor(r,P.makeRange({protocol:\"patch:\",source:P.stringifyDescriptor(r),selector:`~builtin<compat/${P.stringifyIdent(r)}>`,params:null}))}},h4e=f4e;var BM={};ut(BM,{default:()=>d4e});var tp=class extends De{constructor(){super(...arguments);this.pkg=z.String(\"-p,--package\",{description:\"The package to run the provided command from\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){let t=[];this.pkg&&t.push(\"--package\",this.pkg),this.quiet&&t.push(\"--quiet\");let i=P.parseDescriptor(this.command),n;i.scope?n=P.makeIdent(i.scope,`create-${i.name}`):i.name.startsWith(\"@\")?n=P.makeIdent(i.name.substring(1),\"create\"):n=P.makeIdent(null,`create-${i.name}`);let s=P.stringifyIdent(n);return i.range!==\"unknown\"&&(s+=`@${i.range}`),this.cli.run([\"dlx\",...t,s,...this.args])}};tp.paths=[[\"create\"]];var Ku=class extends De{constructor(){super(...arguments);this.packages=z.Array(\"-p,--package\",{description:\"The package(s) to install before running the command\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){return ye.telemetry=null,await O.mktempPromise(async t=>{var C;let i=x.join(t,`dlx-${process.pid}`);await O.mkdirPromise(i),await O.writeFilePromise(x.join(i,\"package.json\"),`{}\n`),await O.writeFilePromise(x.join(i,\"yarn.lock\"),\"\");let n=x.join(i,\".yarnrc.yml\"),s=await ye.findProjectCwd(this.context.cwd,xt.lockfile),o=!(await ye.find(this.context.cwd,null,{strict:!1})).get(\"enableGlobalCache\"),a=s!==null?x.join(s,\".yarnrc.yml\"):null;a!==null&&O.existsSync(a)?(await O.copyFilePromise(a,n),await ye.updateConfiguration(i,y=>{let B={...y,enableGlobalCache:o,enableTelemetry:!1};return Array.isArray(y.plugins)&&(B.plugins=y.plugins.map(v=>{let D=typeof v==\"string\"?v:v.path,T=K.isAbsolute(D)?D:K.resolve(K.fromPortablePath(s),D);return typeof v==\"string\"?T:{path:T,spec:v.spec}})),B})):await O.writeFilePromise(n,`enableGlobalCache: ${o}\nenableTelemetry: false\n`);let l=(C=this.packages)!=null?C:[this.command],c=P.parseDescriptor(this.command).name,u=await this.cli.run([\"add\",\"--\",...l],{cwd:i,quiet:this.quiet});if(u!==0)return u;this.quiet||this.context.stdout.write(`\n`);let g=await ye.find(i,this.context.plugins),{project:f,workspace:h}=await je.find(g,i);if(h===null)throw new ct(f.cwd,i);await f.restoreInstallState();let p=await Wt.getWorkspaceAccessibleBinaries(h);return p.has(c)===!1&&p.size===1&&typeof this.packages>\"u\"&&(c=Array.from(p)[0][0]),await Wt.executeWorkspaceAccessibleBinary(h,c,this.args,{packageAccessibleBinaries:p,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};Ku.paths=[[\"dlx\"]],Ku.usage=ve.Usage({description:\"run a package in a temporary environment\",details:\"\\n      This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\\n\\n      By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\\n\\n      Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\\n    \",examples:[[\"Use create-react-app to create a new React app\",\"yarn dlx create-react-app ./my-app\"],[\"Install multiple packages for a single command\",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e \"console.log('hello!')\"`]]});var p4e={commands:[tp,Ku]},d4e=p4e;var vM={};ut(vM,{default:()=>E4e,fileUtils:()=>Zm});var rp=/^(?:[a-zA-Z]:[\\\\/]|\\.{0,2}\\/)/,Xm=/^[^?]*\\.(?:tar\\.gz|tgz)(?:::.*)?$/,jr=\"file:\";var Zm={};ut(Zm,{makeArchiveFromLocator:()=>Kb,makeBufferFromLocator:()=>SM,makeLocator:()=>QM,makeSpec:()=>_ae,parseSpec:()=>bM});function bM(r){let{params:e,selector:t}=P.parseRange(r),i=K.toPortablePath(t);return{parentLocator:e&&typeof e.locator==\"string\"?P.parseLocator(e.locator):null,path:i}}function _ae({parentLocator:r,path:e,folderHash:t,protocol:i}){let n=r!==null?{locator:P.stringifyLocator(r)}:{},s=typeof t<\"u\"?{hash:t}:{};return P.makeRange({protocol:i,source:e,selector:e,params:{...s,...n}})}function QM(r,{parentLocator:e,path:t,folderHash:i,protocol:n}){return P.makeLocator(r,_ae({parentLocator:e,path:t,folderHash:i,protocol:n}))}async function Kb(r,{protocol:e,fetchOptions:t,inMemory:i=!1}){let{parentLocator:n,path:s}=P.parseFileStyleRange(r.reference,{protocol:e}),o=x.isAbsolute(s)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(n,t),a=o.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=x.join(a.prefixPath,s);return await Ie.releaseAfterUseAsync(async()=>await mi.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:P.getIdentVendorPath(r),compressionLevel:t.project.configuration.get(\"compressionLevel\"),inMemory:i}),a.releaseFs)}async function SM(r,{protocol:e,fetchOptions:t}){return(await Kb(r,{protocol:e,fetchOptions:t,inMemory:!0})).getBufferAndClose()}var Ub=class{supports(e,t){return!!e.reference.startsWith(jr)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async fetchFromDisk(e,t){return Kb(e,{protocol:jr,fetchOptions:t})}};var C4e=2,Hb=class{supportsDescriptor(e,t){return e.range.match(rp)?!0:!!e.range.startsWith(jr)}supportsLocator(e,t){return!!e.reference.startsWith(jr)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{path:n,parentLocator:s}=bM(e.range);if(s===null)throw new Error(\"Assertion failed: The descriptor should have been bound\");let o=await SM(P.makeLocator(e,P.makeRange({protocol:jr,source:n,selector:n,params:{locator:P.stringifyLocator(s)}})),{protocol:jr,fetchOptions:i.fetchOptions}),a=li.makeHash(`${C4e}`,o).slice(0,6);return[QM(e,{parentLocator:s,path:n,folderHash:a,protocol:jr})]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Gb=class{supports(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.join(o.prefixPath,n),c=await a.readFilePromise(l);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(c,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var Yb=class{supportsDescriptor(e,t){return Xm.test(e.range)?!!(e.range.startsWith(jr)||rp.test(e.range)):!1}supportsLocator(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range;return n.startsWith(jr)&&(n=n.slice(jr.length)),[P.makeLocator(e,`${jr}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var m4e={fetchers:[Gb,Ub],resolvers:[Yb,Hb]},E4e=m4e;var xM={};ut(xM,{default:()=>B4e});var $ae=Pe(J(\"querystring\")),eAe=[/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+)\\/tarball\\/([^/#]+)(?:#(.*))?$/,/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+?)(?:\\.git)?(?:#(.*))?$/];function tAe(r){return r?eAe.some(e=>!!r.match(e)):!1}function rAe(r){let e;for(let a of eAe)if(e=r.match(a),e)break;if(!e)throw new Error(I4e(r));let[,t,i,n,s=\"master\"]=e,{commit:o}=$ae.default.parse(s);return s=o||s.replace(/[^:]*:/,\"\"),{auth:t,username:i,reponame:n,treeish:s}}function I4e(r){return`Input cannot be parsed as a valid GitHub URL ('${r}').`}var jb=class{supports(e,t){return!!tAe(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(this.getLocatorUrl(e,t),{configuration:t.project.configuration});return await O.mktempPromise(async n=>{let s=new qt(n);await mi.extractArchiveTo(i,s,{stripComponents:1});let o=AA.splitRepoUrl(e.reference),a=x.join(n,\"package.tgz\");await Wt.prepareExternalProject(n,a,{configuration:t.project.configuration,report:t.report,workspace:o.extra.workspace,locator:e});let l=await O.readFilePromise(a);return await mi.convertToZip(l,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,t){let{auth:i,username:n,reponame:s,treeish:o}=rAe(e.reference);return`https://${i?`${i}@`:\"\"}github.com/${n}/${s}/archive/${o}.tar.gz`}};var w4e={hooks:{async fetchHostedRepository(r,e,t){if(r!==null)return r;let i=new jb;if(!i.supports(e,t))return null;try{return await i.fetch(e,t)}catch{return null}}}},B4e=w4e;var PM={};ut(PM,{default:()=>Q4e});var _m=/^[^?]*\\.(?:tar\\.gz|tgz)(?:\\?.*)?$/,$m=/^https?:/;var qb=class{supports(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(e.reference,{configuration:t.project.configuration});return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var Jb=class{supportsDescriptor(e,t){return _m.test(e.range)?!!$m.test(e.range):!1}supportsLocator(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[P.convertDescriptorToLocator(e)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var b4e={fetchers:[qb],resolvers:[Jb]},Q4e=b4e;var FM={};ut(FM,{default:()=>S8e});var PAe=Pe(xAe()),RM=J(\"util\"),Uu=class extends De{constructor(){super(...arguments);this.private=z.Boolean(\"-p,--private\",!1,{description:\"Initialize a private package\"});this.workspace=z.Boolean(\"-w,--workspace\",!1,{description:\"Initialize a workspace root with a `packages/` directory\"});this.install=z.String(\"-i,--install\",!1,{tolerateBoolean:!0,description:\"Initialize a package with a specific bundle that will be locked in the project\"});this.usev2=z.Boolean(\"-2\",!1,{hidden:!0});this.yes=z.Boolean(\"-y,--yes\",{hidden:!0});this.assumeFreshProject=z.Boolean(\"--assume-fresh-project\",!1,{hidden:!0})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.install==\"string\"?this.install:this.usev2||this.install===!0?\"latest\":null;return i!==null?await this.executeProxy(t,i):await this.executeRegular(t)}async executeProxy(t,i){if(t.projectCwd!==null&&t.projectCwd!==this.context.cwd)throw new Qe(\"Cannot use the --install flag from within a project subdirectory\");O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=x.join(this.context.cwd,t.get(\"lockfileFilename\"));O.existsSync(n)||await O.writeFilePromise(n,\"\");let s=await this.cli.run([\"set\",\"version\",i],{quiet:!0});if(s!==0)return s;let o=[];return this.private&&o.push(\"-p\"),this.workspace&&o.push(\"-w\"),this.yes&&o.push(\"-y\"),await O.mktempPromise(async a=>{let{code:l}=await Cr.pipevp(\"yarn\",[\"init\",...o],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Wt.makeScriptEnv({binFolder:a})});return l})}async executeRegular(t){var c;let i=null;try{i=(await je.find(t,this.context.cwd)).project}catch{i=null}O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=await ot.tryFind(this.context.cwd)||new ot,s=Object.fromEntries(t.get(\"initFields\").entries());n.load(s),n.name=(c=n.name)!=null?c:P.makeIdent(t.get(\"initScope\"),x.basename(this.context.cwd)),n.packageManager=Tr&&Ie.isTaggedYarnVersion(Tr)?`yarn@${Tr}`:null,typeof n.raw.private>\"u\"&&(this.private||this.workspace&&n.workspaceDefinitions.length===0)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await O.mkdirPromise(x.join(this.context.cwd,\"packages\"),{recursive:!0}),n.workspaceDefinitions=[{pattern:\"packages/*\"}]);let o={};n.exportTo(o),RM.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,RM.inspect)(o,{depth:1/0,colors:!0,compact:!1})}\n`);let a=x.join(this.context.cwd,ot.fileName);await O.changeFilePromise(a,`${JSON.stringify(o,null,2)}\n`,{automaticNewlines:!0});let l=x.join(this.context.cwd,\"README.md\");if(O.existsSync(l)||await O.writeFilePromise(l,`# ${P.stringifyIdent(n.name)}\n`),!i||i.cwd===this.context.cwd){let u=x.join(this.context.cwd,xt.lockfile);O.existsSync(u)||await O.writeFilePromise(u,\"\");let f=[\".yarn/*\",\"!.yarn/patches\",\"!.yarn/plugins\",\"!.yarn/releases\",\"!.yarn/sdks\",\"!.yarn/versions\",\"\",\"# Swap the comments on the following lines if you don't wish to use zero-installs\",\"# Documentation here: https://yarnpkg.com/features/zero-installs\",\"!.yarn/cache\",\"#.pnp.*\"].map(T=>`${T}\n`).join(\"\"),h=x.join(this.context.cwd,\".gitignore\");O.existsSync(h)||await O.writeFilePromise(h,f);let C=[\"/.yarn/**            linguist-vendored\",\"/.yarn/releases/*    binary\",\"/.yarn/plugins/**/*  binary\",\"/.pnp.*              binary linguist-generated\"].map(T=>`${T}\n`).join(\"\"),y=x.join(this.context.cwd,\".gitattributes\");O.existsSync(y)||await O.writeFilePromise(y,C);let B={[\"*\"]:{endOfLine:\"lf\",insertFinalNewline:!0},[\"*.{js,json,yml}\"]:{charset:\"utf-8\",indentStyle:\"space\",indentSize:2}};(0,PAe.default)(B,t.get(\"initEditorConfig\"));let v=`root = true\n`;for(let[T,H]of Object.entries(B)){v+=`\n[${T}]\n`;for(let[j,$]of Object.entries(H)){let V=j.replace(/[A-Z]/g,W=>`_${W.toLowerCase()}`);v+=`${V} = ${$}\n`}}let D=x.join(this.context.cwd,\".editorconfig\");O.existsSync(D)||await O.writeFilePromise(D,v),O.existsSync(x.join(this.context.cwd,\".git\"))||await Cr.execvp(\"git\",[\"init\"],{cwd:this.context.cwd})}}};Uu.paths=[[\"init\"]],Uu.usage=ve.Usage({description:\"create a new package\",details:\"\\n      This command will setup a new package in your local directory.\\n\\n      If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\\n\\n      If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\\n\\n      If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\\n\\n      The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\\n    \",examples:[[\"Create a new package in the local directory\",\"yarn init\"],[\"Create a new private package in the local directory\",\"yarn init -p\"],[\"Create a new package and store the Yarn release inside\",\"yarn init -i=latest\"],[\"Create a new private package and defines it as a workspace root\",\"yarn init -w\"]]});var Q8e={configuration:{initScope:{description:\"Scope used when creating packages via the init command\",type:\"STRING\",default:null},initFields:{description:\"Additional fields to set when creating packages via the init command\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}},initEditorConfig:{description:\"Extra rules to define in the generator editorconfig\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}}},commands:[Uu]},S8e=Q8e;var NM={};ut(NM,{default:()=>x8e});var lA=\"portal:\",cA=\"link:\";var Wb=class{supports(e,t){return!!e.reference.startsWith(lA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot}}};var zb=class{supportsDescriptor(e,t){return!!e.range.startsWith(lA)}supportsLocator(e,t){return!!e.reference.startsWith(lA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(lA.length);return[P.makeLocator(e,`${lA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:n.getConditions(),dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Vb=class{supports(e,t){return!!e.reference.startsWith(cA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0}}};var Xb=class{supportsDescriptor(e,t){return!!e.range.startsWith(cA)}supportsLocator(e,t){return!!e.reference.startsWith(cA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(cA.length);return[P.makeLocator(e,`${cA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){return{...e,version:\"0.0.0\",languageName:t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};var v8e={fetchers:[Vb,Wb],resolvers:[Xb,zb]},x8e=v8e;var dO={};ut(dO,{default:()=>qze});var LM=(r,e)=>`${r}@${e}`,DAe=(r,e)=>{let t=e.indexOf(\"#\"),i=t>=0?e.substring(t+1):e;return LM(r,i)};var FAe=(r,e={})=>{let t=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||t>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:t,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=T8e(r,s),l=!1,c=0;do l=MM(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=eE(a);if(MM(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree:\n${u}, next tree:\n${eE(a)}`);let f=NAe(a);if(f)throw new Error(`${f}, after hoisting finished:\n${eE(a)}`)}return s.debugLevel>=2&&console.log(eE(a)),L8e(a)},P8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())t.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),t},D8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=new Set,s=(o,a)=>{if(i.has(o))return;i.add(o);for(let c of o.hoistedDependencies.values())if(!a.has(c.name)){let u;for(let g of r)u=g.dependencies.get(c.name),u&&t.set(u.name,u)}let l=new Set;for(let c of o.dependencies.values())l.add(c.name);for(let c of o.dependencies.values())o.peerNames.has(c.name)||s(c,l)};return s(e,n),t},kAe=(r,e)=>{if(e.decoupled)return e;let{name:t,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:p,hoistedTo:C}=e,y={name:t,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:new Map(p),hoistedTo:new Map(C)},B=y.dependencies.get(t);return B&&B.ident==y.ident&&y.dependencies.set(t,y),r.dependencies.set(y.name,y),y},k8e=(r,e)=>{let t=new Map([[r.name,[r.ident]]]);for(let n of r.dependencies.values())r.peerNames.has(n.name)||t.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf(\"@\",1)),o=n.substring(s.length+1);if(!r.peerNames.has(s)){let a=t.get(s);a||(a=[],t.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return t},TM=r=>{let e=new Set,t=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!r.peerNames.has(s)){let o=r.dependencies.get(s);o&&!e.has(o)&&t(o,n)}e.add(i)}};for(let i of r.dependencies.values())r.peerNames.has(i.name)||t(i);return e},MM=(r,e,t,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=M8e(o),l=k8e(o,a),c=r==o?new Map:n.fastLookupPossible?P8e(e):D8e(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([C,y])=>[C,y[0]])),p=new Map;do{let C=N8e(r,e,t,c,h,l,i,p,n);C.isGraphChanged&&(f=!0),C.anotherRoundNeeded&&(g=!0),u=!1;for(let[y,B]of l)B.length>1&&!o.dependencies.has(y)&&(h.delete(y),B.shift(),h.set(y,B[0]),u=!0)}while(u);for(let C of o.dependencies.values())if(!o.peerNames.has(C.name)&&!t.has(C.locator)){t.add(C.locator);let y=MM(r,[...e,C],t,p,n);y.isGraphChanged&&(f=!0),y.anotherRoundNeeded&&(g=!0),t.delete(C.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},R8e=r=>{for(let[e,t]of r.dependencies)if(!r.peerNames.has(e)&&t.ident!==r.ident)return!0;return!1},F8e=(r,e,t,i,n,s,o,a,{outputReason:l,fastLookupPossible:c})=>{let u,g=null,f=new Set;l&&(u=`${Array.from(e).map(y=>ki(y)).join(\"\\u2192\")}`);let h=t[t.length-1],C=!(i.ident===h.ident);if(l&&!C&&(g=\"- self-reference\"),C&&(C=i.dependencyKind!==1,l&&!C&&(g=\"- workspace\")),C&&i.dependencyKind===2&&(C=!R8e(i),l&&!C&&(g=\"- external soft link with unhoisted dependencies\")),C&&(C=h.dependencyKind!==1||h.hoistedFrom.has(i.name)||e.size===1,l&&!C&&(g=h.reasons.get(i.name))),C&&(C=!r.peerNames.has(i.name),l&&!C&&(g=`- cannot shadow peer: ${ki(r.originalDependencies.get(i.name).locator)} at ${u}`)),C){let y=!1,B=n.get(i.name);if(y=!B||B.ident===i.ident,l&&!y&&(g=`- filled by: ${ki(B.locator)} at ${u}`),y)for(let v=t.length-1;v>=1;v--){let T=t[v].dependencies.get(i.name);if(T&&T.ident!==i.ident){y=!1;let H=a.get(h);H||(H=new Set,a.set(h,H)),H.add(i.name),l&&(g=`- filled by ${ki(T.locator)} at ${t.slice(0,v).map(j=>ki(j.locator)).join(\"\\u2192\")}`);break}}C=y}if(C&&(C=s.get(i.name)===i.ident,l&&!C&&(g=`- filled by: ${ki(o.get(i.name)[0])} at ${u}`)),C){let y=!0,B=new Set(i.peerNames);for(let v=t.length-1;v>=1;v--){let D=t[v];for(let T of B){if(D.peerNames.has(T)&&D.originalDependencies.has(T))continue;let H=D.dependencies.get(T);H&&r.dependencies.get(T)!==H&&(v===t.length-1?f.add(H):(f=null,y=!1,l&&(g=`- peer dependency ${ki(H.locator)} from parent ${ki(D.locator)} was not hoisted to ${u}`))),B.delete(T)}if(!y)break}C=y}if(C&&!c)for(let y of i.hoistedDependencies.values()){let B=n.get(y.name)||r.dependencies.get(y.name);if(!B||y.ident!==B.ident){C=!1,l&&(g=`- previously hoisted dependency mismatch, needed: ${ki(y.locator)}, available: ${ki(B==null?void 0:B.locator)}`);break}}return f!==null&&f.size>0?{isHoistable:2,dependsOn:f,reason:g}:{isHoistable:C?0:1,reason:g}},Zb=r=>`${r.name}@${r.locator}`,N8e=(r,e,t,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(B,v,D,T,H)=>{if(u.has(T))return;let j=[...v,Zb(T)],$=[...D,Zb(T)],V=new Map,W=new Map;for(let re of TM(T)){let M=F8e(c,t,[c,...B,T],re,i,n,s,a,{outputReason:l.debugLevel>=2,fastLookupPossible:l.fastLookupPossible});if(W.set(re,M),M.isHoistable===2)for(let F of M.dependsOn){let ue=V.get(F.name)||new Set;ue.add(re.name),V.set(F.name,ue)}}let _=new Set,A=(re,M,F)=>{if(!_.has(re)){_.add(re),W.set(re,{isHoistable:1,reason:F});for(let ue of V.get(re.name)||[])A(T.dependencies.get(ue),M,l.debugLevel>=2?`- peer dependency ${ki(re.locator)} from parent ${ki(T.locator)} was not hoisted`:\"\")}};for(let[re,M]of W)M.isHoistable===1&&A(re,M,M.reason);let Ae=!1;for(let re of W.keys())if(!_.has(re)){f=!0;let M=o.get(T);M&&M.has(re.name)&&(g=!0),Ae=!0,T.dependencies.delete(re.name),T.hoistedDependencies.set(re.name,re),T.reasons.delete(re.name);let F=c.dependencies.get(re.name);if(l.debugLevel>=2){let ue=Array.from(v).concat([T.locator]).map(ke=>ki(ke)).join(\"\\u2192\"),pe=c.hoistedFrom.get(re.name);pe||(pe=[],c.hoistedFrom.set(re.name,pe)),pe.push(ue),T.hoistedTo.set(re.name,Array.from(e).map(ke=>ki(ke.locator)).join(\"\\u2192\"))}if(!F)c.ident!==re.ident&&(c.dependencies.set(re.name,re),H.add(re));else for(let ue of re.references)F.references.add(ue)}if(T.dependencyKind===2&&Ae&&(g=!0),l.check){let re=NAe(r);if(re)throw new Error(`${re}, after hoisting dependencies of ${[c,...B,T].map(M=>ki(M.locator)).join(\"\\u2192\")}:\n${eE(r)}`)}let ge=TM(T);for(let re of ge)if(_.has(re)){let M=W.get(re);if((n.get(re.name)===re.ident||!T.reasons.has(re.name))&&M.isHoistable!==0&&T.reasons.set(re.name,M.reason),!re.isHoistBorder&&$.indexOf(Zb(re))<0){u.add(T);let ue=kAe(T,re);h([...B,T],j,$,ue,C),u.delete(T)}}},p,C=new Set(TM(c)),y=Array.from(e).map(B=>Zb(B));do{p=C,C=new Set;for(let B of p){if(B.locator===c.locator||B.isHoistBorder)continue;let v=kAe(c,B);h([],Array.from(t),y,v,C)}}while(C.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},NAe=r=>{let e=[],t=new Set,i=new Set,n=(s,o,a)=>{if(t.has(s)||(t.add(s),i.has(s)))return;let l=new Map(o);for(let c of s.dependencies.values())s.peerNames.has(c.name)||l.set(c.name,c);for(let c of s.originalDependencies.values()){let u=l.get(c.name),g=()=>`${Array.from(i).concat([s]).map(f=>ki(f.locator)).join(\"\\u2192\")}`;if(s.peerNames.has(c.name)){let f=o.get(c.name);(f!==u||!f||f.ident!==c.ident)&&e.push(`${g()} - broken peer promise: expected ${c.ident} but found ${f&&f.ident}`)}else{let f=a.hoistedFrom.get(s.name),h=s.hoistedTo.get(c.name),p=`${f?` hoisted from ${f.join(\", \")}`:\"\"}`,C=`${h?` hoisted to ${h}`:\"\"}`,y=`${g()}${p}`;u?u.ident!==c.ident&&e.push(`${y} - broken require promise for ${c.name}${C}: expected ${c.ident}, but found: ${u.ident}`):e.push(`${y} - broken require promise: no required dependency ${c.name}${C} found`)}}i.add(s);for(let c of s.dependencies.values())s.peerNames.has(c.name)||n(c,l,s);i.delete(s)};return n(r,r.dependencies,r),e.join(`\n`)},T8e=(r,e)=>{let{identName:t,name:i,reference:n,peerNames:s}=r,o={name:i,references:new Set([n]),locator:LM(t,n),ident:DAe(t,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},a=new Map([[r,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:C,peerNames:y,hoistPriority:B,dependencyKind:v}=c,D=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([C]),locator:LM(p,C),ident:DAe(p,C),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(y),reasons:new Map,decoupled:!0,isHoistBorder:D?D.has(h):!1,hoistPriority:B||0,dependencyKind:v||0,hoistedFrom:new Map,hoistedTo:new Map},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=C=>{if(!h.has(C)){h.add(C),C.decoupled=!1;for(let y of C.dependencies.values())C.peerNames.has(y.name)||p(y)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of r.dependencies)l(c,o);return o},OM=r=>r.substring(0,r.indexOf(\"@\",1)),L8e=r=>{let e={name:r.name,identName:OM(r.locator),references:new Set(r.references),dependencies:new Set},t=new Set([r]),i=(n,s,o)=>{let a=t.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:OM(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){t.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);t.delete(n)}};for(let n of r.dependencies.values())i(n,r,e);return e},M8e=r=>{let e=new Map,t=new Set([r]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!t.has(a);if(n(a).dependents.add(o.ident),!l){t.add(a);for(let u of a.dependencies.values()){let g=n(u);g.hoistPriority=Math.max(g.hoistPriority,u.hoistPriority),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of r.dependencies.values())r.peerNames.has(o.name)||s(r,o);return e},ki=r=>{if(!r)return\"none\";let e=r.indexOf(\"@\",1),t=r.substring(0,e);t.endsWith(\"$wsroot$\")&&(t=`wh:${t.replace(\"$wsroot$\",\"\")}`);let i=r.substring(e+1);if(i===\"workspace:.\")return\".\";if(i){let n=(i.indexOf(\"#\")>0?i.split(\"#\")[1]:i).replace(\"npm:\",\"\");return i.startsWith(\"virtual\")&&(t=`v:${t}`),n.startsWith(\"workspace\")&&(t=`w:${t}`,n=\"\"),`${t}${n?`@${n}`:\"\"}`}else return`${t}`},RAe=5e4,eE=r=>{let e=0,t=(n,s,o=\"\")=>{if(e>RAe||s.has(n))return\"\";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name===u.name?0:c.name>u.name?1:-1),l=\"\";s.add(n);for(let c=0;c<a.length;c++){let u=a[c];if(!n.peerNames.has(u.name)&&u!==n){let g=n.reasons.get(u.name),f=OM(u.locator);l+=`${o}${c<a.length-1?\"\\u251C\\u2500\":\"\\u2514\\u2500\"}${(s.has(u)?\">\":\"\")+(f!==u.name?`a:${u.name}:`:\"\")+ki(u.locator)+(g?` ${g}`:\"\")}\n`,l+=t(u,s,`${o}${c<a.length-1?\"\\u2502 \":\"  \"}`)}}return s.delete(n),l};return t(r,new Set)+(e>RAe?`\nTree is too large, part of the tree has been dunped\n`:\"\")};var tE=(i=>(i.WORKSPACES=\"workspaces\",i.DEPENDENCIES=\"dependencies\",i.NONE=\"none\",i))(tE||{}),TAe=\"node_modules\",Hu=\"$wsroot$\";var rE=(r,e)=>{let{packageTree:t,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=K8e(r,e),o=null;if(n.length===0){let a=FAe(t,{hoistingLimits:i});o=H8e(r,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},sa=r=>`${r.name}@${r.reference}`,UM=r=>{let e=new Map;for(let[t,i]of r.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(t)}for(let t of e.values())t.locations=t.locations.sort((i,n)=>{let s=i.split(x.delimiter).length,o=n.split(x.delimiter).length;return n===i?0:s!==o?o-s:n>i?1:-1});return e},LAe=(r,e)=>{let t=P.isVirtualLocator(r)?P.devirtualizeLocator(r):r,i=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e;return P.areLocatorsEqual(t,i)},KM=(r,e,t,i)=>{if(r.linkType!==\"SOFT\")return!1;let n=K.toPortablePath(t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation);return x.contains(i,n)===null},O8e=r=>{let e=r.getPackageInformation(r.topLevel);if(e===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");if(r.findPackageLocator(e.packageLocation)===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let i=K.toPortablePath(e.packageLocation.slice(0,-1)),n=new Map,s={children:new Map},o=r.getDependencyTreeRoots(),a=new Map,l=new Set,c=(f,h)=>{let p=sa(f);if(l.has(p))return;l.add(p);let C=r.getPackageInformation(f);if(C){let y=h?sa(h):\"\";if(sa(f)!==y&&C.linkType===\"SOFT\"&&!KM(C,f,r,i)){let B=MAe(C,f,r);(!a.get(B)||f.reference.startsWith(\"workspace:\"))&&a.set(B,f)}for(let[B,v]of C.packageDependencies)v!==null&&(C.packagePeers.has(B)||c(r.getLocator(B,v),f))}};for(let f of o)c(f,null);let u=i.split(x.sep);for(let f of a.values()){let h=r.getPackageInformation(f),C=K.toPortablePath(h.packageLocation.slice(0,-1)).split(x.sep).slice(u.length),y=s;for(let B of C){let v=y.children.get(B);v||(v={children:new Map},y.children.set(B,v)),y=v}y.workspaceLocator=f}let g=(f,h)=>{if(f.workspaceLocator){let p=sa(h),C=n.get(p);C||(C=new Set,n.set(p,C)),C.add(f.workspaceLocator)}for(let p of f.children.values())g(p,f.workspaceLocator||h)};for(let f of s.children.values())g(f,s.workspaceLocator);return n},K8e=(r,e)=>{let t=[],i=!1,n=new Map,s=O8e(r),o=r.getPackageInformation(r.topLevel);if(o===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");let a=r.findPackageLocator(o.packageLocation);if(a===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let l=K.toPortablePath(o.packageLocation.slice(0,-1)),c={name:a.name,identName:a.name,reference:a.reference,peerNames:o.packagePeers,dependencies:new Set,dependencyKind:1},u=new Map,g=(h,p)=>`${sa(p)}:${h}`,f=(h,p,C,y,B,v,D,T)=>{var re,M;let H=g(h,C),j=u.get(H),$=!!j;!$&&C.name===a.name&&C.reference===a.reference&&(j=c,u.set(H,c));let V=KM(p,C,r,l);if(!j){let F=0;V?F=2:p.linkType===\"SOFT\"&&C.name.endsWith(Hu)&&(F=1),j={name:h,identName:C.name,reference:C.reference,dependencies:new Set,peerNames:F===1?new Set:p.packagePeers,dependencyKind:F},u.set(H,j)}let W;if(V?W=2:B.linkType===\"SOFT\"?W=1:W=0,j.hoistPriority=Math.max(j.hoistPriority||0,W),T&&!V){let F=sa({name:y.identName,reference:y.reference}),ue=n.get(F)||new Set;n.set(F,ue),ue.add(j.name)}let _=new Map(p.packageDependencies);if(e.project){let F=e.project.workspacesByCwd.get(K.toPortablePath(p.packageLocation.slice(0,-1)));if(F){let ue=new Set([...Array.from(F.manifest.peerDependencies.values(),pe=>P.stringifyIdent(pe)),...Array.from(F.manifest.peerDependenciesMeta.keys())]);for(let pe of ue)_.has(pe)||(_.set(pe,v.get(pe)||null),j.peerNames.add(pe))}}let A=sa({name:C.name.replace(Hu,\"\"),reference:C.reference}),Ae=s.get(A);if(Ae)for(let F of Ae)_.set(`${F.name}${Hu}`,F.reference);(p!==B||p.linkType!==\"SOFT\"||!V&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(D)))&&y.dependencies.add(j);let ge=C!==a&&p.linkType===\"SOFT\"&&!C.name.endsWith(Hu)&&!V;if(!$&&!ge){let F=new Map;for(let[ue,pe]of _)if(pe!==null){let ke=r.getLocator(ue,pe),Fe=r.getLocator(ue.replace(Hu,\"\"),pe),Ne=r.getPackageInformation(Fe);if(Ne===null)throw new Error(\"Assertion failed: Expected the package to have been registered\");let oe=KM(Ne,ke,r,l);if(e.validateExternalSoftLinks&&e.project&&oe){Ne.packageDependencies.size>0&&(i=!0);for(let[qe,ne]of Ne.packageDependencies)if(ne!==null){let Y=P.parseLocator(Array.isArray(ne)?`${ne[0]}@${ne[1]}`:`${qe}@${ne}`);if(sa(Y)!==sa(ke)){let he=_.get(qe);if(he){let ie=P.parseLocator(Array.isArray(he)?`${he[0]}@${he[1]}`:`${qe}@${he}`);LAe(ie,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with parent dependency ${P.prettyLocator(e.project.configuration,ie)}`})}else{let ie=F.get(qe);if(ie){let de=ie.target,_e=P.parseLocator(Array.isArray(de)?`${de[0]}@${de[1]}`:`${qe}@${de}`);LAe(_e,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with dependency ${P.prettyLocator(e.project.configuration,_e)} from sibling portal ${P.prettyIdent(e.project.configuration,P.parseIdent(ie.portal.name))}`})}else F.set(qe,{target:Y.reference,portal:ke})}}}}let le=(re=e.hoistingLimitsByCwd)==null?void 0:re.get(D),Be=oe?D:x.relative(l,K.toPortablePath(Ne.packageLocation))||Me.dot,fe=(M=e.hoistingLimitsByCwd)==null?void 0:M.get(Be);f(ue,Ne,ke,j,p,_,Be,le===\"dependencies\"||fe===\"dependencies\"||fe===\"workspaces\")}}};return f(a.name,o,a,c,o,o.packageDependencies,Me.dot,!1),{packageTree:c,hoistingLimits:n,errors:t,preserveSymlinksRequired:i}};function MAe(r,e,t){let i=t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation;return K.toPortablePath(i||r.packageLocation)}function U8e(r,e,t){let i=e.getLocator(r.name.replace(Hu,\"\"),r.reference),n=e.getPackageInformation(i);if(n===null)throw new Error(\"Assertion failed: Expected the package to be registered\");let s,o;return t.pnpifyFs?(o=K.toPortablePath(n.packageLocation),s=\"SOFT\"):(o=MAe(n,r,e),s=n.linkType),{linkType:s,target:o}}var H8e=(r,e,t)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=U8e(u,r,t);return{locator:sa(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split(\"/\");return f?{scope:Jr(g),name:Jr(f)}:{scope:null,name:Jr(g)}},o=new Set,a=(u,g,f)=>{if(o.has(u))return;o.add(u);let h=Array.from(u.references).sort().join(\"#\");for(let p of u.dependencies){let C=Array.from(p.references).sort().join(\"#\");if(p.identName===u.identName&&C===h)continue;let y=Array.from(p.references).sort(),B={name:p.identName,reference:y[0]},{name:v,scope:D}=s(p.name),T=D?[D,v]:[v],H=x.join(g,TAe),j=x.join(H,...T),$=`${f}/${B.name}`,V=n(B,f,y.slice(1)),W=!1;if(V.linkType===\"SOFT\"&&t.project){let A=t.project.workspacesByCwd.get(V.target.slice(0,-1));W=!!(A&&!A.manifest.name)}let _=V.linkType===\"SOFT\"&&j.startsWith(V.target);if(!p.name.endsWith(Hu)&&!W&&!_){let A=i.get(j);if(A){if(A.dirList)throw new Error(`Assertion failed: ${j} cannot merge dir node with leaf node`);{let M=P.parseLocator(A.locator),F=P.parseLocator(V.locator);if(A.linkType!==V.linkType)throw new Error(`Assertion failed: ${j} cannot merge nodes with different link types ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/${P.stringifyLocator(F)}`);if(M.identHash!==F.identHash)throw new Error(`Assertion failed: ${j} cannot merge nodes with different idents ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/s${P.stringifyLocator(F)}`);V.aliases=[...V.aliases,...A.aliases,P.parseLocator(A.locator).reference]}}i.set(j,V);let Ae=j.split(\"/\"),ge=Ae.indexOf(TAe),re=Ae.length-1;for(;ge>=0&&re>ge;){let M=K.toPortablePath(Ae.slice(0,re).join(x.sep)),F=Jr(Ae[re]),ue=i.get(M);if(!ue)i.set(M,{dirList:new Set([F])});else if(ue.dirList){if(ue.dirList.has(F))break;ue.dirList.add(F)}re--}}a(p,V.linkType===\"SOFT\"?V.target:j,$)}},l=n({name:e.name,reference:Array.from(e.references)[0]},\"\",[]),c=l.target;return i.set(c,l),a(e,c,\"\"),i};var sO={};ut(sO,{PnpInstaller:()=>Yu,PnpLinker:()=>wl,default:()=>mze,getPnpPath:()=>Bl,jsInstallUtils:()=>Co,pnpUtils:()=>hE,quotePathIfNeeded:()=>Sle});var ble=Pe(Xr()),Qle=J(\"url\");var OAe={[\"DEFAULT\"]:{collapsed:!1,next:{[\"*\"]:\"DEFAULT\"}},[\"TOP_LEVEL\"]:{collapsed:!1,next:{fallbackExclusionList:\"FALLBACK_EXCLUSION_LIST\",packageRegistryData:\"PACKAGE_REGISTRY_DATA\",[\"*\"]:\"DEFAULT\"}},[\"FALLBACK_EXCLUSION_LIST\"]:{collapsed:!1,next:{[\"*\"]:\"FALLBACK_EXCLUSION_ENTRIES\"}},[\"FALLBACK_EXCLUSION_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"FALLBACK_EXCLUSION_DATA\"}},[\"FALLBACK_EXCLUSION_DATA\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_REGISTRY_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_REGISTRY_ENTRIES\"}},[\"PACKAGE_REGISTRY_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_STORE_DATA\"}},[\"PACKAGE_STORE_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_STORE_ENTRIES\"}},[\"PACKAGE_STORE_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_INFORMATION_DATA\"}},[\"PACKAGE_INFORMATION_DATA\"]:{collapsed:!1,next:{packageDependencies:\"PACKAGE_DEPENDENCIES\",[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_DEPENDENCIES\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_DEPENDENCY\"}},[\"PACKAGE_DEPENDENCY\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}}};function G8e(r,e,t){let i=\"\";i+=\"[\";for(let n=0,s=r.length;n<s;++n)i+=_b(String(n),r[n],e,t).replace(/^ +/g,\"\"),n+1<s&&(i+=\", \");return i+=\"]\",i}function Y8e(r,e,t){let i=`${t}  `,n=\"\";n+=t,n+=`[\n`;for(let s=0,o=r.length;s<o;++s)n+=i+_b(String(s),r[s],e,i).replace(/^ +/,\"\"),s+1<o&&(n+=\",\"),n+=`\n`;return n+=t,n+=\"]\",n}function j8e(r,e,t){let i=Object.keys(r),n=\"\";n+=\"{\";for(let s=0,o=i.length,a=0;s<o;++s){let l=i[s],c=r[l];typeof c>\"u\"||(a!==0&&(n+=\", \"),n+=JSON.stringify(l),n+=\": \",n+=_b(l,c,e,t).replace(/^ +/g,\"\"),a+=1)}return n+=\"}\",n}function q8e(r,e,t){let i=Object.keys(r),n=`${t}  `,s=\"\";s+=t,s+=`{\n`;let o=0;for(let a=0,l=i.length;a<l;++a){let c=i[a],u=r[c];typeof u>\"u\"||(o!==0&&(s+=\",\",s+=`\n`),s+=n,s+=JSON.stringify(c),s+=\": \",s+=_b(c,u,e,n).replace(/^ +/g,\"\"),o+=1)}return o!==0&&(s+=`\n`),s+=t,s+=\"}\",s}function _b(r,e,t,i){let{next:n}=OAe[t],s=n[r]||n[\"*\"];return KAe(e,s,i)}function KAe(r,e,t){let{collapsed:i}=OAe[e];return Array.isArray(r)?i?G8e(r,e,t):Y8e(r,e,t):typeof r==\"object\"&&r!==null?i?j8e(r,e,t):q8e(r,e,t):JSON.stringify(r)}function UAe(r){return KAe(r,\"TOP_LEVEL\",\"\")}function iE(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function J8e(r){let e=new Map,t=iE(r.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of t){let s=e.get(i);typeof s>\"u\"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function W8e(r){return iE(r.fallbackPool||[],([e])=>e)}function z8e(r){let e=[];for(let[t,i]of iE(r.packageRegistry,([n])=>n===null?\"0\":`1${n}`)){let n=[];e.push([t,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of iE(i,([g])=>g===null?\"0\":`1${g}`)){let g=[];t!==null&&s!==null&&!a.has(t)&&g.push([t,s]);for(let[p,C]of iE(a.entries(),([y])=>y))g.push([p,C]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function nE(r){return{__info:[\"This file is automatically generated. Do not touch it, or risk\",\"your modifications being lost. We also recommend you not to read\",\"it either without using the @yarnpkg/pnp package, as the data layout\",\"is entirely unspecified and WILL change from a version to another.\"],dependencyTreeRoots:r.dependencyTreeRoots,enableTopLevelFallback:r.enableTopLevelFallback||!1,ignorePatternData:r.ignorePattern||null,fallbackExclusionList:J8e(r),fallbackPool:W8e(r),packageRegistryData:z8e(r)}}var YAe=Pe(GAe());function jAe(r,e){return[r?`${r}\n`:\"\",`/* eslint-disable */\n`,`\"use strict\";\n`,`\n`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) {\n`,e.replace(/^/gm,\"  \"),`}\n`,`\n`,(0,YAe.default)()].join(\"\")}function V8e(r){return JSON.stringify(r,null,2)}function X8e(r){return`'${r.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\n/g,`\\\\\n`)}'`}function Z8e(r){return[`return hydrateRuntimeState(JSON.parse(${X8e(UAe(r))}), {basePath: basePath || __dirname});\n`].join(\"\")}function _8e(r){return[`var path = require('path');\n`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(r)});\n`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)});\n`].join(\"\")}function qAe(r){let e=nE(r),t=Z8e(e);return jAe(r.shebang,t)}function JAe(r){let e=nE(r),t=_8e(r.dataLocation),i=jAe(r.shebang,t);return{dataFile:V8e(e),loaderFile:i}}var dle=J(\"fs\");var Cle=J(\"util\");function GM(r,{basePath:e}){let t=K.toPortablePath(e),i=x.resolve(t),n=r.ignorePatternData!==null?new RegExp(r.ignorePatternData):null,s=new Map,o=new Map(r.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var D;if(g===null!=(h===null))throw new Error(\"Assertion failed: The name and reference should be null, or neither should\");let C=(D=p.discardFromLookup)!=null?D:!1,y={name:g,reference:h},B=s.get(p.packageLocation);B?(B.discardFromLookup=B.discardFromLookup&&C,C||(B.locator=y)):s.set(p.packageLocation,{locator:y,discardFromLookup:C});let v=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:C,get packageLocation(){return v||(v=x.join(i,p.packageLocation))}}]}))])),a=new Map(r.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(r.fallbackPool),c=r.dependencyTreeRoots,u=r.enableTopLevelFallback;return{basePath:t,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var gE=J(\"module\"),uA=J(\"url\"),_M=J(\"util\");var qi=J(\"url\");var XAe=Pe(J(\"assert\"));var YM=Array.isArray,sE=JSON.stringify,oE=Object.getOwnPropertyNames,Gu=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),jM=(r,e)=>RegExp.prototype.exec.call(r,e),qM=(r,...e)=>RegExp.prototype[Symbol.replace].apply(r,e),Il=(r,...e)=>String.prototype.endsWith.apply(r,e),JM=(r,...e)=>String.prototype.includes.apply(r,e),WM=(r,...e)=>String.prototype.lastIndexOf.apply(r,e),aE=(r,...e)=>String.prototype.indexOf.apply(r,e),WAe=(r,...e)=>String.prototype.replace.apply(r,e),yl=(r,...e)=>String.prototype.slice.apply(r,e),oa=(r,...e)=>String.prototype.startsWith.apply(r,e),zAe=Map,VAe=JSON.parse;function AE(r,e,t){return class extends t{constructor(...i){super(e(...i)),this.code=r,this.name=`${t.name} [${r}]`}}}var ZAe=AE(\"ERR_PACKAGE_IMPORT_NOT_DEFINED\",(r,e,t)=>`Package import specifier \"${r}\" is not defined${e?` in package ${e}package.json`:\"\"} imported from ${t}`,TypeError),zM=AE(\"ERR_INVALID_MODULE_SPECIFIER\",(r,e,t=void 0)=>`Invalid module \"${r}\" ${e}${t?` imported from ${t}`:\"\"}`,TypeError),_Ae=AE(\"ERR_INVALID_PACKAGE_TARGET\",(r,e,t,i=!1,n=void 0)=>{let s=typeof t==\"string\"&&!i&&t.length&&!oa(t,\"./\");return e===\".\"?((0,XAe.default)(i===!1),`Invalid \"exports\" main target ${sE(t)} defined in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`):`Invalid \"${i?\"imports\":\"exports\"}\" target ${sE(t)} defined for '${e}' in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`},Error),lE=AE(\"ERR_INVALID_PACKAGE_CONFIG\",(r,e,t)=>`Invalid package config ${r}${e?` while importing ${e}`:\"\"}${t?`. ${t}`:\"\"}`,Error),$Ae=AE(\"ERR_PACKAGE_PATH_NOT_EXPORTED\",(r,e,t=void 0)=>e===\".\"?`No \"exports\" main defined in ${r}package.json${t?` imported from ${t}`:\"\"}`:`Package subpath '${e}' is not defined by \"exports\" in ${r}package.json${t?` imported from ${t}`:\"\"}`,Error);var eQ=J(\"url\");function ele(r,e){let t=Object.create(null);for(let i=0;i<e.length;i++){let n=e[i];Gu(r,n)&&(t[n]=r[n])}return t}var $b=new zAe;function $8e(r,e,t,i){let n=$b.get(r);if(n!==void 0)return n;let s=i(r);if(s===void 0){let h={pjsonPath:r,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(r,h),h}let o;try{o=VAe(s)}catch(h){throw new lE(r,(t?`\"${e}\" from `:\"\")+(0,eQ.fileURLToPath)(t||e),h.message)}let{imports:a,main:l,name:c,type:u}=ele(o,[\"imports\",\"main\",\"name\",\"type\"]),g=Gu(o,\"exports\")?o.exports:void 0;(typeof a!=\"object\"||a===null)&&(a=void 0),typeof l!=\"string\"&&(l=void 0),typeof c!=\"string\"&&(c=void 0),u!==\"module\"&&u!==\"commonjs\"&&(u=\"none\");let f={pjsonPath:r,exists:!0,main:l,name:c,type:u,exports:g,imports:a};return $b.set(r,f),f}function tle(r,e){let t=new URL(\"./package.json\",r);for(;;){let s=t.pathname;if(Il(s,\"node_modules/package.json\"))break;let o=$8e((0,eQ.fileURLToPath)(t),r,void 0,e);if(o.exists)return o;let a=t;if(t=new URL(\"../package.json\",t),t.pathname===a.pathname)break}let i=(0,eQ.fileURLToPath)(t),n={pjsonPath:i,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(i,n),n}function eze(r,e,t){throw new ZAe(r,e&&(0,qi.fileURLToPath)(new URL(\".\",e)),(0,qi.fileURLToPath)(t))}function tze(r,e,t,i){let n=`request is not a valid subpath for the \"${t?\"imports\":\"exports\"}\" resolution of ${(0,qi.fileURLToPath)(e)}`;throw new zM(r,n,i&&(0,qi.fileURLToPath)(i))}function cE(r,e,t,i,n){throw typeof e==\"object\"&&e!==null?e=sE(e,null,\"\"):e=`${e}`,new _Ae((0,qi.fileURLToPath)(new URL(\".\",t)),r,e,i,n&&(0,qi.fileURLToPath)(n))}var rle=/(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\\\|\\/|$)/i,ile=/\\*/g;function rze(r,e,t,i,n,s,o,a){if(e!==\"\"&&!s&&r[r.length-1]!==\"/\"&&cE(t,r,i,o,n),!oa(r,\"./\")){if(o&&!oa(r,\"../\")&&!oa(r,\"/\")){let g=!1;try{new URL(r),g=!0}catch{}if(!g)return s?qM(ile,r,()=>e):r+e}cE(t,r,i,o,n)}jM(rle,yl(r,2))!==null&&cE(t,r,i,o,n);let l=new URL(r,i),c=l.pathname,u=new URL(\".\",i).pathname;if(oa(c,u)||cE(t,r,i,o,n),e===\"\")return l;if(jM(rle,e)!==null){let g=s?WAe(t,\"*\",()=>e):t+e;tze(g,i,o,n)}return s?new URL(qM(ile,l.href,()=>e)):new URL(e,l)}function ize(r){let e=+r;return`${e}`!==r?!1:e>=0&&e<4294967295}function ip(r,e,t,i,n,s,o,a){if(typeof e==\"string\")return rze(e,t,i,r,n,s,o,a);if(YM(e)){if(e.length===0)return null;let l;for(let c=0;c<e.length;c++){let u=e[c],g;try{g=ip(r,u,t,i,n,s,o,a)}catch(f){if(l=f,f.code===\"ERR_INVALID_PACKAGE_TARGET\")continue;throw f}if(g!==void 0){if(g===null){l=null;continue}return g}}if(l==null)return l;throw l}else if(typeof e==\"object\"&&e!==null){let l=oE(e);for(let c=0;c<l.length;c++){let u=l[c];if(ize(u))throw new lE((0,qi.fileURLToPath)(r),n,'\"exports\" cannot contain numeric property keys.')}for(let c=0;c<l.length;c++){let u=l[c];if(u===\"default\"||a.has(u)){let g=e[u],f=ip(r,g,t,i,n,s,o,a);if(f===void 0)continue;return f}}return}else if(e===null)return null;cE(i,e,r,o,n)}function sle(r,e){let t=aE(r,\"*\"),i=aE(e,\"*\"),n=t===-1?r.length:t+1,s=i===-1?e.length:i+1;return n>s?-1:s>n||t===-1?1:i===-1||r.length>e.length?-1:e.length>r.length?1:0}function nze(r,e,t){if(typeof r==\"string\"||YM(r))return!0;if(typeof r!=\"object\"||r===null)return!1;let i=oE(r),n=!1,s=0;for(let o=0;o<i.length;o++){let a=i[o],l=a===\"\"||a[0]!==\".\";if(s++===0)n=l;else if(n!==l)throw new lE((0,qi.fileURLToPath)(e),t,`\"exports\" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.`)}return n}function VM(r,e,t){throw new $Ae((0,qi.fileURLToPath)(new URL(\".\",e)),r,t&&(0,qi.fileURLToPath)(t))}var nle=new Set;function sze(r,e,t){let i=(0,qi.fileURLToPath)(e);nle.has(i+\"|\"+r)||(nle.add(i+\"|\"+r),process.emitWarning(`Use of deprecated trailing slash pattern mapping \"${r}\" in the \"exports\" field module resolution of the package at ${i}${t?` imported from ${(0,qi.fileURLToPath)(t)}`:\"\"}. Mapping specifiers ending in \"/\" is no longer supported.`,\"DeprecationWarning\",\"DEP0155\"))}function ole({packageJSONUrl:r,packageSubpath:e,exports:t,base:i,conditions:n}){if(nze(t,r,i)&&(t={\".\":t}),Gu(t,e)&&!JM(e,\"*\")&&!Il(e,\"/\")){let l=t[e],c=ip(r,l,\"\",e,i,!1,!1,n);return c==null&&VM(e,r,i),c}let s=\"\",o,a=oE(t);for(let l=0;l<a.length;l++){let c=a[l],u=aE(c,\"*\");if(u!==-1&&oa(e,yl(c,0,u))){Il(e,\"/\")&&sze(e,r,i);let g=yl(c,u+1);e.length>=c.length&&Il(e,g)&&sle(s,c)===1&&WM(c,\"*\")===u&&(s=c,o=yl(e,u,e.length-g.length))}}if(s){let l=t[s],c=ip(r,l,o,s,i,!0,!1,n);return c==null&&VM(e,r,i),c}VM(e,r,i)}function ale({name:r,base:e,conditions:t,readFileSyncFn:i}){if(r===\"#\"||oa(r,\"#/\")||Il(r,\"/\")){let o=\"is not a valid internal imports specifier name\";throw new zM(r,o,(0,qi.fileURLToPath)(e))}let n,s=tle(e,i);if(s.exists){n=(0,qi.pathToFileURL)(s.pjsonPath);let o=s.imports;if(o)if(Gu(o,r)&&!JM(r,\"*\")){let a=ip(n,o[r],\"\",r,e,!1,!0,t);if(a!=null)return a}else{let a=\"\",l,c=oE(o);for(let u=0;u<c.length;u++){let g=c[u],f=aE(g,\"*\");if(f!==-1&&oa(r,yl(g,0,f))){let h=yl(g,f+1);r.length>=g.length&&Il(r,h)&&sle(a,g)===1&&WM(g,\"*\")===f&&(a=g,l=yl(r,f,r.length-h.length))}}if(a){let u=o[a],g=ip(n,u,l,a,e,!0,!0,t);if(g!=null)return g}}}eze(r,n,e)}var oze=new Set([\"BUILTIN_NODE_RESOLUTION_FAILED\",\"MISSING_DEPENDENCY\",\"MISSING_PEER_DEPENDENCY\",\"QUALIFIED_PATH_RESOLUTION_FAILED\",\"UNDECLARED_DEPENDENCY\"]);function ri(r,e,t={},i){i!=null||(i=oze.has(r)?\"MODULE_NOT_FOUND\":r);let n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...n,value:i},pnpCode:{...n,value:r},data:{...n,value:t}})}function po(r){return K.normalize(K.fromPortablePath(r))}var ule=Pe(lle());function gle(r){return aze(),ZM[r]}var ZM;function aze(){ZM||(ZM={\"--conditions\":[],...cle(Aze()),...cle(process.execArgv)})}function cle(r){return(0,ule.default)({\"--conditions\":[String],\"-C\":\"--conditions\"},{argv:r,permissive:!0})}function Aze(){let r=[],e=lze(process.env.NODE_OPTIONS||\"\",r);return r.length,e}function lze(r,e){let t=[],i=!1,n=!0;for(let s=0;s<r.length;++s){let o=r[s];if(o===\"\\\\\"&&i){if(s+1===r.length)return e.push(`invalid value for NODE_OPTIONS (invalid escape)\n`),t;o=r[++s]}else if(o===\" \"&&!i){n=!0;continue}else if(o==='\"'){i=!i;continue}n?(t.push(o),n=!1):t[t.length-1]+=o}return i&&e.push(`invalid value for NODE_OPTIONS (unterminated string)\n`),t}var hle=J(\"module\");var[Ji,aa]=process.versions.node.split(\".\").map(r=>parseInt(r,10)),aBt=Ji>16||Ji===16&&aa>=12,ABt=Ji>17||Ji===17&&aa>=5||Ji===16&&aa>=15,lBt=Ji>17||Ji===17&&aa>=1||Ji===16&&aa>14,fle=Ji>19||Ji===19&&aa>=2||Ji===18&&aa>=13,cBt=Ji>19||Ji===19&&aa>=3,uBt=Ji>18||Ji===18&&aa>=1||Ji===16&&aa>=17;var cze=new Set(hle.Module.builtinModules||Object.keys(process.binding(\"natives\"))),tQ=r=>r.startsWith(\"node:\")||cze.has(r);function ple(r){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(r=r.map(e=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(e)))),fle)process.send({\"watch:require\":r});else for(let e of r)process.send({\"watch:require\":e})}function $M(r,e){let t=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=/^(?![a-zA-Z]:[\\\\/]|\\\\\\\\|\\.{0,2}(?:\\/|$))((?:node:)?(?:@[^/]+\\/)?[^/]+)\\/*(.*|)$/,s=/^(\\/|\\.{1,2}(\\/|$))/,o=/\\/$/,a=/^\\.{0,2}\\//,l={name:null,reference:null},c=[],u=new Set;if(r.enableTopLevelFallback===!0&&c.push(l),e.compatibilityMode!==!1)for(let oe of[\"react-scripts\",\"gatsby\"]){let le=r.packageRegistry.get(oe);if(le)for(let Be of le.keys()){if(Be===null)throw new Error(\"Assertion failed: This reference shouldn't be null\");c.push({name:oe,reference:Be})}}let{ignorePattern:g,packageRegistry:f,packageLocatorsByLocations:h}=r;function p(oe,le){return{fn:oe,args:le,error:null,result:null}}function C(oe){var qe,ne,Y,he,ie,de;let le=(Y=(ne=(qe=process.stderr)==null?void 0:qe.hasColors)==null?void 0:ne.call(qe))!=null?Y:process.stdout.isTTY,Be=(_e,Pt)=>`\\x1B[${_e}m${Pt}\\x1B[0m`,fe=oe.error;console.error(fe?Be(\"31;1\",`\\u2716 ${(he=oe.error)==null?void 0:he.message.replace(/\\n.*/s,\"\")}`):Be(\"33;1\",\"\\u203C Resolution\")),oe.args.length>0&&console.error();for(let _e of oe.args)console.error(`  ${Be(\"37;1\",\"In \\u2190\")} ${(0,_M.inspect)(_e,{colors:le,compact:!0})}`);oe.result&&(console.error(),console.error(`  ${Be(\"37;1\",\"Out \\u2192\")} ${(0,_M.inspect)(oe.result,{colors:le,compact:!0})}`));let ae=(de=(ie=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:ie.slice(2))!=null?de:[];if(ae.length>0){console.error();for(let _e of ae)console.error(`  ${Be(\"38;5;244\",_e)}`)}console.error()}function y(oe,le){if(e.allowDebug===!1)return le;if(Number.isFinite(i)){if(i>=2)return(...Be)=>{let fe=p(oe,Be);try{return fe.result=le(...Be)}catch(ae){throw fe.error=ae}finally{C(fe)}};if(i>=1)return(...Be)=>{try{return le(...Be)}catch(fe){let ae=p(oe,Be);throw ae.error=fe,C(ae),fe}}}return le}function B(oe){let le=A(oe);if(!le)throw ri(\"INTERNAL\",\"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)\");return le}function v(oe){if(oe.name===null)return!0;for(let le of r.dependencyTreeRoots)if(le.name===oe.name&&le.reference===oe.reference)return!0;return!1}let D=new Set([\"node\",\"require\",...gle(\"--conditions\")]);function T(oe,le=D,Be){let fe=re(x.join(oe,\"internal.js\"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(fe===null)throw ri(\"INTERNAL\",`The locator that owns the \"${oe}\" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ae}=B(fe),qe=x.join(ae,xt.manifest);if(!e.fakeFs.existsSync(qe))return null;let ne=JSON.parse(e.fakeFs.readFileSync(qe,\"utf8\"));if(ne.exports==null)return null;let Y=x.contains(ae,oe);if(Y===null)throw ri(\"INTERNAL\",\"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)\");Y!==\".\"&&!a.test(Y)&&(Y=`./${Y}`);try{let he=ole({packageJSONUrl:(0,uA.pathToFileURL)(K.fromPortablePath(qe)),packageSubpath:Y,exports:ne.exports,base:Be?(0,uA.pathToFileURL)(K.fromPortablePath(Be)):null,conditions:le});return K.toPortablePath((0,uA.fileURLToPath)(he))}catch(he){throw ri(\"EXPORTS_RESOLUTION_FAILED\",he.message,{unqualifiedPath:po(oe),locator:fe,pkgJson:ne,subpath:po(Y),conditions:le},he.code)}}function H(oe,le,{extensions:Be}){let fe;try{le.push(oe),fe=e.fakeFs.statSync(oe)}catch{}if(fe&&!fe.isDirectory())return e.fakeFs.realpathSync(oe);if(fe&&fe.isDirectory()){let ae;try{ae=JSON.parse(e.fakeFs.readFileSync(x.join(oe,xt.manifest),\"utf8\"))}catch{}let qe;if(ae&&ae.main&&(qe=x.resolve(oe,ae.main)),qe&&qe!==oe){let ne=H(qe,le,{extensions:Be});if(ne!==null)return ne}}for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=`${oe}${Be[ae]}`;if(le.push(ne),e.fakeFs.existsSync(ne))return ne}if(fe&&fe.isDirectory())for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=x.format({dir:oe,name:\"index\",ext:Be[ae]});if(le.push(ne),e.fakeFs.existsSync(ne))return ne}return null}function j(oe){let le=new gE.Module(oe,null);return le.filename=oe,le.paths=gE.Module._nodeModulePaths(oe),le}function $(oe,le){return le.endsWith(\"/\")&&(le=x.join(le,\"internal.js\")),gE.Module._resolveFilename(K.fromPortablePath(oe),j(K.fromPortablePath(le)),!1,{plugnplay:!1})}function V(oe){if(g===null)return!1;let le=x.contains(r.basePath,oe);return le===null?!1:!!g.test(le.replace(/\\/$/,\"\"))}let W={std:3,resolveVirtual:1,getAllLocators:1},_=l;function A({name:oe,reference:le}){let Be=f.get(oe);if(!Be)return null;let fe=Be.get(le);return fe||null}function Ae({name:oe,reference:le}){let Be=[];for(let[fe,ae]of f)if(fe!==null)for(let[qe,ne]of ae)qe===null||ne.packageDependencies.get(oe)!==le||fe===oe&&qe===le||Be.push({name:fe,reference:qe});return Be}function ge(oe,le){let Be=new Map,fe=new Set,ae=ne=>{let Y=JSON.stringify(ne.name);if(fe.has(Y))return;fe.add(Y);let he=Ae(ne);for(let ie of he)if(B(ie).packagePeers.has(oe))ae(ie);else{let _e=Be.get(ie.name);typeof _e>\"u\"&&Be.set(ie.name,_e=new Set),_e.add(ie.reference)}};ae(le);let qe=[];for(let ne of[...Be.keys()].sort())for(let Y of[...Be.get(ne)].sort())qe.push({name:ne,reference:Y});return qe}function re(oe,{resolveIgnored:le=!1,includeDiscardFromLookup:Be=!1}={}){if(V(oe)&&!le)return null;let fe=x.relative(r.basePath,oe);fe.match(s)||(fe=`./${fe}`),fe.endsWith(\"/\")||(fe=`${fe}/`);do{let ae=h.get(fe);if(typeof ae>\"u\"||ae.discardFromLookup&&!Be){fe=fe.substring(0,fe.lastIndexOf(\"/\",fe.length-2)+1);continue}return ae.locator}while(fe!==\"\");return null}function M(oe){try{return e.fakeFs.readFileSync(K.toPortablePath(oe),\"utf8\")}catch(le){if(le.code===\"ENOENT\")return;throw le}}function F(oe,le,{considerBuiltins:Be=!0}={}){if(oe.startsWith(\"#\"))throw new Error(\"resolveToUnqualified can not handle private import mappings\");if(oe===\"pnpapi\")return K.toPortablePath(e.pnpapiResolution);if(Be&&tQ(oe))return null;let fe=po(oe),ae=le&&po(le);if(le&&V(le)&&(!x.isAbsolute(oe)||re(oe)===null)){let Y=$(oe,le);if(Y===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)\n\nRequire request: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(Y)}let qe,ne=oe.match(n);if(ne){if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let[,Y,he]=ne,ie=re(le);if(!ie){let hr=$(oe,le);if(hr===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).\n\nRequire path: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(hr)}let _e=B(ie).packageDependencies.get(Y),Pt=null;if(_e==null&&ie.name!==null){let hr=r.fallbackExclusionList.get(ie.name);if(!hr||!hr.has(ie.reference)){for(let ni=0,Ks=c.length;ni<Ks;++ni){let Ii=B(c[ni]).packageDependencies.get(Y);if(Ii!=null){t?Pt=Ii:_e=Ii;break}}if(r.enableTopLevelFallback&&_e==null&&Pt===null){let ni=r.fallbackPool.get(Y);ni!=null&&(Pt=ni)}}}let It=null;if(_e===null)if(v(ie))It=ri(\"MISSING_PEER_DEPENDENCY\",`Your application tried to access ${Y} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y});else{let hr=ge(Y,ie);hr.every(fi=>v(fi))?It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr}):It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr})}else _e===void 0&&(!Be&&tQ(oe)?v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in ${ie.name}'s dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}):v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}));if(_e==null){if(Pt===null||It===null)throw It||new Error(\"Assertion failed: Expected an error to have been set\");_e=Pt;let hr=It.message.replace(/\\n.*/g,\"\");It.message=hr,!u.has(hr)&&i!==0&&(u.add(hr),process.emitWarning(It))}let Mr=Array.isArray(_e)?{name:_e[0],reference:_e[1]}:{name:Y,reference:_e},ii=B(Mr);if(!ii.packageLocation)throw ri(\"MISSING_DEPENDENCY\",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${Mr.name}@${Mr.reference}${Mr.name!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,dependencyLocator:Object.assign({},Mr)});let gi=ii.packageLocation;he?qe=x.join(gi,he):qe=gi}else if(x.isAbsolute(oe))qe=x.normalize(oe);else{if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let Y=x.resolve(le);le.match(o)?qe=x.normalize(x.join(Y,oe)):qe=x.normalize(x.join(x.dirname(Y),oe))}return x.normalize(qe)}function ue(oe,le,Be=D,fe){if(s.test(oe))return le;let ae=T(le,Be,fe);return ae?x.normalize(ae):le}function pe(oe,{extensions:le=Object.keys(gE.Module._extensions)}={}){var ae,qe;let Be=[],fe=H(oe,Be,{extensions:le});if(fe)return x.normalize(fe);{ple(Be.map(he=>K.fromPortablePath(he)));let ne=po(oe),Y=re(oe);if(Y){let{packageLocation:he}=B(Y),ie=!0;try{e.fakeFs.accessSync(he)}catch(de){if((de==null?void 0:de.code)===\"ENOENT\")ie=!1;else{let _e=((qe=(ae=de==null?void 0:de.message)!=null?ae:de)!=null?qe:\"empty exception thrown\").replace(/^[A-Z]/,Pt=>Pt.toLowerCase());throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Required package exists but could not be accessed (${_e}).\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}if(!ie){let de=he.includes(\"/unplugged/\")?\"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).\":\"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.\";throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`${de}\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Qualified path resolution failed: we looked for the following paths, but none could be accessed.\n\nSource path: ${ne}\n${Be.map(he=>`Not found: ${po(he)}\n`).join(\"\")}`,{unqualifiedPath:ne,extensions:le})}}function ke(oe,le,Be){var ae;if(!le)throw new Error(\"Assertion failed: An issuer is required to resolve private import mappings\");let fe=ale({name:oe,base:(0,uA.pathToFileURL)(K.fromPortablePath(le)),conditions:(ae=Be.conditions)!=null?ae:D,readFileSyncFn:M});if(fe instanceof uA.URL)return pe(K.toPortablePath((0,uA.fileURLToPath)(fe)),{extensions:Be.extensions});if(fe.startsWith(\"#\"))throw new Error(\"Mapping from one private import to another isn't allowed\");return Fe(fe,le,Be)}function Fe(oe,le,Be={}){try{if(oe.startsWith(\"#\"))return ke(oe,le,Be);let{considerBuiltins:fe,extensions:ae,conditions:qe}=Be,ne=F(oe,le,{considerBuiltins:fe});if(oe===\"pnpapi\")return ne;if(ne===null)return null;let Y=()=>le!==null?V(le):!1,he=(!fe||!tQ(oe))&&!Y()?ue(oe,ne,qe,le):ne;return pe(he,{extensions:ae})}catch(fe){throw Object.prototype.hasOwnProperty.call(fe,\"pnpCode\")&&Object.assign(fe.data,{request:po(oe),issuer:le&&po(le)}),fe}}function Ne(oe){let le=x.normalize(oe),Be=Br.resolveVirtual(le);return Be!==le?Be:null}return{VERSIONS:W,topLevel:_,getLocator:(oe,le)=>Array.isArray(le)?{name:le[0],reference:le[1]}:{name:oe,reference:le},getDependencyTreeRoots:()=>[...r.dependencyTreeRoots],getAllLocators(){let oe=[];for(let[le,Be]of f)for(let fe of Be.keys())le!==null&&fe!==null&&oe.push({name:le,reference:fe});return oe},getPackageInformation:oe=>{let le=A(oe);if(le===null)return null;let Be=K.fromPortablePath(le.packageLocation);return{...le,packageLocation:Be}},findPackageLocator:oe=>re(K.toPortablePath(oe)),resolveToUnqualified:y(\"resolveToUnqualified\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=F(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveUnqualified:y(\"resolveUnqualified\",(oe,le)=>K.fromPortablePath(pe(K.toPortablePath(oe),le))),resolveRequest:y(\"resolveRequest\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=Fe(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveVirtual:y(\"resolveVirtual\",oe=>{let le=Ne(K.toPortablePath(oe));return le!==null?K.fromPortablePath(le):null})}}var xBt=(0,Cle.promisify)(dle.readFile);var mle=(r,e,t)=>{let i=nE(r),n=GM(i,{basePath:e}),s=K.join(e,xt.pnpCjs);return $M(n,{fakeFs:t,pnpapiResolution:s})};var tO=Pe(Ile());var Co={};ut(Co,{checkAndReportManifestCompatibility:()=>wle,checkManifestCompatibility:()=>yle,extractBuildScripts:()=>rQ,getExtractHint:()=>rO,hasBindingGyp:()=>iO});function yle(r){return P.isPackageCompatible(r,ws.getArchitectureSet())}function wle(r,e,{configuration:t,report:i}){return yle(r)?!0:(i==null||i.reportWarningOnce(76,`${P.prettyLocator(t,r)} The ${ws.getArchitectureName()} architecture is incompatible with this package, ${e} skipped.`),!1)}function rQ(r,e,t,{configuration:i,report:n}){let s=[];for(let a of[\"preinstall\",\"install\",\"postinstall\"])e.manifest.scripts.has(a)&&s.push([0,a]);return!e.manifest.scripts.has(\"install\")&&e.misc.hasBindingGyp&&s.push([1,\"node-gyp rebuild\"]),s.length===0?[]:r.linkType!==\"HARD\"?(n==null||n.reportWarningOnce(6,`${P.prettyLocator(i,r)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):t&&t.built===!1?(n==null||n.reportInfoOnce(5,`${P.prettyLocator(i,r)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get(\"enableScripts\")&&!t.built?(n==null||n.reportWarningOnce(4,`${P.prettyLocator(i,r)} lists build scripts, but all build scripts have been disabled.`),[]):wle(r,\"build\",{configuration:i,report:n})?s:[]}var gze=new Set([\".exe\",\".bin\",\".h\",\".hh\",\".hpp\",\".c\",\".cc\",\".cpp\",\".java\",\".jar\",\".node\"]);function rO(r){return r.packageFs.getExtractHint({relevantExtensions:gze})}function iO(r){let e=x.join(r.prefixPath,\"binding.gyp\");return r.packageFs.existsSync(e)}var hE={};ut(hE,{getUnpluggedPath:()=>fE});function fE(r,{configuration:e}){return x.resolve(e.get(\"pnpUnpluggedFolder\"),P.slugifyLocator(r))}var fze=new Set([P.makeIdent(null,\"open\").identHash,P.makeIdent(null,\"opn\").identHash]),wl=class{constructor(){this.mode=\"strict\";this.pnpCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the PnP linker to be enabled\");let i=Bl(t.project).cjs;if(!O.existsSync(i))throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})),s={name:P.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed PnP map - running an install might help`);return K.toPortablePath(o.packageLocation)}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=Bl(t.project).cjs;if(!O.existsSync(i))return null;let s=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})).findPackageLocator(K.fromPortablePath(e));return s?P.makeLocator(P.parseIdent(s.name),s.reference):null}makeInstaller(e){return new Yu(e)}isEnabled(e){return!(e.project.configuration.get(\"nodeLinker\")!==\"pnp\"||e.project.configuration.get(\"pnpMode\")!==this.mode)}},Yu=class{constructor(e){this.opts=e;this.mode=\"strict\";this.asyncActions=new Ie.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:\"PnpInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t,i){let n=P.stringifyIdent(e),s=e.reference,o=!!this.opts.project.tryWorkspaceByLocator(e),a=P.isVirtualLocator(e),l=e.peerDependencies.size>0&&!a,c=!l&&!o,u=!l&&e.linkType!==\"SOFT\",g,f;if(c||u){let D=a?P.devirtualizeLocator(e):e;g=this.customData.store.get(D.locatorHash),typeof g>\"u\"&&(g=await hze(t),e.linkType===\"HARD\"&&this.customData.store.set(D.locatorHash,g)),g.manifest.type===\"module\"&&(this.isESMLoaderRequired=!0),f=this.opts.project.getDependencyMeta(D,e.version)}let h=c?rQ(e,g,f,{configuration:this.opts.project.configuration,report:this.opts.report}):[],p=u?await this.unplugPackageIfNeeded(e,g,t,f,i):t.packageFs;if(x.isAbsolute(t.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${t.prefixPath}) to be relative to the parent`);let C=x.resolve(p.getRealPath(),t.prefixPath),y=nO(this.opts.project.cwd,C),B=new Map,v=new Set;if(a){for(let D of e.peerDependencies.values())B.set(P.stringifyIdent(D),null),v.add(P.stringifyIdent(D));if(!o){let D=P.devirtualizeLocator(e);this.virtualTemplates.set(D.locatorHash,{location:nO(this.opts.project.cwd,Br.resolveVirtual(C)),locator:D})}}return Ie.getMapWithDefault(this.packageRegistry,n).set(s,{packageLocation:y,packageDependencies:B,packagePeers:v,linkType:e.linkType,discardFromLookup:t.discardFromLookup||!1}),{packageLocation:C,buildDirective:h.length>0?h:null}}async attachInternalDependencies(e,t){let i=this.getPackageInformation(e);for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){for(let i of t)this.getDiskInformation(i).packageDependencies.set(P.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get(\"pnpMode\")!==this.mode)return;let e=Bl(this.opts.project);if(O.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning(0,`Removing the old ${ee.pretty(this.opts.project.configuration,xt.pnpJs,ee.Type.PATH)} file. You might need to manually update existing references to reference the new ${ee.pretty(this.opts.project.configuration,xt.pnpCjs,ee.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${ee.pretty(this.opts.project.configuration,\"yarn sdks\",ee.Type.CODE)}.`),await O.removePromise(e.cjsLegacy)),this.isEsmEnabled()||await O.removePromise(e.esmLoader),this.opts.project.configuration.get(\"nodeLinker\")!==\"pnp\"){await O.removePromise(e.cjs),await O.removePromise(this.opts.project.configuration.get(\"pnpDataPath\")),await O.removePromise(e.esmLoader),await O.removePromise(this.opts.project.configuration.get(\"pnpUnpluggedFolder\"));return}for(let{locator:u,location:g}of this.virtualTemplates.values())Ie.getMapWithDefault(this.packageRegistry,P.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let t=this.opts.project.configuration.get(\"pnpFallbackMode\"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:P.stringifyIdent(u),reference:u.reference})),n=t!==\"none\",s=[],o=new Map,a=Ie.buildIgnorePattern([\".yarn/sdks/**\",...this.opts.project.configuration.get(\"pnpIgnorePatterns\")]),l=this.packageRegistry,c=this.opts.project.configuration.get(\"pnpShebang\");if(t===\"dependencies-only\")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:P.stringifyIdent(u),reference:u.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has(\"pnpEnableEsmLoader\"))return this.opts.project.configuration.get(\"pnpEnableEsmLoader\");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type===\"module\")return!0;return!1}async finalizeInstallWithPnp(e){let t=Bl(this.opts.project),i=this.opts.project.configuration.get(\"pnpDataPath\"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning(31,\"One or more node_modules have been detected and will be removed. This operation may take some time.\");for(let o of n)await O.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get(\"pnpEnableInlining\")){let o=qAe(e);await O.changeFilePromise(t.cjs,o,{automaticNewlines:!0,mode:493}),await O.removePromise(i)}else{let o=x.relative(x.dirname(t.cjs),i),{dataFile:a,loaderFile:l}=JAe({...e,dataLocation:o});await O.changeFilePromise(t.cjs,l,{automaticNewlines:!0,mode:493}),await O.changeFilePromise(i,a,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,\"ESM support for PnP uses the experimental loader API and is therefore experimental\"),await O.changeFilePromise(t.esmLoader,(0,tO.default)(),{automaticNewlines:!0,mode:420}));let s=this.opts.project.configuration.get(\"pnpUnpluggedFolder\");if(this.unpluggedPaths.size===0)await O.removePromise(s);else for(let o of await O.readdirPromise(s)){let a=x.resolve(s,o);this.unpluggedPaths.has(a)||await O.removePromise(a)}}async locateNodeModules(e){let t=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=x.join(n.cwd,\"node_modules\");if(i&&i.test(x.relative(this.opts.project.cwd,n.cwd))||!O.existsSync(s))continue;let o=await O.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===\".bin\"||!l.name.startsWith(\".\"));if(a.length===o.length)t.push(s);else for(let l of a)t.push(x.join(s,l.name))}return t}async unplugPackageIfNeeded(e,t,i,n,s){return this.shouldBeUnplugged(e,t,n)?this.unplugPackage(e,i,s):i.packageFs}shouldBeUnplugged(e,t,i){return typeof i.unplugged<\"u\"?i.unplugged:fze.has(e.identHash)||e.conditions!=null?!0:t.manifest.preferUnplugged!==null?t.manifest.preferUnplugged:!!(rQ(e,t,i,{configuration:this.opts.project.configuration}).length>0||t.misc.extractHint)}async unplugPackage(e,t,i){let n=fE(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new So(n,{baseFs:t.packageFs,pathUtils:x}):(this.unpluggedPaths.add(n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let s=x.join(n,t.prefixPath,\".ready\");await O.existsPromise(s)||(this.opts.project.storedBuildState.delete(e.locatorHash),await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,Me.dot,{baseFs:t.packageFs,overwrite:!1}),await O.writeFilePromise(s,\"\"))})),new qt(n))}getPackageInformation(e){let t=P.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(t);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${P.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${P.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let t=Ie.getMapWithDefault(this.packageRegistry,\"@@disk\"),i=nO(this.opts.project.cwd,e);return Ie.getFactoryWithDefault(t,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1}))}};function nO(r,e){let t=x.relative(r,e);return t.match(/^\\.{0,2}\\//)||(t=`./${t}`),t.replace(/\\/?$/,\"/\")}async function hze(r){var i;let e=(i=await ot.tryFind(r.prefixPath,{baseFs:r.packageFs}))!=null?i:new ot,t=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let n of e.scripts.keys())t.has(n)||e.scripts.delete(n);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:rO(r),hasBindingGyp:iO(r)}}}var Ble=Pe(Bn());var ju=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unplug direct dependencies from the entire project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Unplug both direct and transitive dependencies\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);if(t.get(\"nodeLinker\")!==\"pnp\")throw new Qe(\"This command can only be used if the `nodeLinker` option is set to `pnp`\");await i.restoreInstallState();let o=new Set(this.patterns),a=this.patterns.map(h=>{let p=P.parseDescriptor(h),C=p.range!==\"unknown\"?p:P.makeDescriptor(p,\"*\");if(!vt.validRange(C.range))throw new Qe(`The range of the descriptor patterns must be a valid semver range (${P.prettyDescriptor(t,C)})`);return y=>{let B=P.stringifyIdent(y);return!Ble.default.isMatch(B,P.stringifyIdent(C))||y.version&&!vt.satisfiesWithPrereleases(y.version,C.range)?!1:(o.delete(h),!0)}}),l=()=>{let h=[];for(let p of i.storedPackages.values())!i.tryWorkspaceByLocator(p)&&!P.isVirtualLocator(p)&&a.some(C=>C(p))&&h.push(p);return h},c=h=>{let p=new Set,C=[],y=(B,v)=>{if(!p.has(B.locatorHash)&&(p.add(B.locatorHash),!i.tryWorkspaceByLocator(B)&&a.some(D=>D(B))&&C.push(B),!(v>0&&!this.recursive)))for(let D of B.dependencies.values()){let T=i.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=i.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");y(H,v+1)}};for(let B of h){let v=i.storedPackages.get(B.anchoredLocator.locatorHash);if(!v)throw new Error(\"Assertion failed: The package should have been registered\");y(v,0)}return C},u,g;if(this.all&&this.recursive?(u=l(),g=\"the project\"):this.all?(u=c(i.workspaces),g=\"any workspace\"):(u=c([n]),g=\"this workspace\"),o.size>1)throw new Qe(`Patterns ${ee.prettyList(t,o,ee.Type.CODE)} don't match any packages referenced by ${g}`);if(o.size>0)throw new Qe(`Pattern ${ee.prettyList(t,o,ee.Type.CODE)} doesn't match any packages referenced by ${g}`);return u=Ie.sortMap(u,h=>P.stringifyLocator(h)),(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async h=>{var p;for(let C of u){let y=(p=C.version)!=null?p:\"unknown\",B=i.topLevelWorkspace.manifest.ensureDependencyMeta(P.makeDescriptor(C,y));B.unplugged=!0,h.reportInfo(0,`Will unpack ${P.prettyLocator(t,C)} to ${ee.pretty(t,fE(C,{configuration:t}),ee.Type.PATH)}`),h.reportJson({locator:P.stringifyLocator(C),version:y})}await i.topLevelWorkspace.persistManifest(),h.reportSeparator(),await i.install({cache:s,report:h})})).exitCode()}};ju.paths=[[\"unplug\"]],ju.usage=ve.Usage({description:\"force the unpacking of a list of packages\",details:\"\\n      This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\\n\\n      A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\\n\\n      Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\\n\\n      By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\\n\\n      This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\\n    \",examples:[[\"Unplug the lodash dependency from the active workspace\",\"yarn unplug lodash\"],[\"Unplug all instances of lodash referenced by any workspace\",\"yarn unplug lodash -A\"],[\"Unplug all instances of lodash referenced by the active workspace and its dependencies\",\"yarn unplug lodash -R\"],[\"Unplug all instances of lodash, anywhere\",\"yarn unplug lodash -AR\"],[\"Unplug one specific version of lodash\",\"yarn unplug lodash@1.2.3\"],[\"Unplug all packages with the `@babel` scope\",\"yarn unplug '@babel/*'\"],[\"Unplug all packages (only for testing, not recommended)\",\"yarn unplug -R '*'\"]]});var Bl=r=>({cjs:x.join(r.cwd,xt.pnpCjs),cjsLegacy:x.join(r.cwd,xt.pnpJs),esmLoader:x.join(r.cwd,\".pnp.loader.mjs\")}),Sle=r=>/\\s/.test(r)?JSON.stringify(r):r;async function pze(r,e,t){let i=Bl(r),n=`--require ${Sle(K.fromPortablePath(i.cjs))}`;if(O.existsSync(i.esmLoader)&&(n=`${n} --experimental-loader ${(0,Qle.pathToFileURL)(K.fromPortablePath(i.esmLoader)).href}`),i.cjs.includes(\" \")&&ble.default.lt(process.versions.node,\"12.0.0\"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(O.existsSync(i.cjs)){let s=e.NODE_OPTIONS||\"\",o=/\\s*--require\\s+\\S*\\.pnp\\.c?js\\s*/g,a=/\\s*--experimental-loader\\s+\\S*\\.pnp\\.loader\\.mjs\\s*/;s=s.replace(o,\" \").replace(a,\" \").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function dze(r,e){let t=Bl(r);e(t.cjs),e(t.esmLoader),e(r.configuration.get(\"pnpDataPath\")),e(r.configuration.get(\"pnpUnpluggedFolder\"))}var Cze={hooks:{populateYarnPaths:dze,setupScriptEnvironment:pze},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: \"pnp\", \"node-modules\"',type:\"STRING\",default:\"pnp\"},pnpMode:{description:\"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.\",type:\"STRING\",default:\"strict\"},pnpShebang:{description:\"String to prepend to the generated PnP script\",type:\"STRING\",default:\"#!/usr/bin/env node\"},pnpIgnorePatterns:{description:\"Array of glob patterns; files matching them will use the classic resolution\",type:\"STRING\",default:[],isArray:!0},pnpEnableEsmLoader:{description:\"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.\",type:\"BOOLEAN\",default:!1},pnpEnableInlining:{description:\"If true, the PnP data will be inlined along with the generated loader\",type:\"BOOLEAN\",default:!0},pnpFallbackMode:{description:\"If true, the generated PnP loader will follow the top-level fallback rule\",type:\"STRING\",default:\"dependencies-only\"},pnpUnpluggedFolder:{description:\"Folder where the unplugged packages must be stored\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/unplugged\"},pnpDataPath:{description:\"Path of the file where the PnP data (used by the loader) must be written\",type:\"ABSOLUTE_PATH\",default:\"./.pnp.data.json\"}},linkers:[wl],commands:[ju]},mze=Cze;var Nle=Pe(kle());var gO=Pe(J(\"crypto\")),Tle=Pe(J(\"fs\")),Lle=1,kr=\"node_modules\",iQ=\".bin\",Mle=\".yarn-state.yml\",Tze=1e3;var nQ=class{constructor(){this.installStateCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the node-modules linker to be enabled\");let i=t.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(n===null)throw new Qe(\"Couldn't find the node_modules state file - running an install might help (findPackageLocation)\");let s=n.locatorMap.get(P.stringifyLocator(e));if(!s){let l=new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw l.code=\"LOCATOR_NOT_INSTALLED\",l}let o=s.locations.sort((l,c)=>l.split(x.sep).length-c.split(x.sep).length),a=x.join(t.project.configuration.startingCwd,kr);return o.find(l=>x.contains(a,l))||s.locations[0]}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=sQ(x.resolve(e),{skipPrefix:t.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return P.parseLocator(a)}makeInstaller(e){return new cO(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"node-modules\"}},cO=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:\"NodeModulesInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t){var u;let i=x.resolve(t.packageFs.getRealPath(),t.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n>\"u\"&&(n=await Lze(e,t),e.linkType===\"HARD\"&&this.customData.store.set(e.locatorHash,n)),!P.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(P.stringifyIdent(e))||s.set(P.stringifyIdent(e),e.reference);let a=e;if(P.isVirtualLocator(e)){a=P.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(P.stringifyIdent(g),null),o.add(P.stringifyIdent(g))}let l={packageLocation:`${K.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=t.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=t.checksum?t.checksum.substring(t.checksum.indexOf(\"/\")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,t){let i=this.localStore.get(e.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected information object to have been registered\");for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the node-modules linker\")}async finalizeInstall(){if(this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\")return;let e=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),t=await uO(this.opts.project),i=this.opts.project.configuration.get(\"nmMode\");(t===null||i!==t.nmMode)&&(this.opts.project.storedBuildState.clear(),t={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i,mtimeMs:0});let n=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmHoistingLimits\");try{h=Ie.validateEnum(tE,(C=(p=f.manifest.installConfig)==null?void 0:p.hoistingLimits)!=null?C:h)}catch{let B=P.prettyWorkspace(this.opts.project.configuration,f);this.opts.report.reportWarning(57,`${B}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(tE).join(\", \")}, using default: \"${h}\"`)}return[f.relativeCwd,h]})),s=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmSelfReferences\");return h=(C=(p=f.manifest.installConfig)==null?void 0:p.selfReferences)!=null?C:h,[f.relativeCwd,h]})),o={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(f,h)=>Array.isArray(h)?{name:h[0],reference:h[1]}:{name:f,reference:h},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(f=>{let h=f.anchoredLocator;return{name:P.stringifyIdent(f.locator),reference:h.reference}}),getPackageInformation:f=>{let h=f.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:P.makeLocator(P.parseIdent(f.name),f.reference),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the package reference to have been registered\");return p.pnpNode},findPackageLocator:f=>{let h=this.opts.project.tryWorkspaceByCwd(K.toPortablePath(f));if(h!==null){let p=h.anchoredLocator;return{name:P.stringifyIdent(p),reference:p.reference}}throw new Error(\"Assertion failed: Unimplemented\")},resolveToUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveRequest:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveVirtual:f=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(f)))},{tree:a,errors:l,preserveSymlinksRequired:c}=rE(o,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project,selfReferencesByCwd:s});if(!a){for(let{messageName:f,text:h}of l)this.opts.report.reportError(f,h);return}let u=UM(a);await Gze(t,u,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async f=>{let h=P.parseLocator(f),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");return p.customPackageData.manifest}});let g=[];for(let[f,h]of u.entries()){if(Hle(f))continue;let p=P.parseLocator(f),C=this.localStore.get(p.locatorHash);if(typeof C>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");if(this.opts.project.tryWorkspaceByLocator(C.pkg))continue;let y=Co.extractBuildScripts(C.pkg,C.customPackageData,C.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});y.length!==0&&g.push({buildLocations:h.locations,locatorHash:p.locatorHash,buildDirective:y})}return c&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${ee.pretty(this.opts.project.configuration,\"--preserve-symlinks\",ee.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:g}}};async function Lze(r,e){var n;let t=(n=await ot.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new ot,i=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let s of t.scripts.keys())i.has(s)||t.scripts.delete(s);return{manifest:{bin:t.bin,scripts:t.scripts},misc:{extractHint:Co.getExtractHint(e),hasBindingGyp:Co.hasBindingGyp(e)}}}async function Mze(r,e,t,i,{installChangedByUser:n}){let s=\"\";s+=`# Warning: This file is automatically generated. Removing it is fine, but will\n`,s+=`# cause your node_modules installation to become invalidated.\n`,s+=`\n`,s+=`__metadata:\n`,s+=`  version: ${Lle}\n`,s+=`  nmMode: ${i.value}\n`;let o=Array.from(e.keys()).sort(),a=P.stringifyLocator(r.topLevelWorkspace.anchoredLocator);for(let u of o){let g=e.get(u);s+=`\n`,s+=`${JSON.stringify(u)}:\n`,s+=`  locations:\n`;for(let f of g.locations){let h=x.contains(r.cwd,f);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    - ${JSON.stringify(h)}\n`}if(g.aliases.length>0){s+=`  aliases:\n`;for(let f of g.aliases)s+=`    - ${JSON.stringify(f)}\n`}if(u===a&&t.size>0){s+=`  bin:\n`;for(let[f,h]of t){let p=x.contains(r.cwd,f);if(p===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    ${JSON.stringify(p)}:\n`;for(let[C,y]of h){let B=x.relative(x.join(f,kr),y);s+=`      ${JSON.stringify(C)}: ${JSON.stringify(B)}\n`}}}}let l=r.cwd,c=x.join(l,kr,Mle);n&&await O.removePromise(c),await O.changeFilePromise(c,s,{automaticNewlines:!0})}async function uO(r,{unrollAliases:e=!1}={}){let t=r.cwd,i=x.join(t,kr,Mle),n;try{n=await O.statPromise(i)}catch{}if(!n)return null;let s=yi(await O.readFilePromise(i,\"utf8\"));if(s.__metadata.version>Lle)return null;let o=s.__metadata.nmMode||\"classic\",a=new Map,l=new Map;delete s.__metadata;for(let[c,u]of Object.entries(s)){let g=u.locations.map(h=>x.join(t,h)),f=u.bin;if(f)for(let[h,p]of Object.entries(f)){let C=x.join(t,K.toPortablePath(h)),y=Ie.getMapWithDefault(l,C);for(let[B,v]of Object.entries(p))y.set(Jr(B),K.toPortablePath([C,kr,v].join(x.sep)))}if(a.set(c,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:u.aliases||[]}),e&&u.aliases)for(let h of u.aliases){let{scope:p,name:C}=P.parseLocator(c),y=P.makeLocator(P.makeIdent(p,C),h),B=P.stringifyLocator(y);a.set(B,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:[]})}}return{locatorMap:a,binSymlinks:l,locationTree:Ole(a,{skipPrefix:r.cwd}),nmMode:o,mtimeMs:n.mtimeMs}}var sp=async(r,e)=>{if(r.split(x.sep).indexOf(kr)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${r}`);try{if(!e.innerLoop){let i=e.allowSymlink?await O.statPromise(r):await O.lstatPromise(r);if(e.allowSymlink&&!i.isDirectory()||!e.allowSymlink&&i.isSymbolicLink()){await O.unlinkPromise(r);return}}let t=await O.readdirPromise(r,{withFileTypes:!0});for(let i of t){let n=x.join(r,Jr(i.name));i.isDirectory()?(i.name!==kr||e&&e.innerLoop)&&await sp(n,{innerLoop:!0,contentsOnly:!1}):await O.unlinkPromise(n)}e.contentsOnly||await O.rmdirPromise(r)}catch(t){if(t.code!==\"ENOENT\"&&t.code!==\"ENOTEMPTY\")throw t}},Rle=4,sQ=(r,{skipPrefix:e})=>{let t=x.contains(e,r);if(t===null)throw new Error(`Assertion failed: Writing attempt prevented to ${r} which is outside project root: ${e}`);let i=t.split(x.sep).filter(l=>l!==\"\"),n=i.indexOf(kr),s=i.slice(0,n).join(x.sep),o=x.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},Ole=(r,{skipPrefix:e})=>{let t=new Map;if(r===null)return t;let i=()=>({children:new Map,linkType:\"HARD\"});for(let[n,s]of r.entries()){if(s.linkType===\"SOFT\"&&x.contains(e,s.target)!==null){let a=Ie.getFactoryWithDefault(t,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=sQ(o,{skipPrefix:e}),c=Ie.getFactoryWithDefault(t,a,i);for(let u=0;u<l.length;++u){let g=l[u];if(g!==\".\"){let f=Ie.getFactoryWithDefault(c.children,g,i);c.children.set(g,f),c=f}u===l.length-1&&(c.locator=n,c.linkType=s.linkType)}}}return t},fO=async(r,e)=>{let t;try{process.platform===\"win32\"&&(t=await O.lstatPromise(r))}catch{}process.platform==\"win32\"&&(!t||t.isDirectory())?await O.symlinkPromise(r,e,\"junction\"):await O.symlinkPromise(x.relative(x.dirname(e),r),e)};async function Kle(r,e,t){let i=x.join(r,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));try{await O.writeFilePromise(i,t);try{await O.linkPromise(i,e)}catch{}}finally{await O.unlinkPromise(i)}}async function Oze({srcPath:r,dstPath:e,entry:t,globalHardlinksStore:i,baseFs:n,nmMode:s}){if(t.kind===Ule.FILE){if(s.value===\"hardlinks-global\"&&i&&t.digest){let a=x.join(i,t.digest.substring(0,2),`${t.digest.substring(2)}.dat`),l;try{let c=await O.statPromise(a);if(c&&(!t.mtimeMs||c.mtimeMs>t.mtimeMs||c.mtimeMs<t.mtimeMs-Tze))if(await li.checksumFile(a,{baseFs:O,algorithm:\"sha1\"})!==t.digest){let g=x.join(i,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));await O.renamePromise(a,g);let f=await n.readFilePromise(r);await O.writeFilePromise(g,f);try{await O.linkPromise(g,a),t.mtimeMs=new Date().getTime(),await O.unlinkPromise(g)}catch{}}else t.mtimeMs||(t.mtimeMs=Math.ceil(c.mtimeMs));await O.linkPromise(a,e),l=!0}catch{l=!1}if(!l){let c=await n.readFilePromise(r);await Kle(i,a,c),t.mtimeMs=new Date().getTime();try{await O.linkPromise(a,e)}catch(u){u&&u.code&&u.code==\"EXDEV\"&&(s.value=\"hardlinks-local\",await n.copyFilePromise(r,e))}}}else await n.copyFilePromise(r,e);let o=t.mode&511;o!==420&&await O.chmodPromise(e,o)}}var Ule=(i=>(i.FILE=\"file\",i.DIRECTORY=\"directory\",i.SYMLINK=\"symlink\",i))(Ule||{}),Kze=async(r,e,{baseFs:t,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await O.mkdirPromise(r,{recursive:!0});let o=async(c=Me.dot)=>{let u=x.join(e,c),g=await t.readdirPromise(u,{withFileTypes:!0}),f=new Map;for(let h of g){let p=x.join(c,h.name),C,y=x.join(u,h.name);if(h.isFile()){if(C={kind:\"file\",mode:(await t.lstatPromise(y)).mode},n.value===\"hardlinks-global\"){let B=await li.checksumFile(y,{baseFs:t,algorithm:\"sha1\"});C.digest=B}}else if(h.isDirectory())C={kind:\"directory\"};else if(h.isSymbolicLink())C={kind:\"symlink\",symlinkTo:await t.readlinkPromise(y)};else throw new Error(`Unsupported file type (file: ${y}, mode: 0o${await t.statSync(y).mode.toString(8).padStart(6,\"0\")})`);if(f.set(p,C),h.isDirectory()&&p!==kr){let B=await o(p);for(let[v,D]of B)f.set(v,D)}}return f},a;if(n.value===\"hardlinks-global\"&&i&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await O.readFilePromise(c,\"utf8\"))))}catch{a=await o()}}else a=await o();let l=!1;for(let[c,u]of a){let g=x.join(e,c),f=x.join(r,c);if(u.kind===\"directory\")await O.mkdirPromise(f,{recursive:!0});else if(u.kind===\"file\"){let h=u.mtimeMs;await Oze({srcPath:g,dstPath:f,entry:u,nmMode:n,baseFs:t,globalHardlinksStore:i}),u.mtimeMs!==h&&(l=!0)}else u.kind===\"symlink\"&&await fO(x.resolve(x.dirname(f),u.symlinkTo),f)}if(n.value===\"hardlinks-global\"&&i&&l&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);await O.removePromise(c),await Kle(i,c,Buffer.from(JSON.stringify(Object.fromEntries(a))))}};function Uze(r,e,t,i){let n=new Map,s=new Map,o=new Map,a=!1,l=(c,u,g,f,h)=>{let p=!0,C=x.join(c,u),y=new Set;if(u===kr||u.startsWith(\"@\")){let v;try{v=O.statSync(C)}catch{}p=!!v,v?v.mtimeMs>t?(a=!0,y=new Set(O.readdirSync(C))):y=new Set(g.children.get(u).children.keys()):a=!0;let D=e.get(c);if(D){let T=x.join(c,kr,iQ),H;try{H=O.statSync(T)}catch{}if(!H)a=!0;else if(H.mtimeMs>t){a=!0;let j=new Set(O.readdirSync(T)),$=new Map;s.set(c,$);for(let[V,W]of D)j.has(V)&&$.set(V,W)}else s.set(c,D)}}else p=h.has(u);let B=g.children.get(u);if(p){let{linkType:v,locator:D}=B,T={children:new Map,linkType:v,locator:D};if(f.children.set(u,T),D){let H=Ie.getSetWithDefault(o,D);H.add(C),o.set(D,H)}for(let H of B.children.keys())l(C,H,B,T,y)}else B.locator&&i.storedBuildState.delete(P.parseLocator(B.locator).locatorHash)};for(let[c,u]of r){let{linkType:g,locator:f}=u,h={children:new Map,linkType:g,locator:f};if(n.set(c,h),f){let p=Ie.getSetWithDefault(o,u.locator);p.add(c),o.set(u.locator,p)}u.children.has(kr)&&l(c,kr,u,h,new Set)}return{locationTree:n,binSymlinks:s,locatorLocations:o,installChangedByUser:a}}function Hle(r){let e=P.parseDescriptor(r);return P.isVirtualDescriptor(e)&&(e=P.devirtualizeDescriptor(e)),e.range.startsWith(\"link:\")}async function Hze(r,e,t,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of r){let c=Hle(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=x.join(l[0],f);f!==\"\"&&O.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=x.contains(t,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let C=x.join(a,K.toPortablePath(p));u.set(Jr(h),C)}for(let[h,p]of c.children){let C=x.join(a,h),y=o(C,C,p);y.size>0&&s.set(a,new Map([...s.get(a)||new Map,...y]))}}else for(let[f,h]of c.children){let p=o(x.join(a,f),l,h);for(let[C,y]of p)u.set(C,y)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var Fle=(r,e)=>{if(!r||!e)return r===e;let t=P.parseLocator(r);P.isVirtualLocator(t)&&(t=P.devirtualizeLocator(t));let i=P.parseLocator(e);return P.isVirtualLocator(i)&&(i=P.devirtualizeLocator(i)),P.areLocatorsEqual(t,i)};function hO(r){return x.join(r.get(\"globalFolder\"),\"store\")}async function Gze(r,e,{baseFs:t,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=x.join(i.cwd,kr),{locationTree:l,binSymlinks:c,locatorLocations:u,installChangedByUser:g}=Uze(r.locationTree,r.binSymlinks,r.mtimeMs,i),f=Ole(e,{skipPrefix:i.cwd}),h=[],p=async({srcDir:V,dstDir:W,linkType:_,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})=>{let re=(async()=>{try{_===\"SOFT\"?(await O.mkdirPromise(x.dirname(W),{recursive:!0}),await fO(x.resolve(V),W)):await Kze(W,V,{baseFs:t,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})}catch(M){throw M.message=`While persisting ${V} -> ${W} ${M.message}`,M}finally{T.tick()}})().then(()=>h.splice(h.indexOf(re),1));h.push(re),h.length>Rle&&await Promise.race(h)},C=async(V,W,_)=>{let A=(async()=>{let Ae=async(ge,re,M)=>{try{M.innerLoop||await O.mkdirPromise(re,{recursive:!0});let F=await O.readdirPromise(ge,{withFileTypes:!0});for(let ue of F){if(!M.innerLoop&&ue.name===iQ)continue;let pe=x.join(ge,ue.name),ke=x.join(re,ue.name);ue.isDirectory()?(ue.name!==kr||M&&M.innerLoop)&&(await O.mkdirPromise(ke,{recursive:!0}),await Ae(pe,ke,{...M,innerLoop:!0})):$.value===\"hardlinks-local\"||$.value===\"hardlinks-global\"?await O.linkPromise(pe,ke):await O.copyFilePromise(pe,ke,Tle.default.constants.COPYFILE_FICLONE)}}catch(F){throw M.innerLoop||(F.message=`While cloning ${ge} -> ${re} ${F.message}`),F}finally{M.innerLoop||T.tick()}};await Ae(V,W,_)})().then(()=>h.splice(h.indexOf(A),1));h.push(A),h.length>Rle&&await Promise.race(h)},y=async(V,W,_)=>{if(_)for(let[A,Ae]of W.children){let ge=_.children.get(A);await y(x.join(V,A),Ae,ge)}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!1});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:V===a,allowSymlink:A})}};for(let[V,W]of l){let _=f.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A),re=x.join(V,A);await y(re,Ae,ge)}}let B=async(V,W,_)=>{if(_){Fle(W.locator,_.locator)||await sp(V,{contentsOnly:W.linkType===\"HARD\"});for(let[A,Ae]of W.children){let ge=_.children.get(A);await B(x.join(V,A),Ae,ge)}}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!0});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:W.linkType===\"HARD\",allowSymlink:A})}};for(let[V,W]of f){let _=l.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A);await B(x.join(V,A),Ae,ge)}}let v=new Map,D=[];for(let[V,W]of u)for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=f.get(A),re=A;if(ge){for(let M of Ae)if(re=x.join(re,M),ge=ge.children.get(M),!ge)break;if(ge){let M=Fle(ge.locator,V),F=e.get(ge.locator),ue=F.target,pe=re,ke=F.linkType;if(M)v.has(ue)||v.set(ue,pe);else if(ue!==pe){let Fe=P.parseLocator(ge.locator);P.isVirtualLocator(Fe)&&(Fe=P.devirtualizeLocator(Fe)),D.push({srcDir:ue,dstDir:pe,linkType:ke,realLocatorHash:Fe.locatorHash})}}}}for(let[V,{locations:W}]of e.entries())for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=l.get(A),re=f.get(A),M=A,F=e.get(V),ue=P.parseLocator(V);P.isVirtualLocator(ue)&&(ue=P.devirtualizeLocator(ue));let pe=ue.locatorHash,ke=F.target,Fe=_;if(ke===Fe)continue;let Ne=F.linkType;for(let oe of Ae)re=re.children.get(oe);if(!ge)D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});else for(let oe of Ae)if(M=x.join(M,oe),ge=ge.children.get(oe),!ge){D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});break}}let T=vi.progressViaCounter(D.length),H=n.reportProgress(T),j=i.configuration.get(\"nmMode\"),$={value:j};try{let V=$.value===\"hardlinks-global\"?`${hO(i.configuration)}/v1`:null;if(V&&!await O.existsPromise(V)){await O.mkdirpPromise(V);for(let _=0;_<256;_++)await O.mkdirPromise(x.join(V,_.toString(16).padStart(2,\"0\")))}for(let _ of D)(_.linkType===\"SOFT\"||!v.has(_.srcDir))&&(v.set(_.srcDir,_.dstDir),await p({..._,globalHardlinksStore:V,nmMode:$,packageChecksum:o.get(_.realLocatorHash)||null}));await Promise.all(h),h.length=0;for(let _ of D){let A=v.get(_.srcDir);_.linkType!==\"SOFT\"&&_.dstDir!==A&&await C(A,_.dstDir,{nmMode:$})}await Promise.all(h),await O.mkdirPromise(a,{recursive:!0});let W=await Hze(e,f,i.cwd,{loadManifest:s});await Yze(c,W,i.cwd),await Mze(i,e,W,$,{installChangedByUser:g}),j==\"hardlinks-global\"&&$.value==\"hardlinks-local\"&&n.reportWarningOnce(74,\"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices\")}finally{H.stop()}}async function Yze(r,e,t){for(let i of r.keys()){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=x.join(i,kr,iQ);await O.removePromise(n)}}for(let[i,n]of e){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=x.join(i,kr,iQ),o=r.get(i)||new Map;await O.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await O.removePromise(x.join(s,a)),process.platform===\"win32\"&&await O.removePromise(x.join(s,Jr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=x.join(s,a);c!==l&&(process.platform===\"win32\"?await(0,Nle.default)(K.fromPortablePath(l),K.fromPortablePath(u),{createPwshFile:!1}):(await O.removePromise(u),await fO(l,u),x.contains(t,await O.realpathPromise(l))!==null&&await O.chmodPromise(l,493)))}}}var oQ=class extends wl{constructor(){super(...arguments);this.mode=\"loose\"}makeInstaller(t){return new pO(t)}},pO=class extends Yu{constructor(){super(...arguments);this.mode=\"loose\"}async transformPnpSettings(t){let i=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),n=mle(t,this.opts.project.cwd,i),{tree:s,errors:o}=rE(n,{pnpifyFs:!1,project:this.opts.project});if(!s){for(let{messageName:g,text:f}of o)this.opts.report.reportError(g,f);return}let a=new Map;t.fallbackPool=a;let l=(g,f)=>{let h=P.parseLocator(f.locator),p=P.stringifyIdent(h);p===g?a.set(g,h.reference):a.set(g,[p,h.reference])},c=x.join(this.opts.project.cwd,xt.nodeModules),u=s.get(c);if(!(typeof u>\"u\")){if(\"target\"in u)throw new Error(\"Assertion failed: Expected the root junction point to be a directory\");for(let g of u.dirList){let f=x.join(c,g),h=s.get(f);if(typeof h>\"u\")throw new Error(\"Assertion failed: Expected the child to have been registered\");if(\"target\"in h)l(g,h);else for(let p of h.dirList){let C=x.join(f,p),y=s.get(C);if(typeof y>\"u\")throw new Error(\"Assertion failed: Expected the subchild to have been registered\");if(\"target\"in y)l(`${g}/${p}`,y);else throw new Error(\"Assertion failed: Expected the leaf junction to be a package\")}}}}};var jze={hooks:{cleanGlobalArtifacts:async r=>{let e=hO(r);await O.removePromise(e)}},configuration:{nmHoistingLimits:{description:\"Prevent packages to be hoisted past specific levels\",type:\"STRING\",values:[\"workspaces\",\"dependencies\",\"none\"],default:\"none\"},nmMode:{description:'If set to \"hardlinks-local\" Yarn will utilize hardlinks to reduce disk space consumption inside \"node_modules\" directories. With \"hardlinks-global\" Yarn will use global content addressable storage to reduce \"node_modules\" size across all the projects using this option.',type:\"STRING\",values:[\"classic\",\"hardlinks-local\",\"hardlinks-global\"],default:\"classic\"},nmSelfReferences:{description:\"If set to 'false' the workspace will not be allowed to require itself and corresponding self-referencing symlink will not be created\",type:\"BOOLEAN\",default:!0}},linkers:[nQ,oQ]},qze=jze;var f1={};ut(f1,{default:()=>$Ve,npmConfigUtils:()=>or,npmHttpUtils:()=>Ot,npmPublishUtils:()=>Cp});var Wle=Pe(Xr());var gr=\"npm:\";var Ot={};ut(Ot,{AuthType:()=>Jle,customPackageError:()=>Wze,del:()=>Xze,get:()=>Eo,getIdentUrl:()=>Ql,handleInvalidAuthenticationError:()=>bl,post:()=>zze,put:()=>Vze});var EO=Pe(Km()),qle=J(\"url\");var or={};ut(or,{RegistryType:()=>Gle,getAuditRegistry:()=>Jze,getAuthConfiguration:()=>mO,getDefaultRegistry:()=>aQ,getPublishRegistry:()=>Yle,getRegistryConfiguration:()=>jle,getScopeConfiguration:()=>CO,getScopeRegistry:()=>gA,normalizeRegistry:()=>mo});var Gle=(i=>(i.AUDIT_REGISTRY=\"npmAuditRegistry\",i.FETCH_REGISTRY=\"npmRegistryServer\",i.PUBLISH_REGISTRY=\"npmPublishRegistry\",i))(Gle||{});function mo(r){return r.replace(/\\/$/,\"\")}function Jze(r,{configuration:e}){let t=e.get(\"npmAuditRegistry\");return t!==null?mo(t):Yle(r,{configuration:e})}function Yle(r,{configuration:e}){var t;return(t=r.publishConfig)!=null&&t.registry?mo(r.publishConfig.registry):r.name?gA(r.name.scope,{configuration:e,type:\"npmPublishRegistry\"}):aQ({configuration:e,type:\"npmPublishRegistry\"})}function gA(r,{configuration:e,type:t=\"npmRegistryServer\"}){let i=CO(r,{configuration:e});if(i===null)return aQ({configuration:e,type:t});let n=i.get(t);return n===null?aQ({configuration:e,type:t}):mo(n)}function aQ({configuration:r,type:e=\"npmRegistryServer\"}){let t=r.get(e);return mo(t!==null?t:r.get(\"npmRegistryServer\"))}function jle(r,{configuration:e}){let t=e.get(\"npmRegistries\"),i=mo(r),n=t.get(i);if(typeof n<\"u\")return n;let s=t.get(i.replace(/^[a-z]+:/,\"\"));return typeof s<\"u\"?s:null}function CO(r,{configuration:e}){if(r===null)return null;let i=e.get(\"npmScopes\").get(r);return i||null}function mO(r,{configuration:e,ident:t}){let i=t&&CO(t.scope,{configuration:e});return(i==null?void 0:i.get(\"npmAuthIdent\"))||(i==null?void 0:i.get(\"npmAuthToken\"))?i:jle(r,{configuration:e})||e}var Jle=(n=>(n[n.NO_AUTH=0]=\"NO_AUTH\",n[n.BEST_EFFORT=1]=\"BEST_EFFORT\",n[n.CONFIGURATION=2]=\"CONFIGURATION\",n[n.ALWAYS_AUTH=3]=\"ALWAYS_AUTH\",n))(Jle||{});async function bl(r,{attemptedAs:e,registry:t,headers:i,configuration:n}){var s,o;if(lQ(r))throw new at(41,\"Invalid OTP token\");if(((s=r.originalError)==null?void 0:s.name)===\"HTTPError\"&&((o=r.originalError)==null?void 0:o.response.statusCode)===401)throw new at(41,`Invalid authentication (${typeof e!=\"string\"?`as ${await _ze(t,i,{configuration:n})}`:`attempted as ${e}`})`)}function Wze(r){var e;return((e=r.response)==null?void 0:e.statusCode)===404?\"Package not found\":null}function Ql(r){return r.scope?`/@${r.scope}%2f${r.name}`:`/${r.name}`}async function Eo(r,{configuration:e,headers:t,ident:i,authType:n,registry:s,...o}){if(i&&typeof s>\"u\"&&(s=gA(i.scope,{configuration:e})),i&&i.scope&&typeof n>\"u\"&&(n=1),typeof s!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let a=await AQ(s,{authType:n,configuration:e,ident:i});a&&(t={...t,authorization:a});try{return await Xt.get(r.charAt(0)===\"/\"?`${s}${r}`:r,{configuration:e,headers:t,...o})}catch(l){throw await bl(l,{registry:s,configuration:e,headers:t}),l}}async function zze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.post(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g)||l)throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.post(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Vze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.put(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g))throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.put(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Xze(r,{attemptedAs:e,configuration:t,headers:i,ident:n,authType:s=3,registry:o,otp:a,...l}){if(n&&typeof o>\"u\"&&(o=gA(n.scope,{configuration:t})),typeof o!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let c=await AQ(o,{authType:s,configuration:t,ident:n});c&&(i={...i,authorization:c}),a&&(i={...i,...op(a)});try{return await Xt.del(o+r,{configuration:t,headers:i,...l})}catch(u){if(!lQ(u)||a)throw await bl(u,{attemptedAs:e,registry:o,configuration:t,headers:i}),u;a=await IO(u,{configuration:t});let g={...i,...op(a)};try{return await Xt.del(`${o}${r}`,{configuration:t,headers:g,...l})}catch(f){throw await bl(f,{attemptedAs:e,registry:o,configuration:t,headers:i}),f}}}async function AQ(r,{authType:e=2,configuration:t,ident:i}){let n=mO(r,{configuration:t,ident:i}),s=Zze(n,e);if(!s)return null;let o=await t.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,r,{configuration:t,ident:i});if(o)return o;if(n.get(\"npmAuthToken\"))return`Bearer ${n.get(\"npmAuthToken\")}`;if(n.get(\"npmAuthIdent\")){let a=n.get(\"npmAuthIdent\");return a.includes(\":\")?`Basic ${Buffer.from(a).toString(\"base64\")}`:`Basic ${a}`}if(s&&e!==1)throw new at(33,\"No authentication configured for request\");return null}function Zze(r,e){switch(e){case 2:return r.get(\"npmAlwaysAuth\");case 1:case 3:return!0;case 0:return!1;default:throw new Error(\"Unreachable\")}}async function _ze(r,e,{configuration:t}){var i;if(typeof e>\"u\"||typeof e.authorization>\"u\")return\"an anonymous user\";try{return(i=(await Xt.get(new qle.URL(`${r}/-/whoami`).href,{configuration:t,headers:e,jsonResponse:!0})).username)!=null?i:\"an unknown user\"}catch{return\"an unknown user\"}}async function IO(r,{configuration:e}){var n;let t=(n=r.originalError)==null?void 0:n.response.headers[\"npm-notice\"];if(t&&(await Ge.start({configuration:e,stdout:process.stdout,includeFooter:!1},async s=>{if(s.reportInfo(0,t.replace(/(https?:\\/\\/\\S+)/g,ee.pretty(e,\"$1\",ee.Type.URL))),!process.env.YARN_IS_TEST_ENV){let o=t.match(/open (https?:\\/\\/\\S+)/i);if(o&&ws.openUrl){let{openNow:a}=await(0,EO.prompt)({type:\"confirm\",name:\"openNow\",message:\"Do you want to try to open this url now?\",required:!0,initial:!0,onCancel:()=>process.exit(130)});a&&(await ws.openUrl(o[1])||(s.reportSeparator(),s.reportWarning(0,\"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.\")))}}}),process.stdout.write(`\n`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||\"\";let{otp:i}=await(0,EO.prompt)({type:\"password\",name:\"otp\",message:\"One-time password:\",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(`\n`),i}function lQ(r){var e,t;if(((e=r.originalError)==null?void 0:e.name)!==\"HTTPError\")return!1;try{return((t=r.originalError)==null?void 0:t.response.headers[\"www-authenticate\"].split(/,\\s*/).map(n=>n.toLowerCase())).includes(\"otp\")}catch{return!1}}function op(r){return{[\"npm-otp\"]:r}}var cQ=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i,params:n}=P.parseRange(e.reference);return!(!Wle.default.valid(i)||n===null||typeof n.__archiveUrl!=\"string\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let{params:i}=P.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!=\"string\")throw new Error(\"Assertion failed: The archiveUrl querystring parameter should have been available\");let n=await Eo(i.__archiveUrl,{configuration:t.project.configuration,ident:e});return await mi.convertToZip(n,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var uQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!P.tryParseDescriptor(e.range.slice(gr.length),!0))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){let i=P.parseDescriptor(e.range.slice(gr.length),!0);return t.resolver.getResolutionDependencies(i,t)}async getCandidates(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return await i.resolver.getCandidates(n,t,i)}async getSatisfying(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return i.resolver.getSatisfying(n,t,i)}resolve(e,t){throw new Error(\"Unreachable\")}};var zle=Pe(Xr()),Vle=J(\"url\");var Ls=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let i=new Vle.URL(e.reference);return!(!zle.default.valid(i.pathname)||i.searchParams.has(\"__archiveUrl\"))}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i;try{i=await Eo(Ls.getLocatorUrl(e),{configuration:t.project.configuration,ident:e})}catch{i=await Eo(Ls.getLocatorUrl(e).replace(/%2f/g,\"/\"),{configuration:t.project.configuration,ident:e})}return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,t,{configuration:i}){let n=gA(e.scope,{configuration:i}),s=Ls.getLocatorUrl(e);return t=t.replace(/^https?:(\\/\\/(?:[^/]+\\.)?npmjs.org(?:$|\\/))/,\"https:$1\"),n=n.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t=t.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t===n+s||t===n+s.replace(/%2f/g,\"/\")}static getLocatorUrl(e){let t=vt.clean(e.reference.slice(gr.length));if(t===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");return`${Ql(e)}/-/${e.name}-${t}.tgz`}};var Xle=Pe(Xr());var gQ=P.makeIdent(null,\"node-gyp\"),$ze=/\\b(node-gyp|prebuild-install)\\b/,fQ=class{supportsDescriptor(e,t){return e.range.startsWith(gr)?!!vt.validRange(e.range.slice(gr.length)):!1}supportsLocator(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i}=P.parseRange(e.reference);return!!Xle.default.valid(i)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);let s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=Ie.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new vt.SemVer(c);if(n.test(u))return u}catch{}return Ie.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=P.makeLocator(e,`${gr}${c.raw}`),g=s.versions[c.raw].dist.tarball;return Ls.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:P.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);return Ie.mapAndFilter(t,s=>{try{let{selector:o}=P.parseRange(s,{requireProtocol:gr}),a=new vt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return Ie.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>P.makeLocator(e,s))}async resolve(e,t){let{selector:i}=P.parseRange(e.reference),n=vt.clean(i);if(n===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");let s=await Eo(Ql(e),{configuration:t.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new at(16,`Registry failed to return reference \"${n}\"`);let o=new ot;if(o.load(s.versions[n]),!o.dependencies.has(gQ.identHash)&&!o.peerDependencies.has(gQ.identHash)){for(let a of o.scripts.values())if(a.match($ze)){o.dependencies.set(gQ.identHash,P.makeDescriptor(gQ,\"latest\")),t.report.reportWarningOnce(32,`${P.prettyLocator(t.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}if(typeof o.raw.deprecated==\"string\"&&o.raw.deprecated!==\"\"){let a=P.prettyLocator(t.project.configuration,e),l=o.raw.deprecated.match(/\\S/)?`${a} is deprecated: ${o.raw.deprecated}`:`${a} is deprecated`;t.report.reportWarningOnce(61,l)}return{...e,version:n,languageName:\"node\",linkType:\"HARD\",conditions:o.getConditions(),dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin}}};var hQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!Rf.test(e.range.slice(gr.length)))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(gr.length),s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"dist-tags\"))throw new at(15,'Registry returned invalid data - missing \"dist-tags\" field');let o=s[\"dist-tags\"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new at(16,`Registry failed to return tag \"${n}\"`);let a=o[n],l=P.makeLocator(e,`${gr}${a}`),c=s.versions[a].dist.tarball;return Ls.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[P.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Unreachable\")}};var Cp={};ut(Cp,{getGitHead:()=>ZVe,getPublishAccess:()=>Uue,getReadmeContent:()=>Hue,makePublishBody:()=>XVe});var A1={};ut(A1,{default:()=>RVe,packUtils:()=>ca});var ca={};ut(ca,{genPackList:()=>MQ,genPackStream:()=>a1,genPackageManifest:()=>vue,hasPackScripts:()=>s1,prepareForPack:()=>o1});var n1=Pe(Bn()),Que=Pe(yue()),Sue=J(\"zlib\"),yVe=[\"/package.json\",\"/readme\",\"/readme.*\",\"/license\",\"/license.*\",\"/licence\",\"/licence.*\",\"/changelog\",\"/changelog.*\"],wVe=[\"/package.tgz\",\".github\",\".git\",\".hg\",\"node_modules\",\".npmignore\",\".gitignore\",\".#*\",\".DS_Store\"];async function s1(r){return!!(Wt.hasWorkspaceScript(r,\"prepack\")||Wt.hasWorkspaceScript(r,\"postpack\"))}async function o1(r,{report:e},t){await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"prepack\",{report:e});try{let i=x.join(r.cwd,ot.fileName);await O.existsPromise(i)&&await r.manifest.loadFile(i,{baseFs:O}),await t()}finally{await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"postpack\",{report:e})}}async function a1(r,e){var s,o;typeof e>\"u\"&&(e=await MQ(r));let t=new Set;for(let a of(o=(s=r.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)t.add(x.normalize(a));for(let a of r.manifest.bin.values())t.add(x.normalize(a));let i=Que.default.pack();process.nextTick(async()=>{for(let a of e){let l=x.normalize(a),c=x.resolve(r.cwd,l),u=x.join(\"package\",l),g=await O.lstatPromise(c),f={name:u,mtime:new Date(xr.SAFE_TIME*1e3)},h=t.has(l)?493:420,p,C,y=new Promise((v,D)=>{p=v,C=D}),B=v=>{v?C(v):p()};if(g.isFile()){let v;l===\"package.json\"?v=Buffer.from(JSON.stringify(await vue(r),null,2)):v=await O.readFilePromise(c),i.entry({...f,mode:h,type:\"file\"},v,B)}else g.isSymbolicLink()?i.entry({...f,mode:h,type:\"symlink\",linkname:await O.readlinkPromise(c)},B):B(new Error(`Unsupported file type ${g.mode} for ${K.fromPortablePath(l)}`));await y}i.finalize()});let n=(0,Sue.createGzip)();return i.pipe(n),n}async function vue(r){let e=JSON.parse(JSON.stringify(r.manifest.raw));return await r.project.configuration.triggerHook(t=>t.beforeWorkspacePacking,r,e),e}async function MQ(r){var g,f,h,p,C,y,B,v;let e=r.project,t=e.configuration,i={accept:[],reject:[]};for(let D of wVe)i.reject.push(D);for(let D of yVe)i.accept.push(D);i.reject.push(t.get(\"rcFilename\"));let n=D=>{if(D===null||!D.startsWith(`${r.cwd}/`))return;let T=x.relative(r.cwd,D),H=x.resolve(Me.root,T);i.reject.push(H)};n(x.resolve(e.cwd,t.get(\"lockfileFilename\"))),n(t.get(\"cacheFolder\")),n(t.get(\"globalFolder\")),n(t.get(\"installStatePath\")),n(t.get(\"virtualFolder\")),n(t.get(\"yarnPath\")),await t.triggerHook(D=>D.populateYarnPaths,e,D=>{n(D)});for(let D of e.workspaces){let T=x.relative(r.cwd,D.cwd);T!==\"\"&&!T.match(/^(\\.\\.)?\\//)&&i.reject.push(`/${T}`)}let s={accept:[],reject:[]},o=(f=(g=r.manifest.publishConfig)==null?void 0:g.main)!=null?f:r.manifest.main,a=(p=(h=r.manifest.publishConfig)==null?void 0:h.module)!=null?p:r.manifest.module,l=(y=(C=r.manifest.publishConfig)==null?void 0:C.browser)!=null?y:r.manifest.browser,c=(v=(B=r.manifest.publishConfig)==null?void 0:B.bin)!=null?v:r.manifest.bin;o!=null&&s.accept.push(x.resolve(Me.root,o)),a!=null&&s.accept.push(x.resolve(Me.root,a)),typeof l==\"string\"&&s.accept.push(x.resolve(Me.root,l));for(let D of c.values())s.accept.push(x.resolve(Me.root,D));if(l instanceof Map)for(let[D,T]of l.entries())s.accept.push(x.resolve(Me.root,D)),typeof T==\"string\"&&s.accept.push(x.resolve(Me.root,T));let u=r.manifest.files!==null;if(u){s.reject.push(\"/*\");for(let D of r.manifest.files)xue(s.accept,D,{cwd:Me.root})}return await BVe(r.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function BVe(r,{hasExplicitFileList:e,globalList:t,ignoreList:i}){let n=[],s=new vo(r),o=[[Me.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!Bue(a,{globalList:t,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Me.root)for(let C of u)g=g||C===\".gitignore\",f=f||C===\".npmignore\";let h=f?await wue(s,a,\".npmignore\"):g?await wue(s,a,\".gitignore\"):null,p=h!==null?[h].concat(l):l;Bue(a,{globalList:t,ignoreLists:l})&&(p=[...l,{accept:[],reject:[\"**/*\"]}]);for(let C of u)o.push([x.resolve(a,C),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(x.relative(Me.root,a))}return n.sort()}async function wue(r,e,t){let i={accept:[],reject:[]},n=await r.readFilePromise(x.join(e,t),\"utf8\");for(let s of n.split(/\\n/g))xue(i.reject,s,{cwd:e});return i}function bVe(r,{cwd:e}){let t=r[0]===\"!\";return t&&(r=r.slice(1)),r.match(/\\.{0,1}\\//)&&(r=x.resolve(e,r)),t&&(r=`!${r}`),r}function xue(r,e,{cwd:t}){let i=e.trim();i===\"\"||i[0]===\"#\"||r.push(bVe(i,{cwd:t}))}function Bue(r,{globalList:e,ignoreLists:t}){let i=LQ(r,e.accept);if(i!==0)return i===2;let n=LQ(r,e.reject);if(n!==0)return n===1;if(t!==null)for(let s of t){let o=LQ(r,s.accept);if(o!==0)return o===2;let a=LQ(r,s.reject);if(a!==0)return a===1}return!1}function LQ(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n][0]!==\"!\"?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n].slice(1)));return bue(r,i)?2:bue(r,t)?1:0}function bue(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n].includes(\"/\")?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n]));return!!(n1.default.isMatch(r,t,{dot:!0,nocase:!0})||n1.default.isMatch(r,i,{dot:!0,basename:!0,nocase:!0}))}var Vu=class extends De{constructor(){super(...arguments);this.installIfNeeded=z.Boolean(\"--install-if-needed\",!1,{description:\"Run a preliminary `yarn install` if the package contains build scripts\"});this.dryRun=z.Boolean(\"-n,--dry-run\",!1,{description:\"Print the file paths without actually generating the package archive\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.out=z.String(\"-o,--out\",{description:\"Create the archive at the specified path\"});this.filename=z.String(\"--filename\",{hidden:!0})}async execute(){var l;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await s1(n)&&(this.installIfNeeded?await i.install({cache:await Rt.find(t),report:new ti}):await i.restoreInstallState());let s=(l=this.out)!=null?l:this.filename,o=typeof s<\"u\"?x.resolve(this.context.cwd,QVe(s,{workspace:n})):x.resolve(n.cwd,\"package.tgz\");return(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async c=>{await o1(n,{report:c},async()=>{c.reportJson({base:K.fromPortablePath(n.cwd)});let u=await MQ(n);for(let g of u)c.reportInfo(null,K.fromPortablePath(g)),c.reportJson({location:K.fromPortablePath(g)});if(!this.dryRun){let g=await a1(n,u),f=O.createWriteStream(o);g.pipe(f),await new Promise(h=>{f.on(\"finish\",h)})}}),this.dryRun||(c.reportInfo(0,`Package archive generated in ${ee.pretty(t,o,ee.Type.PATH)}`),c.reportJson({output:K.fromPortablePath(o)}))})).exitCode()}};Vu.paths=[[\"pack\"]],Vu.usage=ve.Usage({description:\"generate a tarball from the active workspace\",details:\"\\n      This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\\n\\n      If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\\n    \",examples:[[\"Create an archive from the active workspace\",\"yarn pack\"],[\"List the files that would be made part of the workspace's archive\",\"yarn pack --dry-run\"],[\"Name and output the archive in a dedicated folder\",\"yarn pack --out /artifacts/%s-%v.tgz\"]]});function QVe(r,{workspace:e}){let t=r.replace(\"%s\",SVe(e)).replace(\"%v\",vVe(e));return K.toPortablePath(t)}function SVe(r){return r.manifest.name!==null?P.slugifyIdent(r.manifest.name):\"package\"}function vVe(r){return r.manifest.version!==null?r.manifest.version:\"unknown\"}var xVe=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],PVe=\"workspace:\",DVe=(r,e)=>{var i,n;e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let t=r.project;for(let s of xVe)for(let o of r.manifest.getForScope(s).values()){let a=t.tryWorkspaceByDescriptor(o),l=P.parseRange(o.range);if(l.protocol===PVe)if(a===null){if(t.tryWorkspaceByIdent(o)===null)throw new at(21,`${P.prettyDescriptor(t.configuration,o)}: No local workspace found for this range`)}else{let c;P.areDescriptorsEqual(o,a.anchoredDescriptor)||l.selector===\"*\"?c=(i=a.manifest.version)!=null?i:\"0.0.0\":l.selector===\"~\"||l.selector===\"^\"?c=`${l.selector}${(n=a.manifest.version)!=null?n:\"0.0.0\"}`:c=l.selector;let u=s===\"dependencies\"?P.makeDescriptor(o,\"unknown\"):null,g=u!==null&&r.manifest.ensureDependencyMeta(u).optional?\"optionalDependencies\":s;e[g][P.stringifyIdent(o)]=c}}},kVe={hooks:{beforeWorkspacePacking:DVe},commands:[Vu]},RVe=kVe;var Mue=J(\"crypto\"),Oue=Pe(Lue()),Kue=J(\"url\");async function XVe(r,e,{access:t,tag:i,registry:n,gitHead:s}){let o=r.manifest.name,a=r.manifest.version,l=P.stringifyIdent(o),c=(0,Mue.createHash)(\"sha1\").update(e).digest(\"hex\"),u=Oue.default.fromData(e).toString(),g=t!=null?t:Uue(r,o),f=await Hue(r),h=await ca.genPackageManifest(r),p=`${l}-${a}.tgz`,C=new Kue.URL(`${mo(n)}/${l}/-/${p}`);return{_id:l,_attachments:{[p]:{content_type:\"application/octet-stream\",data:e.toString(\"base64\"),length:e.length}},name:l,access:g,[\"dist-tags\"]:{[i]:a},versions:{[a]:{...h,_id:`${l}@${a}`,name:l,version:a,gitHead:s,dist:{shasum:c,integrity:u,tarball:C.toString()}}},readme:f}}async function ZVe(r){try{let{stdout:e}=await Cr.execvp(\"git\",[\"rev-parse\",\"--revs-only\",\"HEAD\"],{cwd:r});return e.trim()===\"\"?void 0:e.trim()}catch{return}}function Uue(r,e){let t=r.project.configuration;return r.manifest.publishConfig&&typeof r.manifest.publishConfig.access==\"string\"?r.manifest.publishConfig.access:t.get(\"npmPublishAccess\")!==null?t.get(\"npmPublishAccess\"):e.scope?\"restricted\":\"public\"}async function Hue(r){let e=K.toPortablePath(`${r.cwd}/README.md`),t=r.manifest.name,n=`# ${P.stringifyIdent(t)}\n`;try{n=await O.readFilePromise(e,\"utf8\")}catch(s){if(s.code===\"ENOENT\")return n;throw s}return n}var g1={npmAlwaysAuth:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"BOOLEAN\",default:!1},npmAuthIdent:{description:\"Authentication identity for the npm registry (_auth in npm and yarn v1)\",type:\"SECRET\",default:null},npmAuthToken:{description:\"Authentication token for the npm registry (_authToken in npm and yarn v1)\",type:\"SECRET\",default:null}},Gue={npmAuditRegistry:{description:\"Registry to query for audit reports\",type:\"STRING\",default:null},npmPublishRegistry:{description:\"Registry to push packages to\",type:\"STRING\",default:null},npmRegistryServer:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"STRING\",default:\"https://registry.yarnpkg.com\"}},_Ve={configuration:{...g1,...Gue,npmScopes:{description:\"Settings per package scope\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1,...Gue}}},npmRegistries:{description:\"Settings per registry\",type:\"MAP\",normalizeKeys:mo,valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1}}}},fetchers:[cQ,Ls],resolvers:[uQ,fQ,hQ]},$Ve=_Ve;var C1={};ut(C1,{default:()=>l9e});var kE=Pe(Bn());ls();var OQ=(i=>(i.All=\"all\",i.Production=\"production\",i.Development=\"development\",i))(OQ||{}),KQ=(s=>(s.Info=\"info\",s.Low=\"low\",s.Moderate=\"moderate\",s.High=\"high\",s.Critical=\"critical\",s))(KQ||{});var DE=[\"info\",\"low\",\"moderate\",\"high\",\"critical\"];function jue(r,e){let t=[],i=new Set,n=o=>{i.has(o)||(i.add(o),t.push(o))};for(let o of e)n(o);let s=new Set;for(;t.length>0;){let o=t.shift(),a=r.storedResolutions.get(o);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let l=r.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function e9e(r,e){return new Set([...r].filter(t=>!e.has(t)))}function t9e(r,e,{all:t}){let i=t?r.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=jue(r,l),g=jue(r,c);return e9e(g,u)}function que(r){let e={};for(let t of r)e[P.stringifyIdent(t)]=P.parseRange(t.range).selector;return e}function Jue(r){if(typeof r>\"u\")return new Set(DE);let e=DE.indexOf(r),t=DE.slice(e);return new Set(t)}function r9e(r,e){let t=Jue(e),i={};for(let n of t)i[n]=r[n];return i}function Wue(r,e){var i;let t=r9e(r,e);for(let n of Object.keys(t))if((i=t[n])!=null?i:0>0)return!0;return!1}function zue(r,e){var s;let t={},i={children:t},n=Object.values(r.advisories);if(e!=null){let o=Jue(e);n=n.filter(a=>o.has(a.severity))}for(let o of Ie.sortMap(n,a=>a.module_name))t[o.module_name]={label:o.module_name,value:ee.tuple(ee.Type.RANGE,o.findings.map(a=>a.version).join(\", \")),children:{ID:{label:\"ID\",value:ee.tuple(ee.Type.NUMBER,o.id)},Issue:{label:\"Issue\",value:ee.tuple(ee.Type.NO_HINT,o.title)},URL:{label:\"URL\",value:ee.tuple(ee.Type.URL,o.url)},Severity:{label:\"Severity\",value:ee.tuple(ee.Type.NO_HINT,o.severity)},[\"Vulnerable Versions\"]:{label:\"Vulnerable Versions\",value:ee.tuple(ee.Type.RANGE,o.vulnerable_versions)},[\"Patched Versions\"]:{label:\"Patched Versions\",value:ee.tuple(ee.Type.RANGE,o.patched_versions)},Via:{label:\"Via\",value:ee.tuple(ee.Type.NO_HINT,Array.from(new Set(o.findings.map(a=>a.paths).flat().map(a=>a.split(\">\")[0]))).join(\", \"))},Recommendation:{label:\"Recommendation\",value:ee.tuple(ee.Type.NO_HINT,(s=o.recommendation)==null?void 0:s.replace(/\\n/g,\" \"))}}};return i}function Vue(r,e,{all:t,environment:i}){let n=t?r.workspaces:[e],s=[\"all\",\"production\"].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[\"all\",\"development\"].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return que([...o,...l].filter(c=>P.parseRange(c.range).protocol===null))}function Xue(r,e,{all:t}){var s;let i=t9e(r,e,{all:t}),n={};for(let o of r.storedPackages.values())n[P.stringifyIdent(o)]={version:(s=o.version)!=null?s:\"0.0.0\",integrity:o.identHash,requires:que(o.dependencies.values()),dev:i.has(P.convertLocatorToDescriptor(o).descriptorHash)};return n}var _u=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Audit dependencies from all workspaces\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Audit transitive dependencies as well\"});this.environment=z.String(\"--environment\",\"all\",{description:\"Which environments to cover\",validator:Zi(OQ)});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.severity=z.String(\"--severity\",\"info\",{description:\"Minimal severity requested for packages to be displayed\",validator:Zi(KQ)});this.excludes=z.Array(\"--exclude\",[],{description:\"Array of glob patterns of packages to exclude from audit\"});this.ignores=z.Array(\"--ignore\",[],{description:\"Array of glob patterns of advisory ID's to ignore in the audit report\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=Vue(i,n,{all:this.all,environment:this.environment}),o=Xue(i,n,{all:this.all});if(!this.recursive)for(let C of Object.keys(o))Object.prototype.hasOwnProperty.call(s,C)?o[C].requires={}:delete o[C];let a=Array.from(new Set([...t.get(\"npmAuditExcludePackages\"),...this.excludes]));if(a){for(let C of Object.keys(s))kE.default.isMatch(C,a)&&delete s[C];for(let C of Object.keys(o))kE.default.isMatch(C,a)&&delete o[C];for(let C of Object.keys(o))for(let y of Object.keys(o[C].requires))kE.default.isMatch(y,a)&&delete o[C].requires[y]}let l={requires:s,dependencies:o},c=or.getAuditRegistry(n.manifest,{configuration:t}),u,g=await ra.start({configuration:t,stdout:this.context.stdout},async()=>{u=await Ot.post(\"/-/npm/v1/security/audits/quick\",l,{authType:Ot.AuthType.BEST_EFFORT,configuration:t,jsonResponse:!0,registry:c})});if(g.hasErrors())return g.exitCode();let f=Array.from(new Set([...t.get(\"npmAuditIgnoreAdvisories\"),...this.ignores]));if(f){for(let C of Object.keys(u.advisories))if(kE.default.isMatch(C,f)){let y=u.advisories[C],B=0;y.findings.forEach(v=>B+=v.paths.length),u.metadata.vulnerabilities[y.severity]-=B,delete u.advisories[C]}}let h=Wue(u.metadata.vulnerabilities,this.severity);return!this.json&&h?(es.emitTree(zue(u,this.severity),{configuration:t,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async C=>{C.reportJson(u),h||C.reportInfo(1,\"No audit suggestions\")})).exitCode()}};_u.paths=[[\"npm\",\"audit\"]],_u.usage=ve.Usage({description:\"perform a vulnerability audit against the installed packages\",details:`\n      This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths).\n\n      For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \\`-A,--all\\`. To extend this search to both direct and transitive dependencies, use \\`-R,--recursive\\`.\n\n      Applying the \\`--severity\\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${DE.map(t=>`\\`${t}\\``).join(\", \")}.\n\n      If the \\`--json\\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages.\n\n      If certain packages produce false positives for a particular environment, the \\`--exclude\\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \\`npmAuditExcludePackages\\` option.\n\n      If particular advisories are needed to be ignored, the \\`--ignore\\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \\`npmAuditIgnoreAdvisories\\` option.\n\n      To understand the dependency tree requiring vulnerable packages, check the raw report with the \\`--json\\` flag or use \\`yarn why <package>\\` to get more information as to who depends on them.\n    `,examples:[[\"Checks for known security issues with the installed packages. The output is a list of known issues.\",\"yarn npm audit\"],[\"Audit dependencies in all workspaces\",\"yarn npm audit --all\"],[\"Limit auditing to `dependencies` (excludes `devDependencies`)\",\"yarn npm audit --environment production\"],[\"Show audit report as valid JSON\",\"yarn npm audit --json\"],[\"Audit all direct and transitive dependencies\",\"yarn npm audit --recursive\"],[\"Output moderate (or more severe) vulnerabilities\",\"yarn npm audit --severity moderate\"],[\"Exclude certain packages\",\"yarn npm audit --exclude package1 --exclude package2\"],[\"Ignore specific advisories\",\"yarn npm audit --ignore 1234567 --ignore 7654321\"]]});var h1=Pe(Xr()),p1=J(\"util\"),$u=class extends De{constructor(){super(...arguments);this.fields=z.String(\"-f,--fields\",{description:\"A comma-separated list of manifest fields that should be displayed\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.packages=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.fields<\"u\"?new Set([\"name\",...this.fields.split(/\\s*,\\s*/)]):null,s=[],o=!1,a=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async l=>{for(let c of this.packages){let u;if(c===\".\"){let T=i.topLevelWorkspace;if(!T.manifest.name)throw new Qe(`Missing ${ee.pretty(t,\"name\",ee.Type.CODE)} field in ${K.fromPortablePath(x.join(T.cwd,xt.manifest))}`);u=P.makeDescriptor(T.manifest.name,\"unknown\")}else u=P.parseDescriptor(c);let g=Ot.getIdentUrl(u),f=d1(await Ot.get(g,{configuration:t,ident:u,jsonResponse:!0,customErrorMessage:Ot.customPackageError})),h=Object.keys(f.versions).sort(h1.default.compareLoose),C=f[\"dist-tags\"].latest||h[h.length-1],y=vt.validRange(u.range);if(y){let T=h1.default.maxSatisfying(h,y);T!==null?C=T:(l.reportWarning(0,`Unmet range ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0)}else Object.prototype.hasOwnProperty.call(f[\"dist-tags\"],u.range)?C=f[\"dist-tags\"][u.range]:u.range!==\"unknown\"&&(l.reportWarning(0,`Unknown tag ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0);let B=f.versions[C],v={...f,...B,version:C,versions:h},D;if(n!==null){D={};for(let T of n){let H=v[T];if(typeof H<\"u\")D[T]=H;else{l.reportWarning(1,`The ${ee.pretty(t,T,ee.Type.CODE)} field doesn't exist inside ${P.prettyIdent(t,u)}'s information`),o=!0;continue}}}else this.json||(delete v.dist,delete v.readme,delete v.users),D=v;l.reportJson(D),this.json||s.push(D)}});p1.inspect.styles.name=\"cyan\";for(let l of s)(l!==s[0]||o)&&this.context.stdout.write(`\n`),this.context.stdout.write(`${(0,p1.inspect)(l,{depth:1/0,colors:!0,compact:!1})}\n`);return a.exitCode()}};$u.paths=[[\"npm\",\"info\"]],$u.usage=ve.Usage({category:\"Npm-related commands\",description:\"show information about a package\",details:\"\\n      This command fetches information about a package from the npm registry and prints it in a tree format.\\n\\n      The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\\n\\n      Append `@<range>` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\\n\\n      If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\\n\\n      By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\\n    \",examples:[[\"Show all available information about react (except the `dist`, `readme`, and `users` fields)\",\"yarn npm info react\"],[\"Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)\",\"yarn npm info react --json\"],[\"Show all available information about react@16.12.0\",\"yarn npm info react@16.12.0\"],[\"Show all available information about react@next\",\"yarn npm info react@next\"],[\"Show the description of react\",\"yarn npm info react --fields description\"],[\"Show all available versions of react\",\"yarn npm info react --fields versions\"],[\"Show the readme of react\",\"yarn npm info react --fields readme\"],[\"Show a few fields of react\",\"yarn npm info react --fields homepage,repository\"]]});function d1(r){if(Array.isArray(r)){let e=[];for(let t of r)t=d1(t),t&&e.push(t);return e}else if(typeof r==\"object\"&&r!==null){let e={};for(let t of Object.keys(r)){if(t.startsWith(\"_\"))continue;let i=d1(r[t]);i&&(e[t]=i)}return e}else return r||null}var Zue=Pe(Km()),eg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Login to the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Login to the publish registry\"});this.alwaysAuth=z.Boolean(\"--always-auth\",{description:\"Set the npmAlwaysAuth configuration\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{let o=await s9e({configuration:t,registry:i,report:s,stdin:this.context.stdin,stdout:this.context.stdout}),a=`/-/user/org.couchdb.user:${encodeURIComponent(o.name)}`,l=await Ot.put(a,o,{attemptedAs:o.name,configuration:t,registry:i,jsonResponse:!0,authType:Ot.AuthType.NO_AUTH});return await n9e(i,l.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),s.reportInfo(0,\"Successfully logged in\")})).exitCode()}};eg.paths=[[\"npm\",\"login\"]],eg.usage=ve.Usage({category:\"Npm-related commands\",description:\"store new login info to access the npm registry\",details:\"\\n      This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\\n\\n      Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n    \",examples:[[\"Login to the default registry\",\"yarn npm login\"],[\"Login to the registry linked to the @my-scope registry\",\"yarn npm login --scope my-scope\"],[\"Login to the publish registry for the current package\",\"yarn npm login --publish\"]]});async function UQ({scope:r,publish:e,configuration:t,cwd:i}){return r&&e?or.getScopeRegistry(r,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):r?or.getScopeRegistry(r,{configuration:t}):e?or.getPublishRegistry((await Hh(t,i)).manifest,{configuration:t}):or.getDefaultRegistry({configuration:t})}async function n9e(r,e,{alwaysAuth:t,scope:i}){let n=o=>a=>{let l=Ie.isIndexableObject(a)?a:{},c=l[o],u=Ie.isIndexableObject(c)?c:{};return{...l,[o]:{...u,...t!==void 0?{npmAlwaysAuth:t}:{},npmAuthToken:e}}},s=i?{npmScopes:n(i)}:{npmRegistries:n(r)};return await ye.updateHomeConfiguration(s)}async function s9e({configuration:r,registry:e,report:t,stdin:i,stdout:n}){t.reportInfo(0,`Logging in to ${ee.pretty(r,e,ee.Type.URL)}`);let s=!1;if(e.match(/^https:\\/\\/npm\\.pkg\\.github\\.com(\\/|$)/)&&(t.reportInfo(0,\"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions.\"),s=!0),t.reportSeparator(),process.env.YARN_IS_TEST_ENV)return{name:process.env.YARN_INJECT_NPM_USER||\"\",password:process.env.YARN_INJECT_NPM_PASSWORD||\"\"};let{username:o,password:a}=await(0,Zue.prompt)([{type:\"input\",name:\"username\",message:\"Username:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n},{type:\"password\",name:\"password\",message:s?\"Token:\":\"Password:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n}]);return t.reportSeparator(),{name:o,password:a}}var mp=new Set([\"npmAuthIdent\",\"npmAuthToken\"]),tg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Logout of the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Logout of the publish registry\"});this.all=z.Boolean(\"-A,--all\",!1,{description:\"Logout of all registries\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=async()=>{var c;let s=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),o=await ye.find(this.context.cwd,this.context.plugins),a=P.makeIdent((c=this.scope)!=null?c:null,\"pkg\");return!or.getAuthConfiguration(s,{configuration:o,ident:a}).get(\"npmAuthToken\")};return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{if(this.all&&(await a9e(),s.reportInfo(0,\"Successfully logged out from everything\")),this.scope){await _ue(\"npmScopes\",this.scope),await i()?s.reportInfo(0,`Successfully logged out from ${this.scope}`):s.reportWarning(0,\"Scope authentication settings removed, but some other ones settings still apply to it\");return}let o=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish});await _ue(\"npmRegistries\",o),await i()?s.reportInfo(0,`Successfully logged out from ${o}`):s.reportWarning(0,\"Registry authentication settings removed, but some other ones settings still apply to it\")})).exitCode()}};tg.paths=[[\"npm\",\"logout\"]],tg.usage=ve.Usage({category:\"Npm-related commands\",description:\"logout of the npm registry\",details:\"\\n      This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\\n\\n      Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n\\n      Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\\n    \",examples:[[\"Logout of the default registry\",\"yarn npm logout\"],[\"Logout of the @my-scope scope\",\"yarn npm logout --scope my-scope\"],[\"Logout of the publish registry for the current package\",\"yarn npm logout --publish\"],[\"Logout of all registries\",\"yarn npm logout --all\"]]});function o9e(r,e){let t=r[e];if(!Ie.isIndexableObject(t))return!1;let i=new Set(Object.keys(t));if([...mp].every(s=>!i.has(s)))return!1;for(let s of mp)i.delete(s);if(i.size===0)return r[e]=void 0,!0;let n={...t};for(let s of mp)delete n[s];return r[e]=n,!0}async function a9e(){let r=e=>{let t=!1,i=Ie.isIndexableObject(e)?{...e}:{};i.npmAuthToken&&(delete i.npmAuthToken,t=!0);for(let n of Object.keys(i))o9e(i,n)&&(t=!0);if(Object.keys(i).length!==0)return t?i:e};return await ye.updateHomeConfiguration({npmRegistries:r,npmScopes:r})}async function _ue(r,e){return await ye.updateHomeConfiguration({[r]:t=>{let i=Ie.isIndexableObject(t)?t:{};if(!Object.prototype.hasOwnProperty.call(i,e))return t;let n=i[e],s=Ie.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...mp].every(l=>!o.has(l)))return t;for(let l of mp)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:{...i,[e]:void 0};let a={};for(let l of mp)a[l]=void 0;return{...i,[e]:{...s,...a}}}})}var rg=class extends De{constructor(){super(...arguments);this.access=z.String(\"--access\",{description:\"The access for the published package (public or restricted)\"});this.tag=z.String(\"--tag\",\"latest\",{description:\"The tag on the registry that the package should be attached to\"});this.tolerateRepublish=z.Boolean(\"--tolerate-republish\",!1,{description:\"Warn and exit when republishing an already existing version of a package\"});this.otp=z.String(\"--otp\",{description:\"The OTP token to use with the command\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);if(n.manifest.private)throw new Qe(\"Private workspaces cannot be published\");if(n.manifest.name===null||n.manifest.version===null)throw new Qe(\"Workspaces must have valid names and versions to be published on an external registry\");await i.restoreInstallState();let s=n.manifest.name,o=n.manifest.version,a=or.getPublishRegistry(n.manifest,{configuration:t});return(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{var u,g;if(this.tolerateRepublish)try{let f=await Ot.get(Ot.getIdentUrl(s),{configuration:t,registry:a,ident:s,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(f,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(Object.prototype.hasOwnProperty.call(f.versions,o)){c.reportWarning(0,`Registry already knows about version ${o}; skipping.`);return}}catch(f){if(((g=(u=f.originalError)==null?void 0:u.response)==null?void 0:g.statusCode)!==404)throw f}await Wt.maybeExecuteWorkspaceLifecycleScript(n,\"prepublish\",{report:c}),await ca.prepareForPack(n,{report:c},async()=>{let f=await ca.genPackList(n);for(let B of f)c.reportInfo(null,B);let h=await ca.genPackStream(n,f),p=await Ie.bufferStream(h),C=await Cp.getGitHead(n.cwd),y=await Cp.makePublishBody(n,p,{access:this.access,tag:this.tag,registry:a,gitHead:C});await Ot.put(Ot.getIdentUrl(s),y,{configuration:t,registry:a,ident:s,otp:this.otp,jsonResponse:!0})}),c.reportInfo(0,\"Package archive published\")})).exitCode()}};rg.paths=[[\"npm\",\"publish\"]],rg.usage=ve.Usage({category:\"Npm-related commands\",description:\"publish the active workspace to the npm registry\",details:'\\n      This command will pack the active workspace into a fresh archive and upload it to the npm registry.\\n\\n      The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\\n\\n      Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka \"private packages\"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\\n    ',examples:[[\"Publish the active workspace\",\"yarn npm publish\"]]});var $ue=Pe(Xr());var ig=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s;if(typeof this.package<\"u\")s=P.parseIdent(this.package);else{if(!n)throw new ct(i.cwd,this.context.cwd);if(!n.manifest.name)throw new Qe(`Missing 'name' field in ${K.fromPortablePath(x.join(n.cwd,xt.manifest))}`);s=n.manifest.name}let o=await RE(s,t),l={children:Ie.sortMap(Object.entries(o),([c])=>c).map(([c,u])=>({value:ee.tuple(ee.Type.RESOLUTION,{descriptor:P.makeDescriptor(s,c),locator:P.makeLocator(s,u)})}))};return es.emitTree(l,{configuration:t,json:this.json,stdout:this.context.stdout})}};ig.paths=[[\"npm\",\"tag\",\"list\"]],ig.usage=ve.Usage({category:\"Npm-related commands\",description:\"list all dist-tags of a package\",details:`\n      This command will list all tags of a package from the npm registry.\n\n      If the package is not specified, Yarn will default to the current workspace.\n    `,examples:[[\"List all tags of package `my-pkg`\",\"yarn npm tag list my-pkg\"]]});async function RE(r,e){let t=`/-/package${Ot.getIdentUrl(r)}/dist-tags`;return Ot.get(t,{configuration:e,ident:r,jsonResponse:!0,customErrorMessage:Ot.customPackageError})}var ng=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseDescriptor(this.package,!0),o=s.range;if(!$ue.default.valid(o))throw new Qe(`The range ${ee.pretty(t,s.range,ee.Type.RANGE)} must be a valid semver version`);let a=or.getPublishRegistry(n.manifest,{configuration:t}),l=ee.pretty(t,s,ee.Type.IDENT),c=ee.pretty(t,o,ee.Type.RANGE),u=ee.pretty(t,this.tag,ee.Type.CODE);return(await Ge.start({configuration:t,stdout:this.context.stdout},async f=>{let h=await RE(s,t);Object.prototype.hasOwnProperty.call(h,this.tag)&&h[this.tag]===o&&f.reportWarning(0,`Tag ${u} is already set to version ${c}`);let p=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.put(p,o,{configuration:t,registry:a,ident:s,jsonRequest:!0,jsonResponse:!0}),f.reportInfo(0,`Tag ${u} added to version ${c} of package ${l}`)})).exitCode()}};ng.paths=[[\"npm\",\"tag\",\"add\"]],ng.usage=ve.Usage({category:\"Npm-related commands\",description:\"add a tag for a specific version of a package\",details:`\n      This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten.\n    `,examples:[[\"Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`\",\"yarn npm tag add my-pkg@2.3.4-beta.4 beta\"]]});var sg=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){if(this.tag===\"latest\")throw new Qe(\"The 'latest' tag cannot be removed.\");let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseIdent(this.package),o=or.getPublishRegistry(n.manifest,{configuration:t}),a=ee.pretty(t,this.tag,ee.Type.CODE),l=ee.pretty(t,s,ee.Type.IDENT),c=await RE(s,t);if(!Object.prototype.hasOwnProperty.call(c,this.tag))throw new Qe(`${a} is not a tag of package ${l}`);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{let f=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.del(f,{configuration:t,registry:o,ident:s,jsonResponse:!0}),g.reportInfo(0,`Tag ${a} removed from package ${l}`)})).exitCode()}};sg.paths=[[\"npm\",\"tag\",\"remove\"]],sg.usage=ve.Usage({category:\"Npm-related commands\",description:\"remove a tag from a package\",details:`\n      This command will remove a tag from a package from the npm registry.\n    `,examples:[[\"Remove the `beta` tag from package `my-pkg`\",\"yarn npm tag remove my-pkg beta\"]]});var og=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Print username for the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Print username for the publish registry\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i;return this.scope&&this.publish?i=or.getScopeRegistry(this.scope,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):this.scope?i=or.getScopeRegistry(this.scope,{configuration:t}):this.publish?i=or.getPublishRegistry((await Hh(t,this.context.cwd)).manifest,{configuration:t}):i=or.getDefaultRegistry({configuration:t}),(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{var a,l;let o;try{o=await Ot.get(\"/-/whoami\",{configuration:t,registry:i,authType:Ot.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?P.makeIdent(this.scope,\"\"):void 0})}catch(c){if(((a=c.response)==null?void 0:a.statusCode)===401||((l=c.response)==null?void 0:l.statusCode)===403){s.reportError(41,\"Authentication failed - your credentials may have expired\");return}else throw c}s.reportInfo(0,o.username)})).exitCode()}};og.paths=[[\"npm\",\"whoami\"]],og.usage=ve.Usage({category:\"Npm-related commands\",description:\"display the name of the authenticated user\",details:\"\\n      Print the username associated with the current authentication settings to the standard output.\\n\\n      When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\\n\\n      When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\\n    \",examples:[[\"Print username for the default registry\",\"yarn npm whoami\"],[\"Print username for the registry on a given scope\",\"yarn npm whoami --scope company\"]]});var A9e={configuration:{npmPublishAccess:{description:\"Default access of the published packages\",type:\"STRING\",default:null},npmAuditExcludePackages:{description:\"Array of glob patterns of packages to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:\"Array of glob patterns of advisory IDs to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0}},commands:[_u,$u,eg,tg,rg,ng,ig,sg,og]},l9e=A9e;var S1={};ut(S1,{default:()=>Q9e,patchUtils:()=>ag});var ag={};ut(ag,{applyPatchFile:()=>GQ,diffFolders:()=>b1,ensureUnpatchedDescriptor:()=>E1,extractPackageToDisk:()=>B1,extractPatchFlags:()=>oge,isParentRequired:()=>w1,loadPatchFiles:()=>LE,makeDescriptor:()=>I1,makeLocator:()=>y1,makePatchHash:()=>Q1,parseDescriptor:()=>NE,parseLocator:()=>TE,parsePatchFile:()=>FE});var c9e=/^@@ -(\\d+)(,(\\d+))? \\+(\\d+)(,(\\d+))? @@.*/;function Ep(r){return x.relative(Me.root,x.resolve(Me.root,K.toPortablePath(r)))}function u9e(r){let e=r.trim().match(c9e);if(!e)throw new Error(`Bad header line: '${r}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var g9e=420,f9e=493;var ege=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),h9e=r=>({header:u9e(r),parts:[]}),p9e={[\"@\"]:\"header\",[\"-\"]:\"deletion\",[\"+\"]:\"insertion\",[\" \"]:\"context\",[\"\\\\\"]:\"pragma\",undefined:\"context\"};function d9e(r){let e=[],t=ege(),i=\"parsing header\",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),t.hunks.push(n),n=null)}function a(){o(),e.push(t),t=ege()}for(let l=0;l<r.length;l++){let c=r[l];if(i===\"parsing header\")if(c.startsWith(\"@@\"))i=\"parsing hunks\",t.hunks=[],l-=1;else if(c.startsWith(\"diff --git \")){t&&t.diffLineFromPath&&a();let u=c.match(/^diff --git a\\/(.*?) b\\/(.*?)\\s*$/);if(!u)throw new Error(`Bad diff line: ${c}`);t.diffLineFromPath=u[1],t.diffLineToPath=u[2]}else if(c.startsWith(\"old mode \"))t.oldMode=c.slice(9).trim();else if(c.startsWith(\"new mode \"))t.newMode=c.slice(9).trim();else if(c.startsWith(\"deleted file mode \"))t.deletedFileMode=c.slice(18).trim();else if(c.startsWith(\"new file mode \"))t.newFileMode=c.slice(14).trim();else if(c.startsWith(\"rename from \"))t.renameFrom=c.slice(12).trim();else if(c.startsWith(\"rename to \"))t.renameTo=c.slice(10).trim();else if(c.startsWith(\"index \")){let u=c.match(/(\\w+)\\.\\.(\\w+)/);if(!u)continue;t.beforeHash=u[1],t.afterHash=u[2]}else c.startsWith(\"semver exclusivity \")?t.semverExclusivity=c.slice(19).trim():c.startsWith(\"--- \")?t.fromPath=c.slice(6).trim():c.startsWith(\"+++ \")&&(t.toPath=c.slice(6).trim());else{let u=p9e[c[0]]||null;switch(u){case\"header\":o(),n=h9e(c);break;case null:i=\"parsing header\",a(),l-=1;break;case\"pragma\":{if(!c.startsWith(\"\\\\ No newline at end of file\"))throw new Error(`Unrecognized pragma in patch file: ${c}`);if(!s)throw new Error(\"Bad parser state: No newline at EOF pragma encountered without context\");s.noNewlineAtEndOfFile=!0}break;case\"context\":case\"deletion\":case\"insertion\":{if(!n)throw new Error(\"Bad parser state: Hunk lines encountered before hunk header\");s&&s.type!==u&&(n.parts.push(s),s=null),s||(s={type:u,lines:[],noNewlineAtEndOfFile:!1}),s.lines.push(c.slice(1))}break;default:Ie.assertNever(u);break}}}a();for(let{hunks:l}of e)if(l)for(let c of l)m9e(c);return e}function C9e(r){let e=[];for(let t of r){let{semverExclusivity:i,diffLineFromPath:n,diffLineToPath:s,oldMode:o,newMode:a,deletedFileMode:l,newFileMode:c,renameFrom:u,renameTo:g,beforeHash:f,afterHash:h,fromPath:p,toPath:C,hunks:y}=t,B=u?\"rename\":l?\"file deletion\":c?\"file creation\":y&&y.length>0?\"patch\":\"mode change\",v=null;switch(B){case\"rename\":{if(!u||!g)throw new Error(\"Bad parser state: rename from & to not given\");e.push({type:\"rename\",semverExclusivity:i,fromPath:Ep(u),toPath:Ep(g)}),v=g}break;case\"file deletion\":{let D=n||p;if(!D)throw new Error(\"Bad parse state: no path given for file deletion\");e.push({type:\"file deletion\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(l),hash:f})}break;case\"file creation\":{let D=s||C;if(!D)throw new Error(\"Bad parse state: no path given for file creation\");e.push({type:\"file creation\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(c),hash:h})}break;case\"patch\":case\"mode change\":v=C||s;break;default:Ie.assertNever(B);break}v&&o&&a&&o!==a&&e.push({type:\"mode change\",semverExclusivity:i,path:Ep(v),oldMode:HQ(o),newMode:HQ(a)}),v&&y&&y.length&&e.push({type:\"patch\",semverExclusivity:i,path:Ep(v),hunks:y,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error(\"Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string\");return e}function HQ(r){let e=parseInt(r,8)&511;if(e!==g9e&&e!==f9e)throw new Error(`Unexpected file mode string: ${r}`);return e}function FE(r){let e=r.split(/\\n/g);return e[e.length-1]===\"\"&&e.pop(),C9e(d9e(e))}function m9e(r){let e=0,t=0;for(let{type:i,lines:n}of r.parts)switch(i){case\"context\":t+=n.length,e+=n.length;break;case\"deletion\":e+=n.length;break;case\"insertion\":t+=n.length;break;default:Ie.assertNever(i);break}if(e!==r.header.original.length||t!==r.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(r.header.original.length)} ${i(r.header.patched.length)} @@, got @@ ${i(e)} ${i(t)} @@)`)}}var Ip=class extends Error{constructor(t,i){super(`Cannot apply hunk #${t+1}`);this.hunk=i}};async function yp(r,e,t){let i=await r.lstatPromise(e),n=await t();if(typeof n<\"u\"&&(e=n),r.lutimesPromise)await r.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await r.utimesPromise(e,i.atime,i.mtime);else throw new Error(\"Cannot preserve the time values of a symlink\")}async function GQ(r,{baseFs:e=new $t,dryRun:t=!1,version:i=null}={}){for(let n of r)if(!(n.semverExclusivity!==null&&i!==null&&!vt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case\"file deletion\":if(t){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await yp(e,x.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case\"rename\":if(t){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await yp(e,x.dirname(n.fromPath),async()=>{await yp(e,x.dirname(n.toPath),async()=>{await yp(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case\"file creation\":if(t){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(`\n`)+(n.hunk.parts[0].noNewlineAtEndOfFile?\"\":`\n`):\"\";await e.mkdirpPromise(x.dirname(n.path),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,xr.SAFE_TIME,xr.SAFE_TIME)}break;case\"patch\":await yp(e,n.path,async()=>{await y9e(n,{baseFs:e,dryRun:t})});break;case\"mode change\":{let o=(await e.statPromise(n.path)).mode;if(tge(n.newMode)!==tge(o))continue;await yp(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:Ie.assertNever(n);break}}function tge(r){return(r&64)>0}function rge(r){return r.replace(/\\s+$/,\"\")}function I9e(r,e){return rge(r)===rge(e)}async function y9e({hunks:r,path:e},{baseFs:t,dryRun:i=!1}){let n=await t.statSync(e).mode,o=(await t.readFileSync(e,\"utf8\")).split(/\\n/),a=[],l=0,c=0;for(let g of r){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),C=Math.max(h,p),y=0,B=0,v=null;for(;y<=C;){if(y<=h&&(B=f-y,v=ige(g,o,B),v!==null)){y=-y;break}if(y<=p&&(B=f+y,v=ige(g,o,B),v!==null))break;y+=1}if(v===null)throw new Ip(r.indexOf(g),g);a.push(v),l+=y,c=B+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case\"splice\":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case\"pop\":o.pop();break;case\"push\":o.push(f.line);break;default:Ie.assertNever(f);break}await t.writeFilePromise(e,o.join(`\n`),{mode:n})}function ige(r,e,t){let i=[];for(let n of r.parts)switch(n.type){case\"context\":case\"deletion\":{for(let s of n.lines){let o=e[t];if(o==null||!I9e(o,s))return null;t+=1}n.type===\"deletion\"&&(i.push({type:\"splice\",index:t-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:\"push\",line:\"\"}))}break;case\"insertion\":i.push({type:\"splice\",index:t,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:\"pop\"});break;default:Ie.assertNever(n.type);break}return i}var B9e=/^builtin<([^>]+)>$/;function m1(r,e){let{source:t,selector:i,params:n}=P.parseRange(r);if(t===null)throw new Error(\"Patch locators must explicitly define their source\");let s=i?i.split(/&/).map(c=>K.toPortablePath(c)):[],o=n&&typeof n.locator==\"string\"?P.parseLocator(n.locator):null,a=n&&typeof n.version==\"string\"?n.version:null,l=e(t);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function NE(r){let{sourceItem:e,...t}=m1(r.range,P.parseDescriptor);return{...t,sourceDescriptor:e}}function TE(r){let{sourceItem:e,...t}=m1(r.reference,P.parseLocator);return{...t,sourceLocator:e}}function E1(r){if(!r.range.startsWith(\"patch:\"))return r;let{sourceItem:e}=m1(r.range,P.parseDescriptor);return e}function nge({parentLocator:r,sourceItem:e,patchPaths:t,sourceVersion:i,patchHash:n},s){let o=r!==null?{locator:P.stringifyLocator(r)}:{},a=typeof i<\"u\"?{version:i}:{},l=typeof n<\"u\"?{hash:n}:{};return P.makeRange({protocol:\"patch:\",source:s(e),selector:t.join(\"&\"),params:{...a,...l,...o}})}function I1(r,{parentLocator:e,sourceDescriptor:t,patchPaths:i}){return P.makeDescriptor(r,nge({parentLocator:e,sourceItem:t,patchPaths:i},P.stringifyDescriptor))}function y1(r,{parentLocator:e,sourcePackage:t,patchPaths:i,patchHash:n}){return P.makeLocator(r,nge({parentLocator:e,sourceItem:t,sourceVersion:t.version,patchPaths:i,patchHash:n},P.stringifyLocator))}function sge({onAbsolute:r,onRelative:e,onBuiltin:t},i){i.startsWith(\"~\")&&(i=i.slice(1));let s=i.match(B9e);return s!==null?t(s[1]):x.isAbsolute(i)?r(i):e(i)}function oge(r){let e=r.startsWith(\"~\");return e&&(r=r.slice(1)),{optional:e}}function w1(r){return sge({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},r)}async function LE(r,e,t){let i=r!==null?await t.fetcher.fetch(r,t):null,n=i&&i.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await Ie.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=oge(o),l=await sge({onAbsolute:async()=>await O.readFilePromise(o,\"utf8\"),onRelative:async()=>{if(n===null)throw new Error(\"Assertion failed: The parent locator should have been fetched\");return await n.packageFs.readFilePromise(x.join(n.prefixPath,o),\"utf8\")},onBuiltin:async c=>await t.project.configuration.firstHook(u=>u.getBuiltinPatch,t.project,c)},o);return{...a,source:l}})));for(let o of s)typeof o.source==\"string\"&&(o.source=o.source.replace(/\\r\\n?/g,`\n`));return s}async function B1(r,{cache:e,project:t}){let i=t.storedPackages.get(r.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let n=t.storedChecksums,s=new ti,o=t.configuration.makeFetcher(),a=await o.fetch(r,{cache:e,project:t,fetcher:o,checksums:n,report:s}),l=await O.mktempPromise(),c=x.join(l,\"source\"),u=x.join(l,\"user\"),g=x.join(l,\".yarn-patch.json\");return await Promise.all([O.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),O.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),O.writeJsonPromise(g,{locator:P.stringifyLocator(r),version:i.version})]),O.detachTemp(l),u}async function b1(r,e){let t=K.fromPortablePath(r).replace(/\\\\/g,\"/\"),i=K.fromPortablePath(e).replace(/\\\\/g,\"/\"),{stdout:n,stderr:s}=await Cr.execvp(\"git\",[\"-c\",\"core.safecrlf=false\",\"diff\",\"--src-prefix=a/\",\"--dst-prefix=b/\",\"--ignore-cr-at-eol\",\"--full-index\",\"--no-index\",\"--no-renames\",\"--text\",t,i],{cwd:K.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:\"1\",HOME:\"\",XDG_CONFIG_HOME:\"\",USERPROFILE:\"\"}});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH.\nThe following error was reported by 'git':\n${s}`);let o=t.startsWith(\"/\")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${Ie.escapeRegExp(`/${o(t)}/`)})`,\"g\"),\"$1/\").replace(new RegExp(`(a|b)${Ie.escapeRegExp(`/${o(i)}/`)}`,\"g\"),\"$1/\").replace(new RegExp(Ie.escapeRegExp(`${t}/`),\"g\"),\"\").replace(new RegExp(Ie.escapeRegExp(`${i}/`),\"g\"),\"\")}function Q1(r,e){let t=[];for(let{source:i}of r){if(i===null)continue;let n=FE(i);for(let s of n){let{semverExclusivity:o,...a}=s;o!==null&&e!==null&&!vt.satisfiesWithPrereleases(e,o)||t.push(JSON.stringify(a))}}return li.makeHash(`${3}`,...t).slice(0,6)}function age(r,{configuration:e,report:t}){for(let i of r.parts)for(let n of i.lines)switch(i.type){case\"context\":t.reportInfo(null,`  ${ee.pretty(e,n,\"grey\")}`);break;case\"deletion\":t.reportError(28,`- ${ee.pretty(e,n,ee.Type.REMOVED)}`);break;case\"insertion\":t.reportError(28,`+ ${ee.pretty(e,n,ee.Type.ADDED)}`);break;default:Ie.assertNever(i.type)}}var YQ=class{supports(e,t){return!!e.reference.startsWith(\"patch:\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async patchPackage(e,t){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=TE(e),a=await LE(i,o,t),l=await O.mktempPromise(),c=x.join(l,\"current.zip\"),u=await t.fetcher.fetch(n,t),g=P.getIdentVendorPath(e),f=await an(),h=new Wr(c,{libzip:f,create:!0,level:t.project.configuration.get(\"compressionLevel\")});await Ie.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:C}of a){if(p===null)continue;let y=new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")}),B=new qt(x.resolve(Me.root,g),{baseFs:y});try{await GQ(FE(p),{baseFs:B,version:s})}catch(v){if(!(v instanceof Ip))throw v;let D=t.project.configuration.get(\"enableInlineHunks\"),T=!D&&!C?\" (set enableInlineHunks for details)\":\"\",H=`${P.prettyLocator(t.project.configuration,e)}: ${v.message}${T}`,j=$=>{!D||age(v.hunk,{configuration:t.project.configuration,report:$})};if(y.discardAndClose(),C){t.report.reportWarningOnce(66,H,{reportExtra:j});continue}else throw new at(66,H,j)}y.saveAndClose()}return new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")})}};var jQ=class{supportsDescriptor(e,t){return!!e.range.startsWith(\"patch:\")}supportsLocator(e,t){return!!e.reference.startsWith(\"patch:\")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){let{patchPaths:n}=NE(e);return n.every(s=>!w1(s))?e:P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){let{sourceDescriptor:i}=NE(e);return[i]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=NE(e),a=await LE(n,o,i.fetchOptions),l=t.get(s.descriptorHash);if(typeof l>\"u\")throw new Error(\"Assertion failed: The dependency should have been resolved\");let c=Q1(a,l.version);return[y1(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){let{sourceLocator:i}=TE(e);return{...await t.resolver.resolve(i,t),...e}}};var Ag=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Add the patch to your resolution entries\"});this.patchFolder=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=x.resolve(this.context.cwd,K.toPortablePath(this.patchFolder)),o=x.join(s,\"../source\"),a=x.join(s,\"../.yarn-patch.json\");if(!O.existsSync(o))throw new Qe(\"The argument folder didn't get created by 'yarn patch'\");let l=await b1(o,s),c=await O.readJsonPromise(a),u=P.parseLocator(c.locator,!0);if(!i.storedPackages.has(u.locatorHash))throw new Qe(\"No package found in the project for the given locator\");if(!this.save){this.context.stdout.write(l);return}let g=t.get(\"patchFolder\"),f=x.join(g,`${P.slugifyLocator(u)}.patch`);await O.mkdirPromise(g,{recursive:!0}),await O.writeFilePromise(f,l);let h=new Map;for(let p of i.storedPackages.values()){if(P.isVirtualLocator(p))continue;let C=p.dependencies.get(u.identHash);if(!C)continue;let y=P.isVirtualDescriptor(C)?P.devirtualizeDescriptor(C):C,B=E1(y),v=i.storedResolutions.get(B.descriptorHash);if(!v)throw new Error(\"Assertion failed: Expected the resolution to have been registered\");if(!i.storedPackages.get(v))throw new Error(\"Assertion failed: Expected the package to have been registered\");let T=i.originalPackages.get(p.locatorHash);if(!T)throw new Error(\"Assertion failed: Expected the original package to have been registered\");let H=T.dependencies.get(C.identHash);if(!H)throw new Error(\"Assertion failed: Expected the original dependency to have been registered\");h.set(H.descriptorHash,H)}for(let p of h.values()){let C=I1(p,{parentLocator:null,sourceDescriptor:P.convertLocatorToDescriptor(u),sourceVersion:null,patchPaths:[`./${x.relative(i.cwd,f)}`]});i.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:P.stringifyIdent(C),description:p.range}},reference:C.range})}await i.persist()}};Ag.paths=[[\"patch-commit\"]],Ag.usage=ve.Usage({description:\"generate a patch out of a directory\",details:\"\\n      By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\\n\\n      With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\\n\\n      Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\\n    \"});var lg=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=P.parseLocator(this.package);if(o.reference===\"unknown\"){let a=Ie.mapAndFilter([...i.storedPackages.values()],l=>l.identHash!==o.identHash?Ie.mapAndFilter.skip:P.isVirtualLocator(l)?Ie.mapAndFilter.skip:l);if(a.length===0)throw new Qe(\"No package found in the project for the given locator\");if(a.length>1)throw new Qe(`Multiple candidate packages found; explicitly choose one of them (use \\`yarn why <package>\\` to get more information as to who depends on them):\n${a.map(l=>`\n- ${P.prettyLocator(t,l)}`).join(\"\")}`);o=a[0]}if(!i.storedPackages.has(o.locatorHash))throw new Qe(\"No package found in the project for the given locator\");await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async a=>{let l=await B1(o,{cache:s,project:i});a.reportJson({locator:P.stringifyLocator(o),path:K.fromPortablePath(l)}),a.reportInfo(0,`Package ${P.prettyLocator(t,o)} got extracted with success!`),a.reportInfo(0,`You can now edit the following folder: ${ee.pretty(t,K.fromPortablePath(l),\"magenta\")}`),a.reportInfo(0,`Once you are done run ${ee.pretty(t,`yarn patch-commit -s ${process.platform===\"win32\"?'\"':\"\"}${K.fromPortablePath(l)}${process.platform===\"win32\"?'\"':\"\"}`,\"cyan\")} and Yarn will store a patchfile based on your changes.`)})}};lg.paths=[[\"patch\"]],lg.usage=ve.Usage({description:\"prepare a package for patching\",details:\"\\n      This command will cause a package to be extracted in a temporary directory intended to be editable at will.\\n      \\n      Once you're done with your changes, run `yarn patch-commit -s <path>` (with `<path>` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\\n    \"});var b9e={configuration:{enableInlineHunks:{description:\"If true, the installs will print unmatched patch hunks\",type:\"BOOLEAN\",default:!1},patchFolder:{description:\"Folder where the patch files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/patches\"}},commands:[Ag,lg],fetchers:[YQ],resolvers:[jQ]},Q9e=b9e;var D1={};ut(D1,{default:()=>x9e});var qQ=class{supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the pnpm linker to be enabled\");let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=n.pathByLocator.get(e.locatorHash);if(typeof s>\"u\")throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return s}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=e.match(/(^.*\\/node_modules\\/(@[^/]*\\/)?[^/]+)(\\/.*$)/);if(s){let l=n.locatorByPath.get(s[1]);if(l)return l}let o=e,a=e;do{a=o,o=x.dirname(a);let l=n.locatorByPath.get(a);if(l)return l}while(o!==a);return null}makeInstaller(e){return new v1(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"pnpm\"}},v1=class{constructor(e){this.opts=e;this.asyncActions=new Ie.AsyncActions(10);this.customData={pathByLocator:new Map,locatorByPath:new Map}}getCustomDataKey(){return x1()}attachCustomData(e){}async installPackage(e,t,i){switch(e.linkType){case\"SOFT\":return this.installPackageSoft(e,t,i);case\"HARD\":return this.installPackageHard(e,t,i)}throw new Error(\"Assertion failed: Unsupported package link type\")}async installPackageSoft(e,t,i){let n=x.resolve(t.packageFs.getRealPath(),t.prefixPath);return this.customData.pathByLocator.set(e.locatorHash,n),{packageLocation:n,buildDirective:null}}async installPackageHard(e,t,i){var u;let n=S9e(e,{project:this.opts.project});this.customData.locatorByPath.set(n,P.stringifyLocator(e)),this.customData.pathByLocator.set(e.locatorHash,n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,t.prefixPath,{baseFs:t.packageFs,overwrite:!1})}));let o=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e,a={manifest:(u=await ot.tryFind(t.prefixPath,{baseFs:t.packageFs}))!=null?u:new ot,misc:{hasBindingGyp:Co.hasBindingGyp(t)}},l=this.opts.project.getDependencyMeta(o,e.version),c=Co.extractBuildScripts(e,a,l,{configuration:this.opts.project.configuration,report:this.opts.report});return{packageLocation:n,buildDirective:c}}async attachInternalDependencies(e,t){this.opts.project.configuration.get(\"nodeLinker\")===\"pnpm\"&&(!Age(e,{project:this.opts.project})||this.asyncActions.reduce(e.locatorHash,async i=>{await i;let n=this.customData.pathByLocator.get(e.locatorHash);if(typeof n>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(e)})`);let s=x.join(n,xt.nodeModules),o=[],a=await lge(s);for(let[l,c]of t){let u=c;Age(c,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,\"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies\"),u=P.devirtualizeLocator(c));let g=this.customData.pathByLocator.get(u.locatorHash);if(typeof g>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(c)})`);let f=P.stringifyIdent(l),h=x.join(s,f),p=x.relative(x.dirname(h),g),C=a.get(f);a.delete(f),o.push(Promise.resolve().then(async()=>{if(C){if(C.isSymbolicLink()&&await O.readlinkPromise(h)===p)return;await O.removePromise(h)}await O.mkdirpPromise(x.dirname(h)),process.platform==\"win32\"?await O.symlinkPromise(g,h,\"junction\"):await O.symlinkPromise(p,h)}))}o.push(cge(s,a)),await Promise.all(o)}))}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the pnpm linker\")}async finalizeInstall(){let e=gge(this.opts.project);if(this.opts.project.configuration.get(\"nodeLinker\")!==\"pnpm\")await O.removePromise(e);else{let t=[],i=new Set;for(let s of this.customData.pathByLocator.values()){let o=x.contains(e,s);if(o!==null){let[a,,...l]=o.split(x.sep);i.add(a);let c=x.join(e,a);t.push(O.readdirPromise(c).then(u=>Promise.all(u.map(async g=>{let f=x.join(c,g);if(g===xt.nodeModules){let h=await lge(f);return h.delete(l.join(x.sep)),cge(f,h)}else return O.removePromise(f)}))).catch(u=>{if(u.code!==\"ENOENT\")throw u}))}}let n;try{n=await O.readdirPromise(e)}catch{n=[]}for(let s of n)i.has(s)||t.push(O.removePromise(x.join(e,s)));await Promise.all(t)}return await this.asyncActions.wait(),await P1(e),this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\"&&await P1(uge(this.opts.project)),{customData:this.customData}}};function x1(){return JSON.stringify({name:\"PnpmInstaller\",version:2})}function uge(r){return x.join(r.cwd,xt.nodeModules)}function gge(r){return x.join(uge(r),\".store\")}function S9e(r,{project:e}){let t=P.slugifyLocator(r),i=P.getIdentVendorPath(r);return x.join(gge(e),t,i)}function Age(r,{project:e}){return!P.isVirtualLocator(r)||!e.tryWorkspaceByLocator(r)}async function lge(r){let e=new Map,t=[];try{t=await O.readdirPromise(r,{withFileTypes:!0})}catch(i){if(i.code!==\"ENOENT\")throw i}try{for(let i of t)if(!i.name.startsWith(\".\"))if(i.name.startsWith(\"@\")){let n=await O.readdirPromise(x.join(r,i.name),{withFileTypes:!0});if(n.length===0)e.set(i.name,i);else for(let s of n)e.set(`${i.name}/${s.name}`,s)}else e.set(i.name,i)}catch(i){if(i.code!==\"ENOENT\")throw i}return e}async function cge(r,e){var n;let t=[],i=new Set;for(let s of e.keys()){t.push(O.removePromise(x.join(r,s)));let o=(n=P.tryParseIdent(s))==null?void 0:n.scope;o&&i.add(`@${o}`)}return Promise.all(t).then(()=>Promise.all([...i].map(s=>P1(x.join(r,s)))))}async function P1(r){try{await O.rmdirPromise(r)}catch(e){if(e.code!==\"ENOENT\"&&e.code!==\"ENOTEMPTY\")throw e}}var v9e={linkers:[qQ]},x9e=v9e;var Bb=()=>({modules:new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",T$(ud)],[\"semver\",P9e],[\"typanion\",hn],[\"yup\",D9e],[\"@yarnpkg/plugin-essentials\",CM],[\"@yarnpkg/plugin-compat\",wM],[\"@yarnpkg/plugin-dlx\",BM],[\"@yarnpkg/plugin-file\",vM],[\"@yarnpkg/plugin-git\",dM],[\"@yarnpkg/plugin-github\",xM],[\"@yarnpkg/plugin-http\",PM],[\"@yarnpkg/plugin-init\",FM],[\"@yarnpkg/plugin-link\",NM],[\"@yarnpkg/plugin-nm\",dO],[\"@yarnpkg/plugin-npm\",f1],[\"@yarnpkg/plugin-npm-cli\",C1],[\"@yarnpkg/plugin-pack\",A1],[\"@yarnpkg/plugin-patch\",S1],[\"@yarnpkg/plugin-pnp\",sO],[\"@yarnpkg/plugin-pnpm\",D1]]),plugins:new Set([\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"])});$0({binaryVersion:Tr||\"<unknown>\",pluginConfiguration:Bb()});})();\n/*!\n * buildToken\n * Builds OAuth token prefix (helper function)\n *\n * @name buildToken\n * @function\n * @param {GitUrl} obj The parsed Git url object.\n * @return {String} token prefix\n */\n/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-windows <https://github.com/jonschlinkert/is-windows>\n *\n * Copyright © 2015-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/**\n  @license\n  Copyright (c) 2015, Rebecca Turner\n\n  Permission to use, copy, modify, and/or distribute this software for any\n  purpose with or without fee is hereby granted, provided that the above\n  copyright notice and this permission notice appear in all copies.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n  PERFORMANCE OF THIS SOFTWARE.\n */\n/**\n  @license\n  Copyright Joyent, Inc. and other Node contributors.\n\n  Permission is hereby granted, free of charge, to any person obtaining a\n  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 permit\n  persons to whom the Software is furnished to do so, subject to the\n  following conditions:\n\n  The above copyright notice and this permission notice shall be included\n  in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n  NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n  USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/**\n  @license\n  Copyright Node.js contributors. All rights reserved.\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\n  deal in the Software without restriction, including without limitation the\n  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n  sell 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\n  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n  IN THE SOFTWARE.\n*/\n/**\n  @license\n  The MIT License (MIT)\n\n  Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\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*/\n"
  },
  {
    "path": ".yarnrc.yml",
    "content": "nodeLinker: node-modules\n\nplugins:\n  - path: .yarn/plugins/@yarnpkg/plugin-compat.cjs\n    spec: '@yarnpkg/plugin-compat'\n  - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs\n    spec: '@yarnpkg/plugin-interactive-tools'\n\nyarnPath: .yarn/releases/yarn-3.6.3.cjs\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Theatre.js changelog\n\n## 0.4.5\n\n* New features\n  * `sequence.attachAudio()` now uses an internal [`GainNode`](https://developer.mozilla.org/en-US/docs/Web/API/GainNode) that you can customize by connecting it to your own audio graph. Docs [here](https://docs.theatrejs.com/in-depth/#sound-and-music).\n\n## 0.4.4\n\n* New features\n  * Implemented [@theatre/browser-bundles](https://www.npmjs.com/package/@theatre/browser-bundles), a custom build of Theatre.js that can be used via a `<script>` tag and a CDN. This should enable Theatre.js to be used in CodePen or projects that don't use a bundler.\n\n## 0.4.3\n\n* New features\n  * `sequence.attachAudio()` now [accepts](https://github.com/AriaMinaei/theatre/commit/3f0556b9eb66a0893b43e38a3ee889e13d3a6667) any `AudioNode` as destination.\n  * Implemented `studio.createContentOfSaveFile()` for programmatically exporting the project's state.\n\n## 0.4.2\n\n* New features\n  * `sequence.attachAudio` now handles autoplay blocking ([Docs](https://docs.theatrejs.com/in-depth/#sequence-attachaudio)).\n  * `studio.selection` and co have a more [lax](https://github.com/AriaMinaei/theatre/commit/dcf90983a565e585661b631b457a807eb4a4d874) type constraint.\n* Bug fixes\n  * Fixed the builds of internal examples.\n\n## 0.4.1\n\n* Bug fixes\n  * [Fixed](https://github.com/AriaMinaei/theatre/commit/fe4010c2c64626029a26e29b9ad9104df9c56ad4) the jumping issue with `sequence.play({range})`.\n  * [Fixed](https://github.com/AriaMinaei/theatre/commit/769eefb5e521c8206152b0e23937d5a3cd872b8b) a typo in the `dependencies` field, thanks [Nikhil Saraf](https://github.com/nksaraf)!"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to Theatre.js\n\n## Development workflow\n\n### Setting up the environment\n\nMake sure you have [`node 14+`](https://nodejs.org/) installed:\n\n```sh\n$ node -v\n> v14.0.0\n```\n\nand [`yarn 1.22+`](https://classic.yarnpkg.com/en/):\n\n```sh\n$ yarn -v\n> 1.22.10\n```\n\nThen clone the repo:\n\n```sh\n# for SSH:\n$ git clone git@github.com:<github-username>/theatre.git\n# for HTTPS:\n$ git clone https://github.com/<github-username>/theatre.git\n\n$ cd theatre\n```\n\nAnd fetch the dependencies with yarn:\n\n```sh\n$ yarn\n$ yarn postinstall\n```\n\n- Notes about Yarn:\n  - This project uses [yarn workspaces](https://yarnpkg.com/features/workspaces)\n    so `npm install` will not work.\n  - This repo uses Yarn v2. You don't have to install yarn v2 globally. If you\n    do have yarn 1.22.10+ on your machine, yarn will automatically switch to v2\n    when you `cd` into theatre. Read more about Yarn v2\n    [here](https://yarnpkg.com/).\n\n### Hacking with `playground`\n\nThe quickest way to start tweaking things is to run the `playground` package.\n\n```sh\n$ cd ./packages/playground\n$ yarn serve\n$ yarn cli build\n# or, shortcut:\n$ cd root\n$ yarn playground\n```\n\nThe playground is a bunch of ready-made projects that you can run to experiment\nwith Theatre.js. It also contains the project's end-to-end tests.\n\nRead more at\n[`./packages/playground/README.md`](./packages/playground/README.md).\n\n### Hacking with `examples/`\n\nOther than `playground`, the [`examples/`](./examples) folder contains a few\nsmall projects that use Theatre.js with [parcel](https://parceljs.org),\n[Create react app](create-react-app.dev), and other build tools. This means that\nunlike `playground`, you have to build all the packages before running the\nexamples.\n\nYou can do that by running the `build` command at the root of the repo:\n\n```sh\n$ yarn cli build\n```\n\nThen build any of the examples:\n\n```\n$ cd examples/dom-cra\n$ yarn start\n```\n\n### Running unit/integration tests\n\nWe use a single [jest](https://jestjs.io/) setup for the repo. The tests files\nhave the `.test.ts` or `.test.tsx` extension.\n\nYou can run the tests at the root of the repo:\n\n```sh\n$ yarn test\n\n# or run them in watch mode:\n$ yarn test --watch\n```\n\n### Running end-to-end tests\n\nEnd-to-end tests are hosted in the playground package. More details\n[there](./packages/playground/README.md).\n\n### Type checking\n\nThe packages in this repo have full typescript coverage, so you should be able\nto get diagnostics and intellisense if your editor supports typescript.\n\nYou can also run a typecheck of the whole repo from the root:\n\n```sh\n$ yarn typecheck\n\n# or in watch mode:\n$ yarn typecheck --watch\n```\n\n- If you're using VSCode, we have a [\"Typescript watch\"](./.vscode/tasks.json)\n  task for VSCode that you can use by\n  [running](https://code.visualstudio.com/Docs/editor/tasks) \"Run Task ->\n  Typescript watch\".\n- If you wish to contribute code without typescript annotations, that's totally\n  fine. We're happy to add the annotations to your PR.\n\n### Linting\n\nWe're using a minimal [ESLint](https://code.visualstudio.com/Docs/editor/tasks)\nsetup for linting. If your editor supports ESLint, you should get diagnostics as\nyou code. You can also run the lint command from the root of the repo:\n\n```sh\n$ yarn lint:all\n```\n\nSome lint rules have\n[autofix](https://eslint.org/docs/user-guide/command-line-interface#fixing-problems),\nso you can run:\n\n```sh\n$ yarn lint:all --fix\n```\n\n### Publishing to npm\n\nCurrently all packages (except for [`@theatre/r3f`](./packages/r3f/)) share the\nsame version number. In order to publish to npm, you can run the `release`\nscript from the root of the repo:\n\n```sh\n$ yarn cli release x.y.z # npm publish version x.y.z\n$ yarn cli release x.y.z-dev.w # npm publish version x.y.z-dev.w and tag it as \"dev\"\n$ yarn cli release x.y.z-rc.w # npm publish version x.y.z-rc.w and tag it as \"rc\"\n```\n\n## Project structure\n\nThe [monorepo](https://en.wikipedia.org/wiki/Monorepo) consists of:\n\n- `@theatre/core` – The core animation library at\n  [`./packages/core`](./packages/core).\n- `@theatre/studio` – The visual editor at\n  [`./packages/studio`](./packages/studio).\n- `@theatre/dataverse` – The reactive dataflow library at\n  [`./packages/dataverse`](./packages/dataverse).\n- `@theatre/react` – Utilities for using Theatre.js with React at\n  [`./packages/react`](./packages/react).\n- `@theatre/r3f` – The react-three-fiber extension at\n  [`./packages/r3f`](./packages/r3f).\n- `playground` – The playground explained [above](#hacking-with-playground),\n  located at [`./packages/playground`](./packages/playground)\n- `examples/` \\* A bunch of [examples](#hacking-with-examples) at\n  [./examples](./examples).\n\nIn addition, each package may contain a `dotEnv/` folder that holds some\ndev-related files, like bundle configuration, lint setup, etc.\n\n## Commands\n\nThese commands are available at the root workspace:\n\n```sh\n# Run the playground. It's a shortcut for `cd ./playground; yarn run serve`\n$ yarn playground\n\n# Run all the tests.\n$ yarn test\n\n# Run tests in watch mode.\n$ yarn test --watch\n\n# Typecheck all the packages\n$ yarn typecheck\n\n# Typecheck all the packages in watch mode\n$ yarn typecheck --watch\n\n# Run eslint on the repo\n$ yarn lint:all\n\n# Run eslint and auto fix\n$ yarn lint:all --fix\n\n# Build all the packages\n$ yarn cli build\n\n```\n\n> Yarn passes all extra parameters to the internal scripts. So, for example, if\n> you wish to run the tests in watch mode, you can run `yarn test --watch`.\n\n## Documentation\n\nThe libraries come bundled with typescript definitions with TSDoc comments. You\ncan explore the API if your editor is configured to display TSDoc comments.\n\nOther references\n\n- [Documentation: https://www.theatrejs.com/docs](https://www.theatrejs.com/docs)\n- [API docs: https://www.theatrejs.com/docs/latest/api](https://www.theatrejs.com/docs/latest/api)\n\n## What to contribute\n\nYou can contribute with:\n\n- Bug fixes\n- Feature suggestions\n- Features implementations\n- [Documentation](https://github.com/theatre-js/website/) (or write/record\n  tutorials of your own which we'll showcase)\n- Create examples projects for your own particular dev stack (eg. using\n  Pixie/Vue/THREE.js/Babylon/etc)\n\nAnother great way to help is to join our\n[community](https://discord.gg/bm9f8F9Y9N) and chime in on questions and share\nideas.\n\n### Helping with outstanding issues\n\nFeel free to chime in on any\n[issue](https://github.com/theatre-js/theatre/issues). We have labeled some with\n[\"Help wanted\"](https://github.com/theatre-js/theatre/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22)\nor\n[\"Good first issue\"](https://github.com/theatre-js/theatre/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22good+first+issue%22)\nif you're just getting started with the codebase.\n\n## Sending pull requests\n\nWe use Github's regular PR workflow. Basically fork the repo, push your commits,\nand send a pull request.\n\nIf you're a core contributor and have write access to the repo, you should\nsubmit your pull requests from a branch rather than a personal fork. The naming\nconvention for these branches should be:\n\n- `(feature|hotfix|docs)/[identifier]` or\n- an autogenerated branch name from a Github issue (On an issue without a PR,\n  look under the \"Development\" sidebar heading for a \"create a branch link\")\n\nSquash & merge should be preferred most of the time to keep the main branch\nclean, unless the commit history is relevant, in which case rebase should be\nused.\n\nAlways update your feature branch with a rebase from the main branch to make\nsure that you don't accidentally break main with an undetected conflict.\n\nBranches belonging to merged PRs should be deleted.\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n------------------\nFiles: theatre/studio/...\n\n                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n  A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate.  Many developers of free software are heartened and\nencouraged by the resulting cooperation.  However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n  The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community.  It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server.  Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n  An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals.  This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Remote Network Interaction; Use with the GNU General Public License.\n\n  Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software.  This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time.  Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published\n    by the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source.  For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code.  There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n<https://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "Notes.md",
    "content": "# Notes\n\nThis page is a random list of notes, meant to be read by an LLM (and not a human) to answer questions about the codebase.\n\n---\n\nThe next.js backend is in the same monorepo as the frontend, so they can share code.\n\n---"
  },
  {
    "path": "README.md",
    "content": "<h1 align=\"center\">\n  <a href=\"https://github.com/theatre-js/theatre#gh-dark-mode-only\"><img src=\"https://raw.githubusercontent.com/theatre-js/theatre-docs/main/docs/.vuepress/public/public/theatrejs-logo-white.svg\" alt=\"Theatre.js\" width=\"200\"></a><a href=\"https://github.com/theatre-js/theatre#gh-light-mode-only\"><img src=\"https://raw.githubusercontent.com/theatre-js/theatre-docs/main/docs/.vuepress/public/public/theatrejs-logo-black.svg\" alt=\"Theatre.js\" width=\"200\"></a>\n</h1>\n<p align=\"center\">Motion Design, for the web</p>\n<p align=\"center\">\n <a href=\"#\"><img alt=\"GitHub branch checks state\" src=\"https://img.shields.io/github/checks-status/theatre-js/theatre/main?label=build\"></a>\n <a href=\"https://discord.gg/Tku4CJKf4B\"><img src=\"https://img.shields.io/discord/870988717190426644?label=Discord\" alt=\"Join us on Discord\"></a>\n <a href=\"https://twitter.com/theatre_js\">\n   <img alt=\"Follow Theatre.js on Twitter\" src=\"https://img.shields.io/twitter/url?label=%40theatre_js&url=https%3A%2F%2Ftwitter.com%2Ftheatre_js\">\n </a>\n <a href=\"https://www.youtube.com/channel/UCsp9XOCs8v2twyq5kMLzS2Q\">\n  <img src=\"https://img.shields.io/youtube/channel/views/UCsp9XOCs8v2twyq5kMLzS2Q?label=YouTube&style=social\" alt=\"Watch on YouTube\">\n </a>\n \n</p>\n\n> ✨ Update: Theatre.js 1.0 is around the corner. We have _temporarily_ moved development to a private repo so we can iterate faster. We'll push our work back to this public repo soon. Terms and license will remain OSS, as before. (Also, [we're hiring – join the core team!](https://www.theatrejs.com/join)).\n\nTheatre.js is an animation library for high-fidelity motion graphics. It is\ndesigned to help you express detailed animation, enabling you to create\nintricate movement, and convey nuance.\n\nTheatre.js can be used both programmatically _and_ visually.\n\n---\n\nYou can use Theatre.js to:\n\n- Animate 3D objects made with THREE.js or other 3D libraries\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-3d-short.gif)\n\n  <sub>Art by\n  [drei.lu](https://sketchfab.com/models/91964c1ce1a34c3985b6257441efa500)</sub>\n\n- Animate HTML/SVG via React or other libraries\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-dom.gif)\n\n- Design micro-interactions\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-micro-interaction.gif)\n\n- Choreograph generative interactive art\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-generative.gif)\n\n- Or animate any other JS variable\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-console.gif)\n\n## Documentation and Tutorials\n\nThe docs are at [theatrejs.com/docs](https://www.theatrejs.com/docs):\n\n- [Video tutorials](https://www.youtube.com/channel/UCsp9XOCs8v2twyq5kMLzS2Q)\n  - [Crash course](https://www.youtube.com/watch?v=icR9EIS1q34)\n  - [Animating with music](https://www.youtube.com/watch?v=QoS4gMxwq_4)\n  - [Yuri Artiukh](https://twitter.com/akella)'s\n    [stream](https://youtu.be/qmRqgFbNprM?t=3462) with a section on using\n    Theatre.js with THREE.js\n  - \\<Add your own tutorials here\\>\n\n## Community and support\n\nJoin our friendly community on [Discord](https://discord.gg/bm9f8F9Y9N), follow\nthe updates on [twitter](https://twitter.com/theatre_js) or write us an\n[email](mailto:hello@theatrejs.com).\n\n## Development and contributing\n\nIf you want to change the source of Theatre, have a look at the guide\n[here](./CONTRIBUTING.md).\n\n### Proposing fixes and changes\n\nYou can always get help with bugfixes or discuss changes with our community on\n[Discord](https://discord.gg/bm9f8F9Y9N), or directly open an issue on Github.\n\n### Helping with outstanding issues\n\nFeel free to chime in on any\n[issue](https://github.com/AriaMinaei/theatre/issues). We have also labeled some\nissues with\n[\"Help wanted\"](https://github.com/AriaMinaei/theatre/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22)\nor\n[\"Good first issue\"](https://github.com/AriaMinaei/theatre/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22good+first+issue%22)\nif you're just getting started with the codebase.\n\n### Helping with documentation\n\nThe documentation website's repo is\n[here](https://github.com/theatre-js/theatre-docs/).\n\n### Writing/recording tutorials\n\nIf you make tutorials or video content about Theatre, tell us to showcase it\nhere :)\n\n## License\n\nYour use of Theatre.js is governed under the Apache License Version 2.0:\n\n- Theatre's core (`@theatre/core`) is released under the Apache License. Same\n  goes for most packages in this repository.\n- The studio (`@theatre/studio`) is released under the AGPL 3.0 License. This is\n  the package that you use to edit your animations, setup your scenes, etc. You\n  only use the studio during design/development. Your project's final bundle\n  only includes `@theatre/core`, so only the Apache License applies.\n"
  },
  {
    "path": "compat-tests/.gitignore",
    "content": "# these lock files include checksums of the @theatre/*@compat packages, which\n# would change after every edit to their source, so we better not keep them\n# in the repo\n/fixtures/*/package/package-lock.json\n/fixtures/*/package/yarn.lock"
  },
  {
    "path": "compat-tests/README.md",
    "content": "# Compatibility tests\n\nThis setup helps us test whether Theatre.js is compatible with popular tools in the JS ecosystem, such as Vite, Next.js, webpack, react, vue, etc.\n\n## The directory structure\n\n- `./fixtures` (contains the fixtures - read on for more details)\n  - `parcel2-react18/`: The name of the fixture. This name means we're testing a minimal setup of Theatre.js alongside `parcel2` and `react18`. \n    - `package/`: This is the npm package that contains a minimal setup of `theatre+parcel2+react18`.\n    - `production.compat-test.ts`: This is a jest test for creating a production build of this setup.\n    - `*.compat-test.ts`: Any `.compat-test.ts` file will be picked up by jest, so you can use more files to test different aspects of the fixture.\n\n## How to run the tests\n\n1. First, we run `yarn run install-fixtures`, which tries to install Theatre.js on a fixture as if `@theatre/core|studio|r3f` were installed through npm. This script runs a [local npm registry](https://github.com/verdaccio/verdaccio) and publishes a production build of all the Theatre.js packages to it. Then, it iterates through `./fixtures/*/package` and runs `$ npm install` on them, using that local npm registry. \n  **If this step fails**, that usually means one of `@theatre/*` packages has a `dependency/peerDependency` that cannot be satisfied by `npm/yarn`. So this is always the first thing to fix.\n1. Then, we run `$ yarn test:compat:run`, which will run jest on all of `*.compat-test.ts` files, each of which tests an aspect of a test setup.\n2. Most of our fixtures don't actually have `.compat-test.ts` files, so we'll have to run them manually and see if Theatre still works in them, jut like a manual QA pass.\n\n> **Gotchas**\n> Some bundlers like webpack are not configured to work well with yarn workspaces by default. For example, the webpack config of create-react-app, tries to look up the node_modules chain to find missing dependencies, which is not a behavior that we want in build-tests setups. So if a setup doesn't work, try running it outside the monorepo to see if being in the monorepo is what's causing it to fail."
  },
  {
    "path": "compat-tests/fixtures/basic-react17/package/.gitignore",
    "content": "/.cache\n/dist\n/package-lock.json"
  },
  {
    "path": "compat-tests/fixtures/basic-react17/package/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Example - DOM</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script src=\"./src/index.tsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "compat-tests/fixtures/basic-react17/package/package.json",
    "content": "{\n  \"scripts\": {\n    \"dev\": \"parcel serve ./index.html\",\n    \"build\": \"NODE_ENV=production parcel build ./index.html --no-minify\",\n    \"start\": \"serve dist\"\n  },\n  \"dependencies\": {\n    \"@theatre/core\": \"0.0.1-COMPAT.1\",\n    \"@theatre/studio\": \"0.0.1-COMPAT.1\",\n    \"parcel-bundler\": \"^1.12.5\",\n    \"react\": \"^17.0.2\",\n    \"react-dom\": \"^17.0.2\",\n    \"@types/react\": \"^17.0.0\",\n    \"@types/react-dom\": \"^17.0.0\",\n    \"serve\": \"14.2.0\"\n  }\n}\n"
  },
  {
    "path": "compat-tests/fixtures/basic-react17/package/src/App/Scene.tsx",
    "content": "import type {IScrub} from '@theatre/core'\nimport studio from '@theatre/studio'\nimport React, {useLayoutEffect, useMemo, useState} from 'react'\nimport type {ISheet, ISheetObject, IProject} from '@theatre/core'\nimport type {UseDragOpts} from './useDrag'\nimport useDrag from './useDrag'\n\nstudio.initialize()\n\nconst boxObjectConfig = {\n  x: 0,\n  y: 0,\n}\n\nconst Box: React.FC<{\n  id: string\n  sheet: ISheet\n  selectedObject: ISheetObject<any> | undefined\n}> = ({id, sheet, selectedObject}) => {\n  // This is cheap to call and always returns the same value, so no need for useMemo()\n  const obj = sheet.object(id, boxObjectConfig)\n\n  const isSelected = selectedObject === obj\n\n  const [pos, setPos] = useState<{x: number; y: number}>({x: 0, y: 0})\n\n  useLayoutEffect(() => {\n    const unsubscribeFromChanges = obj.onValuesChange((newValues) => {\n      setPos(newValues)\n    })\n    return unsubscribeFromChanges\n  }, [id])\n\n  const [divRef, setDivRef] = useState<HTMLElement | null>(null)\n\n  const dragOpts = useMemo((): UseDragOpts => {\n    let scrub: IScrub | undefined\n    let initial: typeof obj.value\n    let firstOnDragCalled = false\n    return {\n      onDragStart() {\n        scrub = studio.scrub()\n        initial = obj.value\n        firstOnDragCalled = false\n      },\n      onDrag(x, y) {\n        if (!firstOnDragCalled) {\n          studio.setSelection([obj])\n          firstOnDragCalled = true\n        }\n        scrub!.capture(({set}) => {\n          set(obj.props, {x: x + initial.x, y: y + initial.y})\n        })\n      },\n      onDragEnd(dragHappened) {\n        if (dragHappened) {\n          scrub!.commit()\n        } else {\n          scrub!.discard()\n        }\n      },\n      lockCursorTo: 'move',\n    }\n  }, [])\n\n  useDrag(divRef, dragOpts)\n\n  return (\n    <div\n      onClick={() => {\n        studio.setSelection([obj])\n      }}\n      ref={setDivRef}\n      style={{\n        width: 100,\n        height: 100,\n        background: 'gray',\n        position: 'absolute',\n        left: pos.x + 'px',\n        top: pos.y + 'px',\n        boxSizing: 'border-box',\n        border: isSelected ? '1px solid #5a92fa' : '1px solid transparent',\n      }}\n    ></div>\n  )\n}\n\nlet lastBoxId = 1\n\nexport const Scene: React.FC<{project: IProject}> = ({project}) => {\n  const [boxes, setBoxes] = useState<Array<string>>(['0', '1'])\n\n  // This is cheap to call and always returns the same value, so no need for useMemo()\n  const sheet = project.sheet('Scene', 'default')\n  const [selection, _setSelection] = useState<Array<ISheetObject>>([])\n\n  useLayoutEffect(() => {\n    return studio.onSelectionChange((newSelection) => {\n      _setSelection(\n        newSelection.filter(\n          (s): s is ISheetObject => s.type === 'Theatre_SheetObject_PublicAPI',\n        ),\n      )\n    })\n  })\n\n  return (\n    <div\n      style={{\n        position: 'absolute',\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0,\n        background: '#575757',\n      }}\n    >\n      <button\n        onClick={() => {\n          setBoxes((boxes) => [...boxes, String(++lastBoxId)])\n        }}\n      >\n        Add\n      </button>\n      {boxes.map((id) => (\n        <Box\n          key={'box' + id}\n          id={id}\n          sheet={sheet}\n          selectedObject={selection[0]}\n        />\n      ))}\n    </div>\n  )\n}\n"
  },
  {
    "path": "compat-tests/fixtures/basic-react17/package/src/App/useDrag.ts",
    "content": "import {useLayoutEffect, useRef} from 'react'\n\nconst noop = () => {}\n\nfunction createCursorLock(cursor: string) {\n  const el = document.createElement('div')\n  el.style.cssText = `\n    position: fixed;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 9999999;`\n\n  el.style.cursor = cursor\n  document.body.appendChild(el)\n  const relinquish = () => {\n    document.body.removeChild(el)\n  }\n\n  return relinquish\n}\n\nexport type UseDragOpts = {\n  disabled?: boolean\n  dontBlockMouseDown?: boolean\n  lockCursorTo?: string\n  onDragStart?: (event: MouseEvent) => void | false\n  onDragEnd?: (dragHappened: boolean) => void\n  onDrag: (dx: number, dy: number, event: MouseEvent) => void\n}\n\nexport default function useDrag(\n  target: HTMLElement | undefined | null,\n  opts: UseDragOpts,\n) {\n  const optsRef = useRef<typeof opts>(opts)\n  optsRef.current = opts\n\n  const modeRef = useRef<'dragStartCalled' | 'dragging' | 'notDragging'>(\n    'notDragging',\n  )\n\n  const stateRef = useRef<{\n    dragHappened: boolean\n    startPos: {\n      x: number\n      y: number\n    }\n  }>({dragHappened: false, startPos: {x: 0, y: 0}})\n\n  useLayoutEffect(() => {\n    if (!target) return\n\n    const getDistances = (event: MouseEvent): [number, number] => {\n      const {startPos} = stateRef.current\n      return [event.screenX - startPos.x, event.screenY - startPos.y]\n    }\n\n    let relinquishCursorLock = noop\n\n    const dragHandler = (event: MouseEvent) => {\n      if (!stateRef.current.dragHappened && optsRef.current.lockCursorTo) {\n        relinquishCursorLock = createCursorLock(optsRef.current.lockCursorTo)\n      }\n      if (!stateRef.current.dragHappened) stateRef.current.dragHappened = true\n      modeRef.current = 'dragging'\n\n      const deltas = getDistances(event)\n      optsRef.current.onDrag(deltas[0], deltas[1], event)\n    }\n\n    const dragEndHandler = () => {\n      removeDragListeners()\n      modeRef.current = 'notDragging'\n\n      optsRef.current.onDragEnd &&\n        optsRef.current.onDragEnd(stateRef.current.dragHappened)\n      relinquishCursorLock()\n      relinquishCursorLock = noop\n    }\n\n    const addDragListeners = () => {\n      document.addEventListener('mousemove', dragHandler)\n      document.addEventListener('mouseup', dragEndHandler)\n    }\n\n    const removeDragListeners = () => {\n      document.removeEventListener('mousemove', dragHandler)\n      document.removeEventListener('mouseup', dragEndHandler)\n    }\n\n    const preventUnwantedClick = (event: MouseEvent) => {\n      if (optsRef.current.disabled) return\n      if (stateRef.current.dragHappened) {\n        if (\n          !optsRef.current.dontBlockMouseDown &&\n          modeRef.current !== 'notDragging'\n        ) {\n          event.stopPropagation()\n          event.preventDefault()\n        }\n        stateRef.current.dragHappened = false\n      }\n    }\n\n    const dragStartHandler = (event: MouseEvent) => {\n      const opts = optsRef.current\n      if (opts.disabled === true) return\n\n      if (event.button !== 0) return\n      const resultOfStart = opts.onDragStart && opts.onDragStart(event)\n\n      if (resultOfStart === false) return\n\n      if (!opts.dontBlockMouseDown) {\n        event.stopPropagation()\n        event.preventDefault()\n      }\n\n      modeRef.current = 'dragStartCalled'\n\n      const {screenX, screenY} = event\n      stateRef.current.startPos = {x: screenX, y: screenY}\n      stateRef.current.dragHappened = false\n\n      addDragListeners()\n    }\n\n    const onMouseDown = (e: MouseEvent) => {\n      dragStartHandler(e)\n    }\n\n    target.addEventListener('mousedown', onMouseDown)\n    target.addEventListener('click', preventUnwantedClick)\n\n    return () => {\n      removeDragListeners()\n      target.removeEventListener('mousedown', onMouseDown)\n      target.removeEventListener('click', preventUnwantedClick)\n      relinquishCursorLock()\n\n      if (modeRef.current !== 'notDragging') {\n        optsRef.current.onDragEnd &&\n          optsRef.current.onDragEnd(modeRef.current === 'dragging')\n      }\n      modeRef.current = 'notDragging'\n    }\n  }, [target])\n}\n"
  },
  {
    "path": "compat-tests/fixtures/basic-react17/package/src/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom'\nimport studio from '@theatre/studio'\nimport {getProject} from '@theatre/core'\nimport {Scene} from './App/Scene'\n\nstudio.initialize()\n\nReactDOM.render(\n  <Scene project={getProject('Sample project')} />,\n  document.getElementById('root')!,\n)\n"
  },
  {
    "path": "compat-tests/fixtures/basic-react17/package/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"jsx\": \"react\"\n  }\n}\n"
  },
  {
    "path": "compat-tests/fixtures/basic-react17/react17.compat-test.ts",
    "content": "// @cspotcode/zx is zx in CommonJS\nimport {$, cd, path, ProcessPromise} from '@cspotcode/zx'\nimport {defer, testServerAndPage} from '../../utils/testUtils'\n\nconst PATH_TO_PACKAGE = path.join(__dirname, `./package`)\n\ndescribe(`react17`, () => {\n  test(`build succeeds`, async () => {\n    cd(PATH_TO_PACKAGE)\n    const {exitCode} = await $`npm run build`\n    // at this point, the build should have succeeded\n    expect(exitCode).toEqual(0)\n  })\n\n  // this one is failing for some reason, but manually running the server works fine\n  describe(`build`, () => {\n    return\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`npm start -- -p ${port}`\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) =>\n        chunk.includes('Accepting connections'),\n    })\n  })\n})\n"
  },
  {
    "path": "compat-tests/fixtures/basic-vite4/basic-vite4.compat-test.ts",
    "content": "// @cspotcode/zx is zx in CommonJS\nimport {$, cd, path, ProcessPromise} from '@cspotcode/zx'\nimport {testServerAndPage} from '../../utils/testUtils'\n\nconst PATH_TO_PACKAGE = path.join(__dirname, `./package`)\n\ndescribe(`basic-vite4`, () => {\n  test(`\\`$ vite build\\` should succeed`, async () => {\n    cd(PATH_TO_PACKAGE)\n    const {exitCode} = await $`npm run build`\n    // at this point, the build should have succeeded\n    expect(exitCode).toEqual(0)\n  })\n\n  describe(`vite preview`, () => {\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`npm run preview -- --port ${port}`\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) => chunk.includes('--host'),\n    })\n  })\n\n  describe(`vite dev`, () => {\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`npm run dev -- --port ${port}`\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) => chunk.includes('--host'),\n    })\n  })\n})\n"
  },
  {
    "path": "compat-tests/fixtures/basic-vite4/package/.gitignore",
    "content": "/.cache\n/dist\n/package-lock.json\n"
  },
  {
    "path": "compat-tests/fixtures/basic-vite4/package/index.html",
    "content": "<!DOCTYPE html>\n<script type=\"module\" src=\"./src/index.ts\"></script>\n"
  },
  {
    "path": "compat-tests/fixtures/basic-vite4/package/package.json",
    "content": "{\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"tsc && vite build\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"@theatre/core\": \"0.0.1-COMPAT.1\",\n    \"@theatre/studio\": \"0.0.1-COMPAT.1\"\n  },\n  \"browserslist\": {\n    \"production\": [\">0.2%\", \"not dead\", \"not op_mini all\"],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  }\n}\n"
  },
  {
    "path": "compat-tests/fixtures/basic-vite4/package/src/index.ts",
    "content": "import {getProject} from '@theatre/core'\n\nconst project = getProject('Sample project')\nconst sheet = project.sheet('Scene')\n\nif (import.meta.env.MODE === 'development') {\n  const {default: studio} = await import('@theatre/studio')\n  studio.initialize()\n}\n"
  },
  {
    "path": "compat-tests/fixtures/basic-vite4/package/tsconfig.json",
    "content": "{\n  \"include\": [\"./src/**/*.ts\"],\n  \"compilerOptions\": {\n    \"types\": [\"vite/client\"],\n    \"moduleResolution\": \"NodeNext\",\n    \"module\": \"NodeNext\",\n    \"target\": \"ESNext\"\n  }\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-cra/cra.compat-test.ts",
    "content": "// @cspotcode/zx is zx in CommonJS\nimport {$, cd, path, ProcessPromise} from '@cspotcode/zx'\nimport {defer, testServerAndPage} from '../../utils/testUtils'\n\nconst PATH_TO_PACKAGE = path.join(__dirname, `./package`)\n\ndescribe(`Create React App`, () => {\n  test(`build succeeds`, async () => {\n    cd(PATH_TO_PACKAGE)\n    const {exitCode} = await $`npm run build`\n    // at this point, the build should have succeeded\n    expect(exitCode).toEqual(0)\n  })\n\n  describe(`build`, () => {\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`npm run serve -- -p ${port}`\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) =>\n        chunk.includes('Accepting connections'),\n    })\n  })\n\n  describe(`dev`, () => {\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`BROWSER=none PORT=${port} npm run start`\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) =>\n        chunk.includes('You can now view'),\n    })\n  })\n})\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-cra/package/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-cra/package/README.md",
    "content": "Testing `@theatre/core` and `@theatre/studio` with `npm`, `create-react-app`, and `react@18`"
  },
  {
    "path": "compat-tests/fixtures/r3f-cra/package/package.json",
    "content": "{\n  \"name\": \"@compat/cra-react18\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\",\n    \"serve\": \"serve -s build\"\n  },\n  \"dependencies\": {\n    \"@react-three/drei\": \"^9.80.1\",\n    \"@react-three/fiber\": \"^8.13.6\",\n    \"three\": \"^0.155.0\",\n    \"@testing-library/jest-dom\": \"^5.11.4\",\n    \"@testing-library/react\": \"^11.1.0\",\n    \"@testing-library/user-event\": \"^12.1.10\",\n    \"@theatre/core\": \"0.0.1-COMPAT.1\",\n    \"@theatre/r3f\": \"0.0.1-COMPAT.1\",\n    \"@theatre/studio\": \"0.0.1-COMPAT.1\",\n    \"@types/jest\": \"^29.5.3\",\n    \"@types/node\": \"^20.4.5\",\n    \"@types/react\": \"^18.2.17\",\n    \"@types/react-dom\": \"^18.2.7\",\n    \"react-scripts\": \"^5.0.1\",\n    \"typescript\": \"^3.2.1\",\n    \"serve\": \"14.2.0\",\n    \"web-vitals\": \"^1.0.1\"\n  },\n  \"eslintConfig\": {\n    \"extends\": [\"react-app\", \"react-app/jest\"]\n  },\n  \"browserslist\": {\n    \"production\": [\">0.2%\", \"not dead\", \"not op_mini all\"],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  }\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-cra/package/public/index.html",
    "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    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta\n      name=\"description\"\n      content=\"Web site created using create-react-app\"\n    />\n\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>React App</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-cra/package/src/App/App.tsx",
    "content": "import {getProject} from '@theatre/core'\nimport React, {useEffect, useRef} from 'react'\nimport {Canvas} from '@react-three/fiber'\nimport {editable as e, SheetProvider, PerspectiveCamera} from '@theatre/r3f'\nimport state from './state.json'\n\n// credit: https://codesandbox.io/s/camera-pan-nsb7f\n\nfunction Plane({color, theatreKey, ...props}: any) {\n  return (\n    <e.mesh {...props} theatreKey={theatreKey}>\n      <boxGeometry />\n      <meshStandardMaterial color={color} />\n    </e.mesh>\n  )\n}\n\nexport default function App() {\n  const light2Ref = useRef<any>()\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      if (!light2Ref.current) return\n\n      clearInterval(interval)\n\n      const intensityInStateJson = 3\n      const currentIntensity = light2Ref.current.intensity\n      if (currentIntensity !== intensityInStateJson) {\n        console.error(`Test failed: light2.intensity is ${currentIntensity}`)\n      } else {\n        console.log(`Test passed: light2.intensity is ${intensityInStateJson}`)\n      }\n    }, 50)\n    // see the note on <e.pointLight theatreKey=\"Light 2\" /> below to understand why we're doing this\n  }, [])\n\n  return (\n    <Canvas\n      gl={{preserveDrawingBuffer: true}}\n      linear\n      frameloop=\"demand\"\n      dpr={[1.5, 2]}\n      style={{position: 'absolute', top: 0, left: 0}}\n    >\n      <SheetProvider\n        sheet={getProject('Playground - R3F', {state}).sheet('R3F-Canvas')}\n      >\n        {/* @ts-ignore */}\n        <PerspectiveCamera makeDefault theatreKey=\"Camera\" />\n        <ambientLight intensity={0.4} />\n        <e.pointLight\n          position={[-10, -10, 5]}\n          intensity={2}\n          color=\"#ff20f0\"\n          theatreKey=\"Light 1\"\n        />\n        <e.pointLight\n          position={[0, 0.5, -1]}\n          distance={1}\n          // the intensity is statically set to 2, but in the state.json file we'll set it to 3,\n          // and we'll use that as a test to make sure the state is being loaded correctly\n          intensity={2}\n          color=\"#e4be00\"\n          theatreKey=\"Light 2\"\n          ref={light2Ref}\n        />\n\n        <group position={[0, -0.9, -3]}>\n          <Plane\n            color=\"hotpink\"\n            rotation-x={-Math.PI / 2}\n            position-z={2}\n            scale={[4, 20, 0.2]}\n            theatreKey=\"plane1\"\n          />\n          <Plane\n            color=\"#e4be00\"\n            rotation-x={-Math.PI / 2}\n            position-y={1}\n            scale={[4.2, 0.2, 4]}\n            theatreKey=\"plane2\"\n          />\n          <Plane\n            color=\"#736fbd\"\n            rotation-x={-Math.PI / 2}\n            position={[-1.7, 1, 3.5]}\n            scale={[0.5, 4, 4]}\n            theatreKey=\"plane3\"\n          />\n          <Plane\n            color=\"white\"\n            rotation-x={-Math.PI / 2}\n            position={[0, 4.5, 3]}\n            scale={[2, 0.03, 4]}\n            theatreKey=\"plane4\"\n          />\n        </group>\n      </SheetProvider>\n    </Canvas>\n  )\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-cra/package/src/App/state.json",
    "content": "{\n  \"sheetsById\": {\n    \"R3F-Canvas\": {\n      \"staticOverrides\": {\n        \"byObject\": {\n          \"Light 2\": {\n            \"intensity\": 3\n          }\n        }\n      }\n    }\n  },\n  \"definitionVersion\": \"0.4.0\",\n  \"revisionHistory\": [\n    \"jVNB3VWU34BIQK7M\",\n    \"-NXkC2GceSVBoVqa\",\n    \"Bw7ng1kdcWmMO5DN\"\n  ]\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-cra/package/src/index.tsx",
    "content": "import ReactDOM from 'react-dom/client'\nimport studio from '@theatre/studio'\nimport extension from '@theatre/r3f/dist/extension'\nimport App from './App/App.tsx'\n\nif (process.env.NODE_ENV === 'development' && typeof window !== 'undefined') {\n  studio.extend(extension)\n  studio.initialize({usePersistentStorage: false})\n}\n\nconst container = document.getElementById('root')!\nconst root = ReactDOM.createRoot(container)\nroot.render(<App />)\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-next-latest/next-latest.compat-test.ts",
    "content": "// @cspotcode/zx is zx in CommonJS\nimport {$, cd, path, ProcessPromise} from '@cspotcode/zx'\nimport {testServerAndPage} from '../../utils/testUtils'\n\nconst PATH_TO_PACKAGE = path.join(__dirname, `./package`)\n\ndescribe(`next`, () => {\n  describe(`build`, () => {\n    test(`command runs without error`, async () => {\n      cd(PATH_TO_PACKAGE)\n      const {exitCode} = await $`npm run build`\n      // at this point, the build should have succeeded\n      expect(exitCode).toEqual(0)\n    })\n\n    describe(`next start`, () => {\n      testServerAndPage({\n        startServerOnPort: (port: number) => {\n          cd(PATH_TO_PACKAGE)\n\n          return $`npm run start -- --port ${port}`\n        },\n\n        checkServerStdoutToSeeIfItsReady: (chunk) =>\n          chunk.includes('started server'),\n      })\n    })\n  })\n\n  // this test is not ready yet, so we'll skip it\n  describe(`$ next dev`, () => {\n    testServerAndPage({\n      startServerOnPort: (port: number) => {\n        cd(PATH_TO_PACKAGE)\n\n        return $`npm run dev -- --port ${port}`\n      },\n      checkServerStdoutToSeeIfItsReady: (chunk) =>\n        chunk.includes('compiled client and server successfully'),\n    })\n  })\n})\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-next-latest/package/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-next-latest/package/README.md",
    "content": "This is a starter template for [Learn Next.js](https://nextjs.org/learn)."
  },
  {
    "path": "compat-tests/fixtures/r3f-next-latest/package/next-env.d.ts",
    "content": "/// <reference types=\"next\" />\n/// <reference types=\"next/image-types/global\" />\n/// <reference types=\"next/navigation-types/compat/navigation\" />\n\n// NOTE: This file should not be edited\n// see https://nextjs.org/docs/basic-features/typescript for more information.\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-next-latest/package/package.json",
    "content": "{\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\"\n  },\n  \"dependencies\": {\n    \"@react-three/drei\": \"^9.80.1\",\n    \"@react-three/fiber\": \"^8.13.6\",\n    \"three\": \"^0.155.0\",\n    \"@theatre/core\": \"0.0.1-COMPAT.1\",\n    \"@theatre/r3f\": \"0.0.1-COMPAT.1\",\n    \"@theatre/studio\": \"0.0.1-COMPAT.1\",\n    \"theatric\": \"0.0.1-COMPAT.1\",\n    \"next\": \"latest\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\"\n  }\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-next-latest/package/pages/index.js",
    "content": "import React from 'react'\nimport studio from '@theatre/studio'\nimport extension from '@theatre/r3f/dist/extension'\nimport App from '../src/App/App'\n\nif (process.env.NODE_ENV === 'development' && typeof window !== 'undefined') {\n  studio.extend(extension)\n  studio.initialize({usePersistentStorage: false})\n}\n\nexport default function Home() {\n  return <App></App>\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-next-latest/package/src/App/App.tsx",
    "content": "import {getProject} from '@theatre/core'\nimport React, {useEffect, useRef} from 'react'\nimport {Canvas} from '@react-three/fiber'\nimport {editable as e, SheetProvider, PerspectiveCamera} from '@theatre/r3f'\nimport state from './state.json'\n\n// credit: https://codesandbox.io/s/camera-pan-nsb7f\n\nfunction Plane({color, theatreKey, ...props}: any) {\n  return (\n    <e.mesh {...props} theatreKey={theatreKey}>\n      <boxGeometry />\n      <meshStandardMaterial color={color} />\n    </e.mesh>\n  )\n}\n\nexport default function App() {\n  const light2Ref = useRef<any>()\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      if (!light2Ref.current) return\n\n      clearInterval(interval)\n\n      const intensityInStateJson = 3\n      const currentIntensity = light2Ref.current.intensity\n      if (currentIntensity !== intensityInStateJson) {\n        console.error(`Test failed: light2.intensity is ${currentIntensity}`)\n      } else {\n        console.log(`Test passed: light2.intensity is ${intensityInStateJson}`)\n      }\n    }, 50)\n    // see the note on <e.pointLight theatreKey=\"Light 2\" /> below to understand why we're doing this\n  }, [])\n\n  return (\n    <Canvas\n      gl={{preserveDrawingBuffer: true}}\n      linear\n      frameloop=\"demand\"\n      dpr={[1.5, 2]}\n      style={{position: 'absolute', top: 0, left: 0}}\n    >\n      <SheetProvider\n        sheet={getProject('Playground - R3F', {state}).sheet('R3F-Canvas')}\n      >\n        {/* @ts-ignore */}\n        <PerspectiveCamera makeDefault theatreKey=\"Camera\" />\n        <ambientLight intensity={0.4} />\n        <e.pointLight\n          position={[-10, -10, 5]}\n          intensity={2}\n          color=\"#ff20f0\"\n          theatreKey=\"Light 1\"\n        />\n        <e.pointLight\n          position={[0, 0.5, -1]}\n          distance={1}\n          // the intensity is statically set to 2, but in the state.json file we'll set it to 3,\n          // and we'll use that as a test to make sure the state is being loaded correctly\n          intensity={2}\n          color=\"#e4be00\"\n          theatreKey=\"Light 2\"\n          ref={light2Ref}\n        />\n\n        <group position={[0, -0.9, -3]}>\n          <Plane\n            color=\"hotpink\"\n            rotation-x={-Math.PI / 2}\n            position-z={2}\n            scale={[4, 20, 0.2]}\n            theatreKey=\"plane1\"\n          />\n          <Plane\n            color=\"#e4be00\"\n            rotation-x={-Math.PI / 2}\n            position-y={1}\n            scale={[4.2, 0.2, 4]}\n            theatreKey=\"plane2\"\n          />\n          <Plane\n            color=\"#736fbd\"\n            rotation-x={-Math.PI / 2}\n            position={[-1.7, 1, 3.5]}\n            scale={[0.5, 4, 4]}\n            theatreKey=\"plane3\"\n          />\n          <Plane\n            color=\"white\"\n            rotation-x={-Math.PI / 2}\n            position={[0, 4.5, 3]}\n            scale={[2, 0.03, 4]}\n            theatreKey=\"plane4\"\n          />\n        </group>\n      </SheetProvider>\n    </Canvas>\n  )\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-next-latest/package/src/App/state.json",
    "content": "{\n  \"sheetsById\": {\n    \"R3F-Canvas\": {\n      \"staticOverrides\": {\n        \"byObject\": {\n          \"Light 2\": {\n            \"intensity\": 3\n          }\n        }\n      }\n    }\n  },\n  \"definitionVersion\": \"0.4.0\",\n  \"revisionHistory\": [\n    \"jVNB3VWU34BIQK7M\",\n    \"-NXkC2GceSVBoVqa\",\n    \"Bw7ng1kdcWmMO5DN\"\n  ]\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-next-latest/package/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"strict\": false,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noEmit\": true,\n    \"incremental\": true,\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"jsx\": \"preserve\",\n    \"plugins\": [\n      {\n        \"name\": \"next\"\n      }\n    ],\n    \"strictNullChecks\": true\n  },\n  \"include\": [\n    \"next-env.d.ts\",\n    \"**/*.ts\",\n    \"**/*.tsx\",\n    \".next/types/**/*.ts\"\n  ],\n  \"exclude\": [\n    \"node_modules\"\n  ]\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-parcel1/package/.gitignore",
    "content": "/.cache\n/dist\n/package-lock.json"
  },
  {
    "path": "compat-tests/fixtures/r3f-parcel1/package/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Example - DOM</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script src=\"./src/index.tsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-parcel1/package/package.json",
    "content": "{\n  \"scripts\": {\n    \"dev\": \"parcel serve ./index.html\",\n    \"build\": \"NODE_ENV=production parcel build ./index.html --no-minify\",\n    \"start\": \"serve dist\"\n  },\n  \"dependencies\": {\n    \"@react-three/drei\": \"^9.80.1\",\n    \"@react-three/fiber\": \"^8.13.6\",\n    \"three\": \"^0.155.0\",\n    \"@theatre/core\": \"0.0.1-COMPAT.1\",\n    \"@theatre/r3f\": \"0.0.1-COMPAT.1\",\n    \"@theatre/studio\": \"0.0.1-COMPAT.1\",\n    \"parcel-bundler\": \"^1.12.5\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"serve\": \"14.2.0\"\n  }\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-parcel1/package/src/App/App.tsx",
    "content": "import {getProject} from '@theatre/core'\nimport React, {useEffect, useRef} from 'react'\nimport {Canvas} from '@react-three/fiber'\nimport {editable as e, SheetProvider, PerspectiveCamera} from '@theatre/r3f'\nimport state from './state.json'\n\n// credit: https://codesandbox.io/s/camera-pan-nsb7f\n\nfunction Plane({color, theatreKey, ...props}: any) {\n  return (\n    <e.mesh {...props} theatreKey={theatreKey}>\n      <boxGeometry />\n      <meshStandardMaterial color={color} />\n    </e.mesh>\n  )\n}\n\nexport default function App() {\n  const light2Ref = useRef<any>()\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      if (!light2Ref.current) return\n\n      clearInterval(interval)\n\n      const intensityInStateJson = 3\n      const currentIntensity = light2Ref.current.intensity\n      if (currentIntensity !== intensityInStateJson) {\n        console.error(`Test failed: light2.intensity is ${currentIntensity}`)\n      } else {\n        console.log(`Test passed: light2.intensity is ${intensityInStateJson}`)\n      }\n    }, 50)\n    // see the note on <e.pointLight theatreKey=\"Light 2\" /> below to understand why we're doing this\n  }, [])\n\n  return (\n    <Canvas\n      gl={{preserveDrawingBuffer: true}}\n      linear\n      frameloop=\"demand\"\n      dpr={[1.5, 2]}\n      style={{position: 'absolute', top: 0, left: 0}}\n    >\n      <SheetProvider\n        sheet={getProject('Playground - R3F', {state}).sheet('R3F-Canvas')}\n      >\n        {/* @ts-ignore */}\n        <PerspectiveCamera makeDefault theatreKey=\"Camera\" />\n        <ambientLight intensity={0.4} />\n        <e.pointLight\n          position={[-10, -10, 5]}\n          intensity={2}\n          color=\"#ff20f0\"\n          theatreKey=\"Light 1\"\n        />\n        <e.pointLight\n          position={[0, 0.5, -1]}\n          distance={1}\n          // the intensity is statically set to 2, but in the state.json file we'll set it to 3,\n          // and we'll use that as a test to make sure the state is being loaded correctly\n          intensity={2}\n          color=\"#e4be00\"\n          theatreKey=\"Light 2\"\n          ref={light2Ref}\n        />\n\n        <group position={[0, -0.9, -3]}>\n          <Plane\n            color=\"hotpink\"\n            rotation-x={-Math.PI / 2}\n            position-z={2}\n            scale={[4, 20, 0.2]}\n            theatreKey=\"plane1\"\n          />\n          <Plane\n            color=\"#e4be00\"\n            rotation-x={-Math.PI / 2}\n            position-y={1}\n            scale={[4.2, 0.2, 4]}\n            theatreKey=\"plane2\"\n          />\n          <Plane\n            color=\"#736fbd\"\n            rotation-x={-Math.PI / 2}\n            position={[-1.7, 1, 3.5]}\n            scale={[0.5, 4, 4]}\n            theatreKey=\"plane3\"\n          />\n          <Plane\n            color=\"white\"\n            rotation-x={-Math.PI / 2}\n            position={[0, 4.5, 3]}\n            scale={[2, 0.03, 4]}\n            theatreKey=\"plane4\"\n          />\n        </group>\n      </SheetProvider>\n    </Canvas>\n  )\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-parcel1/package/src/App/state.json",
    "content": "{\n  \"sheetsById\": {\n    \"R3F-Canvas\": {\n      \"staticOverrides\": {\n        \"byObject\": {\n          \"Light 2\": {\n            \"intensity\": 3\n          }\n        }\n      }\n    }\n  },\n  \"definitionVersion\": \"0.4.0\",\n  \"revisionHistory\": [\n    \"jVNB3VWU34BIQK7M\",\n    \"-NXkC2GceSVBoVqa\",\n    \"Bw7ng1kdcWmMO5DN\"\n  ]\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-parcel1/package/src/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport studio from '@theatre/studio'\nimport extension from '@theatre/r3f/dist/extension'\nimport App from './App/App'\n\nif (process.env.NODE_ENV === 'development' && typeof window !== 'undefined') {\n  studio.extend(extension)\n  studio.initialize({usePersistentStorage: false})\n}\n\nconsole.log('React', React)\n\nconst container = document.getElementById('root')\nconst root = ReactDOM.createRoot(container)\nroot.render(<App />)\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-parcel1/package/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"jsx\": \"react\"\n  }\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-parcel1/parcel1.compat-test.ts",
    "content": "// @cspotcode/zx is zx in CommonJS\nimport {$, cd, path, ProcessPromise} from '@cspotcode/zx'\nimport {defer, testServerAndPage} from '../../utils/testUtils'\n\nconst PATH_TO_PACKAGE = path.join(__dirname, `./package`)\n\ndescribe(`parcel1`, () => {\n  test(`build succeeds`, async () => {\n    cd(PATH_TO_PACKAGE)\n    const {exitCode} = await $`npm run build`\n    // at this point, the build should have succeeded\n    expect(exitCode).toEqual(0)\n  })\n\n  describe(`build`, () => {\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`npm start -- -p ${port}`\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) =>\n        chunk.includes('Accepting connections'),\n    })\n  })\n\n  describe(`dev`, () => {\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`npm run dev -- -p ${port}`\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) =>\n        chunk.includes('Server running at'),\n    })\n  })\n})\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-react18/package/.gitignore",
    "content": "/.parcel-cache\n/.cache\n/dist\n/package-lock.json\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-react18/package/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Example - DOM</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"./src/index.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-react18/package/package.json",
    "content": "{\n  \"scripts\": {\n    \"dev\": \"parcel serve ./index.html\",\n    \"build\": \"parcel build ./index.html\",\n    \"start\": \"serve dist\"\n  },\n  \"dependencies\": {\n    \"@react-three/drei\": \"^9.80.1\",\n    \"@react-three/fiber\": \"^8.13.6\",\n    \"three\": \"^0.155.0\",\n    \"@theatre/core\": \"0.0.1-COMPAT.1\",\n    \"@theatre/r3f\": \"0.0.1-COMPAT.1\",\n    \"@theatre/studio\": \"0.0.1-COMPAT.1\",\n    \"parcel\": \"^2.9.3\",\n    \"react\": \"^18.1.0\",\n    \"react-dom\": \"^18.1.0\",\n    \"serve\": \"14.2.0\"\n  }\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-react18/package/src/App/App.tsx",
    "content": "import {getProject} from '@theatre/core'\nimport React, {useEffect, useRef} from 'react'\nimport {Canvas} from '@react-three/fiber'\nimport {editable as e, SheetProvider, PerspectiveCamera} from '@theatre/r3f'\nimport state from './state.json'\n\n// credit: https://codesandbox.io/s/camera-pan-nsb7f\n\nfunction Plane({color, theatreKey, ...props}: any) {\n  return (\n    <e.mesh {...props} theatreKey={theatreKey}>\n      <boxGeometry />\n      <meshStandardMaterial color={color} />\n    </e.mesh>\n  )\n}\n\nexport default function App() {\n  const light2Ref = useRef<any>()\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      if (!light2Ref.current) return\n\n      clearInterval(interval)\n\n      const intensityInStateJson = 3\n      const currentIntensity = light2Ref.current.intensity\n      if (currentIntensity !== intensityInStateJson) {\n        console.error(`Test failed: light2.intensity is ${currentIntensity}`)\n      } else {\n        console.log(`Test passed: light2.intensity is ${intensityInStateJson}`)\n      }\n    }, 50)\n    // see the note on <e.pointLight theatreKey=\"Light 2\" /> below to understand why we're doing this\n  }, [])\n\n  return (\n    <Canvas\n      gl={{preserveDrawingBuffer: true}}\n      linear\n      frameloop=\"demand\"\n      dpr={[1.5, 2]}\n      style={{position: 'absolute', top: 0, left: 0}}\n    >\n      <SheetProvider\n        sheet={getProject('Playground - R3F', {state}).sheet('R3F-Canvas')}\n      >\n        {/* @ts-ignore */}\n        <PerspectiveCamera makeDefault theatreKey=\"Camera\" />\n        <ambientLight intensity={0.4} />\n        <e.pointLight\n          position={[-10, -10, 5]}\n          intensity={2}\n          color=\"#ff20f0\"\n          theatreKey=\"Light 1\"\n        />\n        <e.pointLight\n          position={[0, 0.5, -1]}\n          distance={1}\n          // the intensity is statically set to 2, but in the state.json file we'll set it to 3,\n          // and we'll use that as a test to make sure the state is being loaded correctly\n          intensity={2}\n          color=\"#e4be00\"\n          theatreKey=\"Light 2\"\n          ref={light2Ref}\n        />\n\n        <group position={[0, -0.9, -3]}>\n          <Plane\n            color=\"hotpink\"\n            rotation-x={-Math.PI / 2}\n            position-z={2}\n            scale={[4, 20, 0.2]}\n            theatreKey=\"plane1\"\n          />\n          <Plane\n            color=\"#e4be00\"\n            rotation-x={-Math.PI / 2}\n            position-y={1}\n            scale={[4.2, 0.2, 4]}\n            theatreKey=\"plane2\"\n          />\n          <Plane\n            color=\"#736fbd\"\n            rotation-x={-Math.PI / 2}\n            position={[-1.7, 1, 3.5]}\n            scale={[0.5, 4, 4]}\n            theatreKey=\"plane3\"\n          />\n          <Plane\n            color=\"white\"\n            rotation-x={-Math.PI / 2}\n            position={[0, 4.5, 3]}\n            scale={[2, 0.03, 4]}\n            theatreKey=\"plane4\"\n          />\n        </group>\n      </SheetProvider>\n    </Canvas>\n  )\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-react18/package/src/App/state.json",
    "content": "{\n  \"sheetsById\": {\n    \"R3F-Canvas\": {\n      \"staticOverrides\": {\n        \"byObject\": {\n          \"Light 2\": {\n            \"intensity\": 3\n          }\n        }\n      }\n    }\n  },\n  \"definitionVersion\": \"0.4.0\",\n  \"revisionHistory\": [\n    \"jVNB3VWU34BIQK7M\",\n    \"-NXkC2GceSVBoVqa\",\n    \"Bw7ng1kdcWmMO5DN\"\n  ]\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-react18/package/src/index.js",
    "content": "import ReactDOM from 'react-dom/client'\nimport studio from '@theatre/studio'\nimport extension from '@theatre/r3f/dist/extension'\nimport App from './App/App'\n\nif (process.env.NODE_ENV === 'development' && typeof window !== 'undefined') {\n  studio.extend(extension)\n  studio.initialize({usePersistentStorage: false})\n}\n\nconst container = document.getElementById('root')\nconst root = ReactDOM.createRoot(container)\nroot.render(<App />)\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-react18/package/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"jsx\": \"react\"\n  }\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-react18/react18.compat-test.ts",
    "content": "// @cspotcode/zx is zx in CommonJS\nimport {$, cd, path, ProcessPromise} from '@cspotcode/zx'\nimport {defer, testServerAndPage} from '../../utils/testUtils'\n\nconst PATH_TO_PACKAGE = path.join(__dirname, `./package`)\n\ndescribe(`react18`, () => {\n  test(`build succeeds`, async () => {\n    cd(PATH_TO_PACKAGE)\n    const {exitCode} = await $`npm run build`\n    // at this point, the build should have succeeded\n    expect(exitCode).toEqual(0)\n  })\n\n  // this one is failing for some reason, but manually running the server works fine\n  describe(`build`, () => {\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`npm start -- -p ${port}`\n    }\n\n    function waitTilServerIsReady(\n      process: ProcessPromise<unknown>,\n      port: number,\n    ): Promise<{\n      url: string\n    }> {\n      const d = defer<{url: string}>()\n\n      const url = `http://localhost:${port}`\n\n      process.stdout.on('data', (chunk) => {\n        if (chunk.includes('Accepting connections')) {\n          //  server is running now\n          d.resolve({url})\n        }\n      })\n\n      return d.promise\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) =>\n        chunk.includes('Accepting connections'),\n    })\n  })\n\n  describe(`dev`, () => {\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`npm run dev -- --port ${port}`\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) =>\n        chunk.includes('Server running'),\n    })\n  })\n})\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite2/package/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite2/package/index.html",
    "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    <title>Vite App</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.tsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite2/package/package.json",
    "content": "{\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"@react-three/drei\": \"^9.80.1\",\n    \"@react-three/fiber\": \"^8.13.6\",\n    \"three\": \"^0.155.0\",\n    \"@theatre/core\": \"0.0.1-COMPAT.1\",\n    \"@theatre/r3f\": \"0.0.1-COMPAT.1\",\n    \"@theatre/studio\": \"0.0.1-COMPAT.1\",\n    \"react\": \"^18.0.0\",\n    \"react-dom\": \"^18.0.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.0.0\",\n    \"@types/react-dom\": \"^18.0.0\",\n    \"@vitejs/plugin-react\": \"^1.3.0\",\n    \"typescript\": \"^4.6.3\",\n    \"vite\": \"^2.9.9\"\n  }\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite2/package/src/App/App.tsx",
    "content": "import {getProject} from '@theatre/core'\nimport React, {useEffect, useRef} from 'react'\nimport {Canvas} from '@react-three/fiber'\nimport {editable as e, SheetProvider, PerspectiveCamera} from '@theatre/r3f'\nimport state from './state.json'\n\n// credit: https://codesandbox.io/s/camera-pan-nsb7f\n\nfunction Plane({color, theatreKey, ...props}: any) {\n  return (\n    <e.mesh {...props} theatreKey={theatreKey}>\n      <boxGeometry />\n      <meshStandardMaterial color={color} />\n    </e.mesh>\n  )\n}\n\nexport default function App() {\n  const light2Ref = useRef<any>()\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      if (!light2Ref.current) return\n\n      clearInterval(interval)\n\n      const intensityInStateJson = 3\n      const currentIntensity = light2Ref.current.intensity\n      if (currentIntensity !== intensityInStateJson) {\n        console.error(`Test failed: light2.intensity is ${currentIntensity}`)\n      } else {\n        console.log(`Test passed: light2.intensity is ${intensityInStateJson}`)\n      }\n    }, 50)\n    // see the note on <e.pointLight theatreKey=\"Light 2\" /> below to understand why we're doing this\n  }, [])\n\n  return (\n    <Canvas\n      gl={{preserveDrawingBuffer: true}}\n      linear\n      frameloop=\"demand\"\n      dpr={[1.5, 2]}\n      style={{position: 'absolute', top: 0, left: 0}}\n    >\n      <SheetProvider\n        sheet={getProject('Playground - R3F', {state}).sheet('R3F-Canvas')}\n      >\n        {/* @ts-ignore */}\n        <PerspectiveCamera makeDefault theatreKey=\"Camera\" />\n        <ambientLight intensity={0.4} />\n        <e.pointLight\n          position={[-10, -10, 5]}\n          intensity={2}\n          color=\"#ff20f0\"\n          theatreKey=\"Light 1\"\n        />\n        <e.pointLight\n          position={[0, 0.5, -1]}\n          distance={1}\n          // the intensity is statically set to 2, but in the state.json file we'll set it to 3,\n          // and we'll use that as a test to make sure the state is being loaded correctly\n          intensity={2}\n          color=\"#e4be00\"\n          theatreKey=\"Light 2\"\n          ref={light2Ref}\n        />\n\n        <group position={[0, -0.9, -3]}>\n          <Plane\n            color=\"hotpink\"\n            rotation-x={-Math.PI / 2}\n            position-z={2}\n            scale={[4, 20, 0.2]}\n            theatreKey=\"plane1\"\n          />\n          <Plane\n            color=\"#e4be00\"\n            rotation-x={-Math.PI / 2}\n            position-y={1}\n            scale={[4.2, 0.2, 4]}\n            theatreKey=\"plane2\"\n          />\n          <Plane\n            color=\"#736fbd\"\n            rotation-x={-Math.PI / 2}\n            position={[-1.7, 1, 3.5]}\n            scale={[0.5, 4, 4]}\n            theatreKey=\"plane3\"\n          />\n          <Plane\n            color=\"white\"\n            rotation-x={-Math.PI / 2}\n            position={[0, 4.5, 3]}\n            scale={[2, 0.03, 4]}\n            theatreKey=\"plane4\"\n          />\n        </group>\n      </SheetProvider>\n    </Canvas>\n  )\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite2/package/src/App/state.json",
    "content": "{\n  \"sheetsById\": {\n    \"R3F-Canvas\": {\n      \"staticOverrides\": {\n        \"byObject\": {\n          \"Light 2\": {\n            \"intensity\": 3\n          }\n        }\n      }\n    }\n  },\n  \"definitionVersion\": \"0.4.0\",\n  \"revisionHistory\": [\n    \"jVNB3VWU34BIQK7M\",\n    \"-NXkC2GceSVBoVqa\",\n    \"Bw7ng1kdcWmMO5DN\"\n  ]\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite2/package/src/main.tsx",
    "content": "import ReactDOM from 'react-dom/client'\nimport studio from '@theatre/studio'\nimport extension from '@theatre/r3f/dist/extension'\nimport App from './App/App'\n\nif (process.env.NODE_ENV === 'development' && typeof window !== 'undefined') {\n  studio.extend(extension)\n  studio.initialize({usePersistentStorage: false})\n}\n\nconst container = document.getElementById('root')!\nconst root = ReactDOM.createRoot(container)\nroot.render(<App />)\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite2/package/src/vite-env.d.ts",
    "content": "/// <reference types=\"vite/client\" />\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite2/package/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"useDefineForClassFields\": true,\n    \"lib\": [\"DOM\", \"DOM.Iterable\", \"ESNext\"],\n    \"allowJs\": false,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": false,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n    \"jsx\": \"react-jsx\"\n  },\n  \"include\": [\"src\"],\n  \"references\": [{\"path\": \"./tsconfig.node.json\"}]\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite2/package/tsconfig.node.json",
    "content": "{\n  \"compilerOptions\": {\n    \"composite\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\"\n  },\n  \"include\": [\"vite.config.ts\"]\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite2/package/vite.config.ts",
    "content": "import {defineConfig} from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite2/vite2.compat-test.ts",
    "content": "// @cspotcode/zx is zx in CommonJS\nimport {$, cd, path, ProcessPromise} from '@cspotcode/zx'\nimport {testServerAndPage} from '../../utils/testUtils'\n\nconst PATH_TO_PACKAGE = path.join(__dirname, `./package`)\n\ndescribe(`vite2`, () => {\n  test(`\\`$ vite build\\` should succeed`, async () => {\n    cd(PATH_TO_PACKAGE)\n    const {exitCode} = await $`npm run build`\n    // at this point, the build should have succeeded\n    expect(exitCode).toEqual(0)\n  })\n\n  describe(`vite preview`, () => {\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`npm run preview -- --port ${port}`\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) => chunk.includes('--host'),\n    })\n  })\n\n  describe(`vite dev`, () => {\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`npm run dev -- --port ${port}`\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) => chunk.includes('--host'),\n    })\n  })\n})\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite4/package/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite4/package/index.html",
    "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    <title>Vite App</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.tsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite4/package/package.json",
    "content": "{\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"tsc && vite build\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"@react-three/drei\": \"^9.80.1\",\n    \"@react-three/fiber\": \"^8.13.6\",\n    \"three\": \"^0.155.0\",\n    \"@theatre/core\": \"0.0.1-COMPAT.1\",\n    \"@theatre/r3f\": \"0.0.1-COMPAT.1\",\n    \"@theatre/studio\": \"0.0.1-COMPAT.1\",\n    \"react\": \"^18.0.0\",\n    \"react-dom\": \"^18.0.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.0.0\",\n    \"@types/react-dom\": \"^18.0.0\",\n    \"@vitejs/plugin-react\": \"^1.3.0\",\n    \"typescript\": \"^4.6.3\",\n    \"vite\": \"^4.4.7\"\n  }\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite4/package/src/App/App.tsx",
    "content": "import {getProject} from '@theatre/core'\nimport React, {useEffect, useRef} from 'react'\nimport {Canvas} from '@react-three/fiber'\nimport {editable as e, SheetProvider, PerspectiveCamera} from '@theatre/r3f'\nimport state from './state.json'\n\n// credit: https://codesandbox.io/s/camera-pan-nsb7f\n\nfunction Plane({color, theatreKey, ...props}: any) {\n  return (\n    <e.mesh {...props} theatreKey={theatreKey}>\n      <boxGeometry />\n      <meshStandardMaterial color={color} />\n    </e.mesh>\n  )\n}\n\nexport default function App() {\n  const light2Ref = useRef<any>()\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      if (!light2Ref.current) return\n\n      clearInterval(interval)\n\n      const intensityInStateJson = 3\n      const currentIntensity = light2Ref.current.intensity\n      if (currentIntensity !== intensityInStateJson) {\n        console.error(`Test failed: light2.intensity is ${currentIntensity}`)\n      } else {\n        console.log(`Test passed: light2.intensity is ${intensityInStateJson}`)\n      }\n    }, 50)\n    // see the note on <e.pointLight theatreKey=\"Light 2\" /> below to understand why we're doing this\n  }, [])\n\n  return (\n    <Canvas\n      gl={{preserveDrawingBuffer: true}}\n      linear\n      frameloop=\"demand\"\n      dpr={[1.5, 2]}\n      style={{position: 'absolute', top: 0, left: 0}}\n    >\n      <SheetProvider\n        sheet={getProject('Playground - R3F', {state}).sheet('R3F-Canvas')}\n      >\n        {/* @ts-ignore */}\n        <PerspectiveCamera makeDefault theatreKey=\"Camera\" />\n        <ambientLight intensity={0.4} />\n        <e.pointLight\n          position={[-10, -10, 5]}\n          intensity={2}\n          color=\"#ff20f0\"\n          theatreKey=\"Light 1\"\n        />\n        <e.pointLight\n          position={[0, 0.5, -1]}\n          distance={1}\n          // the intensity is statically set to 2, but in the state.json file we'll set it to 3,\n          // and we'll use that as a test to make sure the state is being loaded correctly\n          intensity={2}\n          color=\"#e4be00\"\n          theatreKey=\"Light 2\"\n          ref={light2Ref}\n        />\n\n        <group position={[0, -0.9, -3]}>\n          <Plane\n            color=\"hotpink\"\n            rotation-x={-Math.PI / 2}\n            position-z={2}\n            scale={[4, 20, 0.2]}\n            theatreKey=\"plane1\"\n          />\n          <Plane\n            color=\"#e4be00\"\n            rotation-x={-Math.PI / 2}\n            position-y={1}\n            scale={[4.2, 0.2, 4]}\n            theatreKey=\"plane2\"\n          />\n          <Plane\n            color=\"#736fbd\"\n            rotation-x={-Math.PI / 2}\n            position={[-1.7, 1, 3.5]}\n            scale={[0.5, 4, 4]}\n            theatreKey=\"plane3\"\n          />\n          <Plane\n            color=\"white\"\n            rotation-x={-Math.PI / 2}\n            position={[0, 4.5, 3]}\n            scale={[2, 0.03, 4]}\n            theatreKey=\"plane4\"\n          />\n        </group>\n      </SheetProvider>\n    </Canvas>\n  )\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite4/package/src/App/state.json",
    "content": "{\n  \"sheetsById\": {\n    \"R3F-Canvas\": {\n      \"staticOverrides\": {\n        \"byObject\": {\n          \"Light 2\": {\n            \"intensity\": 3\n          }\n        }\n      }\n    }\n  },\n  \"definitionVersion\": \"0.4.0\",\n  \"revisionHistory\": [\n    \"jVNB3VWU34BIQK7M\",\n    \"-NXkC2GceSVBoVqa\",\n    \"Bw7ng1kdcWmMO5DN\"\n  ]\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite4/package/src/main.tsx",
    "content": "import ReactDOM from 'react-dom/client'\nimport studio from '@theatre/studio'\nimport extension from '@theatre/r3f/dist/extension'\nimport App from './App/App'\n\nif (process.env.NODE_ENV === 'development' && typeof window !== 'undefined') {\n  studio.extend(extension)\n  studio.initialize({usePersistentStorage: false})\n}\n\nconst container = document.getElementById('root')!\nconst root = ReactDOM.createRoot(container)\nroot.render(<App />)\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite4/package/src/vite-env.d.ts",
    "content": "/// <reference types=\"vite/client\" />\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite4/package/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"useDefineForClassFields\": true,\n    \"lib\": [\"DOM\", \"DOM.Iterable\", \"ESNext\"],\n    \"allowJs\": false,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": false,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n    \"jsx\": \"react-jsx\"\n  },\n  \"include\": [\"src\"],\n  \"references\": [{ \"path\": \"./tsconfig.node.json\" }]\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite4/package/tsconfig.node.json",
    "content": "{\n  \"compilerOptions\": {\n    \"composite\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\"\n  },\n  \"include\": [\"vite.config.ts\"]\n}\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite4/package/vite.config.ts",
    "content": "import {defineConfig} from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "compat-tests/fixtures/r3f-vite4/vite4.compat-test.ts",
    "content": "// @cspotcode/zx is zx in CommonJS\nimport {$, cd, path, ProcessPromise} from '@cspotcode/zx'\nimport {testServerAndPage} from '../../utils/testUtils'\n\nconst PATH_TO_PACKAGE = path.join(__dirname, `./package`)\n\ndescribe(`vite4`, () => {\n  test(`\\`$ vite build\\` should succeed`, async () => {\n    cd(PATH_TO_PACKAGE)\n    const {exitCode} = await $`npm run build`\n    // at this point, the build should have succeeded\n    expect(exitCode).toEqual(0)\n  })\n\n  describe(`vite preview`, () => {\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`npm run preview -- --port ${port}`\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) => chunk.includes('--host'),\n    })\n  })\n\n  describe(`vite dev`, () => {\n    function startServerOnPort(port: number): ProcessPromise<unknown> {\n      cd(PATH_TO_PACKAGE)\n\n      return $`npm run dev -- --port ${port}`\n    }\n\n    testServerAndPage({\n      startServerOnPort,\n      checkServerStdoutToSeeIfItsReady: (chunk) => chunk.includes('--host'),\n    })\n  })\n})\n"
  },
  {
    "path": "compat-tests/integrity.compat-test.ts",
    "content": "import * as path from 'path'\nimport * as fs from 'fs'\n\ndescribe(`Compat tests`, () => {\n  test(`all fixtures prefixed with 'r3f-' should have an App/ directory identical to that of vite4's`, async () => {\n    const vite4AppDir = path.join(\n      __dirname,\n      './fixtures/r3f-vite4/package/src/App',\n    )\n\n    const vite4FilesContents = fs\n      .readdirSync(vite4AppDir)\n      .map((file) => [\n        file,\n        fs.readFileSync(path.join(vite4AppDir, file), 'utf-8'),\n      ])\n\n    const allFixtures = fs\n      .readdirSync(path.join(__dirname, './fixtures'))\n      .filter(\n        (fixture) =>\n          fixture !== 'r3f-vite4' &&\n          fixture.startsWith('r3f-') &&\n          // item is a folder\n          fs\n            .lstatSync(path.join(__dirname, './fixtures', fixture))\n            .isDirectory(),\n      )\n\n    for (const fixture of allFixtures) {\n      const appDir = path.join(\n        __dirname,\n        `./fixtures/${fixture}/package/src/App`,\n      )\n      if (!fs.existsSync(appDir)) {\n        throw new Error(`Fixture ${fixture} does not have an App/ directory`)\n      }\n      for (const [file, contents] of vite4FilesContents) {\n        const fixtureFileContents = fs.readFileSync(\n          path.join(appDir, file),\n          'utf-8',\n        )\n        if (fixtureFileContents !== contents) {\n          throw new Error(\n            `The file ${file} in fixture ${fixture} is not identical to that of vite4's`,\n          )\n        }\n      }\n    }\n  })\n})\n"
  },
  {
    "path": "compat-tests/package.json",
    "content": "{\n  \"name\": \"@theatre/compat-tests\",\n  \"private\": true,\n  \"scripts\": {\n    \"install-fixtures\": \"tsx ./scripts/install-fixtures.ts\",\n    \"clean\": \"tsx ./scripts/clean.ts\"\n  },\n  \"dependencies\": {\n    \"@cspotcode/zx\": \"^6.1.2\",\n    \"@verdaccio/types\": \"^10.8.0\",\n    \"esbuild\": \"^0.18.18\",\n    \"node-cleanup\": \"^2.1.2\",\n    \"playwright\": \"^1.29.1\",\n    \"prettier\": \"^2.6.2\",\n    \"tsx\": \"4.7.0\",\n    \"verdaccio\": \"^5.26.1\",\n    \"verdaccio-auth-memory\": \"^10.2.2\",\n    \"verdaccio-memory\": \"^10.3.2\"\n  },\n  \"version\": \"0.0.1-COMPAT.1\"\n}\n"
  },
  {
    "path": "compat-tests/scripts/clean.ts",
    "content": "import {clean} from './scripts'\n\nclean()\n"
  },
  {
    "path": "compat-tests/scripts/install-fixtures.ts",
    "content": "import {installFixtures} from './scripts'\n\ninstallFixtures()\n"
  },
  {
    "path": "compat-tests/scripts/scripts.ts",
    "content": "/**\n * Utility functions for the compatibility tests\n */\n\nimport * as prettier from 'prettier'\nimport * as path from 'path'\nimport {globby, argv, YAML, $, fs, cd, os} from '@cspotcode/zx'\nimport onCleanup from 'node-cleanup'\nimport startVerdaccioServer from 'verdaccio'\nimport {defer} from '../utils/testUtils'\n\n/**\n * @param {string} pkg\n * @returns boolean\n */\nconst isTheatreDependency = (pkg) =>\n  pkg.startsWith('@theatre/') || pkg === 'theatric'\n\nconst verbose = !!argv['verbose']\n\nif (!verbose) {\n  $.verbose = false\n  console.log(\n    'Running in quiet mode. Add --verbose to see the output of all commands.',\n  )\n}\n\nconst config = {\n  VERDACCIO_PORT: 4823,\n  VERDACCIO_HOST: `localhost`,\n  get VERDACCIO_URL() {\n    return `http://${config.VERDACCIO_HOST}:${config.VERDACCIO_PORT}/`\n  },\n  PATH_TO_COMPAT_TESTS_ROOT: path.join(__dirname, '..'),\n  MONOREPO_ROOT: path.join(__dirname, '../..'),\n}\n\n/**\n * Set environment variables so that yarn and npm use verdaccio as the registry.\n * These are only set for the current process.\n */\nprocess.env.YARN_NPM_PUBLISH_REGISTRY = config.VERDACCIO_URL\nprocess.env.YARN_UNSAFE_HTTP_WHITELIST = config.VERDACCIO_HOST\nprocess.env.YARN_NPM_AUTH_IDENT = 'test:test'\nprocess.env.NPM_CONFIG_REGISTRY = config.VERDACCIO_URL\n\nconst tempVersion =\n  '0.0.1-COMPAT.' +\n  (typeof argv['version'] === 'number'\n    ? argv['version'].toString()\n    : // a random integer between 1 and 50000\n      (Math.floor(Math.random() * 50000) + 1).toString())\n\nconst keepAlive = !!argv['keep-alive']\n\n/**\n * This script starts verdaccio and publishes all the packages in the monorepo to it, then\n * it runs `npm install` on all the test packages, and finally it closes verdaccio.\n */\nexport async function installFixtures(): Promise<void> {\n  onCleanup((exitCode, signal) => {\n    onCleanup.uninstall()\n    restoreTestPackageJsons()\n    process.kill(process.pid, signal)\n    return false\n  })\n\n  console.log(\n    `Using temporary version: ${tempVersion} . Use --version=[NUMBER] to change.`,\n  )\n  console.log('Patching package.json files in ./test-*')\n  const restoreTestPackageJsons = await patchTestPackageJsons()\n\n  console.log('Starting verdaccio')\n  const verdaccioServer = await startVerdaccio(config.VERDACCIO_PORT)\n  console.log(`Verdaccio is running on ${config.VERDACCIO_URL}`)\n\n  console.log('Releasing @theatre/* packages to verdaccio')\n  await releaseToVerdaccio()\n\n  console.log('Running `$ npm install` on test packages')\n  await runNpmInstallOnTestPackages()\n\n  restoreTestPackageJsons()\n\n  if (keepAlive) {\n    console.log('Keeping verdaccio alive. Press Ctrl+C to exit.')\n    // wait for ctrl+c\n    await new Promise((resolve) => {})\n  } else {\n    console.log('Closing verdaccio. Use --keep-alive to keep it running.')\n    await verdaccioServer.close()\n  }\n  console.log('Done')\n}\n\nasync function runNpmInstallOnTestPackages() {\n  const packagePaths = await getCompatibilityTestSetups()\n\n  const promises = packagePaths.map(async (pathToPackageDir) => {\n    await fs.remove(path.join(pathToPackageDir, 'node_modules'))\n    await fs.remove(path.join(pathToPackageDir, 'package-lock.json'))\n    cd(path.join(pathToPackageDir, '../'))\n    const tempPath = fs.mkdtempSync(\n      path.join(os.tmpdir(), 'theatre-compat-test-'),\n    )\n    await fs.copy(pathToPackageDir, tempPath)\n\n    cd(path.join(tempPath))\n    try {\n      console.log('Running npm install on ' + pathToPackageDir + '...')\n      await $`npm install --registry ${config.VERDACCIO_URL} --loglevel ${\n        verbose ? 'warn' : 'error'\n      } --fund false`\n\n      console.log('npm install finished successfully in' + tempPath)\n\n      await fs.move(\n        path.join(tempPath, 'node_modules'),\n        path.join(pathToPackageDir, 'node_modules'),\n      )\n      await fs.move(\n        path.join(tempPath, 'package-lock.json'),\n        path.join(pathToPackageDir, 'package-lock.json'),\n      )\n    } catch (error) {\n      console.error(`Failed to install dependencies for ${pathToPackageDir}\nTry running \\`npm install\\` in that directory manually via:\ncd ${pathToPackageDir}\nnpm install --registry ${config.VERDACCIO_URL}\nOriginal error: ${error}`)\n      throw new Error(`Failed to install dependencies for ${pathToPackageDir}`)\n    } finally {\n      await fs.remove(tempPath)\n    }\n  })\n\n  const result = await Promise.allSettled(promises)\n  const failed = result.filter((x) => x.status === 'rejected')\n  if (failed.length > 0) {\n    console.error(\n      `Failed to install dependencies for the following packages:`,\n      result\n        .map((result, i) => [packagePaths[i], result])\n        .filter(\n          ([p, result]) =>\n            // @ts-ignore\n            result.status === 'rejected',\n        )\n        .map(([path]) => path),\n    )\n  }\n}\n\n/**\n * Takes an absolute path to a package.json file and replaces all of its\n * dependencies on `@theatre/*` packatges to `version`.\n *\n * @param {string} pathToPackageJson absolute path to the package.json file\n * @param {string} version The version to set all `@theatre/*` dependencies to\n */\nasync function patchTheatreDependencies(pathToPackageJson, version) {\n  const originalFileContent = fs.readFileSync(pathToPackageJson, {\n    encoding: 'utf-8',\n  })\n  // get the package.json file's content\n  const packageJson = JSON.parse(originalFileContent)\n\n  // find all dependencies on '@theatre/*' packages and replace them with the local version\n  for (const dependencyType of [\n    'dependencies',\n    'devDependencies',\n    'peerDependencies',\n  ]) {\n    const dependencies = packageJson[dependencyType]\n    if (dependencies) {\n      for (const dependencyName of Object.keys(dependencies)) {\n        if (isTheatreDependency(dependencyName)) {\n          dependencies[dependencyName] = version\n        }\n      }\n    }\n  }\n  // run the json through prettier\n  const jsonStringPrettified = await prettier.format(\n    JSON.stringify(packageJson, null, 2),\n    {\n      parser: 'json',\n      filepath: pathToPackageJson,\n    },\n  )\n\n  // write the modified package.json file\n  fs.writeFileSync(pathToPackageJson, jsonStringPrettified, {encoding: 'utf-8'})\n}\n\nasync function patchTestPackageJsons(): Promise<() => void> {\n  const packagePaths = (await getCompatibilityTestSetups()).map(\n    (pathToPackageDir) => path.join(pathToPackageDir, 'package.json'),\n  )\n\n  // replace all dependencies on @theatre/* packages with the local version\n  for (const pathToPackageJson of packagePaths) {\n    patchTheatreDependencies(pathToPackageJson, tempVersion)\n  }\n\n  return () => {\n    // replace all dependencies on @theatre/* packages with the 0.0.1-COMPAT.1\n    for (const pathToPackageJson of packagePaths) {\n      patchTheatreDependencies(pathToPackageJson, '0.0.1-COMPAT.1')\n    }\n  }\n}\n\n/**\n * Starts the verdaccio server and returns a promise that resolves when the serve is up and ready\n *\n * Credit: https://github.com/storybookjs/storybook/blob/92b23c080d03433765cbc7a60553d036a612a501/scripts/run-registry.ts\n */\nasync function startVerdaccio(port: number): Promise<{close: () => void}> {\n  let resolved = false\n\n  const deferred = defer<{close: () => void}>()\n\n  const config = {\n    ...YAML.parse(\n      fs.readFileSync(path.join(__dirname, '../verdaccio.yml'), 'utf8'),\n    ),\n  }\n\n  if (verbose) {\n    config.logs.level = 'warn'\n  }\n\n  const cache = path.join(__dirname, '../.verdaccio-cache')\n\n  config.self_path = cache\n\n  startVerdaccioServer(\n    config,\n    '6000',\n    cache,\n    '1.0.0',\n    'verdaccio',\n    (webServer) => {\n      webServer.listen(port, () => {\n        resolved = true\n        deferred.resolve(webServer)\n      })\n    },\n  )\n\n  await Promise.race([\n    deferred.promise,\n    new Promise((_, rej) => {\n      setTimeout(() => {\n        rej(new Error(`TIMEOUT - verdaccio didn't start within 10s`))\n      }, 10000)\n    }),\n  ])\n\n  return deferred.promise\n}\n\nconst packagesToPublish = [\n  '@theatre/core',\n  '@theatre/studio',\n  '@theatre/dataverse',\n  '@theatre/react',\n  '@theatre/browser-bundles',\n  '@theatre/r3f',\n  'theatric',\n]\n\n/**\n * Assigns a new version to each of @theatre/* packages. If there a package depends on another package in this monorepo,\n * this function makes sure the dependency version is fixed at \"version\"\n *\n * @param workspacesListObjects - An Array of objects containing information about the workspaces\n * @param version - Version of the latest commit (or any other string)\n * @returns - An async function that restores the package.json files to their original version\n */\nasync function writeVersionsToPackageJSONs(\n  workspacesListObjects: Array<{name: string; location: string}>,\n  version: string,\n): Promise<() => void> {\n  /**\n   * An array of functions each of which restores a certain package.json to its original state\n   * @type {Array<() => void>}\n   */\n  const restores = []\n  for (const workspaceData of workspacesListObjects) {\n    const pathToPackage = path.resolve(\n      config.MONOREPO_ROOT,\n      workspaceData.location,\n      './package.json',\n    )\n\n    const originalFileContent = fs.readFileSync(pathToPackage, {\n      encoding: 'utf-8',\n    })\n    const originalJson = JSON.parse(originalFileContent)\n\n    restores.push(() => {\n      fs.writeFileSync(pathToPackage, originalFileContent, {encoding: 'utf-8'})\n    })\n\n    let {dependencies, peerDependencies, devDependencies} = originalJson\n\n    // Normally we don't have to override the package versions in dependencies because yarn would already convert\n    // all the \"workspace:*\" versions to a fixed version before publishing. However, packages like @theatre/studio\n    // have a peerDependency on @theatre/core set to \"*\" (meaning they would work with any version of @theatre/core).\n    // This is not the desired behavior in pre-release versions, so here, we'll fix those \"*\" versions to the set version.\n    for (const deps of [dependencies, peerDependencies, devDependencies]) {\n      if (!deps) continue\n      for (const wpObject of workspacesListObjects) {\n        if (deps[wpObject.name]) {\n          deps[wpObject.name] = version\n        }\n      }\n    }\n    const newJson = {\n      ...originalJson,\n      version,\n      dependencies,\n      peerDependencies,\n      devDependencies,\n    }\n    fs.writeFileSync(pathToPackage, JSON.stringify(newJson, undefined, 2), {\n      encoding: 'utf-8',\n    })\n  }\n  return () =>\n    restores.forEach((fn) => {\n      fn()\n    })\n}\n\n/**\n * Builds all the @theatre/* packages with version number 0.0.1-COMPAT.1 and publishes\n * them all to the verdaccio registry\n */\nasync function releaseToVerdaccio() {\n  cd(config.MONOREPO_ROOT)\n\n  // @ts-ignore ignore\n  process.env.THEATRE_IS_PUBLISHING = true\n\n  const workspacesListString = await $`yarn workspaces list --json`\n  const workspacesListObjects = workspacesListString.stdout\n    .split(os.EOL)\n    // strip out empty lines\n    .filter(Boolean)\n    .map((x) => JSON.parse(x))\n\n  const restorePackages = await writeVersionsToPackageJSONs(\n    workspacesListObjects,\n    tempVersion,\n  )\n\n  // Restore the package.json files to their original state when the process is killed\n  process.on('SIGINT', async function cleanup(a) {\n    restorePackages()\n  })\n\n  try {\n    await $`yarn cli build clean`\n    await $`yarn cli build`\n\n    await Promise.all(\n      packagesToPublish.map(async (workspaceName) => {\n        const npmTag = 'compat'\n        await $`yarn workspace ${workspaceName} npm publish --access public --tag ${npmTag}`\n      }),\n    )\n  } finally {\n    restorePackages()\n  }\n}\n\n/**\n * Get all the setups from `./compat-tests/`\n *\n * @returns An array containing the absolute paths to the compatibility test setups\n */\nexport async function getCompatibilityTestSetups(): Promise<Array<string>> {\n  const fixturePackageJsonFiles = await globby(\n    './fixtures/*/package/package.json',\n    {\n      cwd: config.PATH_TO_COMPAT_TESTS_ROOT,\n      gitignore: false,\n      onlyFiles: true,\n    },\n  )\n\n  return fixturePackageJsonFiles.map((entry) => {\n    return path.join(config.PATH_TO_COMPAT_TESTS_ROOT, entry, '../')\n  })\n}\n\n/**\n * Deletes ../test-*\\/(node_modules|package-lock.json|yarn.lock)\n */\nexport async function clean() {\n  const toDelete = await globby(\n    './fixtures/*/package/(node_modules|yarn.lock|package-lock.json|.parcel-cache)',\n    {\n      cwd: config.PATH_TO_COMPAT_TESTS_ROOT,\n      // node_modules et al are gitignored, but we still want to clean them\n      gitignore: false,\n      // include directories too\n      onlyFiles: false,\n    },\n  )\n\n  return await Promise.all(\n    toDelete.map((fileOrDir) => {\n      console.log('deleting', fileOrDir)\n      return fs.remove(path.join(config.PATH_TO_COMPAT_TESTS_ROOT, fileOrDir))\n    }),\n  )\n}\n"
  },
  {
    "path": "compat-tests/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \".\",\n    \"types\": [\"jest\", \"node\"],\n    \"target\": \"es6\",\n    \"noEmit\": true,\n    \"composite\": true,\n    \"moduleResolution\": \"node\",\n    \"skipLibCheck\": true\n  },\n  \"include\": [\n    \"./scripts/*.ts\",\n    \"./*.compat-test.ts\",\n    \"./fixtures/*/*.compat-test.ts\",\n    \"./utils/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "compat-tests/utils/testUtils.ts",
    "content": "import {Browser, chromium, ConsoleMessage, devices, Page} from 'playwright'\nimport {ProcessPromise} from '@cspotcode/zx'\n\nexport function testServerAndPage({\n  startServerOnPort,\n  checkServerStdoutToSeeIfItsReady,\n}: {\n  startServerOnPort: (port: number) => ProcessPromise<unknown>\n\n  checkServerStdoutToSeeIfItsReady: (chunk: string) => boolean\n}) {\n  if (checkServerStdoutToSeeIfItsReady('') !== false) {\n    throw new Error(\n      `Incorrect test setup. checkServerStdoutToSeeIfItsReady should return false for an empty string.`,\n    )\n  }\n  const waitTilServerIsReady = async (\n    process: ProcessPromise<unknown>,\n  ): Promise<void> => {\n    const d = defer<void>()\n\n    process.stdout.on('data', (chunk) => {\n      if (checkServerStdoutToSeeIfItsReady(chunk.toString())) {\n        //  server is ready\n        d.resolve()\n      }\n    })\n\n    await Promise.race([\n      d.promise,\n      new Promise((_, reject) =>\n        setTimeout(\n          () => reject(`Server wasn't ready after two minutes`),\n          1000 * 60 * 2,\n        ),\n      ),\n    ])\n\n    return d.promise\n  }\n  let browser: Browser, page: Page\n  beforeAll(async () => {\n    browser = await chromium.launch()\n  })\n  afterAll(async () => {\n    await browser.close()\n  })\n  beforeEach(async () => {\n    page = await browser.newPage()\n  })\n  afterEach(async () => {\n    await page.close()\n  })\n\n  test('The server runs, and the r3f setup works', async () => {\n    // run the production server but don't wait for it to finish\n\n    // just a random port I'm hoping is free everywhere.\n    const port = await findOpenPort()\n    let process: ProcessPromise<unknown> | undefined\n    try {\n      process = startServerOnPort(port)\n    } catch (err) {\n      throw new Error(`Failed to start server: ${err}`)\n    }\n\n    const url = `http://localhost:${port}`\n\n    try {\n      await waitTilServerIsReady(process)\n\n      await testTheatreOnPage(page, {url})\n    } finally {\n      // kill the server\n      await process.kill('SIGTERM')\n    }\n\n    try {\n      await process\n    } catch (e) {\n      if (e.signal !== 'SIGTERM') {\n        console.log('process exited with error', e)\n\n        // if it exited for any reason other than us killing it, re-throw the error\n        throw e\n      }\n      // otherwise, process exited because we killed it, which is what we wanted\n    }\n  })\n}\n\nasync function testTheatreOnPage(page: Page, {url}: {url: string}) {\n  const d = defer<string>()\n\n  const processConsoleEvents = (msg: ConsoleMessage) => {\n    const text = msg.text()\n    if (text.startsWith('Test passed: light2.intensity')) {\n      d.resolve('Passed')\n    } else if (text.startsWith('Test failed: light2.intensity')) {\n      d.reject(text)\n    }\n  }\n\n  page.on('console', processConsoleEvents)\n\n  try {\n    await page.goto(url, {\n      waitUntil: 'domcontentloaded',\n      timeout: 1000 * 60 * 2,\n    })\n\n    // give the console listener 3 seconds to resolve, otherwise fail the test\n    await Promise.race([\n      d.promise,\n      new Promise((_, reject) =>\n        setTimeout(\n          () => reject('Did not intercept any test-related console logs'),\n          30000,\n        ),\n      ),\n    ])\n  } finally {\n    page.off('console', processConsoleEvents)\n  }\n}\n\nexport function findOpenPort(): Promise<number> {\n  return new Promise<number>((resolve, reject) => {\n    const server = require('net').createServer()\n    server.unref()\n    server.on('error', reject)\n    server.listen(0, () => {\n      const {port} = server.address() as {port: number}\n      server.close(() => {\n        resolve(port)\n      })\n    })\n  })\n}\n\ninterface Deferred<PromiseType> {\n  resolve: (d: PromiseType) => void\n  reject: (d: unknown) => void\n  promise: Promise<PromiseType>\n  status: 'pending' | 'resolved' | 'rejected'\n}\n\n/**\n * A simple imperative API for resolving/rejecting a promise.\n *\n * Example:\n * ```ts\n * function doSomethingAsync() {\n *  const deferred = defer()\n *\n *  setTimeout(() => {\n *    if (Math.random() > 0.5) {\n *      deferred.resolve('success')\n *    } else {\n *      deferred.reject('Something went wrong')\n *    }\n *  }, 1000)\n *\n *  // we're just returning the promise, so that the caller cannot resolve/reject it\n *  return deferred.promise\n * }\n *\n * ```\n */\nexport function defer<PromiseType>(): Deferred<PromiseType> {\n  let resolve: (d: PromiseType) => void\n  let reject: (d: unknown) => void\n  const promise = new Promise<PromiseType>((rs, rj) => {\n    resolve = (v) => {\n      rs(v)\n      deferred.status = 'resolved'\n    }\n    reject = (v) => {\n      rj(v)\n      deferred.status = 'rejected'\n    }\n  })\n\n  const deferred: Deferred<PromiseType> = {\n    resolve: resolve!,\n    reject: reject!,\n    promise,\n    status: 'pending',\n  }\n  return deferred\n}\n"
  },
  {
    "path": "compat-tests/verdaccio.yml",
    "content": "store:\n  memory:\n    limit: 10000\nauth:\n  auth-memory:\n    users:\n      test:\n        name: test\n        password: test\nuplinks:\n  npmjs:\n    url: https://registry.npmjs.org/\n    cache: false\npackages:\n  '@theatre/*':\n    access: $all\n    publish: $all\n  'theatric':\n    access: $all\n    publish: $all\n  '@*/*':\n    access: $all\n    publish: $all\n    proxy: npmjs\n  '**':\n    access: $all\n    proxy: npmjs\nlogs:\n  type: stdout\n  format: pretty\n  level: error\n"
  },
  {
    "path": "credits.txt",
    "content": "The color picker is a fork of https://github.com/omgovich/react-colorful"
  },
  {
    "path": "devEnv/api-extractor-base.json",
    "content": "/**\n * Config file for API Extractor.  For more info, please visit: https://api-extractor.com\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json\",\n\n  /**\n   * Optionally specifies another JSON config file that this file extends from.  This provides a way for\n   * standard settings to be shared across multiple projects.\n   *\n   * If the path starts with \"./\" or \"../\", the path is resolved relative to the folder of the file that contains\n   * the \"extends\" field.  Otherwise, the first path segment is interpreted as an NPM package name, and will be\n   * resolved using NodeJS require().\n   *\n   * SUPPORTED TOKENS: none\n   * DEFAULT VALUE: \"\"\n   */\n  // \"extends\": \"./shared/api-extractor-base.json\"\n  // \"extends\": \"my-package/include/api-extractor-base.json\"\n\n  /**\n   * Determines the \"<projectFolder>\" token that can be used with other config file settings.  The project folder\n   * typically contains the tsconfig.json and package.json config files, but the path is user-defined.\n   *\n   * The path is resolved relative to the folder of the config file that contains the setting.\n   *\n   * The default value for \"projectFolder\" is the token \"<lookup>\", which means the folder is determined by traversing\n   * parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder\n   * that contains a tsconfig.json file.  If a tsconfig.json file cannot be found in this way, then an error\n   * will be reported.\n   *\n   * SUPPORTED TOKENS: <lookup>\n   * DEFAULT VALUE: \"<lookup>\"\n   */\n  // \"projectFolder\": \".\",\n\n  /**\n   * (REQUIRED) Specifies the .d.ts file to be used as the starting point for analysis.  API Extractor\n   * analyzes the symbols exported by this module.\n   *\n   * The file extension must be \".d.ts\" and not \".ts\".\n   *\n   * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n   * prepend a folder token such as \"<projectFolder>\".\n   *\n   * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n   */\n  \"mainEntryPointFilePath\": \"<projectFolder>/dist/index.d.ts\",\n\n  /**\n   * A list of NPM package names whose exports should be treated as part of this package.\n   *\n   * For example, suppose that Webpack is used to generate a distributed bundle for the project \"library1\",\n   * and another NPM package \"library2\" is embedded in this bundle.  Some types from library2 may become part\n   * of the exported API for library1, but by default API Extractor would generate a .d.ts rollup that explicitly\n   * imports library2.  To avoid this, we can specify:\n   *\n   *   \"bundledPackages\": [ \"library2\" ],\n   *\n   * This would direct API Extractor to embed those types directly in the .d.ts rollup, as if they had been\n   * local files for library1.\n   */\n  \"bundledPackages\": [],\n\n  /**\n   * Determines how the TypeScript compiler engine will be invoked by API Extractor.\n   */\n  \"compiler\": {\n    /**\n     * Specifies the path to the tsconfig.json file to be used by API Extractor when analyzing the project.\n     *\n     * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n     * prepend a folder token such as \"<projectFolder>\".\n     *\n     * Note: This setting will be ignored if \"overrideTsconfig\" is used.\n     *\n     * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n     * DEFAULT VALUE: \"<projectFolder>/tsconfig.json\"\n     */\n    \"tsconfigFilePath\": \"<projectFolder>/devEnv/api-extractor.tsconfig.json\"\n    /**\n     * Provides a compiler configuration that will be used instead of reading the tsconfig.json file from disk.\n     * The object must conform to the TypeScript tsconfig schema:\n     *\n     * http://json.schemastore.org/tsconfig\n     *\n     * If omitted, then the tsconfig.json file will be read from the \"projectFolder\".\n     *\n     * DEFAULT VALUE: no overrideTsconfig section\n     */\n    // \"overrideTsconfig\": {\n    //   \"compilerOptions\": {\n    //     \"paths\": {\n    //     }\n    //   }\n    // }\n    /**\n     * This option causes the compiler to be invoked with the --skipLibCheck option. This option is not recommended\n     * and may cause API Extractor to produce incomplete or incorrect declarations, but it may be required when\n     * dependencies contain declarations that are incompatible with the TypeScript engine that API Extractor uses\n     * for its analysis.  Where possible, the underlying issue should be fixed rather than relying on skipLibCheck.\n     *\n     * DEFAULT VALUE: false\n     */\n    // \"skipLibCheck\": true,\n  },\n\n  /**\n   * Configures how the API report file (*.api.md) will be generated.\n   */\n  \"apiReport\": {\n    /**\n     * (REQUIRED) Whether to generate an API report.\n     */\n    \"enabled\": false\n\n    /**\n     * The filename for the API report files.  It will be combined with \"reportFolder\" or \"reportTempFolder\" to produce\n     * a full file path.\n     *\n     * The file extension should be \".api.md\", and the string should not contain a path separator such as \"\\\" or \"/\".\n     *\n     * SUPPORTED TOKENS: <packageName>, <unscopedPackageName>\n     * DEFAULT VALUE: \"<unscopedPackageName>.api.md\"\n     */\n    // \"reportFileName\": \"<unscopedPackageName>.api.md\",\n\n    /**\n     * Specifies the folder where the API report file is written.  The file name portion is determined by\n     * the \"reportFileName\" setting.\n     *\n     * The API report file is normally tracked by Git.  Changes to it can be used to trigger a branch policy,\n     * e.g. for an API review.\n     *\n     * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n     * prepend a folder token such as \"<projectFolder>\".\n     *\n     * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n     * DEFAULT VALUE: \"<projectFolder>/etc/\"\n     */\n    // \"reportFolder\": \"<projectFolder>/etc/\",\n\n    /**\n     * Specifies the folder where the temporary report file is written.  The file name portion is determined by\n     * the \"reportFileName\" setting.\n     *\n     * After the temporary file is written to disk, it is compared with the file in the \"reportFolder\".\n     * If they are different, a production build will fail.\n     *\n     * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n     * prepend a folder token such as \"<projectFolder>\".\n     *\n     * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n     * DEFAULT VALUE: \"<projectFolder>/temp/\"\n     */\n    // \"reportTempFolder\": \"<projectFolder>/temp/\"\n  },\n\n  /**\n   * Configures how the doc model file (*.api.json) will be generated.\n   */\n  \"docModel\": {\n    /**\n     * (REQUIRED) Whether to generate a doc model file.\n     */\n    \"enabled\": true,\n\n    /**\n     * The output path for the doc model file.  The file extension should be \".api.json\".\n     *\n     * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n     * prepend a folder token such as \"<projectFolder>\".\n     *\n     * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n     * DEFAULT VALUE: \"<projectFolder>/temp/<unscopedPackageName>.api.json\"\n     */\n    \"apiJsonFilePath\": \"../.temp/api/<unscopedPackageName>.api.json\"\n  },\n\n  /**\n   * Configures how the .d.ts rollup file will be generated.\n   */\n  \"dtsRollup\": {\n    /**\n     * (REQUIRED) Whether to generate the .d.ts rollup file.\n     */\n    \"enabled\": false\n\n    /**\n     * Specifies the output path for a .d.ts rollup file to be generated without any trimming.\n     * This file will include all declarations that are exported by the main entry point.\n     *\n     * If the path is an empty string, then this file will not be written.\n     *\n     * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n     * prepend a folder token such as \"<projectFolder>\".\n     *\n     * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n     * DEFAULT VALUE: \"<projectFolder>/dist/<unscopedPackageName>.d.ts\"\n     */\n    // \"untrimmedFilePath\": \"<projectFolder>/dist/<unscopedPackageName>.d.ts\",\n\n    /**\n     * Specifies the output path for a .d.ts rollup file to be generated with trimming for a \"beta\" release.\n     * This file will include only declarations that are marked as \"@public\" or \"@beta\".\n     *\n     * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n     * prepend a folder token such as \"<projectFolder>\".\n     *\n     * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n     * DEFAULT VALUE: \"\"\n     */\n    // \"betaTrimmedFilePath\": \"<projectFolder>/dist/<unscopedPackageName>-beta.d.ts\",\n\n    /**\n     * Specifies the output path for a .d.ts rollup file to be generated with trimming for a \"public\" release.\n     * This file will include only declarations that are marked as \"@public\".\n     *\n     * If the path is an empty string, then this file will not be written.\n     *\n     * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n     * prepend a folder token such as \"<projectFolder>\".\n     *\n     * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n     * DEFAULT VALUE: \"\"\n     */\n    // \"publicTrimmedFilePath\": \"<projectFolder>/dist/<unscopedPackageName>-public.d.ts\",\n\n    /**\n     * When a declaration is trimmed, by default it will be replaced by a code comment such as\n     * \"Excluded from this release type: exampleMember\".  Set \"omitTrimmingComments\" to true to remove the\n     * declaration completely.\n     *\n     * DEFAULT VALUE: false\n     */\n    // \"omitTrimmingComments\": true\n  },\n\n  /**\n   * Configures how the tsdoc-metadata.json file will be generated.\n   */\n  \"tsdocMetadata\": {\n    /**\n     * Whether to generate the tsdoc-metadata.json file.\n     *\n     * DEFAULT VALUE: true\n     */\n    // \"enabled\": true,\n    /**\n     * Specifies where the TSDoc metadata file should be written.\n     *\n     * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n     * prepend a folder token such as \"<projectFolder>\".\n     *\n     * The default value is \"<lookup>\", which causes the path to be automatically inferred from the \"tsdocMetadata\",\n     * \"typings\" or \"main\" fields of the project's package.json.  If none of these fields are set, the lookup\n     * falls back to \"tsdoc-metadata.json\" in the package folder.\n     *\n     * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n     * DEFAULT VALUE: \"<lookup>\"\n     */\n    // \"tsdocMetadataFilePath\": \"<projectFolder>/dist/tsdoc-metadata.json\"\n  },\n\n  /**\n   * Specifies what type of newlines API Extractor should use when writing output files.  By default, the output files\n   * will be written with Windows-style newlines.  To use POSIX-style newlines, specify \"lf\" instead.\n   * To use the OS's default newline kind, specify \"os\".\n   *\n   * DEFAULT VALUE: \"crlf\"\n   */\n  // \"newlineKind\": \"crlf\",\n\n  /**\n   * Configures how API Extractor reports error and warning messages produced during analysis.\n   *\n   * There are three sources of messages:  compiler messages, API Extractor messages, and TSDoc messages.\n   */\n  \"messages\": {\n    /**\n     * Configures handling of diagnostic messages reported by the TypeScript compiler engine while analyzing\n     * the input .d.ts files.\n     *\n     * TypeScript message identifiers start with \"TS\" followed by an integer.  For example: \"TS2551\"\n     *\n     * DEFAULT VALUE:  A single \"default\" entry with logLevel=warning.\n     */\n    \"compilerMessageReporting\": {\n      /**\n       * Configures the default routing for messages that don't match an explicit rule in this table.\n       */\n      \"default\": {\n        /**\n         * Specifies whether the message should be written to the the tool's output log.  Note that\n         * the \"addToApiReportFile\" property may supersede this option.\n         *\n         * Possible values: \"error\", \"warning\", \"none\"\n         *\n         * Errors cause the build to fail and return a nonzero exit code.  Warnings cause a production build fail\n         * and return a nonzero exit code.  For a non-production build (e.g. when \"api-extractor run\" includes\n         * the \"--local\" option), the warning is displayed but the build will not fail.\n         *\n         * DEFAULT VALUE: \"warning\"\n         */\n        \"logLevel\": \"warning\"\n\n        /**\n         * When addToApiReportFile is true:  If API Extractor is configured to write an API report file (.api.md),\n         * then the message will be written inside that file; otherwise, the message is instead logged according to\n         * the \"logLevel\" option.\n         *\n         * DEFAULT VALUE: false\n         */\n        // \"addToApiReportFile\": false\n      }\n\n      // \"TS2551\": {\n      //   \"logLevel\": \"warning\",\n      //   \"addToApiReportFile\": true\n      // },\n      //\n      // . . .\n    },\n\n    /**\n     * Configures handling of messages reported by API Extractor during its analysis.\n     *\n     * API Extractor message identifiers start with \"ae-\".  For example: \"ae-extra-release-tag\"\n     *\n     * DEFAULT VALUE: See api-extractor-defaults.json for the complete table of extractorMessageReporting mappings\n     */\n    \"extractorMessageReporting\": {\n      \"default\": {\n        // let's configure message reporting later\n        \"logLevel\": \"warning\"\n        // \"addToApiReportFile\": false\n      },\n\n      \"ae-missing-release-tag\": {\n        \"logLevel\": \"none\"\n      },\n      \"ae-forgotten-export\": {\n        \"logLevel\": \"warning\"\n      }\n\n      // \"ae-extra-release-tag\": {\n      //   \"logLevel\": \"warning\",\n      //   \"addToApiReportFile\": true\n      // },\n      //\n      // . . .\n    },\n\n    /**\n     * Configures handling of messages reported by the TSDoc parser when analyzing code comments.\n     *\n     * TSDoc message identifiers start with \"tsdoc-\".  For example: \"tsdoc-link-tag-unescaped-text\"\n     *\n     * DEFAULT VALUE:  A single \"default\" entry with logLevel=warning.\n     */\n    \"tsdocMessageReporting\": {\n      \"default\": {\n        \"logLevel\": \"warning\"\n        // \"addToApiReportFile\": false\n      }\n\n      // \"tsdoc-link-tag-unescaped-text\": {\n      //   \"logLevel\": \"warning\",\n      //   \"addToApiReportFile\": true\n      // },\n      //\n      // . . .\n    }\n  }\n}\n"
  },
  {
    "path": "devEnv/cli.ts",
    "content": "import sade from 'sade'\nimport {$, fs, path, question} from '@cspotcode/zx'\nimport * as core from '@actions/core'\nimport * as os from 'os'\n\nconst root = path.join(__dirname, '..')\n\nconst prog = sade('cli').describe('CLI for Theatre.js development')\n\n// better quote function from https://github.com/google/zx/pull/167\n$.quote = function quote(arg) {\n  if (/^[a-z0-9/_.-]+$/i.test(arg)) {\n    return arg\n  }\n  return (\n    `$'` +\n    arg\n      .replace(/\\\\/g, '\\\\\\\\')\n      .replace(/'/g, \"\\\\'\")\n      .replace(/\\f/g, '\\\\f')\n      .replace(/\\n/g, '\\\\n')\n      .replace(/\\r/g, '\\\\r')\n      .replace(/\\t/g, '\\\\t')\n      .replace(/\\v/g, '\\\\v')\n      .replace(/\\0/g, '\\\\0') +\n    `'`\n  )\n}\n\nconst packagesToBuild = [\n  '@theatre/dataverse',\n  '@theatre/saaz',\n  '@theatre/core',\n  '@theatre/studio',\n  '@theatre/react',\n  '@theatre/r3f',\n  'theatric',\n  '@theatre/browser-bundles',\n]\n\nprog\n  .command(\n    'build clean',\n    'Cleans the build artifacts and output directories of all the main packages',\n  )\n  .action(async () => {\n    const packages = [...packagesToBuild]\n\n    await Promise.all([\n      ...packages.map((workspace) => $`yarn workspace ${workspace} run clean`),\n    ])\n  })\n\nprog.command('build', 'Builds all the main packages').action(async () => {\n  async function build() {\n    await $`yarn run build:ts`\n    for (const workspace of packagesToBuild) {\n      await $`yarn workspace ${workspace} run build`\n    }\n  }\n\n  void build()\n})\n\nprog\n  .command('release <version>', 'Releases all the main packages to npm')\n  .option('--skip-ts', 'Skip emitting typescript declarations')\n  .option('--skip-lint', 'Skip typecheck and lint')\n  .action(async (version, opts) => {\n    /**\n     * This script publishes all packages to npm.\n     *\n     * It assigns the same version number to all packages (like lerna's fixed mode).\n     **/\n\n    const packagesToPublish = [...packagesToBuild]\n\n    /**\n     * All these packages will have the same version from monorepo/package.json\n     */\n    const packagesWhoseVersionsShouldBump = ['.', ...packagesToPublish]\n\n    // our packages will check for this env variable to make sure their\n    // prepublish script is only called from the `$ cd /path/to/monorepo; yarn run release`\n    // @ts-ignore ignore\n    process.env.THEATRE_IS_PUBLISHING = true\n\n    async function release() {\n      $.verbose = false\n      const gitTags = (await $`git tag --list`).toString().split('\\n')\n\n      if (typeof version !== 'string') {\n        console.error(\n          `You need to specify a version, like: $ yarn cli release 1.2.0-rc.4`,\n        )\n        process.exit(1)\n      } else if (\n        !version.match(/^[0-9]+\\.[0-9]+\\.[0-9]+(\\-(dev|rc)\\.[0-9]+)?$/)\n      ) {\n        console.error(\n          `Use a semver version, like 1.2.3-rc.4. Provided: ${version}`,\n        )\n        process.exit(1)\n      }\n\n      const previousVersion = require('../package.json').version\n\n      if (version === previousVersion) {\n        console.error(\n          `Version ${version} is already assigned to root/package.json`,\n        )\n        process.exit(1)\n      }\n\n      if (gitTags.some((tag) => tag === version)) {\n        console.error(`There is already a git tag for version ${version}`)\n        process.exit(1)\n      }\n\n      let npmTag = 'latest'\n      if (version.match(/^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$/)) {\n        console.log('npm tag: latest')\n      } else {\n        const matches = version.match(\n          /^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\-(dev|rc|beta)\\.[0-9]{1,3}$/,\n        )\n        if (!matches) {\n          console.log(\n            'Invalid version. Currently xx.xx.xx or xx.xx.xx-(dev|rc|beta).xx is allowed',\n          )\n          process.exit(1)\n        }\n        npmTag = matches[1]\n        console.log('npm tag: ' + npmTag)\n      }\n\n      if ((await $`git status -s`).toString().length > 0) {\n        console.error(`Git working directory contains uncommitted changes:`)\n        $.verbose = true\n        await $`git status -s`\n        console.log('Commit/stash them and try again.')\n        process.exit(1)\n      }\n\n      $.verbose = true\n      if (opts['skip-lint'] !== true) {\n        console.log('Running a typecheck and lint pass')\n        await Promise.all([$`yarn run typecheck`, $`yarn run lint:all`])\n      } else {\n        console.log('Skipping typecheck and lint')\n      }\n\n      const skipTypescriptEmit = opts['skip-ts'] === true\n\n      console.log('Assigning versions')\n      await writeVersionsToPackageJSONs(version)\n\n      console.log('Building all packages')\n      await Promise.all(\n        packagesToBuild.map((workspace) =>\n          skipTypescriptEmit\n            ? $`yarn workspace ${workspace} run build:js`\n            : $`yarn workspace ${workspace} run build`,\n        ),\n      )\n\n      // temporarily rolling back the version assignments to make sure they don't show\n      // up in `$ git status`. (would've been better to just ignore hese particular changes\n      // but i'm lazy)\n      await restoreVersions()\n\n      console.log(\n        'Checking if the build produced artifacts that must first be comitted to git',\n      )\n      $.verbose = false\n      if ((await $`git status -s`).toString().length > 0) {\n        $.verbose = true\n        await $`git status -s`\n        console.error(`Git directory contains uncommitted changes.`)\n        process.exit(1)\n      }\n\n      $.verbose = true\n\n      await writeVersionsToPackageJSONs(version)\n\n      console.log('Committing/tagging')\n\n      await $`git add .`\n      await $`git commit -m ${version}`\n      await $`git tag ${version}`\n\n      // if (!gitTags.some((tag) => tag === version)) {\n      //   console.log(\n      //     `No git tag found for version \"${version}\". Run \\`$ git tag ${version}\\` and try again.`,\n      //   )\n      //   process.exit()\n      // }\n\n      console.log('Publishing to npm')\n      await Promise.all(\n        packagesToPublish.map(\n          (workspace) =>\n            $`yarn workspace ${workspace} npm publish --access public --tag ${npmTag}`,\n        ),\n      )\n    }\n\n    void release()\n\n    async function writeVersionsToPackageJSONs(monorepoVersion: string) {\n      for (const packagePathRelativeFromRoot of packagesWhoseVersionsShouldBump) {\n        const pathToPackage = path.resolve(\n          __dirname,\n          '../',\n          packagePathRelativeFromRoot,\n          './package.json',\n        )\n\n        const original = JSON.parse(\n          fs.readFileSync(pathToPackage, {encoding: 'utf-8'}),\n        )\n\n        const newJson = {...original, version: monorepoVersion}\n        fs.writeFileSync(\n          path.join(pathToPackage),\n          JSON.stringify(newJson, undefined, 2),\n          {encoding: 'utf-8'},\n        )\n        await $`prettier --write ${\n          packagePathRelativeFromRoot + '/package.json'\n        }`\n      }\n    }\n\n    async function restoreVersions() {\n      const wasVerbose = $.verbose\n      $.verbose = false\n      for (const packagePathRelativeFromRoot of packagesWhoseVersionsShouldBump) {\n        const pathToPackageInGit = packagePathRelativeFromRoot + '/package.json'\n\n        await $`git checkout ${pathToPackageInGit}`\n      }\n      $.verbose = wasVerbose\n    }\n  })\n\nprog\n  .command(\n    'prerelease ci',\n    \"This script publishes the insider packages from the CI. You can't run it locally unless you have a a valid npm access token and you store its value in the `NPM_TOKEN` environmental variable.\",\n  )\n  .action(async () => {\n    const packagesToPublish = [\n      '@theatre/core',\n      '@theatre/studio',\n      '@theatre/dataverse',\n      '@theatre/saaz',\n      '@theatre/react',\n      '@theatre/browser-bundles',\n      '@theatre/r3f',\n      'theatric',\n    ]\n\n    /**\n     * Receives a version number and returns it without the tags, if there are any\n     *\n     * @param version - Version number\n     * @returns Version number without the tags\n     *\n     * @example\n     * ```javascript\n     * const version_1 = '0.4.8-dev3-ec175817'\n     * const version_2 = '0.4.8'\n     *\n     * stripTag(version_1) === stripTag(version_2) === '0.4.8' // returns `true`\n     * ```\n     */\n    function stripTag(version: string) {\n      const regExp = /^[0-9]+\\.[0-9]+\\.[0-9]+/g\n      const matches = version.match(regExp)\n      if (!matches) {\n        throw new Error(`Version number not found in \"${version}\"`)\n      }\n\n      return matches[0]\n    }\n\n    /**\n     * Creates a version number like `0.4.8-insiders.ec175817`\n     *\n     * @param packageName - Name of the package\n     * @param commitHash - A commit hash\n     */\n    function getNewVersionName(packageName: string, commitHash: string) {\n      // The `r3f` package has its own release schedule, so its version numbers\n      // are almost always different from the rest of the packages.\n      const pathToPackageJson =\n        packageName === '@theatre/r3f'\n          ? path.resolve(__dirname, '../', 'packages', 'r3f', 'package.json')\n          : path.resolve(__dirname, '../', './package.json')\n\n      const jsonData = JSON.parse(\n        fs.readFileSync(pathToPackageJson, {encoding: 'utf-8'}),\n      )\n      const strippedVersion = stripTag(jsonData.version)\n\n      return `${strippedVersion}-insiders.${commitHash}`\n    }\n\n    /**\n     * Assigns the latest version names ({@link getNewVersionName}) to the packages' `package.json`s\n     *\n     * @param workspacesListObjects - An Array of objects containing information about the workspaces\n     * @param latestCommitHash - Hash of the latest commit\n     * @returns - A record of `{[packageId]: assignedVersion}`\n     */\n    async function writeVersionsToPackageJSONs(\n      workspacesListObjects: {name: string; location: string}[],\n      latestCommitHash: string,\n    ): Promise<Record<string, string>> {\n      const assignedVersionByPackageName: Record<string, string> = {}\n      for (const workspaceData of workspacesListObjects) {\n        const pathToPackage = path.resolve(\n          __dirname,\n          '../',\n          workspaceData.location,\n          './package.json',\n        )\n\n        const original = JSON.parse(\n          fs.readFileSync(pathToPackage, {encoding: 'utf-8'}),\n        )\n\n        let {version, dependencies, peerDependencies, devDependencies} =\n          original\n        // The @theatre/r3f package curently doesn't track the same version number of the other packages like @theatre/core,\n        // so we need to generate version numbers independently for each package\n        version = getNewVersionName(workspaceData.name, latestCommitHash)\n        assignedVersionByPackageName[workspaceData.name] = version\n        // Normally we don't have to override the package versions in dependencies because yarn would already convert\n        // all the \"workspace:*\" versions to a fixed version before publishing. However, packages like @theatre/studio\n        // have a peerDependency on @theatre/core set to \"*\" (meaning they would work with any version of @theatre/core).\n        // This is not the desired behavior in pre-release versions, so here, we'll fix those \"*\" versions to the set version.\n        for (const deps of [dependencies, peerDependencies, devDependencies]) {\n          if (!deps) continue\n          for (const wpObject of workspacesListObjects) {\n            if (deps[wpObject.name]) {\n              deps[wpObject.name] = getNewVersionName(\n                wpObject.name,\n                latestCommitHash,\n              )\n            }\n          }\n        }\n        const newJson = {\n          ...original,\n          version,\n          dependencies,\n          peerDependencies,\n          devDependencies,\n        }\n        fs.writeFileSync(\n          path.join(pathToPackage),\n          JSON.stringify(newJson, undefined, 2),\n          {encoding: 'utf-8'},\n        )\n        await $`prettier --write ${workspaceData.location + '/package.json'}`\n      }\n      return assignedVersionByPackageName\n    }\n\n    async function prerelease() {\n      // @ts-ignore ignore\n      process.env.THEATRE_IS_PUBLISHING = true\n      // In the CI `git log -1` points to a fake merge commit,\n      // so we have to use the value of a special GitHub context variable\n      // through the `GITHUB_SHA` environmental variable.\n\n      // The length of the abbreviated commit hash can change, that's why we\n      // need the length of the fake merge commit's abbreviated hash.\n      const fakeMergeCommitHashLength = (await $`git log -1 --pretty=format:%h`)\n        .stdout.length\n\n      if (!process.env.GITHUB_SHA)\n        throw new Error(\n          'expected `process.env.GITHUB_SHA` to be defined but it was not',\n        )\n\n      const latestCommitHash = process.env.GITHUB_SHA.slice(\n        0,\n        fakeMergeCommitHashLength,\n      )\n\n      const workspacesListString = await $`yarn workspaces list --json`\n      const workspacesListObjects = workspacesListString.stdout\n        .split(os.EOL)\n        // strip out empty lines\n        .filter(Boolean)\n        .map((x) => JSON.parse(x))\n\n      const assignedVersionByPackageName = await writeVersionsToPackageJSONs(\n        workspacesListObjects,\n        latestCommitHash,\n      )\n\n      await Promise.all(\n        packagesToPublish.map(async (workspaceName) => {\n          const npmTag = 'insiders'\n          if (process.env.GITHUB_ACTIONS) {\n            await $`yarn workspace ${workspaceName} npm publish --access public --tag ${npmTag}`\n          }\n        }),\n      )\n\n      if (process.env.GITHUB_ACTIONS) {\n        const data = packagesToPublish.map((packageName) => ({\n          packageName,\n          version: assignedVersionByPackageName[packageName],\n        }))\n\n        // set the output for github actions.\n        core.setOutput('data', JSON.stringify(data))\n      } else {\n        for (const packageName of packagesToPublish) {\n          await $`echo ${`Published ${packageName}@${assignedVersionByPackageName[packageName]}`}`\n        }\n      }\n    }\n\n    void prerelease()\n  })\n\n{\n  const allDevCommands = [\n    `yarn workspace playground run serve`,\n    `yarn workspace @theatre/app run cli dev all`,\n    `yarn workspace @theatre/sync-server run cli dev all`,\n  ]\n\n  prog\n    .command('dev all', 'Starts all services to develop all of the packages')\n    .action(async () => {\n      await Promise.all(allDevCommands.map((cmd) => $`${cmd}`))\n    })\n\n  prog\n    .command(\n      'tmux <name>',\n      'A helper command to start all the development services in a tmux session',\n    )\n    .option('--kill', 'If a session by that name already exists, kill it first')\n    .action(async (session = 'theatre', opts: {kill?: boolean}) => {\n      // check if the session already exists\n      if (opts.kill) {\n        try {\n          await $`tmux kill-session -t ${session}`\n        } catch {}\n        console.log('starting a new tmux session')\n      } else {\n        console.log(\n          'starting a new tmux session or attaching to an existing one',\n        )\n      }\n      await $`tmux new-session -d -A -s ${session}`\n\n      for (const cmd of allDevCommands) {\n        await $`tmux send-keys -t ${session} ${cmd} C-m`\n        await $`tmux split-window -t ${session}`\n      }\n\n      console.log('to attach to the session, run:')\n      console.log(`tmux attach -t ${session}`)\n\n      console.log(\n        'to attach to the session in control mode (so for example you can control tmux via iTerm), run:',\n      )\n      console.log(`tmux -CC attach -t ${session}`)\n\n      await question('Press enter to kill the session')\n      await $`tmux kill-session -t ${session}`\n    })\n}\n\nprog\n  .command(`depcheck`, `Check for unused or unlisted dependencies`)\n  .action(async () => {\n    /**\n     * A handy utility to check for unused or unlisted dependencies.\n     * We could also include this in the CI checks, but the current config reports some false positives. Once that's fixed, we can add it to the CI (low priority).\n     */\n    await $`yarn knip --config ./knip.config.json --include unlisted,dependencies --no-exit-code`\n  })\n\nprog.parse(process.argv)\n"
  },
  {
    "path": "devEnv/ensurePublishing.js",
    "content": "if (process.env.THEATRE_IS_PUBLISHING !== 'true') {\n  throw Error(\n    `This script may run only when the \"release\" command in monorepo's root is running.`,\n  )\n}\n"
  },
  {
    "path": "devEnv/eslint/rules/no-relative-imports.js",
    "content": "const path = require('path')\nconst minimatch = require('minimatch')\n\n// @todo find and acknowledge the original source of this (it was a github gist)\n// @todo this rule is clearly ignoring a bunch of files that do have parent\n// relative paths but don't get caught.\n\nconst replace = {\n  meta: {\n    type: 'layout',\n    fixable: 'code',\n    schema: [\n      {\n        type: 'object',\n        properties: {\n          ignore: {\n            type: 'array',\n            items: {\n              type: 'string',\n            },\n          },\n          method: {\n            type: 'string',\n            enum: ['all', 'only-parent'],\n          },\n          aliases: {\n            type: 'array',\n            minItems: 1,\n            items: {\n              properties: {\n                name: {\n                  type: 'string',\n                },\n                path: {\n                  type: 'string',\n                },\n              },\n              required: ['name', 'path'],\n              additionalProperties: false,\n            },\n          },\n        },\n        required: ['aliases'],\n        additionalProperties: false,\n      },\n    ],\n    messages: {\n      'can-replace':\n        'Relative import found. Run autofix to replace these relative imports!',\n      'cannot-replace':\n        'Relative import found. No alias has been defined which matches this import path',\n    },\n  },\n  create: (context) => {\n    return {\n      ImportDeclaration: (node) => {\n        const config = getConfiguration(context)\n\n        if (\n          config.ignorePatterns.some((pattern) =>\n            minimatch(context.getFilename(), pattern),\n          )\n        ) {\n          return\n        }\n\n        evaluateImport(node, config, context)\n      },\n    }\n  },\n}\n\nfunction evaluateImport(node, config, context) {\n  const {\n    source: {value, range, loc},\n  } = node\n  if (value.startsWith('./') && config.replaceMethod === 'only-parent') {\n    return\n  } else if (!value.startsWith('../')) {\n    return\n  }\n\n  let canFix = false\n  const currentFileDirectory = path.dirname(context.getFilename())\n  for (const alias of config.replaceAliases) {\n    const {replaceDir, replaceWith} = alias\n    const fullImportPath = path.resolve(currentFileDirectory, value)\n\n    if (fullImportPath.startsWith(replaceDir)) {\n      canFix = true\n\n      context.report({\n        messageId: 'can-replace',\n        loc,\n        fix: (fixer) =>\n          fixer.replaceTextRange(\n            range,\n            `'${fullImportPath.replace(replaceDir, replaceWith)}'`,\n          ),\n      })\n\n      break\n    }\n  }\n\n  if (!canFix) {\n    context.report({\n      messageId: 'cannot-replace',\n      loc,\n    })\n  }\n}\n\nfunction getConfiguration(context) {\n  const options = {\n    ignore: [],\n    method: 'only-parent',\n    ...context.options[0],\n  }\n\n  return {\n    ignorePatterns: options.ignore,\n    replaceMethod: options.method,\n    replaceAliases: options.aliases.map((alias) => ({\n      replaceDir: alias.path,\n      replaceWith: alias.name,\n    })),\n  }\n}\n\nmodule.exports = replace\n"
  },
  {
    "path": "devEnv/getAliasesFromTsConfig.d.ts",
    "content": "export function getAliasesFromTsConfigForJest(): Record<string, string>\nexport function getAliasesFromTsConfigForRollup(): Array<{\n  find: RegExp\n  replacement: string\n}>\n"
  },
  {
    "path": "devEnv/getAliasesFromTsConfig.js",
    "content": "const path = require('path')\n\nconst monorepoRoot = path.resolve(__dirname, '../')\n\nfunction getAliasesFromTsConfigForESLint() {\n  const tsConfigPaths = require('../tsconfig.base.json').compilerOptions.paths\n\n  const aliases = []\n\n  for (const [key, value] of Object.entries(tsConfigPaths)) {\n    aliases.push({\n      name: key.replace(/\\/\\*$/, ''),\n      path: value[0].replace(/\\/\\*$/, ''),\n    })\n  }\n\n  return aliases\n}\n\nmodule.exports.getAliasesFromTsConfigForESLint = getAliasesFromTsConfigForESLint\n\nfunction getAliasesFromTsConfigForJest() {\n  const tsConfigPaths = require('../tsconfig.base.json').compilerOptions.paths\n\n  const aliases = {}\n\n  for (let [key, value] of Object.entries(tsConfigPaths)) {\n    if (key.match(/\\/\\*$/)) {\n      key = key.replace(/\\/\\*$/, '/(.*)')\n    } else {\n      key = key + '$'\n    }\n    aliases[key] = path.join('<rootDir>', value[0].replace(/\\/\\*$/, '/$1'))\n  }\n\n  return aliases\n}\n\nmodule.exports.getAliasesFromTsConfigForJest = getAliasesFromTsConfigForJest\n\nfunction getAliasesFromTsConfigForRollup() {\n  const tsConfigPaths = require('../tsconfig.base.json').compilerOptions.paths\n\n  const aliases = []\n\n  for (let [key, value] of Object.entries(tsConfigPaths)) {\n    // like '@theatre/core/*'\n    if (key.match(/\\/\\*$/)) {\n      key = key.replace(/\\/\\*$/, '/(.*)')\n    } else {\n      // like '@theatre/core'\n      key = key + '$'\n    }\n    aliases.push({\n      find: new RegExp(key),\n      replacement: path.join(monorepoRoot, value[0].replace(/\\/\\*$/, '/$1')),\n    })\n  }\n\n  return aliases\n}\n\nmodule.exports.getAliasesFromTsConfigForRollup = getAliasesFromTsConfigForRollup\n"
  },
  {
    "path": "devEnv/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \".\",\n    \"types\": [\"node\", \"jest\"],\n    \"noEmit\": true,\n    \"target\": \"es6\",\n    \"composite\": true\n  },\n  \"references\": [{\"path\": \"../packages/app\"}]\n}\n"
  },
  {
    "path": "devEnv/typecheck-all-projects/tsconfig.all.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"composite\": true,\n    \"rootDir\": \"../..\"\n  },\n  \"files\": [],\n  \"references\": [\n    {\"path\": \"../../packages/dataverse\"},\n    {\"path\": \"../../packages/playground\"},\n    {\"path\": \"../../packages/benchmarks\"},\n    {\"path\": \"../../packages/react\"},\n    {\"path\": \"../../packages/r3f\"},\n    {\"path\": \"../../examples/basic-dom\"},\n    {\"path\": \"../../compat-tests\"},\n    {\"path\": \"../../devEnv\"},\n    {\"path\": \"../../packages/app\"},\n    {\"path\": \"../../packages/core\"},\n    {\"path\": \"../../packages/studio\"},\n    {\"path\": \"../../packages/sync-server\"},\n    {\"path\": \"../../packages/saaz\"},\n    {\"path\": \"../../packages/utils\"}\n  ]\n}\n"
  },
  {
    "path": "devEnv/verify-docker-compose.test.ts",
    "content": "import * as fs from 'fs'\nimport * as path from 'path'\nimport * as yaml from 'yaml'\n\ndescribe(`Docker-compose`, () => {\n  test(`should exclude all node_modules folders`, () => {\n    const dockerComposeFile = fs.readFileSync(\n      path.join(__dirname, '../docker-compose.yml'),\n      {encoding: 'utf8'},\n    )\n\n    const yamlContent = yaml.parse(dockerComposeFile)\n    const dockerVolumes = yamlContent.services['node'].volumes\n    const dockerVolumesThatExludeNodeModules = dockerVolumes.filter(\n      (volume: string) => volume.includes('node_modules'),\n    )\n\n    const allFoldersToExclude = findAllNodejsFoldersAt(\n      path.join(__dirname, '..'),\n    ).map((fullPath) => {\n      return path.join(\n        '/app',\n        path.relative(path.join(__dirname, '..'), fullPath),\n      )\n    })\n\n    const missingExclusions = allFoldersToExclude.filter(\n      (folder) => !dockerVolumesThatExludeNodeModules.includes(folder),\n    )\n\n    if (missingExclusions.length > 0) {\n      throw new Error(\n        `Some node_modules folders are not excluded from docker-compose.yml. You should add them\n        to the voluems section of the node service:\\n${missingExclusions\n          .map((s) => '- ' + s)\n          .join('\\n')}`,\n      )\n    }\n  })\n})\n\nfunction findAllNodejsFoldersAt(dir: string): string[] {\n  const files = fs.readdirSync(dir)\n  const found: string[] = []\n  for (const file of files) {\n    if (file === 'package.json') {\n      found.push(path.join(dir, 'node_modules'))\n    } else if (file !== 'node_modules') {\n      const filePath = path.join(dir, file)\n      const stats = fs.statSync(filePath)\n      if (stats.isDirectory()) {\n        found.push(...findAllNodejsFoldersAt(filePath))\n      }\n    }\n  }\n  return found\n}\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "# The docker-compose file is only used to *test* the repo on a local linux vm. You don't have\n# to use docker or know docker to develop the repo.\nversion: '3.8'\nname: theatre-monorepo\nservices:\n  node:\n    image: mcr.microsoft.com/playwright:v1.40.0-jammy\n    volumes:\n      - .:/app\n      # This ignores all node_modules folders/sub-folders so that we can have a separate installation\n      # of node_modules in host and in the container.\n      # If a folder is missing, the test at devEnv/verify-docker-compose.test.ts will fail, and it'll\n      # tell you which folder(s) are missing.\n      - /app/node_modules\n      - /app/compat-tests/fixtures/basic-react17/package/node_modules\n      - /app/compat-tests/fixtures/r3f-cra/package/node_modules\n      - /app/compat-tests/fixtures/r3f-next-latest/package/.next/node_modules\n      - /app/compat-tests/fixtures/r3f-next-latest/package/.next/types/node_modules\n      - /app/compat-tests/fixtures/r3f-next-latest/package/node_modules\n      - /app/compat-tests/fixtures/r3f-parcel1/package/node_modules\n      - /app/compat-tests/fixtures/r3f-react18/package/node_modules\n      - /app/compat-tests/fixtures/r3f-vite2/package/node_modules\n      - /app/compat-tests/fixtures/r3f-vite4/package/node_modules\n      - /app/compat-tests/fixtures/basic-vite4/package/node_modules\n      - /app/compat-tests/node_modules\n      - /app/examples/basic-dom/node_modules\n      - /app/examples/dom-cra/node_modules\n      - /app/examples/r3f-cra/node_modules\n      - /app/packages/benchmarks/node_modules\n      - /app/packages/browser-bundles/node_modules\n      - /app/packages/dataverse/node_modules\n      - /app/packages/dataverse-experiments/node_modules\n      - /app/packages/playground/node_modules\n      - /app/packages/r3f/node_modules\n      - /app/packages/react/node_modules\n      - /app/packages/theatric/node_modules\n      - /app/packages/core/node_modules\n      - /app/packages/studio/node_modules\n      - /app/packages/sync-server/node_modules\n      - /app/packages/sync-server/prisma/client-generated/node_modules\n      - /app/packages/app/node_modules\n      - /app/packages/app/prisma/client-generated/node_modules\n      - /app/packages/app/.next/node_modules\n      - /app/packages/saaz/node_modules\n      - /app/packages/utils/node_modules\n      - /app/packages/app/.next/types/node_modules\n\n    command: ['bash', '-c', 'while true; do sleep 1; done']\n"
  },
  {
    "path": "examples/basic-dom/.gitignore",
    "content": "/.cache"
  },
  {
    "path": "examples/basic-dom/Scene.tsx",
    "content": "import type {IScrub} from '@theatre/core'\nimport React, {useLayoutEffect, useMemo, useState} from 'react'\nimport type {ISheet, ISheetObject, IProject} from '@theatre/core'\nimport type {UseDragOpts} from './useDrag'\nimport useDrag from './useDrag'\nimport theatre from '@theatre/core'\n\nvoid theatre.init({studio: true})\n\nconst boxObjectConfig = {\n  x: 0,\n  y: 0,\n}\n\nconst Box: React.FC<{\n  id: string\n  sheet: ISheet\n  selectedObject: ISheetObject<any> | undefined\n}> = ({id, sheet, selectedObject}) => {\n  // This is cheap to call and always returns the same value, so no need for useMemo()\n  const obj = sheet.object(id, boxObjectConfig)\n\n  const isSelected = selectedObject === obj\n\n  const [pos, setPos] = useState<{x: number; y: number}>({x: 0, y: 0})\n\n  useLayoutEffect(() => {\n    const unsubscribeFromChanges = obj.onValuesChange((newValues) => {\n      setPos(newValues)\n    })\n    return unsubscribeFromChanges\n  }, [id])\n\n  const [divRef, setDivRef] = useState<HTMLElement | null>(null)\n\n  const dragOpts = useMemo((): UseDragOpts => {\n    let scrub: IScrub | undefined\n    let initial: typeof obj.value\n    let firstOnDragCalled = false\n    return {\n      onDragStart() {\n        const studio = theatre.getStudioSync()!\n        scrub = studio.scrub()\n        initial = obj.value\n        firstOnDragCalled = false\n      },\n      onDrag(x, y) {\n        if (!firstOnDragCalled) {\n          const studio = theatre.getStudioSync()!\n          studio.setSelection([obj])\n          firstOnDragCalled = true\n        }\n        scrub!.capture(({set}) => {\n          set(obj.props, {x: x + initial.x, y: y + initial.y})\n        })\n      },\n      onDragEnd(dragHappened) {\n        if (dragHappened) {\n          scrub!.commit()\n        } else {\n          scrub!.discard()\n        }\n      },\n      lockCursorTo: 'move',\n    }\n  }, [])\n\n  useDrag(divRef, dragOpts)\n\n  return (\n    <div\n      onClick={() => {\n        const studio = theatre.getStudioSync()!\n        studio.setSelection([obj])\n      }}\n      ref={setDivRef}\n      style={{\n        width: 100,\n        height: 100,\n        background: 'gray',\n        position: 'absolute',\n        left: pos.x + 'px',\n        top: pos.y + 'px',\n        boxSizing: 'border-box',\n        border: isSelected ? '1px solid #5a92fa' : '1px solid transparent',\n      }}\n    ></div>\n  )\n}\n\nlet lastBoxId = 1\n\nexport const Scene: React.FC<{project: IProject}> = ({project}) => {\n  const [boxes, setBoxes] = useState<Array<string>>(['0', '1'])\n\n  // This is cheap to call and always returns the same value, so no need for useMemo()\n  const sheet = project.sheet('Scene', 'default')\n  const [selection, _setSelection] = useState<Array<ISheetObject>>([])\n\n  useLayoutEffect(() => {\n    const studio = theatre.getStudioSync()!\n    return studio.onSelectionChange((newSelection) => {\n      _setSelection(\n        newSelection.filter(\n          (s): s is ISheetObject => s.type === 'Theatre_SheetObject_PublicAPI',\n        ),\n      )\n    })\n  })\n\n  return (\n    <div\n      style={{\n        position: 'absolute',\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0,\n        background: '#575757',\n      }}\n    >\n      <button\n        onClick={() => {\n          setBoxes((boxes) => [...boxes, String(++lastBoxId)])\n        }}\n      >\n        Add\n      </button>\n      {boxes.map((id) => (\n        <Box\n          key={'box' + id}\n          id={id}\n          sheet={sheet}\n          selectedObject={selection[0]}\n        />\n      ))}\n    </div>\n  )\n}\n"
  },
  {
    "path": "examples/basic-dom/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Example - DOM</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script src=\"./index.tsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "examples/basic-dom/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport theatre, {getProject} from '@theatre/core'\nimport {Scene} from './Scene'\n\nvoid theatre.init({studio: true})\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n  <Scene project={getProject('Sample project')} />,\n)\n"
  },
  {
    "path": "examples/basic-dom/package.json",
    "content": "{\n  \"name\": \"@examples/basic-dom\",\n  \"scripts\": {\n    \"start\": \"parcel serve ./index.html\"\n  },\n  \"dependencies\": {\n    \"@theatre/core\": \"workspace:*\",\n    \"@theatre/studio\": \"workspace:*\",\n    \"@types/react\": \"^17.0.19\",\n    \"@types/react-dom\": \"^17.0.9\",\n    \"parcel-bundler\": \"^1.12.5\",\n    \"react\": \"^17.0.2\",\n    \"react-dom\": \"^17.0.2\",\n    \"typescript\": \"5.1.6\"\n  }\n}\n"
  },
  {
    "path": "examples/basic-dom/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"esModuleInterop\": true,\n    \"jsx\": \"react\",\n    \"skipDefaultLibCheck\": true,\n    \"skipLibCheck\": true,\n    \"composite\": true,\n    \"noEmit\": true\n  },\n  \"files\": [\"index.tsx\", \"Scene.tsx\", \"useDrag.ts\"],\n  \"references\": [\n    {\"path\": \"../../packages/core\"},\n    {\"path\": \"../../packages/studio\"}\n  ]\n}\n"
  },
  {
    "path": "examples/basic-dom/useDrag.ts",
    "content": "import {useLayoutEffect, useRef} from 'react'\n\nconst noop = () => {}\n\nfunction createCursorLock(cursor: string) {\n  const el = document.createElement('div')\n  el.style.cssText = `\n    position: fixed;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 9999999;`\n\n  el.style.cursor = cursor\n  document.body.appendChild(el)\n  const relinquish = () => {\n    document.body.removeChild(el)\n  }\n\n  return relinquish\n}\n\nexport type UseDragOpts = {\n  disabled?: boolean\n  dontBlockMouseDown?: boolean\n  lockCursorTo?: string\n  onDragStart?: (event: MouseEvent) => void | false\n  onDragEnd?: (dragHappened: boolean) => void\n  onDrag: (dx: number, dy: number, event: MouseEvent) => void\n}\n\n/**\n * @deprecated Deprecated in favor of `useChordial`\n */\nexport default function useDrag(\n  target: HTMLElement | undefined | null,\n  opts: UseDragOpts,\n) {\n  const optsRef = useRef<typeof opts>(opts)\n  optsRef.current = opts\n\n  const modeRef = useRef<'dragStartCalled' | 'dragging' | 'notDragging'>(\n    'notDragging',\n  )\n\n  const stateRef = useRef<{\n    dragHappened: boolean\n    startPos: {\n      x: number\n      y: number\n    }\n  }>({dragHappened: false, startPos: {x: 0, y: 0}})\n\n  useLayoutEffect(() => {\n    if (!target) return\n\n    const getDistances = (event: MouseEvent): [number, number] => {\n      const {startPos} = stateRef.current\n      return [event.screenX - startPos.x, event.screenY - startPos.y]\n    }\n\n    let relinquishCursorLock = noop\n\n    const dragHandler = (event: MouseEvent) => {\n      if (!stateRef.current.dragHappened && optsRef.current.lockCursorTo) {\n        relinquishCursorLock = createCursorLock(optsRef.current.lockCursorTo)\n      }\n      if (!stateRef.current.dragHappened) stateRef.current.dragHappened = true\n      modeRef.current = 'dragging'\n\n      const deltas = getDistances(event)\n      optsRef.current.onDrag(deltas[0], deltas[1], event)\n    }\n\n    const dragEndHandler = () => {\n      removeDragListeners()\n      modeRef.current = 'notDragging'\n\n      optsRef.current.onDragEnd &&\n        optsRef.current.onDragEnd(stateRef.current.dragHappened)\n      relinquishCursorLock()\n      relinquishCursorLock = noop\n    }\n\n    const addDragListeners = () => {\n      document.addEventListener('mousemove', dragHandler)\n      document.addEventListener('mouseup', dragEndHandler)\n    }\n\n    const removeDragListeners = () => {\n      document.removeEventListener('mousemove', dragHandler)\n      document.removeEventListener('mouseup', dragEndHandler)\n    }\n\n    const preventUnwantedClick = (event: MouseEvent) => {\n      if (optsRef.current.disabled) return\n      if (stateRef.current.dragHappened) {\n        if (\n          !optsRef.current.dontBlockMouseDown &&\n          modeRef.current !== 'notDragging'\n        ) {\n          event.stopPropagation()\n          event.preventDefault()\n        }\n        stateRef.current.dragHappened = false\n      }\n    }\n\n    const dragStartHandler = (event: MouseEvent) => {\n      const opts = optsRef.current\n      if (opts.disabled === true) return\n\n      if (event.button !== 0) return\n      const resultOfStart = opts.onDragStart && opts.onDragStart(event)\n\n      if (resultOfStart === false) return\n\n      if (!opts.dontBlockMouseDown) {\n        event.stopPropagation()\n        event.preventDefault()\n      }\n\n      modeRef.current = 'dragStartCalled'\n\n      const {screenX, screenY} = event\n      stateRef.current.startPos = {x: screenX, y: screenY}\n      stateRef.current.dragHappened = false\n\n      addDragListeners()\n    }\n\n    const onMouseDown = (e: MouseEvent) => {\n      dragStartHandler(e)\n    }\n\n    target.addEventListener('mousedown', onMouseDown)\n    target.addEventListener('click', preventUnwantedClick)\n\n    return () => {\n      removeDragListeners()\n      target.removeEventListener('mousedown', onMouseDown)\n      target.removeEventListener('click', preventUnwantedClick)\n      relinquishCursorLock()\n\n      if (modeRef.current !== 'notDragging') {\n        optsRef.current.onDragEnd &&\n          optsRef.current.onDragEnd(modeRef.current === 'dragging')\n      }\n      modeRef.current = 'notDragging'\n    }\n  }, [target])\n}\n"
  },
  {
    "path": "examples/dom-cra/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "examples/dom-cra/README.md",
    "content": "# DOM CRA Example\n\nExample of using basic `theatre` with [Create React App](https://github.com/facebook/create-react-app)."
  },
  {
    "path": "examples/dom-cra/package.json",
    "content": "{\n  \"name\": \"@examples/dom-cra\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"installConfig\": {\n    \"hoistingLimits\": \"dependencies\"\n  },\n  \"dependencies\": {\n    \"@testing-library/jest-dom\": \"^5.11.4\",\n    \"@testing-library/react\": \"^11.1.0\",\n    \"@testing-library/user-event\": \"^12.1.10\",\n    \"@theatre/core\": \"workspace:*\",\n    \"react\": \"^17.0.2\",\n    \"react-dom\": \"^17.0.2\",\n    \"react-scripts\": \"4.0.3\",\n    \"web-vitals\": \"^1.0.1\"\n  },\n  \"devDependencies\": {\n    \"@theatre/studio\": \"workspace:*\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.2%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  }\n}\n"
  },
  {
    "path": "examples/dom-cra/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta\n      name=\"description\"\n      content=\"Web site created using create-react-app\"\n    />\n    <link rel=\"apple-touch-icon\" href=\"%PUBLIC_URL%/logo192.png\" />\n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>React App</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "examples/dom-cra/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    },\n    {\n      \"src\": \"logo192.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"192x192\"\n    },\n    {\n      \"src\": \"logo512.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"512x512\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "examples/dom-cra/public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "examples/dom-cra/src/App.css",
    "content": ".App {\n  text-align: center;\n}\n\n.App-logo {\n  height: 40vmin;\n  pointer-events: none;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  .App-logo {\n    animation: App-logo-spin infinite 20s linear;\n  }\n}\n\n.App-header {\n  background-color: #282c34;\n  min-height: 100vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  font-size: calc(10px + 2vmin);\n  color: white;\n}\n\n.App-link {\n  color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n"
  },
  {
    "path": "examples/dom-cra/src/App.js",
    "content": "import studio from '@theatre/studio'\nimport {useLayoutEffect, useMemo, useState} from 'react'\nimport useDrag from './useDrag'\n\nstudio.initialize()\n\nconst boxObjectConfig = {\n  x: 0,\n  y: 0,\n}\n\nconst Box = ({id, sheet, selectedObject}) => {\n  // This is cheap to call and always returns the same value, so no need for useMemo()\n  const obj = sheet.object(id, boxObjectConfig)\n\n  const isSelected = selectedObject === obj\n\n  const [pos, setPos] = useState({x: 0, y: 0})\n\n  useLayoutEffect(() => {\n    const unsubscribeFromChanges = obj.onValuesChange((newValues) => {\n      setPos(newValues)\n    })\n    return unsubscribeFromChanges\n  }, [id, obj])\n\n  const [divRef, setDivRef] = useState(null)\n\n  const dragOpts = useMemo(() => {\n    let scrub\n    let initial\n    let firstOnDragCalled = false\n    return {\n      onDragStart() {\n        scrub = studio.scrub()\n        initial = obj.value\n        firstOnDragCalled = false\n      },\n      onDrag(x, y) {\n        if (!firstOnDragCalled) {\n          studio.setSelection([obj])\n          firstOnDragCalled = true\n        }\n        scrub.capture(({set}) => {\n          set(obj.props, {x: x + initial.x, y: y + initial.y})\n        })\n      },\n      onDragEnd(dragHappened) {\n        if (dragHappened) {\n          scrub.commit()\n        } else {\n          scrub.discard()\n        }\n      },\n      lockCursorTo: 'move',\n    }\n  }, [])\n\n  useDrag(divRef, dragOpts)\n\n  return (\n    <div\n      onClick={() => {\n        studio.setSelection([obj])\n      }}\n      ref={setDivRef}\n      style={{\n        width: 100,\n        height: 100,\n        background: 'gray',\n        position: 'absolute',\n        left: pos.x + 'px',\n        top: pos.y + 'px',\n        boxSizing: 'border-box',\n        border: isSelected ? '1px solid #5a92fa' : '1px solid transparent',\n      }}\n    ></div>\n  )\n}\n\nlet lastBoxId = 1\n\nconst App = ({project}) => {\n  const [boxes, setBoxes] = useState(['0', '1'])\n\n  // This is cheap to call and always returns the same value, so no need for useMemo()\n  const sheet = project.sheet('Scene', 'default')\n  const [selection, _setSelection] = useState([])\n\n  useLayoutEffect(() => {\n    return studio.onSelectionChange((newSelection) => {\n      _setSelection(newSelection)\n    })\n  })\n\n  return (\n    <div\n      style={{\n        position: 'absolute',\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0,\n        background: '#575757',\n      }}\n    >\n      <button\n        onClick={() => {\n          setBoxes((boxes) => [...boxes, String(++lastBoxId)])\n        }}\n      >\n        Add\n      </button>\n      {boxes.map((id) => (\n        <Box\n          key={'box' + id}\n          id={id}\n          sheet={sheet}\n          selectedObject={selection[0]}\n        />\n      ))}\n    </div>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "examples/dom-cra/src/App.test.js",
    "content": "import {render, screen} from '@testing-library/react'\n\ntest('renders learn react link', () => {\n  render(<App />)\n  const linkElement = screen.getByText(/learn react/i)\n  expect(linkElement).toBeInTheDocument()\n})\n"
  },
  {
    "path": "examples/dom-cra/src/index.css",
    "content": "body {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n    sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n    monospace;\n}\n"
  },
  {
    "path": "examples/dom-cra/src/index.js",
    "content": "import ReactDOM from 'react-dom'\nimport './index.css'\nimport reportWebVitals from './reportWebVitals'\nimport studio from '@theatre/studio'\nimport {getProject} from '@theatre/core'\nimport React from 'react'\nimport App from './App'\n\nstudio.initialize()\n\nReactDOM.render(\n  <React.StrictMode>\n    <App project={getProject('CRA project')} />\n  </React.StrictMode>,\n  document.getElementById('root'),\n)\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals()\n"
  },
  {
    "path": "examples/dom-cra/src/reportWebVitals.js",
    "content": "const reportWebVitals = (onPerfEntry) => {\n  if (onPerfEntry && onPerfEntry instanceof Function) {\n    import('web-vitals').then(({getCLS, getFID, getFCP, getLCP, getTTFB}) => {\n      getCLS(onPerfEntry)\n      getFID(onPerfEntry)\n      getFCP(onPerfEntry)\n      getLCP(onPerfEntry)\n      getTTFB(onPerfEntry)\n    })\n  }\n}\n\nexport default reportWebVitals\n"
  },
  {
    "path": "examples/dom-cra/src/setupTests.js",
    "content": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).toHaveTextContent(/react/i)\n// learn more: https://github.com/testing-library/jest-dom\nimport '@testing-library/jest-dom'\n"
  },
  {
    "path": "examples/dom-cra/src/useDrag.js",
    "content": "import {useLayoutEffect, useRef} from 'react'\n\nconst noop = () => {}\n\nfunction createCursorLock(cursor) {\n  const el = document.createElement('div')\n  el.style.cssText = `\n    position: fixed;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 9999999;`\n\n  el.style.cursor = cursor\n  document.body.appendChild(el)\n  const relinquish = () => {\n    document.body.removeChild(el)\n  }\n\n  return relinquish\n}\n\nexport default function useDrag(target, opts) {\n  const optsRef = useRef(opts)\n  optsRef.current = opts\n\n  const modeRef = useRef('notDragging')\n\n  const stateRef = useRef({dragHappened: false, startPos: {x: 0, y: 0}})\n\n  useLayoutEffect(() => {\n    if (!target) return\n\n    const getDistances = (event) => {\n      const {startPos} = stateRef.current\n      return [event.screenX - startPos.x, event.screenY - startPos.y]\n    }\n\n    let relinquishCursorLock = noop\n\n    const dragHandler = (event) => {\n      if (!stateRef.current.dragHappened && optsRef.current.lockCursorTo) {\n        relinquishCursorLock = createCursorLock(optsRef.current.lockCursorTo)\n      }\n      if (!stateRef.current.dragHappened) stateRef.current.dragHappened = true\n      modeRef.current = 'dragging'\n\n      const deltas = getDistances(event)\n      optsRef.current.onDrag(deltas[0], deltas[1], event)\n    }\n\n    const dragEndHandler = () => {\n      removeDragListeners()\n      modeRef.current = 'notDragging'\n\n      optsRef.current.onDragEnd &&\n        optsRef.current.onDragEnd(stateRef.current.dragHappened)\n      relinquishCursorLock()\n      relinquishCursorLock = noop\n    }\n\n    const addDragListeners = () => {\n      document.addEventListener('mousemove', dragHandler)\n      document.addEventListener('mouseup', dragEndHandler)\n    }\n\n    const removeDragListeners = () => {\n      document.removeEventListener('mousemove', dragHandler)\n      document.removeEventListener('mouseup', dragEndHandler)\n    }\n\n    const preventUnwantedClick = (event) => {\n      if (optsRef.current.disabled) return\n      if (stateRef.current.dragHappened) {\n        if (\n          !optsRef.current.dontBlockMouseDown &&\n          modeRef.current !== 'notDragging'\n        ) {\n          event.stopPropagation()\n          event.preventDefault()\n        }\n        stateRef.current.dragHappened = false\n      }\n    }\n\n    const dragStartHandler = (event) => {\n      const opts = optsRef.current\n      if (opts.disabled === true) return\n\n      if (event.button !== 0) return\n      const resultOfStart = opts.onDragStart && opts.onDragStart(event)\n\n      if (resultOfStart === false) return\n\n      if (!opts.dontBlockMouseDown) {\n        event.stopPropagation()\n        event.preventDefault()\n      }\n\n      modeRef.current = 'dragStartCalled'\n\n      const {screenX, screenY} = event\n      stateRef.current.startPos = {x: screenX, y: screenY}\n      stateRef.current.dragHappened = false\n\n      addDragListeners()\n    }\n\n    const onMouseDown = (e) => {\n      dragStartHandler(e)\n    }\n\n    target.addEventListener('mousedown', onMouseDown)\n    target.addEventListener('click', preventUnwantedClick)\n\n    return () => {\n      removeDragListeners()\n      target.removeEventListener('mousedown', onMouseDown)\n      target.removeEventListener('click', preventUnwantedClick)\n      relinquishCursorLock()\n\n      if (modeRef.current !== 'notDragging') {\n        optsRef.current.onDragEnd &&\n          optsRef.current.onDragEnd(modeRef.current === 'dragging')\n      }\n      modeRef.current = 'notDragging'\n    }\n  }, [target])\n}\n"
  },
  {
    "path": "examples/dom-cra/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \"src\",\n    \"types\": [\"jest\", \"node\"],\n    \"emitDeclarationOnly\": true,\n    \"composite\": true,\n    \"checkJs\": true\n  },\n  \"references\": [\n    {\"path\": \"../../packages/core\"},\n    {\"path\": \"../../packages/studio\"}\n  ],\n  \"include\": [\"./src/**/*\"]\n}\n"
  },
  {
    "path": "examples/r3f-cra/.eslintrc.json",
    "content": "{\n  \"extends\": [\n    \"react-app\"\n  ]\n}"
  },
  {
    "path": "examples/r3f-cra/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "examples/r3f-cra/README.md",
    "content": "# R3F CRA Example\n\nExample of using `theatre` and `@react-three/fiber` with [Create React App](https://github.com/facebook/create-react-app)."
  },
  {
    "path": "examples/r3f-cra/package.json",
    "content": "{\n  \"name\": \"@examples/r3f-cra\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"installConfig\": {\n    \"hoistingLimits\": \"workspaces\"\n  },\n  \"dependencies\": {\n    \"@react-three/drei\": \"^7.2.2\",\n    \"@testing-library/jest-dom\": \"^5.11.4\",\n    \"@testing-library/react\": \"^11.1.0\",\n    \"@testing-library/user-event\": \"^12.1.10\",\n    \"@theatre/core\": \"workspace:*\",\n    \"@theatre/r3f\": \"workspace:*\",\n    \"react-scripts\": \"^5.0.1\",\n    \"three\": \"^0.130.1\",\n    \"web-vitals\": \"^1.0.1\"\n  },\n  \"devDependencies\": {\n    \"@theatre/studio\": \"workspace:*\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.2%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  }\n}\n"
  },
  {
    "path": "examples/r3f-cra/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta\n      name=\"description\"\n      content=\"Web site created using create-react-app\"\n    />\n    <link rel=\"apple-touch-icon\" href=\"%PUBLIC_URL%/logo192.png\" />\n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>React App</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "examples/r3f-cra/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    },\n    {\n      \"src\": \"logo192.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"192x192\"\n    },\n    {\n      \"src\": \"logo512.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"512x512\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "examples/r3f-cra/public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "examples/r3f-cra/src/App.css",
    "content": ".App {\n  text-align: center;\n}\n\n.App-logo {\n  height: 40vmin;\n  pointer-events: none;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  .App-logo {\n    animation: App-logo-spin infinite 20s linear;\n  }\n}\n\n.App-header {\n  background-color: #282c34;\n  min-height: 100vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  font-size: calc(10px + 2vmin);\n  color: white;\n}\n\n.App-link {\n  color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n"
  },
  {
    "path": "examples/r3f-cra/src/App.js",
    "content": "import {getProject} from '@theatre/core'\nimport * as THREE from 'three'\nimport React, {useState, useEffect, useRef} from 'react'\nimport {useFrame, Canvas} from '@react-three/fiber'\nimport {Shadow, softShadows} from '@react-three/drei'\nimport studio from '@theatre/studio'\nimport {editable as e, SheetProvider} from '@theatre/r3f'\nimport extension from '@theatre/r3f/dist/extension'\n\nif (process.env.NODE_ENV === 'development') {\n  studio.extend(extension)\n  studio.initialize()\n}\n\n// Soft shadows are expensive, comment and refresh when it's too slow\nsoftShadows()\n\n// credit: https://codesandbox.io/s/camera-pan-nsb7f\n\nfunction Button() {\n  const vec = new THREE.Vector3()\n  const light = useRef(undefined)\n  const [active, setActive] = useState(false)\n  const [zoom, set] = useState(true)\n  useEffect(\n    () => void (document.body.style.cursor = active ? 'pointer' : 'auto'),\n    [active],\n  )\n\n  useFrame((state) => {\n    const step = 0.1\n    const camera = state.camera\n    camera.fov = THREE.MathUtils.lerp(camera.fov, zoom ? 10 : 42, step)\n    camera.position.lerp(\n      vec.set(zoom ? 25 : 10, zoom ? 1 : 5, zoom ? 0 : 10),\n      step,\n    )\n    state.camera.lookAt(0, 0, 0)\n    state.camera.updateProjectionMatrix()\n\n    light.current.position.lerp(\n      vec.set(zoom ? 4 : 0, zoom ? 3 : 8, zoom ? 3 : 5),\n      step,\n    )\n  })\n\n  return (\n    <e.mesh\n      receiveShadow\n      castShadow\n      onClick={() => set(!zoom)}\n      onPointerOver={() => setActive(true)}\n      onPointerOut={() => setActive(false)}\n      theatreKey=\"The Button\"\n    >\n      <sphereBufferGeometry args={[0.75, 64, 64]} />\n      <meshPhysicalMaterial\n        color={active ? 'purple' : '#e7b056'}\n        clearcoat={1}\n        clearcoatRoughness={0}\n      />\n      <Shadow\n        position-y={-0.79}\n        rotation-x={-Math.PI / 2}\n        opacity={0.6}\n        scale={[0.8, 0.8, 1]}\n      />\n      <directionalLight\n        ref={light}\n        castShadow\n        intensity={1.5}\n        shadow-camera-far={70}\n      />\n    </e.mesh>\n  )\n}\n\nfunction Plane({color, theatreKey, ...props}) {\n  return (\n    <e.mesh receiveShadow castShadow {...props} theatreKey={theatreKey}>\n      <boxBufferGeometry />\n      <meshStandardMaterial color={color} />\n    </e.mesh>\n  )\n}\n\nfunction App() {\n  return (\n    <div>\n      <Canvas\n        // @ts-ignore\n        shadowMap\n        gl={{preserveDrawingBuffer: true}}\n        linear\n        frameloop=\"demand\"\n        dpr={[1.5, 2]}\n      >\n        <SheetProvider\n          sheet={getProject('Playground - R3F').sheet('R3F-Canvas')}\n        >\n          {/* @ts-ignore */}\n          <e.perspectiveCamera makeDefault theatreKey=\"Camera\" />\n          <ambientLight intensity={0.4} />\n          <e.pointLight\n            position={[-10, -10, 5]}\n            intensity={2}\n            color=\"#ff20f0\"\n            theatreKey=\"Light 1\"\n          />\n          <e.pointLight\n            position={[0, 0.5, -1]}\n            distance={1}\n            intensity={2}\n            color=\"#e4be00\"\n            theatreKey=\"Light 2\"\n          />\n          <group position={[0, -0.9, -3]}>\n            <Plane\n              color=\"hotpink\"\n              rotation-x={-Math.PI / 2}\n              position-z={2}\n              scale={[4, 20, 0.2]}\n              theatreKey=\"plane1\"\n            />\n            <Plane\n              color=\"#e4be00\"\n              rotation-x={-Math.PI / 2}\n              position-y={1}\n              scale={[4.2, 0.2, 4]}\n              theatreKey=\"plane2\"\n            />\n            <Plane\n              color=\"#736fbd\"\n              rotation-x={-Math.PI / 2}\n              position={[-1.7, 1, 3.5]}\n              scale={[0.5, 4, 4]}\n              theatreKey=\"plane3\"\n            />\n            <Plane\n              color=\"white\"\n              rotation-x={-Math.PI / 2}\n              position={[0, 4.5, 3]}\n              scale={[2, 0.03, 4]}\n              theatreKey=\"plane4\"\n            />\n          </group>\n          <Button />\n        </SheetProvider>\n      </Canvas>\n    </div>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "examples/r3f-cra/src/App.test.js",
    "content": "import {render, screen} from '@testing-library/react'\n\ntest('renders learn react link', () => {\n  render(<App />)\n  const linkElement = screen.getByText(/learn react/i)\n  expect(linkElement).toBeInTheDocument()\n})\n"
  },
  {
    "path": "examples/r3f-cra/src/index.css",
    "content": "body {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n    sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n    monospace;\n}\n"
  },
  {
    "path": "examples/r3f-cra/src/index.js",
    "content": "import ReactDOM from 'react-dom'\nimport './index.css'\nimport reportWebVitals from './reportWebVitals'\nimport '@theatre/studio'\nimport {getProject} from '@theatre/core'\nimport React from 'react'\nimport App from './App'\n\nReactDOM.render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n  document.getElementById('root'),\n)\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals()\n"
  },
  {
    "path": "examples/r3f-cra/src/react-app-env.d.ts",
    "content": "/// <reference types=\"react-scripts\" />\n"
  },
  {
    "path": "examples/r3f-cra/src/reportWebVitals.js",
    "content": "const reportWebVitals = (onPerfEntry) => {\n  if (onPerfEntry && onPerfEntry instanceof Function) {\n    import('web-vitals').then(({getCLS, getFID, getFCP, getLCP, getTTFB}) => {\n      getCLS(onPerfEntry)\n      getFID(onPerfEntry)\n      getFCP(onPerfEntry)\n      getLCP(onPerfEntry)\n      getTTFB(onPerfEntry)\n    })\n  }\n}\n\nexport default reportWebVitals\n"
  },
  {
    "path": "examples/r3f-cra/src/setupTests.js",
    "content": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).toHaveTextContent(/react/i)\n// learn more: https://github.com/testing-library/jest-dom\nimport '@testing-library/jest-dom'\n"
  },
  {
    "path": "examples/r3f-cra/src/useDrag.js",
    "content": "import {useLayoutEffect, useRef} from 'react'\n\nconst noop = () => {}\n\nfunction createCursorLock(cursor) {\n  const el = document.createElement('div')\n  el.style.cssText = `\n    position: fixed;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 9999999;`\n\n  el.style.cursor = cursor\n  document.body.appendChild(el)\n  const relinquish = () => {\n    document.body.removeChild(el)\n  }\n\n  return relinquish\n}\n\nexport default function useDrag(target, opts) {\n  const optsRef = useRef(opts)\n  optsRef.current = opts\n\n  const modeRef = useRef('notDragging')\n\n  const stateRef = useRef({dragHappened: false, startPos: {x: 0, y: 0}})\n\n  useLayoutEffect(() => {\n    if (!target) return\n\n    const getDistances = (event) => {\n      const {startPos} = stateRef.current\n      return [event.screenX - startPos.x, event.screenY - startPos.y]\n    }\n\n    let relinquishCursorLock = noop\n\n    const dragHandler = (event) => {\n      if (!stateRef.current.dragHappened && optsRef.current.lockCursorTo) {\n        relinquishCursorLock = createCursorLock(optsRef.current.lockCursorTo)\n      }\n      if (!stateRef.current.dragHappened) stateRef.current.dragHappened = true\n      modeRef.current = 'dragging'\n\n      const deltas = getDistances(event)\n      optsRef.current.onDrag(deltas[0], deltas[1], event)\n    }\n\n    const dragEndHandler = () => {\n      removeDragListeners()\n      modeRef.current = 'notDragging'\n\n      optsRef.current.onDragEnd &&\n        optsRef.current.onDragEnd(stateRef.current.dragHappened)\n      relinquishCursorLock()\n      relinquishCursorLock = noop\n    }\n\n    const addDragListeners = () => {\n      document.addEventListener('mousemove', dragHandler)\n      document.addEventListener('mouseup', dragEndHandler)\n    }\n\n    const removeDragListeners = () => {\n      document.removeEventListener('mousemove', dragHandler)\n      document.removeEventListener('mouseup', dragEndHandler)\n    }\n\n    const preventUnwantedClick = (event) => {\n      if (optsRef.current.disabled) return\n      if (stateRef.current.dragHappened) {\n        if (\n          !optsRef.current.dontBlockMouseDown &&\n          modeRef.current !== 'notDragging'\n        ) {\n          event.stopPropagation()\n          event.preventDefault()\n        }\n        stateRef.current.dragHappened = false\n      }\n    }\n\n    const dragStartHandler = (event) => {\n      const opts = optsRef.current\n      if (opts.disabled === true) return\n\n      if (event.button !== 0) return\n      const resultOfStart = opts.onDragStart && opts.onDragStart(event)\n\n      if (resultOfStart === false) return\n\n      if (!opts.dontBlockMouseDown) {\n        event.stopPropagation()\n        event.preventDefault()\n      }\n\n      modeRef.current = 'dragStartCalled'\n\n      const {screenX, screenY} = event\n      stateRef.current.startPos = {x: screenX, y: screenY}\n      stateRef.current.dragHappened = false\n\n      addDragListeners()\n    }\n\n    const onMouseDown = (e) => {\n      dragStartHandler(e)\n    }\n\n    target.addEventListener('mousedown', onMouseDown)\n    target.addEventListener('click', preventUnwantedClick)\n\n    return () => {\n      removeDragListeners()\n      target.removeEventListener('mousedown', onMouseDown)\n      target.removeEventListener('click', preventUnwantedClick)\n      relinquishCursorLock()\n\n      if (modeRef.current !== 'notDragging') {\n        optsRef.current.onDragEnd &&\n          optsRef.current.onDragEnd(modeRef.current === 'dragging')\n      }\n      modeRef.current = 'notDragging'\n    }\n  }, [target])\n}\n"
  },
  {
    "path": "examples/r3f-cra/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"esModuleInterop\": true,\n    \"jsx\": \"react-jsx\",\n    \"skipDefaultLibCheck\": true,\n    \"skipLibCheck\": true,\n    \"checkJs\": true,\n    \"target\": \"es5\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"allowJs\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true\n  },\n  \"include\": [\n    \"src/**/*.js\"\n  ]\n}\n"
  },
  {
    "path": "jest.compat-tests.config.js",
    "content": "/** @type {import('jest').Config} */\nmodule.exports = {\n  testMatch: [\n    '<rootDir>/compat-tests/fixtures/*/*.compat-test.ts',\n    '<rootDir>/compat-tests/*.compat-test.ts',\n  ],\n  moduleNameMapper: {},\n  modulePathIgnorePatterns: ['<rootDir>/compat-tests/verdaccio'],\n  automock: false,\n  // transform: {\n  //   '^.+\\\\.tsx?$': [\n  //     'esbuild-jest',\n  //     {\n  //       sourcemap: true,\n  //     },\n  //   ],\n  //   '^.+\\\\.js$': [\n  //     'esbuild-jest',\n  //     {\n  //       sourcemap: true,\n  //     },\n  //   ],\n  // },\n  moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],\n  // these tests take a long time to run, because each of them either runs a full build of a package,\n  // or tests the build on a browser using playwright\n  testTimeout: 1000 * 60 * 2,\n  transform: {\n    '^.+\\\\.tsx?$': [\n      'jest-esbuild',\n      {\n        sourcemap: true,\n        supported: {\n          'dynamic-import': false,\n        },\n      },\n    ],\n    '^.+\\\\.js$': [\n      'jest-esbuild',\n      {\n        sourcemap: true,\n        supported: {\n          'dynamic-import': false,\n        },\n      },\n    ],\n  },\n}\n"
  },
  {
    "path": "jest.config.js",
    "content": "/** @type {import('jest').Config} */\nmodule.exports = {\n  testMatch: [\n    '<rootDir>/packages/*/src/**/*.test.ts',\n    '<rootDir>/devEnv/**/*.test.ts',\n  ],\n  moduleNameMapper: {\n    ...require('./devEnv/getAliasesFromTsConfig').getAliasesFromTsConfigForJest(),\n    '\\\\.(css|svg|png)$': 'identity-obj-proxy',\n    'lodash-es/(.*)': 'lodash/$1',\n    'react-use/esm/(.*)': 'react-use/lib/$1',\n    'lodash-es': 'lodash',\n    // ES modules that jest can't handle at the moment.\n    uuid: '<rootDir>/node_modules/uuid/dist/index.js',\n    nanoid: '<rootDir>/node_modules/nanoid/index.cjs',\n    'nanoid/non-secure': '<rootDir>/node_modules/nanoid/non-secure/index.cjs',\n    'react-icons/(.*)': 'identity-obj-proxy',\n    'react-merge-refs': 'identity-obj-proxy',\n    '@trpc/client': 'identity-obj-proxy',\n    oauth4webapi: 'identity-obj-proxy',\n  },\n  setupFiles: [\n    './packages/studio/src/integration-tests/setupIntegrationTestEnv.ts',\n  ],\n  automock: false,\n  transform: {\n    '^.+\\\\.tsx?$': [\n      'jest-esbuild',\n      {\n        sourcemap: true,\n        supported: {\n          'dynamic-import': false,\n        },\n      },\n    ],\n    '^.+\\\\.js$': [\n      'jest-esbuild',\n      {\n        sourcemap: true,\n        supported: {\n          'dynamic-import': false,\n        },\n      },\n    ],\n  },\n  moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],\n}\n"
  },
  {
    "path": "knip.config.json",
    "content": "{\n  \"$schema\": \"https://unpkg.com/knip@3/schema.json\",\n  \"entry\": [\n    \"packages/*/src/index.{ts,tsx}\",\n    \"packages/*/devEnv/**/*.{ts,js}\",\n    \"devEnv/**/*.{ts,js}\",\n    \"packages/playground/src/**/*.{ts,tsx}\"\n  ],\n  \"project\": [\"packages/*/{src,devEnv}/**/*.{ts,tsx,js,mjs}\"],\n  \"typescript\": {\n    \"config\": \"packages/*/tsconfig.json\"\n  }\n}\n"
  },
  {
    "path": "lerna.json",
    "content": "{\n  \"packages\": [\"packages/*\", \"theatre/*\"],\n  \"version\": \"independent\",\n  \"npmClient\": \"yarn\",\n  \"useWorkspaces\": true\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"theatre-monorepo\",\n  \"license\": \"Apache-2.0\",\n  \"version\": \"0.7.0\",\n  \"workspaces\": [\n    \"packages/*\",\n    \"examples/*\",\n    \"compat-tests\"\n  ],\n  \"scripts\": {\n    \"cli\": \"tsx devEnv/cli.ts\",\n    \"playground\": \"yarn workspace playground run serve\",\n    \"benchmarks\": \"yarn workspace benchmarks run serve\",\n    \"test:e2e\": \"yarn workspace playground run test\",\n    \"test:e2e:ci\": \"yarn workspace playground run test:ci\",\n    \"typecheck\": \"yarn run build:ts\",\n    \"build:ts\": \"tsc --build ./devEnv/typecheck-all-projects/tsconfig.all.json\",\n    \"test\": \"jest\",\n    \"test:compat:install\": \"yarn workspace @theatre/compat-tests run install-fixtures\",\n    \"test:compat:run\": \"jest --config jest.compat-tests.config.js\",\n    \"postinstall\": \"husky install && yarn workspace @theatre/app run prisma generate && yarn workspace @theatre/sync-server run prisma generate\",\n    \"lint:all\": \"eslint . --ext ts,tsx --ignore-path=.gitignore --rulesdir ./devEnv/eslint/rules\"\n  },\n  \"lint-staged\": {\n    \"(theatre|packages|devEnv|compat-tests)/**/*.(t|j)s?(x)\": [\n      \"eslint --rulesdir ./devEnv/eslint/rules --fix\"\n    ],\n    \"**/*.(t|j)s?(x)\": [\n      \"prettier --write\"\n    ]\n  },\n  \"devDependencies\": {\n    \"@cspotcode/zx\": \"^6.1.2\",\n    \"@microsoft/api-documenter\": \"^7.19.0\",\n    \"@microsoft/api-extractor\": \"^7.28.6\",\n    \"@types/eslint\": \"^8.56.0\",\n    \"@types/jest\": \"^26.0.23\",\n    \"@typescript-eslint/eslint-plugin\": \"^6.16.0\",\n    \"@typescript-eslint/parser\": \"^6.16.0\",\n    \"esbuild\": \"^0.18.18\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-plugin-import\": \"2.29.1\",\n    \"eslint-plugin-jsx-a11y\": \"^6.7.1\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-tsdoc\": \"^0.2.17\",\n    \"eslint-plugin-unused-imports\": \"^3.0.0\",\n    \"fast-glob\": \"^3.3.0\",\n    \"husky\": \"^6.0.0\",\n    \"identity-obj-proxy\": \"^3.0.0\",\n    \"jest\": \"^29.3.1\",\n    \"jest-environment-jsdom\": \"^29.3.1\",\n    \"jest-esbuild\": \"^0.3.0\",\n    \"jsonc-parser\": \"^3.1.0\",\n    \"knip\": \"^3.9.0\",\n    \"lint-staged\": \"^13.0.3\",\n    \"lodash\": \"^4.17.21\",\n    \"node-gyp\": \"^9.1.0\",\n    \"prettier\": \"^3.1.1\",\n    \"sade\": \"^1.8.1\",\n    \"tsx\": \"4.7.0\",\n    \"typescript\": \"5.1.6\",\n    \"yaml\": \"^2.3.1\"\n  },\n  \"packageManager\": \"yarn@3.6.3\",\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"dependencies\": {\n    \"@actions/core\": \"^1.10.0\"\n  }\n}\n"
  },
  {
    "path": "packages/app/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n.pnpm-debug.log*\n\n# local env files\n.env*.local\n/.env\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "packages/app/.vscode/settings.json",
    "content": "{\n  \"typescript.tsdk\": \"node_modules/typescript/lib\",\n  \"typescript.enablePromptUseWorkspaceTsdk\": true\n}"
  },
  {
    "path": "packages/app/LICENSE",
    "content": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\nCopyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> Everyone is\npermitted to copy and distribute verbatim copies of this license document, but\nchanging it is not allowed.\n\n                            Preamble\n\nThe GNU Affero General Public License is a free, copyleft license for software\nand other kinds of works, specifically designed to ensure cooperation with the\ncommunity in the case of network server software.\n\nThe licenses for most software and other practical works are designed to take\naway your freedom to share and change the works. By contrast, our General Public\nLicenses are intended to guarantee your freedom to share and change all versions\nof a program--to make sure it remains free software for all its users.\n\nWhen we speak of free software, we are referring to freedom, not price. Our\nGeneral Public Licenses are designed to make sure that you have the freedom to\ndistribute copies of free software (and charge for them if you wish), that you\nreceive source code or can get it if you want it, that you can change the\nsoftware or use pieces of it in new free programs, and that you know you can do\nthese things.\n\nDevelopers that use our General Public Licenses protect your rights with two\nsteps: (1) assert copyright on the software, and (2) offer you this License\nwhich gives you legal permission to copy, distribute and/or modify the software.\n\nA secondary benefit of defending all users' freedom is that improvements made in\nalternate versions of the program, if they receive widespread use, become\navailable for other developers to incorporate. Many developers of free software\nare heartened and encouraged by the resulting cooperation. However, in the case\nof software used on network servers, this result may fail to come about. The GNU\nGeneral Public License permits making a modified version and letting the public\naccess it on a server without ever releasing its source code to the public.\n\nThe GNU Affero General Public License is designed specifically to ensure that,\nin such cases, the modified source code becomes available to the community. It\nrequires the operator of a network server to provide the source code of the\nmodified version running there to the users of that server. Therefore, public\nuse of a modified version, on a publicly accessible server, gives the public\naccess to the source code of the modified version.\n\nAn older license, called the Affero General Public License and published by\nAffero, was designed to accomplish similar goals. This is a different license,\nnot a version of the Affero GPL, but Affero has released a new version of the\nAffero GPL which permits relicensing under this license.\n\nThe precise terms and conditions for copying, distribution and modification\nfollow.\n\n                       TERMS AND CONDITIONS\n\n0. Definitions.\n\n\"This License\" refers to version 3 of the GNU Affero General Public License.\n\n\"Copyright\" also means copyright-like laws that apply to other kinds of works,\nsuch as semiconductor masks.\n\n\"The Program\" refers to any copyrightable work licensed under this License. Each\nlicensee is addressed as \"you\". \"Licensees\" and \"recipients\" may be individuals\nor organizations.\n\nTo \"modify\" a work means to copy from or adapt all or part of the work in a\nfashion requiring copyright permission, other than the making of an exact copy.\nThe resulting work is called a \"modified version\" of the earlier work or a work\n\"based on\" the earlier work.\n\nA \"covered work\" means either the unmodified Program or a work based on the\nProgram.\n\nTo \"propagate\" a work means to do anything with it that, without permission,\nwould make you directly or secondarily liable for infringement under applicable\ncopyright law, except executing it on a computer or modifying a private copy.\nPropagation includes copying, distribution (with or without modification),\nmaking available to the public, and in some countries other activities as well.\n\nTo \"convey\" a work means any kind of propagation that enables other parties to\nmake or receive copies. Mere interaction with a user through a computer network,\nwith no transfer of a copy, is not conveying.\n\nAn interactive user interface displays \"Appropriate Legal Notices\" to the extent\nthat it includes a convenient and prominently visible feature that (1) displays\nan appropriate copyright notice, and (2) tells the user that there is no\nwarranty for the work (except to the extent that warranties are provided), that\nlicensees may convey the work under this License, and how to view a copy of this\nLicense. If the interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n1. Source Code.\n\nThe \"source code\" for a work means the preferred form of the work for making\nmodifications to it. \"Object code\" means any non-source form of a work.\n\nA \"Standard Interface\" means an interface that either is an official standard\ndefined by a recognized standards body, or, in the case of interfaces specified\nfor a particular programming language, one that is widely used among developers\nworking in that language.\n\nThe \"System Libraries\" of an executable work include anything, other than the\nwork as a whole, that (a) is included in the normal form of packaging a Major\nComponent, but which is not part of that Major Component, and (b) serves only to\nenable use of the work with that Major Component, or to implement a Standard\nInterface for which an implementation is available to the public in source code\nform. A \"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system (if any) on\nwhich the executable work runs, or a compiler used to produce the work, or an\nobject code interpreter used to run it.\n\nThe \"Corresponding Source\" for a work in object code form means all the source\ncode needed to generate, install, and (for an executable work) run the object\ncode and to modify the work, including scripts to control those activities.\nHowever, it does not include the work's System Libraries, or general-purpose\ntools or generally available free programs which are used unmodified in\nperforming those activities but which are not part of the work. For example,\nCorresponding Source includes interface definition files associated with source\nfiles for the work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require, such as by\nintimate data communication or control flow between those subprograms and other\nparts of the work.\n\nThe Corresponding Source need not include anything that users can regenerate\nautomatically from other parts of the Corresponding Source.\n\nThe Corresponding Source for a work in source code form is that same work.\n\n2. Basic Permissions.\n\nAll rights granted under this License are granted for the term of copyright on\nthe Program, and are irrevocable provided the stated conditions are met. This\nLicense explicitly affirms your unlimited permission to run the unmodified\nProgram. The output from running a covered work is covered by this License only\nif the output, given its content, constitutes a covered work. This License\nacknowledges your rights of fair use or other equivalent, as provided by\ncopyright law.\n\nYou may make, run and propagate covered works that you do not convey, without\nconditions so long as your license otherwise remains in force. You may convey\ncovered works to others for the sole purpose of having them make modifications\nexclusively for you, or provide you with facilities for running those works,\nprovided that you comply with the terms of this License in conveying all\nmaterial for which you do not control copyright. Those thus making or running\nthe covered works for you must do so exclusively on your behalf, under your\ndirection and control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\nConveying under any other circumstances is permitted solely under the conditions\nstated below. Sublicensing is not allowed; section 10 makes it unnecessary.\n\n3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\nNo covered work shall be deemed part of an effective technological measure under\nany applicable law fulfilling obligations under article 11 of the WIPO copyright\ntreaty adopted on 20 December 1996, or similar laws prohibiting or restricting\ncircumvention of such measures.\n\nWhen you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention is\neffected by exercising rights under this License with respect to the covered\nwork, and you disclaim any intention to limit operation or modification of the\nwork as a means of enforcing, against the work's users, your or third parties'\nlegal rights to forbid circumvention of technological measures.\n\n4. Conveying Verbatim Copies.\n\nYou may convey verbatim copies of the Program's source code as you receive it,\nin any medium, provided that you conspicuously and appropriately publish on each\ncopy an appropriate copyright notice; keep intact all notices stating that this\nLicense and any non-permissive terms added in accord with section 7 apply to the\ncode; keep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\nYou may charge any price or no price for each copy that you convey, and you may\noffer support or warranty protection for a fee.\n\n5. Conveying Modified Source Versions.\n\nYou may convey a work based on the Program, or the modifications to produce it\nfrom the Program, in the form of source code under the terms of section 4,\nprovided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\nA compilation of a covered work with other separate and independent works, which\nare not by their nature extensions of the covered work, and which are not\ncombined with it such as to form a larger program, in or on a volume of a\nstorage or distribution medium, is called an \"aggregate\" if the compilation and\nits resulting copyright are not used to limit the access or legal rights of the\ncompilation's users beyond what the individual works permit. Inclusion of a\ncovered work in an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n6. Conveying Non-Source Forms.\n\nYou may convey a covered work in object code form under the terms of sections 4\nand 5, provided that you also convey the machine-readable Corresponding Source\nunder the terms of this License, in one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\nA separable portion of the object code, whose source code is excluded from the\nCorresponding Source as a System Library, need not be included in conveying the\nobject code work.\n\nA \"User Product\" is either (1) a \"consumer product\", which means any tangible\npersonal property which is normally used for personal, family, or household\npurposes, or (2) anything designed or sold for incorporation into a dwelling. In\ndetermining whether a product is a consumer product, doubtful cases shall be\nresolved in favor of coverage. For a particular product received by a particular\nuser, \"normally used\" refers to a typical or common use of that class of\nproduct, regardless of the status of the particular user or of the way in which\nthe particular user actually uses, or expects or is expected to use, the\nproduct. A product is a consumer product regardless of whether the product has\nsubstantial commercial, industrial or non-consumer uses, unless such uses\nrepresent the only significant mode of use of the product.\n\n\"Installation Information\" for a User Product means any methods, procedures,\nauthorization keys, or other information required to install and execute\nmodified versions of a covered work in that User Product from a modified version\nof its Corresponding Source. The information must suffice to ensure that the\ncontinued functioning of the modified object code is in no case prevented or\ninterfered with solely because modification has been made.\n\nIf you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as part of a\ntransaction in which the right of possession and use of the User Product is\ntransferred to the recipient in perpetuity or for a fixed term (regardless of\nhow the transaction is characterized), the Corresponding Source conveyed under\nthis section must be accompanied by the Installation Information. But this\nrequirement does not apply if neither you nor any third party retains the\nability to install modified object code on the User Product (for example, the\nwork has been installed in ROM).\n\nThe requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates for a\nwork that has been modified or installed by the recipient, or for the User\nProduct in which it has been modified or installed. Access to a network may be\ndenied when the modification itself materially and adversely affects the\noperation of the network or violates the rules and protocols for communication\nacross the network.\n\nCorresponding Source conveyed, and Installation Information provided, in accord\nwith this section must be in a format that is publicly documented (and with an\nimplementation available to the public in source code form), and must require no\nspecial password or key for unpacking, reading or copying.\n\n7. Additional Terms.\n\n\"Additional permissions\" are terms that supplement the terms of this License by\nmaking exceptions from one or more of its conditions. Additional permissions\nthat are applicable to the entire Program shall be treated as though they were\nincluded in this License, to the extent that they are valid under applicable\nlaw. If additional permissions apply only to part of the Program, that part may\nbe used separately under those permissions, but the entire Program remains\ngoverned by this License without regard to the additional permissions.\n\nWhen you convey a copy of a covered work, you may at your option remove any\nadditional permissions from that copy, or from any part of it. (Additional\npermissions may be written to require their own removal in certain cases when\nyou modify the work.) You may place additional permissions on material, added by\nyou to a covered work, for which you have or can give appropriate copyright\npermission.\n\nNotwithstanding any other provision of this License, for material you add to a\ncovered work, you may (if authorized by the copyright holders of that material)\nsupplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\nAll other non-permissive additional terms are considered \"further restrictions\"\nwithin the meaning of section 10. If the Program as you received it, or any part\nof it, contains a notice stating that it is governed by this License along with\na term that is a further restriction, you may remove that term. If a license\ndocument contains a further restriction but permits relicensing or conveying\nunder this License, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does not survive\nsuch relicensing or conveying.\n\nIf you add terms to a covered work in accord with this section, you must place,\nin the relevant source files, a statement of the additional terms that apply to\nthose files, or a notice indicating where to find the applicable terms.\n\nAdditional terms, permissive or non-permissive, may be stated in the form of a\nseparately written license, or stated as exceptions; the above requirements\napply either way.\n\n8. Termination.\n\nYou may not propagate or modify a covered work except as expressly provided\nunder this License. Any attempt otherwise to propagate or modify it is void, and\nwill automatically terminate your rights under this License (including any\npatent licenses granted under the third paragraph of section 11).\n\nHowever, if you cease all violation of this License, then your license from a\nparticular copyright holder is reinstated (a) provisionally, unless and until\nthe copyright holder explicitly and finally terminates your license, and (b)\npermanently, if the copyright holder fails to notify you of the violation by\nsome reasonable means prior to 60 days after the cessation.\n\nMoreover, your license from a particular copyright holder is reinstated\npermanently if the copyright holder notifies you of the violation by some\nreasonable means, this is the first time you have received notice of violation\nof this License (for any work) from that copyright holder, and you cure the\nviolation prior to 30 days after your receipt of the notice.\n\nTermination of your rights under this section does not terminate the licenses of\nparties who have received copies or rights from you under this License. If your\nrights have been terminated and not permanently reinstated, you do not qualify\nto receive new licenses for the same material under section 10.\n\n9. Acceptance Not Required for Having Copies.\n\nYou are not required to accept this License in order to receive or run a copy of\nthe Program. Ancillary propagation of a covered work occurring solely as a\nconsequence of using peer-to-peer transmission to receive a copy likewise does\nnot require acceptance. However, nothing other than this License grants you\npermission to propagate or modify any covered work. These actions infringe\ncopyright if you do not accept this License. Therefore, by modifying or\npropagating a covered work, you indicate your acceptance of this License to do\nso.\n\n10. Automatic Licensing of Downstream Recipients.\n\nEach time you convey a covered work, the recipient automatically receives a\nlicense from the original licensors, to run, modify and propagate that work,\nsubject to this License. You are not responsible for enforcing compliance by\nthird parties with this License.\n\nAn \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations. If propagation of a covered work results\nfrom an entity transaction, each party to that transaction who receives a copy\nof the work also receives whatever licenses to the work the party's predecessor\nin interest had or could give under the previous paragraph, plus a right to\npossession of the Corresponding Source of the work from the predecessor in\ninterest, if the predecessor has it or can get it with reasonable efforts.\n\nYou may not impose any further restrictions on the exercise of the rights\ngranted or affirmed under this License. For example, you may not impose a\nlicense fee, royalty, or other charge for exercise of rights granted under this\nLicense, and you may not initiate litigation (including a cross-claim or\ncounterclaim in a lawsuit) alleging that any patent claim is infringed by\nmaking, using, selling, offering for sale, or importing the Program or any\nportion of it.\n\n11. Patents.\n\nA \"contributor\" is a copyright holder who authorizes use under this License of\nthe Program or a work on which the Program is based. The work thus licensed is\ncalled the contributor's \"contributor version\".\n\nA contributor's \"essential patent claims\" are all patent claims owned or\ncontrolled by the contributor, whether already acquired or hereafter acquired,\nthat would be infringed by some manner, permitted by this License, of making,\nusing, or selling its contributor version, but do not include claims that would\nbe infringed only as a consequence of further modification of the contributor\nversion. For purposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of this License.\n\nEach contributor grants you a non-exclusive, worldwide, royalty-free patent\nlicense under the contributor's essential patent claims, to make, use, sell,\noffer for sale, import and otherwise run, modify and propagate the contents of\nits contributor version.\n\nIn the following three paragraphs, a \"patent license\" is any express agreement\nor commitment, however denominated, not to enforce a patent (such as an express\npermission to practice a patent or covenant not to sue for patent infringement).\nTo \"grant\" such a patent license to a party means to make such an agreement or\ncommitment not to enforce a patent against the party.\n\nIf you convey a covered work, knowingly relying on a patent license, and the\nCorresponding Source of the work is not available for anyone to copy, free of\ncharge and under the terms of this License, through a publicly available network\nserver or other readily accessible means, then you must either (1) cause the\nCorresponding Source to be so available, or (2) arrange to deprive yourself of\nthe benefit of the patent license for this particular work, or (3) arrange, in a\nmanner consistent with the requirements of this License, to extend the patent\nlicense to downstream recipients. \"Knowingly relying\" means you have actual\nknowledge that, but for the patent license, your conveying the covered work in a\ncountry, or your recipient's use of the covered work in a country, would\ninfringe one or more identifiable patents in that country that you have reason\nto believe are valid.\n\nIf, pursuant to or in connection with a single transaction or arrangement, you\nconvey, or propagate by procuring conveyance of, a covered work, and grant a\npatent license to some of the parties receiving the covered work authorizing\nthem to use, propagate, modify or convey a specific copy of the covered work,\nthen the patent license you grant is automatically extended to all recipients of\nthe covered work and works based on it.\n\nA patent license is \"discriminatory\" if it does not include within the scope of\nits coverage, prohibits the exercise of, or is conditioned on the non-exercise\nof one or more of the rights that are specifically granted under this License.\nYou may not convey a covered work if you are a party to an arrangement with a\nthird party that is in the business of distributing software, under which you\nmake payment to the third party based on the extent of your activity of\nconveying the work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory patent\nlicense (a) in connection with copies of the covered work conveyed by you (or\ncopies made from those copies), or (b) primarily for and in connection with\nspecific products or compilations that contain the covered work, unless you\nentered into that arrangement, or that patent license was granted, prior to 28\nMarch 2007.\n\nNothing in this License shall be construed as excluding or limiting any implied\nlicense or other defenses to infringement that may otherwise be available to you\nunder applicable patent law.\n\n12. No Surrender of Others' Freedom.\n\nIf conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not excuse\nyou from the conditions of this License. If you cannot convey a covered work so\nas to satisfy simultaneously your obligations under this License and any other\npertinent obligations, then as a consequence you may not convey it at all. For\nexample, if you agree to terms that obligate you to collect a royalty for\nfurther conveying from those to whom you convey the Program, the only way you\ncould satisfy both those terms and this License would be to refrain entirely\nfrom conveying the Program.\n\n13. Remote Network Interaction; Use with the GNU General Public License.\n\nNotwithstanding any other provision of this License, if you modify the Program,\nyour modified version must prominently offer all users interacting with it\nremotely through a computer network (if your version supports such interaction)\nan opportunity to receive the Corresponding Source of your version by providing\naccess to the Corresponding Source from a network server at no charge, through\nsome standard or customary means of facilitating copying of software. This\nCorresponding Source shall include the Corresponding Source for any work covered\nby version 3 of the GNU General Public License that is incorporated pursuant to\nthe following paragraph.\n\nNotwithstanding any other provision of this License, you have permission to link\nor combine any covered work with a work licensed under version 3 of the GNU\nGeneral Public License into a single combined work, and to convey the resulting\nwork. The terms of this License will continue to apply to the part which is the\ncovered work, but the work with which it is combined will remain governed by\nversion 3 of the GNU General Public License.\n\n14. Revised Versions of this License.\n\nThe Free Software Foundation may publish revised and/or new versions of the GNU\nAffero General Public License from time to time. Such new versions will be\nsimilar in spirit to the present version, but may differ in detail to address\nnew problems or concerns.\n\nEach version is given a distinguishing version number. If the Program specifies\nthat a certain numbered version of the GNU Affero General Public License \"or any\nlater version\" applies to it, you have the option of following the terms and\nconditions either of that numbered version or of any later version published by\nthe Free Software Foundation. If the Program does not specify a version number\nof the GNU Affero General Public License, you may choose any version ever\npublished by the Free Software Foundation.\n\nIf the Program specifies that a proxy can decide which future versions of the\nGNU Affero General Public License can be used, that proxy's public statement of\nacceptance of a version permanently authorizes you to choose that version for\nthe Program.\n\nLater license versions may give you additional or different permissions.\nHowever, no additional obligations are imposed on any author or copyright holder\nas a result of your choosing to follow a later version.\n\n15. Disclaimer of Warranty.\n\nTHERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER\nPARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER\nEXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE\nQUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE\nDEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n16. Limitation of Liability.\n\nIN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY\nCOPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS\nPERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,\nINCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE\nTHE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED\nINACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE\nPROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY\nHAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n17. Interpretation of Sections 15 and 16.\n\nIf the disclaimer of warranty and limitation of liability provided above cannot\nbe given local legal effect according to their terms, reviewing courts shall\napply local law that most closely approximates an absolute waiver of all civil\nliability in connection with the Program, unless a warranty or assumption of\nliability accompanies a copy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\nIf you develop a new program, and you want it to be of the greatest possible use\nto the public, the best way to achieve this is to make it free software which\neveryone can redistribute and change under these terms.\n\nTo do so, attach the following notices to the program. It is safest to attach\nthem to the start of each source file to most effectively state the exclusion of\nwarranty; and each file should have at least the \"copyright\" line and a pointer\nto where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published\n    by the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf your software can interact with users remotely through a computer network,\nyou should also make sure that it provides a way for users to get its source.\nFor example, if your program is a web application, its interface could display a\n\"Source\" link that leads users to an archive of the code. There are many ways\nyou could offer source, and different solutions will be better for different\nprograms; see section 13 for the specific requirements.\n\nYou should also get your employer (if you work as a programmer) or school, if\nany, to sign a \"copyright disclaimer\" for the program, if necessary. For more\ninformation on this, and how to apply and follow the GNU AGPL, see\n<https://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "packages/app/README.md",
    "content": "A stub for the web app (not the final implementation).\n"
  },
  {
    "path": "packages/app/components.json",
    "content": "{\n  \"$schema\": \"https://ui.shadcn.com/schema.json\",\n  \"style\": \"default\",\n  \"rsc\": false,\n  \"tsx\": true,\n  \"tailwind\": {\n    \"config\": \"tailwind.config.js\",\n    \"css\": \"src/pages/global.css\",\n    \"baseColor\": \"zinc\",\n    \"cssVariables\": true\n  },\n  \"aliases\": {\n    \"components\": \"src/ui/components\",\n    \"utils\": \"src/ui/lib/utils\"\n  }\n}\n"
  },
  {
    "path": "packages/app/devEnv/cli.ts",
    "content": "import sade from 'sade'\nimport {$, fs, path} from '@cspotcode/zx'\nimport {config} from 'dotenv'\nimport {fromZodError} from 'zod-validation-error'\nimport * as jose from 'jose'\nimport * as envSchema from 'src/envSchema'\nimport type {Env} from 'src/envSchema'\n\nconst isProduction = process.env.NODE_ENV === 'production'\n\nif (!isProduction) {\n  if (!fs.existsSync(path.join(__dirname, '..', '.env'))) {\n    console.log(`Creating .env file`)\n    fs.copyFileSync(\n      path.join(__dirname, '..', '.env.example'),\n      path.join(__dirname, '..', '.env'),\n    )\n  }\n  config({path: '.env'})\n}\n\nconst usedSchema = isProduction\n  ? envSchema.productionSchema\n  : envSchema.fullSchema\n\nfunction validateEnv() {\n  try {\n    usedSchema.parse(process.env)\n  } catch (error) {\n    console.error(\"Environment variables aren't valid.\")\n    console.log(JSON.stringify(process.env, null, 2))\n    console.error(fromZodError(error as any))\n    throw error\n  }\n\n  const env: Env = process.env as any\n  const url = new URL(env.DATABASE_URL)\n  if (url.protocol !== 'postgresql:' && url.protocol !== 'postgres:') {\n    throw new Error(`DATABASE_URL protocol must be postgresql: Given: ${url}`)\n  }\n\n  if (!isProduction) {\n    if (\n      env.DATABASE_URL !==\n      `postgresql://postgres:${env.DEV_DB_PASSWORD}@localhost:${env.DEV_DB_PORT}/postgres`\n    ) {\n      throw new Error(\n        `We're in dev mode, so DATABASE_URL must match the other DB variables set in .env. DATABASE_URL should be: postgresql://postgres:${env.DEV_DB_PASSWORD}@localhost:${env.DEV_DB_PORT}/postgres`,\n      )\n    }\n  }\n}\n\nconst packageRoot = path.join(__dirname, '..')\n\nconst prog = sade('cli')\n\nprog\n  .command('dev all', 'Start all the development services, including next.js')\n  .action(async () => {\n    validateEnv()\n    await devDb()\n    await devNext()\n  })\n\nasync function devNext() {\n  validateEnv()\n  await $`next dev`\n}\nprog.command('dev next', 'Start next.js dev server').action(devNext)\n\nasync function devDb() {\n  validateEnv()\n  await devDbDocker()\n  await $`prisma generate`\n  await $`prisma migrate dev`\n  await $`prisma db seed`\n}\n\nprog.command('dev db', 'Start the database service').action(devDb)\n\nasync function devDbDocker() {\n  validateEnv()\n  await $`docker-compose up -d`\n  // wait for the database to be ready\n  await $`while ! (docker-compose ps postgres | grep -q \"Up\"); do sleep 2; done`\n}\nprog\n  .command(\n    'dev db docker',\n    `Start the database service. Don't generate bindings`,\n  )\n  .action(devDbDocker)\n\nprog.command('dev db nuke', 'Nuke the database').action(async () => {\n  validateEnv()\n  await $`docker-compose down --volumes --remove-orphans`\n  await $`rm -rf prisma/*.db**`\n})\n\nprog\n  .command('dev setup', 'Setup the development environment')\n  .action(async () => {\n    if (!fs.existsSync(path.join(packageRoot, '.env'))) {\n      console.log(`Creating .env file`)\n      fs.copyFileSync(\n        path.join(packageRoot, '.env.example'),\n        path.join(packageRoot, '.env'),\n      )\n    }\n  })\n\nprog\n  .command(`dev generate-keypair`, `Generate public/private keypair`)\n  .action(async () => {\n    const v = await jose.generateKeyPair('RS256', {})\n    console.log('public key')\n    console.log(await jose.exportSPKI(v.publicKey))\n    console.log('private key')\n    console.log(await jose.exportPKCS8(v.privateKey))\n  })\n\nprog.command('prod build', 'Build for production').action(async () => {\n  validateEnv()\n  await $`prisma migrate deploy`\n  await $`next build`\n})\n\nprog.command('prod start', 'Start in production mode').action(async () => {\n  validateEnv()\n  await $`next start`\n})\n\nprog.command('prebuild', 'Prebuild pages').action(async () => {\n  validateEnv()\n  await $`prisma generate`\n  await $`prisma migrate deploy`\n})\n\nprog.parse(process.argv)\n"
  },
  {
    "path": "packages/app/docker-compose.yml",
    "content": "version: '3.6'\nservices:\n  postgres:\n    image: postgres:13\n    ports:\n      - '${DEV_DB_PORT}:5432'\n    restart: always\n    volumes:\n      - ./.temp/postgres/data:/var/lib/postgresql/data\n    env_file:\n      - ./.env\n    environment:\n      POSTGRES_PASSWORD: ${DEV_DB_PASSWORD}\n      POSTGRES_HOST_AUTH_METHOD: trust\n"
  },
  {
    "path": "packages/app/next.config.js",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {\n  // ignore typescript errors. The global typecheck script will catch them\n  typescript: {\n    ignoreBuildErrors: true,\n    tsconfigPath: './tsconfig.json',\n  },\n  // ignore eslint errors. The global lint script will catch them\n  eslint: {\n    ignoreDuringBuilds: true,\n  },\n}\n\nmodule.exports = nextConfig\n"
  },
  {
    "path": "packages/app/package.json",
    "content": "{\n  \"name\": \"@theatre/app\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"cli\": \"tsx devEnv/cli.ts\",\n    \"start\": \"yarn cli prod start\",\n    \"lint\": \"next lint\",\n    \"prebuild\": \"yarn cli prebuild\",\n    \"postinstall\": \"prisma generate\"\n  },\n  \"prisma\": {\n    \"seed\": \"tsx prisma/seed.ts\"\n  },\n  \"dependencies\": {\n    \"@auth/prisma-adapter\": \"^1.0.3\",\n    \"@cspotcode/zx\": \"^6.1.2\",\n    \"@hookform/resolvers\": \"^3.3.2\",\n    \"@prisma/client\": \"^4.12.0\",\n    \"@radix-ui/react-alert-dialog\": \"^1.0.5\",\n    \"@radix-ui/react-avatar\": \"^1.0.4\",\n    \"@radix-ui/react-context-menu\": \"^2.1.5\",\n    \"@radix-ui/react-dialog\": \"^1.0.5\",\n    \"@radix-ui/react-icons\": \"^1.3.0\",\n    \"@radix-ui/react-label\": \"^2.0.2\",\n    \"@radix-ui/react-popover\": \"^1.0.7\",\n    \"@radix-ui/react-select\": \"^2.0.0\",\n    \"@radix-ui/react-separator\": \"^1.0.3\",\n    \"@radix-ui/react-slot\": \"^1.0.2\",\n    \"@radix-ui/react-toast\": \"^1.1.5\",\n    \"@tanstack/react-query\": \"^4.36.1\",\n    \"@theatre/utils\": \"workspace:*\",\n    \"@trpc/client\": \"^10.43.0\",\n    \"@trpc/next\": \"^10.43.0\",\n    \"@trpc/react-query\": \"^10.43.0\",\n    \"@trpc/server\": \"^10.43.0\",\n    \"@types/node\": \"20.4.9\",\n    \"@types/react\": \"18.2.20\",\n    \"@types/react-dom\": \"18.2.7\",\n    \"@types/uuid\": \"^8.3.0\",\n    \"class-variance-authority\": \"^0.7.0\",\n    \"clsx\": \"^2.0.0\",\n    \"cors\": \"^2.8.5\",\n    \"cross-env\": \"^7.0.3\",\n    \"dotenv\": \"^16.3.1\",\n    \"esbuild\": \"^0.18.20\",\n    \"eslint-config-next\": \"13.4.13\",\n    \"jose\": \"^4.14.4\",\n    \"lucide-react\": \"^0.289.0\",\n    \"nanoid\": \"^3.3.1\",\n    \"next\": \"latest\",\n    \"next-auth\": \"^4.23.2\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"oauth4webapi\": \"^2.4.0\",\n    \"pg\": \"^8.11.2\",\n    \"prisma\": \"^4.12.0\",\n    \"react\": \"18.2.0\",\n    \"react-dom\": \"18.2.0\",\n    \"react-hook-form\": \"^7.47.0\",\n    \"react-promptify\": \"^0.3.0\",\n    \"sade\": \"^1.8.1\",\n    \"superjson\": \"^1.13.1\",\n    \"tailwind-merge\": \"^1.14.0\",\n    \"tailwindcss-animate\": \"^1.0.7\",\n    \"tsx\": \"^3.12.7\",\n    \"typescript\": \"5.1.6\",\n    \"uuid\": \"^8.3.2\",\n    \"yaml\": \"^2.3.1\",\n    \"zod\": \"^3.22.4\",\n    \"zod-validation-error\": \"^1.3.1\"\n  },\n  \"devDependencies\": {\n    \"@types/jsonwebtoken\": \"^9.0.2\",\n    \"autoprefixer\": \"^10.4.16\",\n    \"jsonwebtoken\": \"^9.0.1\",\n    \"postcss\": \"^8.4.31\",\n    \"tailwindcss\": \"^3.3.3\"\n  }\n}\n"
  },
  {
    "path": "packages/app/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n}\n"
  },
  {
    "path": "packages/app/prisma/.gitignore",
    "content": "/client-generated"
  },
  {
    "path": "packages/app/prisma/migrations/20230409133858_init/migration.sql",
    "content": "-- CreateTable\nCREATE TABLE \"User\" (\n    \"id\" TEXT NOT NULL,\n\n    CONSTRAINT \"User_pkey\" PRIMARY KEY (\"id\")\n);\n\n-- CreateTable\nCREATE TABLE \"Project\" (\n    \"id\" SERIAL NOT NULL,\n    \"name\" TEXT NOT NULL,\n    \"description\" TEXT,\n    \"userId\" TEXT NOT NULL,\n\n    CONSTRAINT \"Project_pkey\" PRIMARY KEY (\"id\")\n);\n\n-- AddForeignKey\nALTER TABLE \"Project\" ADD CONSTRAINT \"Project_userId_fkey\" FOREIGN KEY (\"userId\") REFERENCES \"User\"(\"id\") ON DELETE RESTRICT ON UPDATE CASCADE;\n"
  },
  {
    "path": "packages/app/prisma/migrations/20230514190125_lib_auth/migration.sql",
    "content": "-- CreateTable\nCREATE TABLE \"PreAuthenticationToken\" (\n    \"preAuthenticationToken\" TEXT NOT NULL,\n    \"userCode\" TEXT NOT NULL,\n    \"createdAt\" TIMESTAMP(3) NOT NULL,\n    \"validUntil\" TIMESTAMP(3) NOT NULL,\n    \"lastCheckTime\" TIMESTAMP(3) NOT NULL,\n    \"state\" INTEGER NOT NULL DEFAULT 0,\n    \"tokens\" TEXT NOT NULL,\n\n    CONSTRAINT \"PreAuthenticationToken_pkey\" PRIMARY KEY (\"preAuthenticationToken\")\n);\n"
  },
  {
    "path": "packages/app/prisma/migrations/20230813123201_1/migration.sql",
    "content": "/*\n  Warnings:\n\n  - You are about to drop the `PreAuthenticationToken` table. If the table is not empty, all the data it contains will be lost.\n\n*/\n-- DropTable\nDROP TABLE \"PreAuthenticationToken\";\n\n-- CreateTable\nCREATE TABLE \"LibAuthenticationFlow\" (\n    \"preAuthenticationToken\" TEXT NOT NULL,\n    \"userCode\" TEXT NOT NULL,\n    \"createdAt\" TIMESTAMP(3) NOT NULL,\n    \"clientFlowToken\" TEXT NOT NULL,\n    \"lastCheckTime\" TIMESTAMP(3) NOT NULL,\n    \"state\" INTEGER NOT NULL DEFAULT 0,\n    \"tokens\" TEXT NOT NULL,\n\n    CONSTRAINT \"LibAuthenticationFlow_pkey\" PRIMARY KEY (\"preAuthenticationToken\")\n);\n\n-- CreateIndex\nCREATE UNIQUE INDEX \"LibAuthenticationFlow_userCode_key\" ON \"LibAuthenticationFlow\"(\"userCode\");\n"
  },
  {
    "path": "packages/app/prisma/migrations/20230813131020_2/migration.sql",
    "content": "-- AlterTable\nALTER TABLE \"LibAuthenticationFlow\" ALTER COLUMN \"createdAt\" SET DATA TYPE TIMESTAMPTZ,\nALTER COLUMN \"lastCheckTime\" SET DATA TYPE TIMESTAMPTZ;\n"
  },
  {
    "path": "packages/app/prisma/migrations/20230820072612_3/migration.sql",
    "content": "/*\n  Warnings:\n\n  - The `state` column on the `LibAuthenticationFlow` table would be dropped and recreated. This will lead to data loss if there is data in the column.\n\n*/\n-- CreateEnum\nCREATE TYPE \"LibAuthenticationFlowState\" AS ENUM ('initialized', 'userAllowedAuth', 'userDeniedAuth', 'tokenAlreadyUsed');\n\n-- AlterTable\nALTER TABLE \"LibAuthenticationFlow\" DROP COLUMN \"state\",\nADD COLUMN     \"state\" \"LibAuthenticationFlowState\" NOT NULL DEFAULT 'initialized';\n"
  },
  {
    "path": "packages/app/prisma/migrations/20230820093151_4/migration.sql",
    "content": "-- CreateTable\nCREATE TABLE \"LibSession\" (\n    \"refreshToken\" TEXT NOT NULL,\n    \"createdAt\" TIMESTAMPTZ NOT NULL,\n    \"validUntil\" TIMESTAMPTZ NOT NULL,\n    \"userId\" TEXT NOT NULL,\n\n    CONSTRAINT \"LibSession_pkey\" PRIMARY KEY (\"refreshToken\")\n);\n\n-- AddForeignKey\nALTER TABLE \"LibSession\" ADD CONSTRAINT \"LibSession_userId_fkey\" FOREIGN KEY (\"userId\") REFERENCES \"User\"(\"id\") ON DELETE RESTRICT ON UPDATE CASCADE;\n"
  },
  {
    "path": "packages/app/prisma/migrations/20230820095524_/migration.sql",
    "content": "/*\n  Warnings:\n\n  - A unique constraint covering the columns `[auth0Sid]` on the table `User` will be added. If there are existing duplicate values, this will fail.\n  - Added the required column `auth0Data` to the `User` table without a default value. This is not possible if the table is not empty.\n  - Added the required column `auth0Sid` to the `User` table without a default value. This is not possible if the table is not empty.\n  - Added the required column `email` to the `User` table without a default value. This is not possible if the table is not empty.\n\n*/\n-- AlterTable\nALTER TABLE \"User\" ADD COLUMN     \"auth0Data\" JSONB NOT NULL,\nADD COLUMN     \"auth0Sid\" TEXT NOT NULL,\nADD COLUMN     \"email\" TEXT NOT NULL;\n\n-- CreateIndex\nCREATE UNIQUE INDEX \"User_auth0Sid_key\" ON \"User\"(\"auth0Sid\");\n\n-- CreateIndex\nCREATE INDEX \"email\" ON \"User\"(\"email\");\n"
  },
  {
    "path": "packages/app/prisma/migrations/20230827165303_5/migration.sql",
    "content": "/*\n  Warnings:\n\n  - The primary key for the `Project` table will be changed. If it partially fails, the table could be left without primary key constraint.\n\n*/\n-- AlterTable\nALTER TABLE \"Project\" DROP CONSTRAINT \"Project_pkey\",\nALTER COLUMN \"id\" DROP DEFAULT,\nALTER COLUMN \"id\" SET DATA TYPE TEXT,\nADD CONSTRAINT \"Project_pkey\" PRIMARY KEY (\"id\");\nDROP SEQUENCE \"Project_id_seq\";\n"
  },
  {
    "path": "packages/app/prisma/migrations/20230828173601_2/migration.sql",
    "content": "-- AlterTable\nALTER TABLE \"Project\" ALTER COLUMN \"name\" DROP NOT NULL;\n"
  },
  {
    "path": "packages/app/prisma/migrations/20231005010012_replace_auth0_with_next_auth/migration.sql",
    "content": "/*\n  Warnings:\n\n  - You are about to drop the column `auth0Data` on the `User` table. All the data in the column will be lost.\n  - You are about to drop the column `auth0Sid` on the `User` table. All the data in the column will be lost.\n  - A unique constraint covering the columns `[email]` on the table `User` will be added. If there are existing duplicate values, this will fail.\n\n*/\n-- DropIndex\nDROP INDEX \"User_auth0Sid_key\";\n\n-- AlterTable\nALTER TABLE \"User\" DROP COLUMN \"auth0Data\",\nDROP COLUMN \"auth0Sid\",\nADD COLUMN     \"emailVerified\" TIMESTAMP(3),\nADD COLUMN     \"image\" TEXT,\nADD COLUMN     \"name\" TEXT,\nALTER COLUMN \"email\" DROP NOT NULL;\n\n-- CreateTable\nCREATE TABLE \"Account\" (\n    \"id\" TEXT NOT NULL,\n    \"userId\" TEXT NOT NULL,\n    \"type\" TEXT NOT NULL,\n    \"provider\" TEXT NOT NULL,\n    \"providerAccountId\" TEXT NOT NULL,\n    \"refresh_token\" TEXT,\n    \"access_token\" TEXT,\n    \"expires_at\" INTEGER,\n    \"token_type\" TEXT,\n    \"scope\" TEXT,\n    \"id_token\" TEXT,\n    \"session_state\" TEXT,\n\n    CONSTRAINT \"Account_pkey\" PRIMARY KEY (\"id\")\n);\n\n-- CreateTable\nCREATE TABLE \"Session\" (\n    \"id\" TEXT NOT NULL,\n    \"sessionToken\" TEXT NOT NULL,\n    \"userId\" TEXT NOT NULL,\n    \"expires\" TIMESTAMP(3) NOT NULL,\n\n    CONSTRAINT \"Session_pkey\" PRIMARY KEY (\"id\")\n);\n\n-- CreateTable\nCREATE TABLE \"VerificationToken\" (\n    \"identifier\" TEXT NOT NULL,\n    \"token\" TEXT NOT NULL,\n    \"expires\" TIMESTAMP(3) NOT NULL\n);\n\n-- CreateIndex\nCREATE UNIQUE INDEX \"Account_provider_providerAccountId_key\" ON \"Account\"(\"provider\", \"providerAccountId\");\n\n-- CreateIndex\nCREATE UNIQUE INDEX \"Session_sessionToken_key\" ON \"Session\"(\"sessionToken\");\n\n-- CreateIndex\nCREATE UNIQUE INDEX \"VerificationToken_token_key\" ON \"VerificationToken\"(\"token\");\n\n-- CreateIndex\nCREATE UNIQUE INDEX \"VerificationToken_identifier_token_key\" ON \"VerificationToken\"(\"identifier\", \"token\");\n\n-- CreateIndex\nCREATE UNIQUE INDEX \"User_email_key\" ON \"User\"(\"email\");\n\n-- AddForeignKey\nALTER TABLE \"Account\" ADD CONSTRAINT \"Account_userId_fkey\" FOREIGN KEY (\"userId\") REFERENCES \"User\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;\n\n-- AddForeignKey\nALTER TABLE \"Session\" ADD CONSTRAINT \"Session_userId_fkey\" FOREIGN KEY (\"userId\") REFERENCES \"User\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;\n"
  },
  {
    "path": "packages/app/prisma/migrations/20231014131018_referesh_token_grace_period/migration.sql",
    "content": "-- AlterTable\nALTER TABLE \"LibSession\" ADD COLUMN     \"succeededByRefreshToken\" TEXT,\nADD COLUMN     \"successorLinkExpresAt\" TIMESTAMPTZ;\n"
  },
  {
    "path": "packages/app/prisma/migrations/20231017030424_add_teams_and_workspaces/migration.sql",
    "content": "/*\n  Warnings:\n\n  - You are about to drop the `Project` table. If the table is not empty, all the data it contains will be lost.\n\n*/\n-- CreateEnum\nCREATE TYPE \"TeamUserRole\" AS ENUM ('OWNER', 'MEMBER');\n\n-- CreateEnum\nCREATE TYPE \"AccessLevel\" AS ENUM ('READ', 'READ_WRITE');\n\n-- DropForeignKey\nALTER TABLE \"Project\" DROP CONSTRAINT \"Project_userId_fkey\";\n\n-- DropTable\nDROP TABLE \"Project\";\n\n-- CreateTable\nCREATE TABLE \"Team\" (\n    \"id\" TEXT NOT NULL,\n    \"name\" TEXT NOT NULL,\n    \"createdAt\" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,\n\n    CONSTRAINT \"Team_pkey\" PRIMARY KEY (\"id\")\n);\n\n-- CreateTable\nCREATE TABLE \"TeamMember\" (\n    \"teamId\" TEXT NOT NULL,\n    \"userId\" TEXT NOT NULL,\n    \"userRole\" \"TeamUserRole\" NOT NULL,\n    \"accepted\" BOOLEAN NOT NULL DEFAULT false,\n\n    CONSTRAINT \"TeamMember_pkey\" PRIMARY KEY (\"userId\",\"teamId\")\n);\n\n-- CreateTable\nCREATE TABLE \"Workspace\" (\n    \"id\" TEXT NOT NULL,\n    \"name\" TEXT NOT NULL,\n    \"description\" TEXT NOT NULL,\n    \"teamId\" TEXT NOT NULL,\n    \"createdAt\" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,\n\n    CONSTRAINT \"Workspace_pkey\" PRIMARY KEY (\"id\")\n);\n\n-- CreateTable\nCREATE TABLE \"GuestAccess\" (\n    \"workspaceId\" TEXT NOT NULL,\n    \"userId\" TEXT NOT NULL,\n    \"accessLevel\" \"AccessLevel\" NOT NULL,\n    \"accepted\" BOOLEAN NOT NULL DEFAULT false,\n\n    CONSTRAINT \"GuestAccess_pkey\" PRIMARY KEY (\"userId\",\"workspaceId\")\n);\n\n-- CreateIndex\nCREATE INDEX \"TeamMember_teamId_idx\" ON \"TeamMember\"(\"teamId\");\n\n-- CreateIndex\nCREATE INDEX \"TeamMember_userId_idx\" ON \"TeamMember\"(\"userId\");\n\n-- CreateIndex\nCREATE INDEX \"GuestAccess_workspaceId_idx\" ON \"GuestAccess\"(\"workspaceId\");\n\n-- CreateIndex\nCREATE INDEX \"GuestAccess_userId_idx\" ON \"GuestAccess\"(\"userId\");\n\n-- AddForeignKey\nALTER TABLE \"TeamMember\" ADD CONSTRAINT \"TeamMember_teamId_fkey\" FOREIGN KEY (\"teamId\") REFERENCES \"Team\"(\"id\") ON DELETE RESTRICT ON UPDATE CASCADE;\n\n-- AddForeignKey\nALTER TABLE \"TeamMember\" ADD CONSTRAINT \"TeamMember_userId_fkey\" FOREIGN KEY (\"userId\") REFERENCES \"User\"(\"id\") ON DELETE RESTRICT ON UPDATE CASCADE;\n\n-- AddForeignKey\nALTER TABLE \"Workspace\" ADD CONSTRAINT \"Workspace_teamId_fkey\" FOREIGN KEY (\"teamId\") REFERENCES \"Team\"(\"id\") ON DELETE RESTRICT ON UPDATE CASCADE;\n\n-- AddForeignKey\nALTER TABLE \"GuestAccess\" ADD CONSTRAINT \"GuestAccess_userId_fkey\" FOREIGN KEY (\"userId\") REFERENCES \"User\"(\"id\") ON DELETE RESTRICT ON UPDATE CASCADE;\n\n-- AddForeignKey\nALTER TABLE \"GuestAccess\" ADD CONSTRAINT \"GuestAccess_workspaceId_fkey\" FOREIGN KEY (\"workspaceId\") REFERENCES \"Workspace\"(\"id\") ON DELETE RESTRICT ON UPDATE CASCADE;\n"
  },
  {
    "path": "packages/app/prisma/migrations/20231017070342_add_teams_and_workspaces/migration.sql",
    "content": "-- DropForeignKey\nALTER TABLE \"GuestAccess\" DROP CONSTRAINT \"GuestAccess_userId_fkey\";\n\n-- DropForeignKey\nALTER TABLE \"GuestAccess\" DROP CONSTRAINT \"GuestAccess_workspaceId_fkey\";\n\n-- DropForeignKey\nALTER TABLE \"TeamMember\" DROP CONSTRAINT \"TeamMember_teamId_fkey\";\n\n-- DropForeignKey\nALTER TABLE \"TeamMember\" DROP CONSTRAINT \"TeamMember_userId_fkey\";\n\n-- DropForeignKey\nALTER TABLE \"Workspace\" DROP CONSTRAINT \"Workspace_teamId_fkey\";\n\n-- AddForeignKey\nALTER TABLE \"TeamMember\" ADD CONSTRAINT \"TeamMember_teamId_fkey\" FOREIGN KEY (\"teamId\") REFERENCES \"Team\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;\n\n-- AddForeignKey\nALTER TABLE \"TeamMember\" ADD CONSTRAINT \"TeamMember_userId_fkey\" FOREIGN KEY (\"userId\") REFERENCES \"User\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;\n\n-- AddForeignKey\nALTER TABLE \"Workspace\" ADD CONSTRAINT \"Workspace_teamId_fkey\" FOREIGN KEY (\"teamId\") REFERENCES \"Team\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;\n\n-- AddForeignKey\nALTER TABLE \"GuestAccess\" ADD CONSTRAINT \"GuestAccess_userId_fkey\" FOREIGN KEY (\"userId\") REFERENCES \"User\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;\n\n-- AddForeignKey\nALTER TABLE \"GuestAccess\" ADD CONSTRAINT \"GuestAccess_workspaceId_fkey\" FOREIGN KEY (\"workspaceId\") REFERENCES \"Workspace\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;\n"
  },
  {
    "path": "packages/app/prisma/migrations/20231127144216_/migration.sql",
    "content": "/*\n  Warnings:\n\n  - You are about to drop the `LibAuthenticationFlow` table. If the table is not empty, all the data it contains will be lost.\n\n*/\n-- CreateEnum\nCREATE TYPE \"DeviceAuthorizationFlowState\" AS ENUM ('initialized', 'userAllowedAuth', 'userDeniedAuth', 'tokenAlreadyUsed');\n\n-- DropTable\nDROP TABLE \"LibAuthenticationFlow\";\n\n-- DropEnum\nDROP TYPE \"LibAuthenticationFlowState\";\n\n-- CreateTable\nCREATE TABLE \"DeviceAuthorizationFlow\" (\n    \"deviceCode\" TEXT NOT NULL,\n    \"userCode\" TEXT NOT NULL,\n    \"createdAt\" TIMESTAMPTZ NOT NULL,\n    \"lastCheckTime\" TIMESTAMPTZ NOT NULL,\n    \"nounce\" TEXT NOT NULL,\n    \"state\" \"DeviceAuthorizationFlowState\" NOT NULL DEFAULT 'initialized',\n    \"tokens\" TEXT NOT NULL,\n\n    CONSTRAINT \"DeviceAuthorizationFlow_pkey\" PRIMARY KEY (\"deviceCode\")\n);\n\n-- CreateIndex\nCREATE UNIQUE INDEX \"DeviceAuthorizationFlow_userCode_key\" ON \"DeviceAuthorizationFlow\"(\"userCode\");\n"
  },
  {
    "path": "packages/app/prisma/migrations/20231127153849_pkce/migration.sql",
    "content": "-- AlterTable\nALTER TABLE \"DeviceAuthorizationFlow\" ADD COLUMN     \"codeChallenge\" TEXT NOT NULL DEFAULT '',\nADD COLUMN     \"codeChallengeMethod\" TEXT NOT NULL DEFAULT 'S256';\n"
  },
  {
    "path": "packages/app/prisma/migrations/20231202190130_scopes/migration.sql",
    "content": "-- AlterTable\nALTER TABLE \"DeviceAuthorizationFlow\" ADD COLUMN     \"scopes\" JSONB NOT NULL DEFAULT '[]';\n"
  },
  {
    "path": "packages/app/prisma/migrations/migration_lock.toml",
    "content": "# Please do not edit this file manually\n# It should be added in your version-control system (i.e. Git)\nprovider = \"postgresql\""
  },
  {
    "path": "packages/app/prisma/schema.prisma",
    "content": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ngenerator client {\n  provider = \"prisma-client-js\"\n  output   = \"./client-generated\"\n}\n\ndatasource db {\n  provider = \"postgresql\"\n  url      = env(\"DATABASE_URL\")\n}\n\nmodel Account {\n  id                String  @id @default(cuid())\n  userId            String\n  type              String\n  provider          String\n  providerAccountId String\n  refresh_token     String? @db.Text\n  access_token      String? @db.Text\n  expires_at        Int?\n  token_type        String?\n  scope             String?\n  id_token          String? @db.Text\n  session_state     String?\n\n  user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n  @@unique([provider, providerAccountId])\n}\n\nmodel User {\n  libSessions   LibSession[]\n  id            String        @id @default(cuid())\n  name          String?\n  email         String?       @unique\n  emailVerified DateTime?\n  image         String?\n  accounts      Account[]\n  sessions      Session[]\n  guestAccesses GuestAccess[]\n  teams         TeamMember[]\n\n  @@index([email], name: \"email\")\n}\n\nmodel Team {\n  id         String       @id @default(cuid())\n  name       String\n  workspaces Workspace[]\n  members    TeamMember[]\n  createdAt  DateTime     @default(now())\n}\n\nenum TeamUserRole {\n  OWNER\n  MEMBER\n}\n\nmodel TeamMember {\n  teamId   String\n  userId   String\n  team     Team         @relation(fields: [teamId], references: [id], onDelete: Cascade)\n  user     User         @relation(fields: [userId], references: [id], onDelete: Cascade)\n  userRole TeamUserRole\n  accepted Boolean      @default(false)\n\n  @@id([userId, teamId])\n  @@index([teamId])\n  @@index([userId])\n}\n\nmodel Workspace {\n  id          String        @id @default(cuid())\n  name        String\n  description String\n  teamId      String\n  team        Team          @relation(fields: [teamId], references: [id], onDelete: Cascade)\n  guests      GuestAccess[]\n  createdAt   DateTime      @default(now())\n}\n\nenum AccessLevel {\n  READ\n  READ_WRITE\n}\n\nmodel GuestAccess {\n  workspaceId String\n  userId      String\n  accessLevel AccessLevel\n  user        User        @relation(fields: [userId], references: [id], onDelete: Cascade)\n  workspace   Workspace   @relation(fields: [workspaceId], references: [id], onDelete: Cascade)\n  accepted    Boolean     @default(false)\n\n  @@id([userId, workspaceId])\n  @@index([workspaceId])\n  @@index([userId])\n}\n\nmodel Session {\n  id           String   @id @default(cuid())\n  sessionToken String   @unique\n  userId       String\n  expires      DateTime\n  user         User     @relation(fields: [userId], references: [id], onDelete: Cascade)\n}\n\nmodel VerificationToken {\n  identifier String\n  token      String   @unique\n  expires    DateTime\n\n  @@unique([identifier, token])\n}\n\n// We're using OAuth2's device authorization flow to authorize `@theatre/studio` hosted in random origins.\nmodel DeviceAuthorizationFlow {\n  deviceCode          String                       @id // a random token generated by the server, and shared with the libray. This token is the key the library will use to obtain the final access/refersh tokens\n  userCode            String                       @unique // a random, short token generated by the server. The user will then be redirected to [app]/auth/?userCode=[userCode]. At that URL, the user can log in via credentials, or if they're already logged in, they'll be asked whether to grant the library permission to edit projects\n  createdAt           DateTime                     @db.Timestamptz() // the time the flow started. If older than a certain interval, the flow is considered expired/\n  lastCheckTime       DateTime                     @db.Timestamptz() // the time the client last checked the status of this flow. If shorter than a certain interval, the client will be told to slow down.\n  nounce              String // a random token generated by the client. It'll be included in the final idToken, so the client can make sure the tokens belong to the authentication flow it initiated\n  codeChallenge       String                       @default(\"\") // code_challenge as per https://tools.ietf.org/html/rfc7636\n  codeChallengeMethod String                       @default(\"S256\") // code_challenge_method as per https://tools.ietf.org/html/rfc7636 (currently only \"S256\" is supported)\n  state               DeviceAuthorizationFlowState @default(initialized)\n  tokens              String // will be non-empty if state=1. It'll contain a json object containing access/refresh tokens\n  scopes              Json                         @default(\"[]\")\n}\n\nenum DeviceAuthorizationFlowState {\n  initialized\n  userAllowedAuth\n  userDeniedAuth\n  tokenAlreadyUsed\n}\n\nmodel LibSession {\n  refreshToken            String    @id\n  createdAt               DateTime  @db.Timestamptz()\n  validUntil              DateTime  @db.Timestamptz()\n  userId                  String\n  user                    User      @relation(fields: [userId], references: [id])\n  succeededByRefreshToken String? // if this session was refreshed, this will contain the refresh token of the new session\n  successorLinkExpresAt   DateTime? @db.Timestamptz() // the time at which the link to the successor will expire. This is supposed to give a minute of leeway for the client to access the new refresh token in case it didn't receive it in the first try\n}\n"
  },
  {
    "path": "packages/app/prisma/seed.ts",
    "content": "/**\n * Adds seed data to your db\n *\n * See https://www.prisma.io/docs/guides/database/seed-database\n */\nimport {PrismaClient} from './client-generated'\n\nconst prisma = new PrismaClient()\n\nasync function main() {\n  // nothing to seed rn\n}\n\nmain()\n  .catch((e) => {\n    console.error(e)\n    process.exit(1)\n  })\n  .finally(async () => {\n    await prisma.$disconnect()\n  })\n"
  },
  {
    "path": "packages/app/src/.eslintrc.json",
    "content": "{}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/_components/AccountSettingsPrompt.tsx",
    "content": "'use client'\n\nimport {type FC} from 'react'\nimport type {PromptProps} from '~/app/_components/Prompts'\nimport {confirm, prompt} from '~/app/_components/Prompts'\nimport {DialogHeader, DialogTitle} from '~/ui/components/ui/dialog'\nimport * as schemas from '~/schemas'\nimport {Button} from '~/ui/components/ui/button'\nimport {api} from '~/trpc/react'\nimport {promptValue} from '~/app/_components/Prompts'\nimport {toast} from '~/ui/components/ui/use-toast'\nimport {Separator} from '~/ui/components/ui/separator'\nimport {useRouter} from 'next/navigation'\n\nconst AccountSettingsPrompt: FC<PromptProps<null>> = ({done}) => {\n  const user = api.me.get.useQuery().data!\n  const updateUser = api.me.update.useMutation().mutateAsync\n  const deleteUser = api.me.delete.useMutation().mutateAsync\n  const queryUtils = api.useUtils()\n\n  const router = useRouter()\n\n  return (\n    <>\n      <DialogHeader>\n        <DialogTitle>Account Settings</DialogTitle>\n      </DialogHeader>\n      <div>\n        <div className=\"font-bold\">Name</div>\n        <div className=\"flex items-center\">\n          <div className=\"text-sm\">{user.name}</div>\n          <Button\n            variant=\"link\"\n            className=\"text-blue-500\"\n            onClick={async () => {\n              const name = await promptValue.string('Change name', {\n                defaultValue: user.name ?? '',\n                schema: schemas.personLegalName,\n              })\n\n              if (!name) return\n\n              try {\n                await updateUser({\n                  name,\n                })\n                void queryUtils.me.invalidate()\n              } catch (err) {\n                toast({\n                  variant: 'destructive',\n                  title: 'Uh oh! Something went wrong.',\n                  description: \"Couldn't update name.\",\n                })\n              }\n            }}\n          >\n            Edit\n          </Button>\n        </div>\n      </div>\n      <div>\n        <div className=\"font-bold\">Email</div>\n        <div className=\"flex items-center\">\n          <div className=\"text-sm\">{user.email}</div>\n          <Button\n            variant=\"link\"\n            className=\"text-blue-500\"\n            onClick={async () => {\n              const email = await promptValue.string('Change email', {\n                defaultValue: user.email ?? '',\n                schema: schemas.email,\n              })\n\n              if (!email) return\n\n              try {\n                await updateUser({\n                  email,\n                })\n                void queryUtils.me.invalidate()\n              } catch (err) {\n                toast({\n                  variant: 'destructive',\n                  title: 'Uh oh! Something went wrong.',\n                  description: \"Couldn't update email.\",\n                })\n              }\n            }}\n          >\n            Edit\n          </Button>\n        </div>\n      </div>\n      <Separator className=\"my-4\" />\n      <Button\n        variant=\"destructive\"\n        onClick={async () => {\n          const response = await confirm(\n            `Are you sure you want to delete your account?`,\n            \"This action can't be undone. Teams you are the only member of will be deleted as well and you won't be able to rejoin them later.\",\n          )\n\n          if (!response) return\n\n          try {\n            await deleteUser({safety: `DELETE`})\n            done(null)\n            router.replace('/')\n          } catch (err) {\n            toast({\n              variant: 'destructive',\n              title: 'Uh oh! Something went wrong.',\n              description: \"Couldn't delete your account.\",\n            })\n          }\n        }}\n      >\n        Delete account\n      </Button>\n    </>\n  )\n}\n\nexport const promptAccountSettings = () =>\n  prompt<null>((done) => <AccountSettingsPrompt done={done} />)\n"
  },
  {
    "path": "packages/app/src/app/(protected)/_components/AccountSwitcher.tsx",
    "content": "'use client'\n\nimport * as React from 'react'\nimport {signOut} from 'next-auth/react'\nimport {CaretSortIcon} from '@radix-ui/react-icons'\n\nimport {cn} from '~/ui/lib/utils'\nimport {Avatar, AvatarFallback, AvatarImage} from '~/ui/components/ui/avatar'\nimport {Button} from '~/ui/components/ui/button'\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '~/ui/components/ui/popover'\nimport {api} from '~/trpc/react'\nimport {promptAccountSettings} from './AccountSettingsPrompt'\n\nexport default function AccountSwitcher() {\n  const [open, setOpen] = React.useState(false)\n\n  const user = api.me.get.useQuery().data\n\n  return (\n    <Popover open={open} onOpenChange={setOpen}>\n      <PopoverTrigger asChild>\n        <Button\n          variant=\"ghost\"\n          role=\"combobox\"\n          aria-expanded={open}\n          aria-label=\"Select a team\"\n          className={cn('w-[200px] justify-between')}\n        >\n          <Avatar className=\"mr-2 h-5 w-5\">\n            <AvatarImage src={user?.image ?? ''} />\n            <AvatarFallback>\n              {user?.name?.split(/\\s/).map((part) => part.charAt(0))}\n            </AvatarFallback>\n          </Avatar>\n          {user?.name}\n          <CaretSortIcon className=\"ml-auto h-4 w-4 shrink-0 opacity-50\" />\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"flex w-[200px] p-2 flex-col\">\n        <Button\n          variant=\"ghost\"\n          className=\"w-full justify-start\"\n          onClick={() => promptAccountSettings()}\n        >\n          Account settings\n        </Button>\n        <Button\n          variant=\"ghost\"\n          className=\"w-full justify-start\"\n          onClick={() =>\n            signOut({\n              callbackUrl: '/',\n            })\n          }\n        >\n          Sign out\n        </Button>\n      </PopoverContent>\n    </Popover>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/_components/EditWorkspaceDialog.tsx",
    "content": "'use client'\n\nimport {\n  Dialog,\n  DialogContent,\n  DialogHeader,\n  DialogTitle,\n  DialogFooter,\n} from '~/ui/components/ui/dialog'\nimport {Input} from '~/ui/components/ui/input'\nimport {Button} from '~/ui/components/ui/button'\nimport {useForm} from 'react-hook-form'\nimport * as z from 'zod'\nimport {zodResolver} from '@hookform/resolvers/zod'\nimport * as schemas from 'src/schemas'\nimport {api} from '~/trpc/react'\nimport {\n  Form,\n  FormControl,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage,\n} from 'src/ui/components/ui/form'\nimport {useToast} from '~/ui/components/ui/use-toast'\nimport {Loader} from 'lucide-react'\n\nconst formSchema = z.object({\n  name: schemas.workspaceName,\n  description: schemas.workspaceDescription,\n})\n\nexport default function EditWorkspaceDialog({\n  workspace: {\n    id: workspaceId,\n    name: workspaceName,\n    description: workspaceDescription,\n  },\n  open,\n  onOpenChange,\n}: {\n  workspace: {\n    id: string\n    name: string\n    description: string\n  }\n  open: boolean\n  onOpenChange: (isOpen: boolean) => void\n}) {\n  const {toast} = useToast()\n  const {mutateAsync, isLoading} = api.workspaces.update.useMutation()\n  const queryUtils = api.useUtils()\n  const form = useForm<z.infer<typeof formSchema>>({\n    resolver: zodResolver(formSchema),\n    defaultValues: {\n      name: workspaceName,\n      description: workspaceDescription,\n    },\n  })\n\n  async function onSubmit(values: z.infer<typeof formSchema>) {\n    try {\n      onOpenChange(false)\n      await mutateAsync({\n        id: workspaceId,\n        name: values.name,\n        description: values.description,\n      })\n      void queryUtils.teams.invalidate()\n      void queryUtils.workspaces.invalidate()\n    } catch (error) {\n      toast({\n        variant: 'destructive',\n        title: 'Uh oh! Something went wrong.',\n        description: \"Couldn't update the workspace.\",\n      })\n    }\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-[425px]\">\n        <DialogHeader>\n          <DialogTitle>Edit Workspace</DialogTitle>\n        </DialogHeader>\n\n        <Form {...form}>\n          <form onSubmit={form.handleSubmit(onSubmit)}>\n            <div className=\"grid gap-4 py-4 space-y-8\">\n              <FormField\n                control={form.control}\n                name=\"name\"\n                render={({field}) => (\n                  <FormItem>\n                    <FormLabel>Name</FormLabel>\n                    <FormControl>\n                      <Input {...field} />\n                    </FormControl>\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n              <FormField\n                control={form.control}\n                name=\"description\"\n                render={({field}) => (\n                  <FormItem>\n                    <FormLabel>Description</FormLabel>\n                    <FormControl>\n                      <Input {...field} />\n                    </FormControl>\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n            </div>\n            <DialogFooter>\n              <Button type=\"submit\" disabled={isLoading}>\n                {isLoading ? <Loader /> : 'Submit'}\n              </Button>\n            </DialogFooter>\n          </form>\n        </Form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/_components/InviteGuestsDialog.tsx",
    "content": "'use client'\n\nimport {Suspense} from 'react'\nimport {useForm} from 'react-hook-form'\nimport * as z from 'zod'\nimport {zodResolver} from '@hookform/resolvers/zod'\nimport {api} from '~/trpc/react'\nimport {Avatar, AvatarFallback, AvatarImage} from '~/ui/components/ui/avatar'\nimport {Button} from '~/ui/components/ui/button'\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogHeader,\n} from '~/ui/components/ui/dialog'\nimport {Input} from '~/ui/components/ui/input'\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '~/ui/components/ui/select'\nimport {Separator} from '~/ui/components/ui/separator'\nimport {\n  Form,\n  FormControl,\n  FormField,\n  FormItem,\n  FormMessage,\n} from '~/ui/components/ui/form'\nimport {useToast} from '~/ui/components/ui/use-toast'\n\nconst formSchema = z.object({\n  email: z.string().email(),\n  accessLevel: z.enum(['READ', 'READ_WRITE']),\n})\n\nexport default function InviteGuestsDialog({\n  workspaceId,\n  open,\n  onOpenChange,\n}: {\n  workspaceId: string\n  open: boolean\n  onOpenChange: (isOpen: boolean) => void\n}) {\n  const {mutateAsync: inviteGuests, isLoading} =\n    api.workspaces.inviteGuests.useMutation()\n  const queryUtils = api.useUtils()\n\n  const form = useForm<z.infer<typeof formSchema>>({\n    resolver: zodResolver(formSchema),\n    defaultValues: {\n      email: '',\n      accessLevel: 'READ_WRITE',\n    },\n  })\n  const {toast} = useToast()\n\n  async function onSubmit(values: z.infer<typeof formSchema>) {\n    try {\n      await inviteGuests({\n        id: workspaceId,\n        invites: [{email: values.email, accessLevel: values.accessLevel}],\n      })\n      void queryUtils.workspaces.invalidate()\n    } catch (error) {\n      toast({\n        variant: 'destructive',\n        title: 'Uh oh! Something went wrong.',\n        description: 'Make sure the guest has an account.',\n      })\n    }\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent>\n        <DialogHeader>\n          <DialogHeader>Share this workspace</DialogHeader>\n        </DialogHeader>\n        <Form {...form}>\n          <form onSubmit={form.handleSubmit(onSubmit)}>\n            <div className=\"flex space-x-2\">\n              {/* <Input value=\"http://example.com/link/to/document\" readOnly />\n              <Button variant=\"secondary\" className=\"shrink-0\">\n                Invite\n              </Button> */}\n              <FormField\n                control={form.control}\n                name=\"email\"\n                render={({field}) => (\n                  <FormItem className=\"flex-1\">\n                    <FormControl>\n                      <Input {...field} placeholder=\"janedoe@example.com\" />\n                    </FormControl>\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n              <FormField\n                control={form.control}\n                name=\"accessLevel\"\n                render={({field}) => (\n                  <FormItem className=\"\">\n                    <Select\n                      onValueChange={field.onChange}\n                      defaultValue={field.value}\n                    >\n                      <FormControl>\n                        <SelectTrigger>\n                          <SelectValue defaultValue={field.value} />\n                        </SelectTrigger>\n                      </FormControl>\n                      <SelectContent>\n                        <SelectItem value=\"READ_WRITE\">Edit</SelectItem>\n                        <SelectItem value=\"READ\">Read</SelectItem>\n                      </SelectContent>\n                    </Select>\n                  </FormItem>\n                )}\n              />\n              <Button type=\"submit\" disabled={isLoading}>\n                Invite\n              </Button>\n            </div>\n          </form>\n        </Form>\n        <Separator className=\"my-4\" />\n        <div className=\"space-y-4\">\n          <h4 className=\"text-sm font-medium\">Guests</h4>\n          <Suspense fallback={<div>Loading...</div>}>\n            <Guests workspaceId={workspaceId} />\n          </Suspense>\n        </div>\n      </DialogContent>\n    </Dialog>\n  )\n}\n\nfunction Guests({workspaceId}: {workspaceId: string}) {\n  const guests = api.workspaces.getGuests.useQuery({id: workspaceId}).data!\n  const {mutateAsync: removeGuest} = api.workspaces.removeGuest.useMutation()\n  const {mutateAsync: changeAccessLevel} =\n    api.workspaces.changeGuestAccess.useMutation()\n  const queryUtils = api.useUtils()\n\n  // if no guests, return a call to action\n  if (guests.length === 0) {\n    return (\n      <DialogDescription>\n        Invite people to collaborate on this workspace.\n      </DialogDescription>\n    )\n  }\n\n  async function handleRemoveGuest(email: string) {\n    await removeGuest({id: workspaceId, email})\n    void queryUtils.workspaces.getGuests.invalidate()\n  }\n\n  async function handleChangeAccessLevel(\n    email: string,\n    accessLevel: 'READ' | 'READ_WRITE',\n  ) {\n    await changeAccessLevel({id: workspaceId, email, accessLevel})\n    void queryUtils.workspaces.getGuests.invalidate()\n  }\n\n  return (\n    <div className=\"grid gap-6\">\n      {guests.map((guest) => (\n        <div className=\"flex items-center justify-between space-x-4\">\n          <div className=\"flex items-center space-x-4\">\n            <Avatar>\n              {guest.accepted ? (\n                <>\n                  <AvatarImage src={guest.image ?? ''} />\n                  <AvatarFallback>\n                    {guest.name!.split(/\\s/).map((part) => part.charAt(0))}\n                  </AvatarFallback>\n                </>\n              ) : (\n                <>\n                  <AvatarFallback className=\"border border-muted-foreground border-dashed bg-transparent\" />\n                </>\n              )}\n            </Avatar>\n            <div>\n              <p className=\"text-sm font-medium leading-none\">\n                {guest.accepted ? guest.name : 'Invitation pending...'}\n              </p>\n              <p className=\"text-sm text-muted-foreground\">{guest.email}</p>\n            </div>\n          </div>\n\n          <Select\n            value={guest.accessLevel}\n            onValueChange={(accessLevel) =>\n              handleChangeAccessLevel(\n                guest.email,\n                accessLevel as 'READ' | 'READ_WRITE',\n              )\n            }\n          >\n            <SelectTrigger className=\"ml-auto w-[110px]\">\n              <SelectValue defaultValue={guest.accessLevel} />\n            </SelectTrigger>\n            <SelectContent>\n              <SelectItem value=\"READ_WRITE\">Can edit</SelectItem>\n              <SelectItem value=\"READ\">Can view</SelectItem>\n              <Separator className=\"my-2\" />\n              <Button\n                variant=\"ghost\"\n                className=\"w-full h-8 hover:bg-destructive hover:text-destructive-foreground\"\n                onClick={() => handleRemoveGuest(guest.email)}\n              >\n                Remove\n              </Button>\n            </SelectContent>\n          </Select>\n        </div>\n      ))}\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/_components/InviteTeamMembersPrompt.tsx",
    "content": "'use client'\n\nimport {Suspense, type FC} from 'react'\nimport {api} from '~/trpc/react'\nimport {Button} from '~/ui/components/ui/button'\nimport {DialogHeader, DialogTitle} from '~/ui/components/ui/dialog'\nimport {Separator} from '~/ui/components/ui/separator'\nimport Members from './TeamMembers'\nimport {prompt} from '~/app/_components/Prompts'\nimport {Input} from '~/ui/components/ui/input'\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '~/ui/components/ui/select'\nimport {\n  Form,\n  FormControl,\n  FormField,\n  FormItem,\n  FormMessage,\n} from '~/ui/components/ui/form'\nimport {useToast} from '~/ui/components/ui/use-toast'\nimport {useForm} from 'react-hook-form'\nimport * as z from 'zod'\nimport {zodResolver} from '@hookform/resolvers/zod'\n\nconst formSchema = z.object({\n  email: z.string().email(),\n  role: z.enum(['MEMBER', 'OWNER']),\n})\n\nconst InviteTeamMembersPrompt: FC<{id: string}> = ({id}) => {\n  const team = api.teams.get.useQuery({id}).data!\n  const inviteMembers = api.teams.inviteMembers.useMutation().mutateAsync\n  const queryUtils = api.useUtils()\n\n  const {toast} = useToast()\n\n  const form = useForm<z.infer<typeof formSchema>>({\n    resolver: zodResolver(formSchema),\n    defaultValues: {\n      email: '',\n      role: 'MEMBER',\n    },\n  })\n\n  async function onSubmit(values: z.infer<typeof formSchema>) {\n    try {\n      await inviteMembers({\n        id,\n        invites: [{email: values.email, role: values.role}],\n      })\n      void queryUtils.teams.invalidate()\n    } catch (error) {\n      toast({\n        variant: 'destructive',\n        title: 'Uh oh! Something went wrong.',\n        description: 'Make sure the initee has an account.',\n      })\n    }\n  }\n\n  return (\n    <>\n      <DialogHeader>\n        <DialogTitle>Invite Members to {team.name}</DialogTitle>\n      </DialogHeader>\n      <Form {...form}>\n        <form onSubmit={form.handleSubmit(onSubmit)}>\n          <div className=\"flex space-x-2\">\n            <FormField\n              control={form.control}\n              name=\"email\"\n              render={({field}) => (\n                <FormItem className=\"flex-1\">\n                  <FormControl>\n                    <Input {...field} placeholder=\"janedoe@example.com\" />\n                  </FormControl>\n                  <FormMessage />\n                </FormItem>\n              )}\n            />\n            <FormField\n              control={form.control}\n              name=\"role\"\n              render={({field}) => (\n                <FormItem className=\"\">\n                  <Select\n                    onValueChange={field.onChange}\n                    defaultValue={field.value}\n                  >\n                    <FormControl>\n                      <SelectTrigger>\n                        <SelectValue defaultValue={field.value} />\n                      </SelectTrigger>\n                    </FormControl>\n                    <SelectContent>\n                      <SelectItem value=\"MEMBER\">Member</SelectItem>\n                      <SelectItem value=\"OWNER\">Owner</SelectItem>\n                    </SelectContent>\n                  </Select>\n                </FormItem>\n              )}\n            />\n            <Button type=\"submit\">Invite</Button>\n          </div>\n        </form>\n      </Form>\n      <Separator className=\"my-4\" />\n      <div className=\"space-y-4\">\n        <h4 className=\"text-sm font-medium\">Members</h4>\n        <Suspense fallback={<div>Loading...</div>}>\n          <Members teamId={id} />\n        </Suspense>\n      </div>\n    </>\n  )\n}\n\nexport const promptInviteMembers = (id: string) =>\n  prompt<null>(() => <InviteTeamMembersPrompt id={id} />)\n"
  },
  {
    "path": "packages/app/src/app/(protected)/_components/Navigation.tsx",
    "content": "'use client'\n\nimport {Suspense} from 'react'\nimport Link from 'next/link'\nimport {useSelectedLayoutSegments} from 'next/navigation'\nimport {api} from '~/trpc/react'\nimport {Button} from '~/ui/components/ui/button'\nimport {cn} from '~/ui/lib/utils'\nimport AccountSwitcher from './AccountSwitcher'\nimport NotificationsPopover from './NotificationsPopover'\nimport {Plus} from 'lucide-react'\nimport {promptValue} from '~/app/_components/Prompts'\nimport * as schemas from '~/schemas'\nimport {promptInviteMembers} from './InviteTeamMembersPrompt'\n\nexport default function Navigation() {\n  const teams = api.teams.getAll.useQuery().data!\n  const createTeam = api.teams.create.useMutation().mutateAsync\n  const segments = useSelectedLayoutSegments()\n  const selected = segments[0] === 'team' ? segments[1] : segments[0]\n  const queryUtils = api.useUtils()\n\n  return (\n    <div>\n      <div className={cn('pb-12')}>\n        <div className=\"space-y-4 py-4\">\n          <div className=\"px-3 py-2\">\n            <div className=\"flex items-center justify-between mb-2\">\n              <Suspense>\n                <AccountSwitcher />\n              </Suspense>\n              <div>\n                <NotificationsPopover />\n              </div>\n            </div>\n\n            <div className=\"space-y-1\">\n              <Link href=\"/recents\">\n                <Button\n                  variant={selected === 'recents' ? 'secondary' : 'ghost'}\n                  className=\"w-full justify-start\"\n                >\n                  Recents\n                </Button>\n              </Link>\n\n              <Link href=\"/shared-with-me\">\n                <Button\n                  variant={\n                    selected === 'shared-with-me' ? 'secondary' : 'ghost'\n                  }\n                  className=\"w-full justify-start\"\n                >\n                  Shared with me\n                </Button>\n              </Link>\n            </div>\n          </div>\n          <div className=\"px-3 py-2\">\n            <div className=\"flex gap-2 items-center group mb-2\">\n              <h2 className=\"pl-4 text-lg font-semibold tracking-tight\">\n                Teams\n              </h2>\n              <Button\n                variant=\"outline\"\n                size=\"icon\"\n                className=\"invisible group-hover:visible h-7 w-7\"\n                onClick={async () => {\n                  const name = await promptValue.string('Create team', {\n                    label: 'Team name',\n                    schema: schemas.teamName,\n                  })\n                  if (!name) return\n                  const {id} = await createTeam({name})\n                  await promptInviteMembers(id)\n                  void queryUtils.teams.invalidate()\n                }}\n              >\n                <Plus className=\"h-4 w-4\" />\n              </Button>\n            </div>\n            <div className=\"space-y-1\">\n              {teams\n                .filter((team) =>\n                  team.members.some((member) => member.accepted),\n                )\n                .map((team) => (\n                  <Link key={team.id} href={`/team/${team.id}`}>\n                    <Button\n                      variant={selected === team.id ? 'secondary' : 'ghost'}\n                      className=\"w-full justify-start\"\n                    >\n                      {team.name}\n                    </Button>\n                  </Link>\n                  // <ContextMenu>\n                  //   <ContextMenuTrigger>\n                  //     <Link key={team.id} href={`/team/${team.id}`}>\n                  //       <Button\n                  //         variant={selected === team.id ? 'secondary' : 'ghost'}\n                  //         className=\"w-full justify-start\"\n                  //       >\n                  //         {team.name}\n                  //       </Button>\n                  //     </Link>\n                  //   </ContextMenuTrigger>\n                  //   <ContextMenuContent className=\"w-40\">\n                  //     <ContextMenuItem\n                  //       onSelect={async () => {\n                  //       }}\n                  //     >\n                  //       Rename\n                  //     </ContextMenuItem>\n                  //   </ContextMenuContent>\n                  // </ContextMenu>\n                ))}\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/_components/NewWorkspaceDialog.tsx",
    "content": "'use client'\n\nimport {useState} from 'react'\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogHeader,\n  DialogTrigger,\n  DialogTitle,\n  DialogFooter,\n} from '~/ui/components/ui/dialog'\nimport {Input} from '~/ui/components/ui/input'\nimport {Button} from '~/ui/components/ui/button'\nimport {Plus} from 'lucide-react'\nimport {useForm} from 'react-hook-form'\nimport * as z from 'zod'\nimport {zodResolver} from '@hookform/resolvers/zod'\nimport * as schemas from 'src/schemas'\nimport {api} from '~/trpc/react'\nimport {\n  Form,\n  FormControl,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage,\n} from 'src/ui/components/ui/form'\nimport {useToast} from '~/ui/components/ui/use-toast'\nimport {ToastAction} from '~/ui/components/ui/toast'\nimport {Loader} from 'lucide-react'\n\nconst formSchema = z.object({\n  name: schemas.workspaceName,\n  description: schemas.workspaceDescription,\n})\n\nexport default function NewWorkspaceDialog({teamId}: {teamId: string}) {\n  const [isOpen, setIsOpen] = useState(false)\n  const {toast} = useToast()\n  const {mutateAsync, isLoading} = api.workspaces.create.useMutation()\n  const queryUtils = api.useUtils()\n  const form = useForm<z.infer<typeof formSchema>>({\n    resolver: zodResolver(formSchema),\n    defaultValues: {\n      name: 'New Workspace',\n      description: '',\n    },\n  })\n\n  async function onSubmit(values: z.infer<typeof formSchema>) {\n    try {\n      setIsOpen(false)\n      await mutateAsync({\n        name: values.name,\n        description: values.description,\n        teamId,\n      })\n      void queryUtils.teams.invalidate()\n      void queryUtils.workspaces.invalidate()\n    } catch (error) {\n      toast({\n        variant: 'destructive',\n        title: 'Uh oh! Something went wrong.',\n        description: \"Couldn't create the workspace.\",\n        action: <ToastAction altText=\"Try again\">Try again</ToastAction>,\n      })\n    }\n  }\n\n  return (\n    <Dialog open={isOpen} onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n      <DialogTrigger asChild>\n        <Button onClick={() => {}}>\n          <Plus className=\"mr-2 h-4 w-4\" />\n          Workspace\n        </Button>\n      </DialogTrigger>\n      <DialogContent className=\"sm:max-w-[425px]\">\n        <DialogHeader>\n          <DialogTitle>New Workspace</DialogTitle>\n          <DialogDescription>\n            Create a new workspace for your team.\n          </DialogDescription>\n        </DialogHeader>\n\n        <Form {...form}>\n          <form onSubmit={form.handleSubmit(onSubmit)}>\n            <div className=\"grid gap-4 py-4 space-y-8\">\n              <FormField\n                control={form.control}\n                name=\"name\"\n                render={({field}) => (\n                  <FormItem>\n                    <FormLabel>Name</FormLabel>\n                    <FormControl>\n                      <Input {...field} />\n                    </FormControl>\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n              <FormField\n                control={form.control}\n                name=\"description\"\n                render={({field}) => (\n                  <FormItem>\n                    <FormLabel>Description</FormLabel>\n                    <FormControl>\n                      <Input {...field} />\n                    </FormControl>\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n            </div>\n            <DialogFooter>\n              <Button type=\"submit\" disabled={isLoading}>\n                {isLoading ? <Loader /> : 'Create'}\n              </Button>\n            </DialogFooter>\n          </form>\n        </Form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/_components/NotificationsPopover.tsx",
    "content": "'use client'\n\nimport {Suspense} from 'react'\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from '~/ui/components/ui/popover'\nimport {Bell} from 'lucide-react'\nimport {Button} from '~/ui/components/ui/button'\nimport {api} from '~/trpc/react'\n\nexport default function NotificationsPopover() {\n  return (\n    <Popover>\n      <PopoverTrigger asChild>\n        <Button variant=\"outline\" size=\"icon\">\n          <Bell className=\"h-4 w-4\" />\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent side=\"right\" align=\"start\" className=\"w-[500px]\">\n        <h2 className=\"mb-5 text-lg font-semibold tracking-tight\">\n          Notifications\n        </h2>\n        <Suspense>\n          <Invitations />\n        </Suspense>\n      </PopoverContent>\n    </Popover>\n  )\n}\n\nconst Invitations = () => {\n  const me = api.me.get.useQuery().data!\n  const guestInvitations = api.me.getGuestInvitations.useQuery().data!\n  const teamInvitations = api.me.getTeamInvitations.useQuery().data!\n  const acceptTeamInvitation = api.teams.acceptInvite.useMutation().mutateAsync\n  const acceptGuestInvitation =\n    api.workspaces.acceptInvite.useMutation().mutateAsync\n  const rejectTeamInvitation = api.teams.removeMember.useMutation().mutateAsync\n  const rejectGuestInvitation =\n    api.workspaces.removeGuest.useMutation().mutateAsync\n  const queryUtils = api.useUtils()\n\n  return (\n    <div className=\"flex flex-col gap-1\">\n      {guestInvitations.map((invitation) => (\n        <div className=\"flex items-center justify-between space-x-4 gap-4\">\n          <div className=\"text-sm font-light leading-none flex-1\">\n            You have been invited to{' '}\n            {invitation.accessLevel === 'READ' ? 'read' : 'edit'}{' '}\n            <span className=\"text-sm font-bold\">\n              {invitation.workspaceName}\n            </span>\n          </div>\n          <div className=\"flex gap-1\">\n            <Button\n              onClick={async () => {\n                await acceptGuestInvitation({id: invitation.workspaceId})\n                void queryUtils.me.getGuestInvitations.invalidate()\n                void queryUtils.workspaces.invalidate()\n              }}\n              size=\"sm\"\n            >\n              Accept\n            </Button>\n            <Button\n              onClick={async () => {\n                await rejectGuestInvitation({\n                  id: invitation.workspaceId,\n                  email: me.email!,\n                })\n                void queryUtils.me.getGuestInvitations.invalidate()\n                void queryUtils.workspaces.invalidate()\n              }}\n              variant=\"ghost\"\n              size=\"sm\"\n            >\n              Reject\n            </Button>\n          </div>\n        </div>\n      ))}\n      {teamInvitations.map((invitation) => (\n        <div className=\"flex items-center justify-between space-x-4 gap-4\">\n          <div className=\"text-sm font-light leading-none flex-1\">\n            You have been invited to join{' '}\n            <span className=\"text-sm font-bold\">{invitation.teamName}</span>\n          </div>\n          <div className=\"flex gap-1\">\n            <Button\n              onClick={async () => {\n                await acceptTeamInvitation({id: invitation.teamId})\n                void queryUtils.me.getTeamInvitations.invalidate()\n                void queryUtils.teams.invalidate()\n              }}\n              size=\"sm\"\n            >\n              Accept\n            </Button>\n            <Button\n              onClick={async () => {\n                await rejectTeamInvitation({\n                  id: invitation.teamId,\n                  email: me.email!,\n                })\n                void queryUtils.me.getTeamInvitations.invalidate()\n                void queryUtils.teams.invalidate()\n              }}\n              variant=\"ghost\"\n              size=\"sm\"\n            >\n              Reject\n            </Button>\n          </div>\n        </div>\n      ))}\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/_components/SessionProvider.tsx",
    "content": "'use client'\n\nimport {type Session} from 'next-auth'\nimport {SessionProvider as NextAuthSessionProvider} from 'next-auth/react'\n\nexport default async function SessionProvider({\n  children,\n  session,\n}: {\n  children: React.ReactNode\n  session: Session\n}) {\n  return (\n    <NextAuthSessionProvider session={session}>\n      {children}\n    </NextAuthSessionProvider>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/_components/TeamMembers.tsx",
    "content": "import {api} from '~/trpc/react'\nimport {Avatar, AvatarFallback, AvatarImage} from '~/ui/components/ui/avatar'\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '~/ui/components/ui/select'\nimport {Separator} from '~/ui/components/ui/separator'\nimport {Button} from '~/ui/components/ui/button'\nimport {useToast} from '~/ui/components/ui/use-toast'\n\nexport default function Members({teamId}: {teamId: string}) {\n  const members = api.teams.getMembers.useQuery({id: teamId}).data!\n  const removeMember = api.teams.removeMember.useMutation().mutateAsync\n  const changeMemberRole = api.teams.changeMemberRole.useMutation().mutateAsync\n  const queryUtils = api.useUtils()\n\n  const {toast} = useToast()\n\n  async function handleRemoveMember(email: string) {\n    await removeMember({id: teamId, email})\n    void queryUtils.teams.getMembers.invalidate()\n  }\n\n  async function handleChangeRole(email: string, role: 'MEMBER' | 'OWNER') {\n    try {\n      await changeMemberRole({id: teamId, email, role})\n      void queryUtils.teams.getMembers.invalidate()\n    } catch (error) {\n      toast({\n        variant: 'destructive',\n        title: 'Uh oh! Something went wrong.',\n      })\n    }\n  }\n\n  return (\n    <div className=\"grid gap-6\">\n      {members.map((member) => (\n        <div className=\"flex items-center justify-between space-x-4\">\n          <div className=\"flex items-center space-x-4\">\n            <Avatar>\n              {member.accepted ? (\n                <>\n                  <AvatarImage src={member.image ?? ''} />\n                  <AvatarFallback>\n                    {member.name!.split(/\\s/).map((part) => part.charAt(0))}\n                  </AvatarFallback>\n                </>\n              ) : (\n                <>\n                  <AvatarFallback className=\"border border-muted-foreground border-dashed bg-transparent\" />\n                </>\n              )}\n            </Avatar>\n            <div>\n              <p className=\"text-sm font-medium leading-none\">\n                {member.accepted ? member.name : 'Invitation pending...'}\n              </p>\n              <p className=\"text-sm text-muted-foreground\">{member.email}</p>\n            </div>\n          </div>\n\n          <Select\n            value={member.role}\n            onValueChange={(role) =>\n              handleChangeRole(member.email, role as 'MEMBER' | 'OWNER')\n            }\n          >\n            <SelectTrigger className=\"ml-auto w-[110px]\">\n              <SelectValue defaultValue={member.role} />\n            </SelectTrigger>\n            <SelectContent>\n              <SelectItem value=\"MEMBER\">Member</SelectItem>\n              <SelectItem value=\"OWNER\">Owner</SelectItem>\n              <Separator className=\"my-2\" />\n              <Button\n                variant=\"ghost\"\n                className=\"w-full h-8 hover:bg-destructive hover:text-destructive-foreground\"\n                onClick={() => handleRemoveMember(member.email)}\n              >\n                Remove\n              </Button>\n            </SelectContent>\n          </Select>\n        </div>\n      ))}\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/_components/TeamSettingsPrompt.tsx",
    "content": "'use client'\n\nimport {type FC, Suspense} from 'react'\nimport type {PromptProps} from '~/app/_components/Prompts';\nimport { confirm, prompt} from '~/app/_components/Prompts'\nimport {DialogHeader, DialogTitle} from '~/ui/components/ui/dialog'\nimport * as schemas from '~/schemas'\nimport {Button} from '~/ui/components/ui/button'\nimport {api} from '~/trpc/react'\nimport {promptValue} from '~/app/_components/Prompts'\nimport {toast} from '~/ui/components/ui/use-toast'\nimport {Separator} from '~/ui/components/ui/separator'\nimport Members from './TeamMembers'\nimport {promptInviteMembers} from './InviteTeamMembersPrompt'\nimport {useRouter} from 'next/navigation'\n\nconst TeamSettingsPrompt: FC<{id: string} & PromptProps<null>> = ({\n  id,\n  done,\n}) => {\n  const team = api.teams.get.useQuery({id}).data!\n  const updateTeam = api.teams.update.useMutation().mutateAsync\n  const deleteTeam = api.teams.delete.useMutation().mutateAsync\n  const queryUtils = api.useUtils()\n\n  const router = useRouter()\n\n  return (\n    <>\n      <DialogHeader>\n        <DialogTitle>Team Settings</DialogTitle>\n      </DialogHeader>\n      <div>\n        <div className=\"font-bold\">Team name</div>\n        <div className=\"flex items-center\">\n          <div className=\"text-sm\">{team.name}</div>\n          <Button\n            variant=\"link\"\n            className=\"text-blue-500\"\n            onClick={async () => {\n              const name = await promptValue.string(`Rename ${team.name}`, {\n                defaultValue: team.name,\n                schema: schemas.teamName,\n              })\n\n              if (!name) return\n\n              try {\n                await updateTeam({\n                  id,\n                  name,\n                })\n                void queryUtils.teams.invalidate()\n              } catch (err) {\n                toast({\n                  variant: 'destructive',\n                  title: 'Uh oh! Something went wrong.',\n                  description: \"Couldn't update team name.\",\n                })\n              }\n            }}\n          >\n            Edit\n          </Button>\n        </div>\n      </div>\n      <Separator className=\"my-4\" />\n      <div className=\"space-y-4\">\n        <div className=\"flex items-center\">\n          <h4 className=\"text-sm font-medium\">Members</h4>\n          <Button\n            variant=\"link\"\n            className=\"text-blue-500\"\n            onClick={async () => {\n              void promptInviteMembers(id)\n            }}\n          >\n            Invite\n          </Button>\n        </div>\n        <Suspense fallback={<div>Loading...</div>}>\n          <Members teamId={id} />\n        </Suspense>\n      </div>\n      <Separator className=\"my-4\" />\n      <Button\n        variant=\"destructive\"\n        onClick={async () => {\n          const response = await confirm(\n            `Are you sure you want to delete ${team.name}?`,\n            \"Deleting a team will delete all of the team's workspaces and cannot be undone.\",\n          )\n\n          if (!response) return\n\n          try {\n            await deleteTeam({id, safety: `delete ${team.name}`})\n            done(null)\n            router.replace('/')\n          } catch (err) {\n            toast({\n              variant: 'destructive',\n              title: 'Uh oh! Something went wrong.',\n              description: \"Couldn't delete team.\",\n            })\n          }\n        }}\n      >\n        Delete {team.name}\n      </Button>\n    </>\n  )\n}\n\nexport const promptTeamSettings = (id: string) =>\n  prompt<null>((done) => <TeamSettingsPrompt id={id} done={done} />)\n"
  },
  {
    "path": "packages/app/src/app/(protected)/_components/WorkspaceThumb.tsx",
    "content": "import {cn} from '~/ui/lib/utils'\nimport {\n  ContextMenu,\n  ContextMenuContent,\n  ContextMenuItem,\n  ContextMenuTrigger,\n} from '~/ui/components/ui/context-menu'\n\ninterface WorkspaceThumbProps extends React.HTMLAttributes<HTMLDivElement> {\n  name: string\n  description: string\n  thumbnail: string\n  onDelete?: () => void\n  onDuplicate?: () => void\n  onInvite?: () => void\n  onEdit?: () => void\n  allowEdit?: boolean\n}\n\nexport default function WorkspaceThumb({\n  name,\n  description,\n  thumbnail,\n  onDelete,\n  onDuplicate,\n  onInvite,\n  onEdit,\n  allowEdit,\n  className,\n  ...props\n}: WorkspaceThumbProps) {\n  return (\n    <div className={cn('space-y-3', className)} {...props}>\n      <ContextMenu>\n        <ContextMenuTrigger disabled={!allowEdit}>\n          <div className=\"overflow-hidden rounded-md w-full h-[200px]\">\n            <div\n              className={'transition-all hover:scale-105 w-full h-full'}\n              style={{\n                backgroundImage: `url(${thumbnail})`,\n                backgroundSize: 'cover',\n                backgroundPosition: 'center',\n              }}\n            />\n          </div>\n        </ContextMenuTrigger>\n        <ContextMenuContent className=\"w-40\">\n          <ContextMenuItem onSelect={onInvite}>\n            Invite collaborators\n          </ContextMenuItem>\n          <ContextMenuItem onSelect={onEdit}>Edit</ContextMenuItem>\n          <ContextMenuItem onSelect={onDuplicate}>Duplicate</ContextMenuItem>\n          <ContextMenuItem\n            onSelect={onDelete}\n            className=\"data-[highlighted]:bg-destructive data-[highlighted]:text-destructive-foreground\"\n          >\n            Delete\n          </ContextMenuItem>\n        </ContextMenuContent>\n      </ContextMenu>\n      <div className=\"space-y-1 text-sm\">\n        <h3 className=\"font-medium leading-none\">{name}</h3>\n        <p className=\"text-xs text-muted-foreground\">{description}</p>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/account-setup/_components/AccountSetupForm.tsx",
    "content": "'use client'\n\nimport React from 'react'\nimport {useForm} from 'react-hook-form'\nimport * as z from 'zod'\nimport {zodResolver} from '@hookform/resolvers/zod'\nimport * as schemas from 'src/schemas'\nimport {\n  Form,\n  FormControl,\n  FormDescription,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage,\n} from 'src/ui/components/ui/form'\nimport {Input} from 'src/ui/components/ui/input'\nimport {Button} from 'src/ui/components/ui/button'\nimport {api} from '~/trpc/react'\nimport {useRouter} from 'next/router'\n\nconst formSchema = z.object({\n  name: schemas.personLegalName,\n  email: schemas.email,\n})\n\nexport default function AccountSetupForm({\n  name,\n  email,\n}: {\n  name: string\n  email: string\n}) {\n  const form = useForm<z.infer<typeof formSchema>>({\n    resolver: zodResolver(formSchema),\n    defaultValues: {\n      name,\n      email,\n    },\n  })\n\n  const {mutateAsync} = api.me.update.useMutation()\n\n  const router = useRouter()\n\n  async function onSubmit(values: z.infer<typeof formSchema>) {\n    try {\n      await mutateAsync({\n        name: values.name,\n        email: values.email,\n      })\n\n      void router.replace('/')\n    } catch (error) {\n      console.error(error)\n    }\n  }\n\n  return (\n    <Form {...form}>\n      <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-8\">\n        <FormField\n          control={form.control}\n          name=\"name\"\n          render={({field}) => (\n            <FormItem>\n              <FormLabel>Name</FormLabel>\n              <FormControl>\n                <Input {...field} />\n              </FormControl>\n              <FormDescription>\n                This is your public display name.\n              </FormDescription>\n              <FormMessage />\n            </FormItem>\n          )}\n        />\n        <FormField\n          control={form.control}\n          name=\"email\"\n          render={({field}) => (\n            <FormItem>\n              <FormLabel>Email</FormLabel>\n              <FormControl>\n                <Input {...field} />\n              </FormControl>\n              <FormDescription>\n                Your email address. People can use this to invite you to teams\n                or workspaces.\n              </FormDescription>\n              <FormMessage />\n            </FormItem>\n          )}\n        />\n        <Button type=\"submit\">Submit</Button>\n      </form>\n    </Form>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/account-setup/page.tsx",
    "content": "'use client'\n\nimport React from 'react'\nimport {api} from '~/trpc/server'\nimport AccountSetupForm from './_components/AccountSetupForm'\n\nexport default async function AccountSetupPage() {\n  const user = await api.me.get.query()!\n\n  return (\n    <div>\n      <AccountSetupForm name={user.name ?? ''} email={user.email ?? ''} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/layout.tsx",
    "content": "import {getAppSession} from '~/utils/authUtils'\nimport Navigation from './_components/Navigation'\nimport SessionProvider from './_components/SessionProvider'\nimport {redirect} from 'next/navigation'\nimport {Suspense} from 'react'\nimport prisma from '~/prisma'\nimport {type Session} from 'next-auth'\n\nexport default async function ProtectedLayout({\n  children,\n}: {\n  children: React.ReactNode\n}) {\n  const session = await getAppSession()\n\n  if (!session) {\n    redirect('/api/auth/signin')\n  }\n\n  await ensureSetupComplete(session)\n\n  return (\n    <SessionProvider session={session}>\n      <div className=\"flex h-screen\">\n        <div className=\"max-w-xs border-r \">\n          <Suspense>\n            <Navigation />\n          </Suspense>\n        </div>\n        <div className=\"flex-1\">{children}</div>\n      </div>\n    </SessionProvider>\n  )\n}\n\nasync function ensureSetupComplete(session: Session) {\n  const user = await prisma.user.findUnique({\n    where: {\n      id: session.user.id,\n    },\n    include: {\n      teams: true,\n    },\n  })\n\n  // If no team, create one\n  if (user!.teams.length === 0) {\n    await prisma.team.create({\n      data: {\n        name: user?.name ? `${user?.name}'s Team` : 'My Team',\n        members: {\n          create: {\n            userId: user!.id,\n            userRole: 'OWNER',\n            accepted: true,\n          },\n        },\n      },\n    })\n  }\n\n  const setupIncomplete = !user?.email || !user?.name\n\n  if (setupIncomplete) {\n    redirect('/account-setup')\n  }\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/recents/page.tsx",
    "content": "export default function Recents() {\n  return (\n    <div className=\"w--full h-screen\">\n      <div className=\"p-6 w-full\">\n        <div className=\"flex justify-between items-center mb-6\">\n          <div className=\"flex gap-4 items-center group\">\n            <h2 className=\"text-2xl font-semibold tracking-tight\">Recents</h2>\n          </div>\n        </div>\n        <div className=\"grid grid-cols-[repeat(auto-fill,minmax(200px,1fr))] gap-4 w-full\">\n          This page is under construction\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/shared-with-me/_components/Shared.tsx",
    "content": "'use client'\n\nimport {api} from '~/trpc/react'\nimport WorkspaceThumb from '../../_components/WorkspaceThumb'\n\nexport default function Shared() {\n  const workspaces = api.workspaces.getAll.useQuery().data!\n  const sharedWorkspaces = workspaces.filter(\n    (workspace) => workspace.accessType === 'GUEST',\n  )\n\n  return (\n    <div className=\"p-6 w-full\">\n      <div className=\"flex justify-between items-center mb-6\">\n        <div className=\"flex gap-4 items-center group\">\n          <h2 className=\"text-2xl font-semibold tracking-tight\">\n            Shared with me\n          </h2>\n        </div>\n      </div>\n      <div className=\"grid grid-cols-[repeat(auto-fill,minmax(200px,1fr))] gap-4 w-full\">\n        {sharedWorkspaces?.map((workspace) => (\n          <>\n            <WorkspaceThumb\n              key={workspace.id}\n              name={workspace.name}\n              description={workspace.description}\n              // thumbnail={workspace.thumbnail}\n              thumbnail=\"/butterfly.png\"\n            />\n          </>\n        ))}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/shared-with-me/page.tsx",
    "content": "import {Suspense} from 'react'\nimport Shared from './_components/Shared'\n\nexport default function SharedWithME() {\n  return (\n    <div className=\"w--full h-screen\">\n      <Suspense>\n        <Shared />\n      </Suspense>\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/team/[id]/components/Team.tsx",
    "content": "'use client'\n\nimport {useState} from 'react'\nimport WorkspaceThumb from '~/app/(protected)/_components/WorkspaceThumb'\nimport {api} from '~/trpc/react'\nimport NewWorkspaceDialog from '~/app/(protected)/_components/NewWorkspaceDialog'\nimport EditWorkspaceDialog from '~/app/(protected)/_components/EditWorkspaceDialog'\nimport {useToast} from '~/ui/components/ui/use-toast'\nimport InviteGuestsDialog from '~/app/(protected)/_components/InviteGuestsDialog'\nimport {Button} from '~/ui/components/ui/button'\nimport {Settings} from 'lucide-react'\nimport {promptTeamSettings} from '~/app/(protected)/_components/TeamSettingsPrompt'\n\nexport default function Team({id}: {id: string}) {\n  const {data: team} = api.teams.get.useQuery({id})\n  const me = api.me.get.useQuery().data!\n  const {mutateAsync: deleteWorkspace} = api.workspaces.delete.useMutation()\n  const {mutateAsync: duplicateWorkspace} =\n    api.workspaces.duplicate.useMutation()\n  const queryUtils = api.useUtils()\n  const workspaces = team?.workspaces\n  const [editingWorkspace, setEditingWorkspace] = useState<string | null>(null)\n  const [invitingGuests, setInvitingGuests] = useState<string | null>(null)\n\n  const isOwner =\n    team?.members.find((member) => member.id === me.id)?.role === 'OWNER'\n\n  const {toast} = useToast()\n\n  return (\n    <div className=\"p-6 w-full\">\n      <div className=\"flex justify-between items-center mb-6\">\n        <div className=\"flex gap-4 items-center group\">\n          <h2 className=\"text-2xl font-semibold tracking-tight\">\n            {team?.name}\n          </h2>\n          {isOwner && (\n            <Button\n              variant=\"outline\"\n              size=\"icon\"\n              className=\"invisible group-hover:visible\"\n              onClick={() => {\n                void promptTeamSettings(id)\n              }}\n            >\n              <Settings className=\"h-4 w-4\" />\n            </Button>\n          )}\n        </div>\n        <div>\n          <NewWorkspaceDialog teamId={team!.id} />\n        </div>\n      </div>\n      <div className=\"grid grid-cols-[repeat(auto-fill,minmax(200px,1fr))] gap-4 w-full\">\n        {workspaces?.map((workspace) => (\n          <>\n            <WorkspaceThumb\n              key={workspace.id}\n              name={workspace.name}\n              description={workspace.description}\n              // thumbnail={workspace.thumbnail}\n              thumbnail=\"/butterfly.png\"\n              allowEdit={true}\n              onDelete={async () => {\n                await deleteWorkspace({\n                  id: workspace.id,\n                  safety: `delete ${workspace.name}`,\n                })\n                void queryUtils.teams.invalidate()\n                void queryUtils.workspaces.invalidate()\n              }}\n              onEdit={() => setEditingWorkspace(workspace.id)}\n              onDuplicate={async () => {\n                try {\n                  await duplicateWorkspace({id: workspace.id})\n                  void queryUtils.teams.invalidate()\n                  void queryUtils.workspaces.invalidate()\n                } catch (error) {\n                  toast({\n                    variant: 'destructive',\n                    title: 'Uh oh! Something went wrong.',\n                    description: \"Couldn't duplicate the workspace.\",\n                  })\n                }\n              }}\n              onInvite={() => setInvitingGuests(workspace.id)}\n            />\n            <EditWorkspaceDialog\n              open={editingWorkspace === workspace.id}\n              workspace={workspace}\n              onOpenChange={(open) => {\n                if (!open) {\n                  setEditingWorkspace(null)\n                }\n              }}\n            />\n            <InviteGuestsDialog\n              workspaceId={workspace.id}\n              open={invitingGuests === workspace.id}\n              onOpenChange={(open) => {\n                if (!open) {\n                  setInvitingGuests(null)\n                }\n              }}\n            />\n          </>\n        ))}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/team/[id]/not-found.tsx",
    "content": "import Link from 'next/link'\n\nexport default async function NotFound() {\n  return (\n    <div>\n      <h2>Team not found</h2>\n      <p>Could not find requested team</p>\n      <p>\n        View <Link href=\"/\">Home</Link>\n      </p>\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/team/[id]/page.tsx",
    "content": "import {Suspense} from 'react'\nimport Team from './components/Team'\nimport {api} from '~/trpc/server'\nimport { redirect} from 'next/navigation'\n\nexport default async function TeamPage({params: {id}}: {params: {id: string}}) {\n  try {\n    const team = await api.teams.get.query({id})\n  } catch (error) {\n    // Ideally this would be notFound(), but that breaks for some reason and results in a not a server component error, when it is clearly one\n    redirect('/')\n  }\n\n  return (\n    <div className=\"w--full h-screen\">\n      <Suspense>\n        <Team id={id} />\n      </Suspense>\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(protected)/workspace/[id]/page.tsx",
    "content": "export default function WorkspacePage() {\n  return <div>workspace</div>\n}\n"
  },
  {
    "path": "packages/app/src/app/(public)/_components/SignIn.tsx",
    "content": "'use client'\n\nimport {signIn} from 'next-auth/react'\n\nexport default function SignIn() {\n  return <button onClick={() => signIn()}>Sign in</button>\n}\n"
  },
  {
    "path": "packages/app/src/app/(public)/page.tsx",
    "content": "import SignIn from './_components/SignIn'\nimport {getAppSession} from '~/utils/authUtils'\nimport {redirect} from 'next/navigation'\nimport {api} from '~/trpc/server'\n\nexport default async function IndexPage() {\n  const session = await getAppSession()\n\n  if (session) {\n    const teams = await api.teams.getAll.query()\n    redirect(`/team/${teams[0].id}`)\n  }\n\n  return (\n    <div>\n      <SignIn />\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/app/(public)/somethingpublic/page.tsx",
    "content": "export default function Something() {\n  return <div>something</div>\n}\n"
  },
  {
    "path": "packages/app/src/app/_components/Prompts.tsx",
    "content": "'use client'\n\nimport {Suspense} from 'react'\nimport {type CallbackFn, createPrompter} from 'react-promptify'\nimport {type ZodString, z} from 'zod'\nimport {useForm} from 'react-hook-form'\nimport {zodResolver} from '@hookform/resolvers/zod'\nimport {Button} from '~/ui/components/ui/button'\nimport {\n  Dialog,\n  DialogContent,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from '~/ui/components/ui/dialog'\nimport {\n  FormItem,\n  FormField,\n  FormMessage,\n  FormControl,\n  Form,\n  FormLabel,\n} from '~/ui/components/ui/form'\nimport {Input} from '~/ui/components/ui/input'\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from '~/ui/components/ui/alert-dialog'\n\nconst {Prompter, prompt} = createPrompter()\nconst {Prompter: AlertPrompter, prompt: alert} = createPrompter()\n\nexport {prompt, alert}\n\nexport default function Prompts() {\n  return (\n    <>\n      <Prompter>\n        {({children, open, cancel}) => (\n          <Dialog open={open} onOpenChange={(open) => open || cancel()}>\n            <DialogContent className=\"sm:max-w-[425px]\">\n              <Suspense>{children}</Suspense>\n            </DialogContent>\n          </Dialog>\n        )}\n      </Prompter>\n      <AlertPrompter>\n        {({children, open}) => (\n          <AlertDialog open={open}>\n            <AlertDialogContent>{children}</AlertDialogContent>\n          </AlertDialog>\n        )}\n      </AlertPrompter>\n    </>\n  )\n}\n\nexport type PromptProps<T> = {done: CallbackFn<T | null>}\n\n// A component returning a Dialog with a Form that has one field, a string input\nconst PromptString = ({\n  done,\n  message,\n  defaultValue,\n  label,\n  schema,\n}: PromptProps<string> & {\n  message: string\n  defaultValue: string\n  label?: string\n  schema: ZodString\n}) => {\n  const formSchema = z.object({\n    value: schema,\n  })\n\n  const form = useForm<z.infer<typeof formSchema>>({\n    resolver: zodResolver(formSchema),\n    defaultValues: {\n      value: defaultValue,\n    },\n  })\n\n  function onSubmit(values: z.infer<typeof formSchema>) {\n    done(values.value)\n  }\n\n  return (\n    <>\n      <>\n        <DialogHeader>\n          <DialogTitle>{message}</DialogTitle>\n        </DialogHeader>\n        <Form {...form}>\n          <form onSubmit={form.handleSubmit(onSubmit)}>\n            <div className=\"py-4\">\n              <FormField\n                control={form.control}\n                name=\"value\"\n                render={({field}) => (\n                  <FormItem>\n                    {label && <FormLabel>{label}</FormLabel>}\n                    <FormControl>\n                      <Input {...field} />\n                    </FormControl>\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n            </div>\n\n            <DialogFooter>\n              <Button\n                type=\"button\"\n                variant=\"secondary\"\n                onClick={() => done(null)}\n              >\n                Cancel\n              </Button>\n              <Button type=\"submit\">Submit</Button>\n            </DialogFooter>\n          </form>\n        </Form>\n      </>\n    </>\n  )\n}\n\nexport const promptValue = {\n  string: (\n    message: string,\n    options?: {defaultValue?: string; label?: string; schema?: ZodString},\n  ) => {\n    const {defaultValue = '', label, schema = z.string()} = options ?? {}\n    return prompt<string>((done) => (\n      <PromptString\n        done={done}\n        message={message}\n        defaultValue={defaultValue}\n        schema={schema}\n        label={label}\n      />\n    ))\n  },\n}\n\nexport const confirm = async (title: string, description: string) => {\n  return alert<boolean>((done) => (\n    <>\n      <AlertDialogHeader>\n        <AlertDialogTitle>{title}</AlertDialogTitle>\n        <AlertDialogDescription>{description}</AlertDialogDescription>\n      </AlertDialogHeader>\n      <AlertDialogFooter>\n        <AlertDialogCancel onClick={() => done(false)}>\n          Cancel\n        </AlertDialogCancel>\n        <AlertDialogAction onClick={() => done(true)}>\n          Continue\n        </AlertDialogAction>\n      </AlertDialogFooter>\n    </>\n  )) as Promise<boolean>\n}\n"
  },
  {
    "path": "packages/app/src/app/api/auth/[...nextauth]/route.ts",
    "content": "import NextAuth from 'next-auth'\nimport {nextAuthConfig} from 'src/utils/authUtils'\n\nconst handler = NextAuth(nextAuthConfig)\nexport {handler as GET, handler as POST}\n"
  },
  {
    "path": "packages/app/src/app/api/jwt-public-key/route.ts",
    "content": "import {NextResponse} from 'next/server'\nimport {allowCors} from '~/utils'\n\nasync function handler(req: Request) {\n  if (req.method === 'OPTIONS') {\n    const res = new Response(null, {status: 204})\n    allowCors(res)\n\n    return res\n  }\n\n  const res = NextResponse.json({\n    publicKey: process.env.STUDIO_AUTH_JWT_PUBLIC_KEY,\n  })\n\n  allowCors(res)\n\n  return res\n}\n\nexport {handler as GET, handler as OPTIONS}\n"
  },
  {
    "path": "packages/app/src/app/api/studio-auth/route.ts",
    "content": "import type {NextRequest} from 'next/server'\nimport {NextResponse} from 'next/server'\nimport prisma from 'src/prisma'\n\nimport {getAppSession, studioAuth} from 'src/utils/authUtils'\nimport {userCodeLength} from '~/server/studio-api/routes/studioAuthRouter'\nimport {studioAccessScopes} from '~/types'\nimport {type $IntentionalAny} from '@theatre/utils/types'\n\nexport const dynamic = 'force-dynamic'\n\nasync function libAuth(req: NextRequest) {\n  const userCode = req.nextUrl.searchParams.get('userCode')\n\n  if (typeof userCode !== 'string' || userCode.length !== userCodeLength) {\n    return NextResponse.json(\n      {\n        error: `userCode must be a string of length ${userCodeLength}`,\n      },\n      {status: 400},\n    )\n  }\n\n  const row = await prisma.deviceAuthorizationFlow.findFirst({\n    where: {\n      userCode,\n    },\n  })\n  if (row === null) {\n    return NextResponse.json(\n      {\n        error:\n          'This authentication flow either does not exist, or has already been used. Try again from the studio.',\n      },\n      {status: 404},\n    )\n  }\n\n  const session = await getAppSession()\n\n  // if no session, redirect to login\n  if (!session || !session.user) {\n    console.log('s', req.nextUrl.host, req.nextUrl.hostname, req.nextUrl.origin)\n    const redirectUrl = new URL(\n      `/api/auth/signin?callbackUrl=${encodeURIComponent(\n        req.nextUrl.toString(),\n      )}`,\n      req.nextUrl.origin,\n    )\n    return NextResponse.redirect(redirectUrl)\n  }\n\n  if (row.state === 'tokenAlreadyUsed') {\n    return NextResponse.json(\n      {\n        error:\n          'This authentication flow has already been used. Try again from the studio.',\n      },\n      {status: 400},\n    )\n  }\n\n  if (row.state === 'userDeniedAuth') {\n    return NextResponse.json(\n      {\n        error:\n          'This authentication flow has been denied by the user. Try again from the studio.',\n      },\n      {status: 400},\n    )\n  }\n\n  if (row.state === 'userAllowedAuth') {\n    return NextResponse.json(\n      {\n        error:\n          'This authentication flow has already been used. Try again from the studio.',\n      },\n      {status: 400},\n    )\n  }\n\n  if (row.state !== 'initialized') {\n    return NextResponse.json(\n      {\n        error: `This authentication flow is in an invalid state. Try again from the studio.`,\n      },\n      {status: 500},\n    )\n  }\n\n  const user = session.user\n  const nounce = row.nounce\n  const scopes = row.scopes\n\n  if (!studioAccessScopes.scopes.parse(scopes)) {\n    console.error(`bad scopes`, scopes)\n    await prisma.deviceAuthorizationFlow.delete({\n      where: {deviceCode: row.deviceCode},\n    })\n    return NextResponse.json(\n      {\n        error: `This authentication flow is in an invalid state. Try again from the studio.`,\n      },\n      {status: 500},\n    )\n  }\n\n  const {refreshToken, accessToken} = await studioAuth.createSession(\n    nounce,\n    user,\n    scopes as $IntentionalAny,\n  )\n\n  await prisma.deviceAuthorizationFlow.update({\n    where: {\n      deviceCode: row.deviceCode,\n    },\n    data: {\n      state: 'userAllowedAuth',\n      tokens: JSON.stringify({\n        accessToken,\n        refreshToken,\n      }),\n    },\n  })\n\n  return NextResponse.json('success', {status: 200})\n}\n\nexport {libAuth as GET}\n"
  },
  {
    "path": "packages/app/src/app/api/studio-trpc/[trpc]/route.ts",
    "content": "import {fetchRequestHandler} from '@trpc/server/adapters/fetch'\nimport type {NextRequest} from 'next/server'\nimport {createTRPCContext} from '~/server/api/trpc'\nimport {studioTrpcRouter} from '~/server/studio-api/root'\nimport {allowCors} from '~/utils'\n\n// we don't need the trpc routes' responses to be cached\nexport const dynamic = 'force-dynamic'\n\nconst handler = async (req: NextRequest) => {\n  if (req.method === 'OPTIONS') {\n    const res = new Response(null, {\n      status: 204,\n    })\n    allowCors(res)\n    return res\n  }\n\n  const res = await fetchRequestHandler({\n    endpoint: '/api/studio-trpc',\n    req,\n    router: studioTrpcRouter,\n    createContext: () => createTRPCContext(),\n    onError:\n      process.env.NODE_ENV === 'development'\n        ? ({path, error}) => {\n            console.error(\n              `❌ studio-trpc failed on ${path ?? '<no-path>'}: ${\n                error.message\n              }`,\n            )\n          }\n        : undefined,\n  })\n\n  allowCors(res)\n\n  return res\n}\n\nexport {handler as GET, handler as POST, handler as OPTIONS}\n"
  },
  {
    "path": "packages/app/src/app/api/trpc/[trpc]/route.ts",
    "content": "import {fetchRequestHandler} from '@trpc/server/adapters/fetch'\nimport type {NextRequest} from 'next/server'\nimport {appRouter} from '~/server/api/root'\nimport {createTRPCContext} from '~/server/api/trpc'\n\n// we don't need the trpc routes' responses to be cached\nexport const dynamic = 'force-dynamic'\n\nconst handler = async (req: NextRequest) => {\n  const res = await fetchRequestHandler({\n    endpoint: '/api/trpc',\n    req,\n    router: appRouter,\n    createContext: () => createTRPCContext(),\n    onError:\n      process.env.NODE_ENV === 'development'\n        ? ({path, error}) => {\n            console.error(\n              `❌ tRPC failed on ${path ?? '<no-path>'}: ${error.message}`,\n            )\n          }\n        : undefined,\n  })\n\n  return res\n}\n\nexport {handler as GET, handler as POST, handler as OPTIONS}\n"
  },
  {
    "path": "packages/app/src/app/global.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n \n@layer base {\n  :root {\n    --background: 0 0% 100%;\n    --foreground: 240 10% 3.9%;\n\n    --card: 0 0% 100%;\n    --card-foreground: 240 10% 3.9%;\n \n    --popover: 0 0% 100%;\n    --popover-foreground: 240 10% 3.9%;\n \n    --primary: 240 5.9% 10%;\n    --primary-foreground: 0 0% 98%;\n \n    --secondary: 240 4.8% 95.9%;\n    --secondary-foreground: 240 5.9% 10%;\n \n    --muted: 240 4.8% 95.9%;\n    --muted-foreground: 240 3.8% 46.1%;\n \n    --accent: 240 4.8% 95.9%;\n    --accent-foreground: 240 5.9% 10%;\n \n    --destructive: 0 84.2% 60.2%;\n    --destructive-foreground: 0 0% 98%;\n\n    --border: 240 5.9% 90%;\n    --input: 240 5.9% 90%;\n    --ring: 240 10% 3.9%;\n \n    --radius: 0.5rem;\n  }\n \n  .dark {\n    --background: 240 10% 3.9%;\n    --foreground: 0 0% 98%;\n \n    --card: 240 10% 3.9%;\n    --card-foreground: 0 0% 98%;\n \n    --popover: 240 10% 3.9%;\n    --popover-foreground: 0 0% 98%;\n \n    --primary: 0 0% 98%;\n    --primary-foreground: 240 5.9% 10%;\n \n    --secondary: 240 3.7% 15.9%;\n    --secondary-foreground: 0 0% 98%;\n \n    --muted: 240 3.7% 15.9%;\n    --muted-foreground: 240 5% 64.9%;\n \n    --accent: 240 3.7% 15.9%;\n    --accent-foreground: 0 0% 98%;\n \n    --destructive: 0 62.8% 30.6%;\n    --destructive-foreground: 0 0% 98%;\n \n    --border: 240 3.7% 15.9%;\n    --input: 240 3.7% 15.9%;\n    --ring: 240 4.9% 83.9%;\n  }\n}\n \n@layer base {\n  * {\n    @apply border-border;\n  }\n  body {\n    @apply bg-background text-foreground;\n  }\n}"
  },
  {
    "path": "packages/app/src/app/layout.tsx",
    "content": "import {headers} from 'next/headers'\nimport {TRPCReactProvider} from '~/trpc/react'\nimport './global.css'\nimport {Toaster} from '~/ui/components/ui/toaster'\nimport Prompts from './_components/Prompts'\n\nexport default async function RootLayout({\n  children,\n}: {\n  children: React.ReactNode\n}) {\n  return (\n    <html lang=\"en\">\n      <body>\n        <TRPCReactProvider headers={headers()}>\n          <Toaster />\n          <Prompts />\n          {children}\n        </TRPCReactProvider>\n      </body>\n    </html>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/env.d.ts",
    "content": "import type {Env} from './envSchema'\n\ndeclare global {\n  namespace NodeJS {\n    interface ProcessEnv extends Env {}\n  }\n}\n"
  },
  {
    "path": "packages/app/src/env.test.ts",
    "content": "import * as envSchema from './envSchema'\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport * as dotenv from 'dotenv'\nimport * as yaml from 'yaml'\n\ndescribe(`@theatre/app env`, () => {\n  describe(`.env files`, () => {\n    test(`.env.example should be valid`, () => {\n      const pathToEnvExample = path.join(__dirname, '../.env.example')\n      const envAsString = fs.readFileSync(pathToEnvExample, {encoding: 'utf8'})\n      // this should use an INI parser\n      const envAsObject = dotenv.parse(envAsString)\n      envSchema.devSchema.parse(envAsObject)\n    })\n    test(`.env should be valid (if it exists)`, () => {\n      const pathToEnvExample = path.join(__dirname, '../.env')\n      if (!fs.existsSync(pathToEnvExample)) {\n        return\n      }\n      const envAsString = fs.readFileSync(pathToEnvExample, {encoding: 'utf8'})\n      // this should use an INI parser\n      const envAsObject = dotenv.parse(envAsString)\n      envSchema.devSchema.parse(envAsObject)\n    })\n  })\n  describe(`render.yaml`, () => {\n    test(`should include all the env variables required by the production schema`, () => {\n      const pathToRenderYaml = path.join(__dirname, '../../../render.yaml')\n      const yamlContent = yaml.parse(\n        fs.readFileSync(pathToRenderYaml, {encoding: 'utf8'}),\n      )\n\n      const appService = yamlContent.services.find(\n        (service: any) => service.name === 'app',\n      )\n\n      if (!appService) {\n        throw new Error(`app service not found`)\n      }\n\n      const envVars: Array<{key: string}> = appService.envVars\n      const envVarKeys = envVars.map((envVar) => envVar.key)\n      // PORT is automatically added by render\n      envVarKeys.push('PORT')\n\n      const requiredKeys = Object.keys(envSchema.productionSchema.shape)\n\n      envVarKeys.sort()\n      requiredKeys.sort()\n\n      // make sure envVarKeys and requiredKeys have all the same values, and no more\n      expect(envVarKeys).toEqual(requiredKeys)\n    })\n  })\n})\n"
  },
  {
    "path": "packages/app/src/envSchema.ts",
    "content": "import z from 'zod'\n\n// the env variables that are only required in development\nconst devOnly = z.object({\n  NODE_ENV: z.literal('development'),\n  DEV_DB_PORT: z.string(),\n  DEV_DB_PASSWORD: z.string(),\n})\n\n// the env variables that both development and production require\nconst commonSchema = z.object({\n  DATABASE_URL: z.string(),\n  GITHUB_ID: z.string(),\n  GITHUB_SECRET: z.string(),\n  STUDIO_AUTH_JWT_PRIVATE_KEY: z\n    .string()\n    .startsWith('-----BEGIN PRIVATE KEY-----')\n    .endsWith('-----END PRIVATE KEY-----'),\n  STUDIO_AUTH_JWT_PUBLIC_KEY: z\n    .string()\n    .startsWith('-----BEGIN PUBLIC KEY-----')\n    .endsWith('-----END PUBLIC KEY-----'),\n  PORT: z.string().regex(/^\\d+$/),\n  HOST: z.string(),\n  NEXT_PUBLIC_WEBAPP_URL: z.string().url(),\n})\n\n// the env variables that are required in development (devOnly and commonSchema)\nexport const devSchema = commonSchema.merge(devOnly)\n\n// the env variables that are only required in production\nconst productionOnly = z.object({\n  NODE_ENV: z.literal('production'),\n})\n// the env variables that are required in production (productionOnly + commonSchema)\nexport const productionSchema = commonSchema.merge(productionOnly)\n\n// the env variables that are required in both development and production\nexport const fullSchema = productionSchema.merge(devOnly)\n\nexport type Env = z.infer<typeof fullSchema>\n"
  },
  {
    "path": "packages/app/src/prisma.ts",
    "content": "import {PrismaClient} from '../prisma/client-generated'\n\nconst prisma = new PrismaClient({\n  datasources: {\n    db: {\n      url: process.env.DATABASE_URL,\n    },\n  },\n})\n\nexport default prisma\n"
  },
  {
    "path": "packages/app/src/schemas/index.ts",
    "content": "import * as z from 'zod'\n\nexport const personLegalName = z\n  .string()\n  .min(2, {\n    message: 'Name is too short',\n  })\n  .max(50, {\n    message: 'Name is too long',\n  })\n\nexport const email = z.string().email({\n  message: 'Invalid email',\n})\n\nexport const workspaceName = z\n  .string()\n  .min(2, {\n    message: 'Name is too short',\n  })\n  .max(50, {\n    message: 'Name is too long',\n  })\n\nexport const teamName = z\n  .string()\n  .min(2, {\n    message: 'Name is too short',\n  })\n  .max(50, {\n    message: 'Name is too long',\n  })\n\nexport const workspaceDescription = z.string().max(500, {\n  message: 'Description is over 500 characters',\n})\n"
  },
  {
    "path": "packages/app/src/server/api/root.ts",
    "content": "import * as t from './trpc'\nimport {projectsRouter} from './routes/projectsRouter'\nimport {workspaceRouter} from './routes/workspaceRouter'\nimport {teamsRouter} from './routes/teamsRouter'\nimport {meRouter} from './routes/meRouter'\n\nexport const appRouter = t.createRouter({\n  projects: projectsRouter,\n  workspaces: workspaceRouter,\n  teams: teamsRouter,\n  me: meRouter,\n})\n\nexport type AppRouter = typeof appRouter\n"
  },
  {
    "path": "packages/app/src/server/api/routes/meRouter.ts",
    "content": "import {z} from 'zod'\nimport * as t from '../trpc'\nimport prisma from 'src/prisma'\n\nexport const meRouter = t.createRouter({\n  get: t.protectedProcedure\n    .output(\n      z\n        .object({\n          id: z.string(),\n          email: z.string().nullable(),\n          name: z.string().nullable(),\n          image: z.string().nullable(),\n        })\n        .strict(),\n    )\n    .query(async ({ctx, input}) => {\n      const {session} = ctx\n      const user = session.user\n\n      return {\n        id: user.id,\n        email: user.email,\n        name: user.name,\n        image: user.image,\n      }\n    }),\n  update: t.protectedProcedure\n    .input(\n      z\n        .object({\n          email: z.string().email(),\n          name: z.string(),\n          image: z.string().url(),\n        })\n        .partial(),\n    )\n    .mutation(async ({ctx, input}) => {\n      const {session} = ctx\n      const user = session.user\n\n      const updatedUser = await prisma.user.update({\n        where: {id: user.id},\n        data: {\n          email: input.email,\n          name: input.name,\n          image: input.image,\n        },\n      })\n    }),\n  delete: t.protectedProcedure\n    .input(z.object({safety: z.literal('DELETE')}))\n    .mutation(async ({ctx}) => {\n      const {session} = ctx\n      const user = session.user\n\n      await prisma.$transaction([\n        // Delete all teams that are left empty after the user is deleted\n        prisma.team.deleteMany({\n          where: {\n            members: {\n              every: {\n                userId: user.id,\n              },\n            },\n          },\n        }),\n        prisma.user.delete({\n          where: {id: user.id},\n        }),\n      ])\n    }),\n  getGuestInvitations: t.protectedProcedure.query(async ({ctx}) => {\n    const {session} = ctx\n    const user = session.user\n\n    const guestInvitations = await prisma.guestAccess.findMany({\n      where: {\n        userId: user.id,\n        accepted: false,\n      },\n      include: {\n        workspace: {\n          select: {\n            id: true,\n            name: true,\n          },\n        },\n      },\n    })\n\n    return guestInvitations.map((guestInvitation) => ({\n      workspaceId: guestInvitation.workspaceId,\n      workspaceName: guestInvitation.workspace.name,\n      accessLevel: guestInvitation.accessLevel,\n    }))\n  }),\n  getTeamInvitations: t.protectedProcedure.query(async ({ctx}) => {\n    const {session} = ctx\n    const user = session.user\n\n    const teamInvitations = await prisma.teamMember.findMany({\n      where: {\n        userId: user.id,\n        accepted: false,\n      },\n      include: {\n        team: {\n          select: {\n            id: true,\n            name: true,\n          },\n        },\n      },\n    })\n\n    return teamInvitations.map((teamInvitation) => ({\n      teamId: teamInvitation.teamId,\n      teamName: teamInvitation.team.name,\n      role: teamInvitation.userRole,\n    }))\n  }),\n})\n"
  },
  {
    "path": "packages/app/src/server/api/routes/projectsRouter.ts",
    "content": "import {z} from 'zod'\nimport {studioAuth} from 'src/utils/authUtils'\nimport {v4} from 'uuid'\nimport * as t from '../trpc'\n\nexport const projectsRouter = t.createRouter({\n  create: t.publicProcedure\n    .input(z.object({studioAuth: studioAuth.input}))\n    .output(z.object({id: z.string()}))\n    .mutation(async (opts) => {\n      const s = await studioAuth.verifyStudioAccessTokenOrThrow(opts)\n      const {userId} = s\n      const id = v4() + '-' + v4()\n\n      // await prisma.project.create({data: {id, userId, name: ''}})\n\n      return {id}\n    }),\n})\n"
  },
  {
    "path": "packages/app/src/server/api/routes/teamsRouter.ts",
    "content": "import {z} from 'zod'\nimport * as t from '../trpc'\nimport prisma from 'src/prisma'\nimport {TRPCError} from '@trpc/server'\n\nexport const teamsRouter = t.createRouter({\n  get: t.protectedProcedure\n    .input(z.object({id: z.string()}))\n    .output(\n      z\n        .object({\n          id: z.string(),\n          name: z.string(),\n          members: z.array(\n            z.object({\n              id: z.string(),\n              name: z.string().nullable(),\n              email: z.string().nullable(),\n              role: z.string(),\n            }),\n          ),\n          workspaces: z.array(\n            z.object({\n              id: z.string(),\n              name: z.string(),\n              description: z.string(),\n            }),\n          ),\n        })\n        .strict(),\n    )\n    .query(async ({ctx, input}) => {\n      const {id} = input\n      const {session} = ctx\n      const userId = session.user.id\n\n      const team = await prisma.team.findFirst({\n        where: {\n          id,\n          members: {\n            some: {\n              userId,\n            },\n          },\n        },\n        include: {\n          members: {\n            include: {\n              user: {\n                select: {\n                  id: true,\n                  name: true,\n                  email: true,\n                },\n              },\n            },\n          },\n          workspaces: true,\n        },\n      })\n\n      if (!team) {\n        throw new TRPCError({code: 'NOT_FOUND'})\n      }\n\n      const clientData = {\n        id: team.id,\n        name: team.name,\n        members: team.members.map((member) => {\n          return {\n            id: member.user.id,\n            name: member.user.name,\n            email: member.user.email,\n            role: member.userRole,\n          }\n        }),\n        workspaces: team.workspaces.map((workspace) => {\n          return {\n            id: workspace.id,\n            name: workspace.name,\n            description: workspace.description,\n          }\n        }),\n      }\n\n      return clientData\n    }),\n  getAll: t.protectedProcedure\n    .output(\n      z.array(\n        z\n          .object({\n            id: z.string(),\n            name: z.string(),\n            members: z.array(\n              z.object({\n                id: z.string(),\n                name: z.string().nullable(),\n                email: z.string().nullable(),\n                role: z.string(),\n                accepted: z.boolean(),\n              }),\n            ),\n            workspaces: z.array(\n              z.object({\n                id: z.string(),\n                name: z.string(),\n                description: z.string(),\n              }),\n            ),\n          })\n          .strict(),\n      ),\n    )\n    .query(async ({ctx, input}) => {\n      const {session} = ctx\n      const userId = session.user.id\n\n      const teams = await prisma.team.findMany({\n        where: {\n          members: {\n            some: {\n              userId,\n            },\n          },\n        },\n        include: {\n          members: {\n            include: {\n              user: {\n                select: {\n                  id: true,\n                  name: true,\n                  email: true,\n                },\n              },\n            },\n          },\n          workspaces: true,\n        },\n      })\n\n      const clientData = teams.map((team) => {\n        return {\n          id: team.id,\n          name: team.name,\n          members: team.members.map((member) => {\n            return {\n              id: member.user.id,\n              name: member.user.name,\n              email: member.user.email,\n              role: member.userRole,\n              accepted: member.accepted,\n            }\n          }),\n          workspaces: team.workspaces.map((workspace) => {\n            return {\n              id: workspace.id,\n              name: workspace.name,\n              description: workspace.description,\n            }\n          }),\n        }\n      })\n\n      return clientData\n    }),\n  create: t.protectedProcedure\n    .input(\n      z.object({\n        name: z.string(),\n      }),\n    )\n    .output(z.object({id: z.string()}).strict())\n    .mutation(async ({ctx, input}) => {\n      const {name} = input\n      const {session} = ctx\n      const userId = session.user.id\n\n      const team = await prisma.team.create({\n        data: {\n          name,\n          members: {\n            create: {\n              user: {\n                connect: {\n                  id: userId,\n                },\n              },\n              userRole: 'OWNER',\n              accepted: true,\n            },\n          },\n        },\n      })\n\n      return {id: team.id}\n    }),\n  update: t.protectedProcedure\n    .input(\n      z.object({\n        id: z.string(),\n        name: z.string().optional(),\n      }),\n    )\n    .output(\n      z.object({\n        id: z.string(),\n        name: z.string(),\n      }),\n    )\n    .mutation(async ({ctx, input}) => {\n      const {id, name} = input\n      const {session} = ctx\n      const userId = session.user.id\n\n      const team = await prisma.team.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          members: {\n            where: {\n              userId,\n            },\n          },\n        },\n      })\n\n      // Only team owners are allowed to update teams\n      const updateAllowed = team?.members[0]?.userRole === 'OWNER'\n\n      if (!updateAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      const newTeam = await prisma.team.update({\n        where: {\n          id,\n        },\n        data: {\n          name,\n        },\n      })\n\n      return {\n        id: newTeam.id,\n        name: newTeam.name,\n      }\n    }),\n  delete: t.protectedProcedure\n    .input(z.object({id: z.string(), safety: z.string()}))\n    .mutation(async ({ctx, input}) => {\n      const {id, safety} = input\n      const {session} = ctx\n      const userId = session.user.id\n\n      const team = await prisma.team.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          name: true,\n          members: {\n            where: {\n              userId,\n            },\n          },\n        },\n      })\n\n      if (safety !== `delete ${team?.name}`) {\n        throw new TRPCError({code: 'BAD_REQUEST'})\n      }\n\n      // Only team owners are allowed to delete teams\n      const deleteAllowed = team?.members[0]?.userRole === 'OWNER'\n\n      if (!deleteAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      await prisma.team.delete({\n        where: {\n          id,\n        },\n      })\n    }),\n  inviteMembers: t.protectedProcedure\n    .input(\n      z.object({\n        id: z.string(),\n        invites: z.array(\n          z.object({\n            email: z.string().email(),\n            role: z.enum(['OWNER', 'MEMBER']),\n          }),\n        ),\n      }),\n    )\n    .mutation(async ({ctx, input}) => {\n      const {id, invites} = input\n      const emails = invites.map((invites) => invites.email)\n      const {session} = ctx\n      const userId = session.user.id\n\n      const team = await prisma.team.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          members: {\n            where: {\n              userId,\n            },\n          },\n        },\n      })\n\n      // Make sure users exist\n      const invitedUsers = await prisma.user.findMany({\n        where: {\n          email: {\n            in: emails,\n          },\n        },\n      })\n\n      if (invitedUsers.length !== emails.length) {\n        throw new TRPCError({code: 'BAD_REQUEST'})\n      }\n\n      // Only team owners are allowed to invite members\n      const inviteAllowed = team?.members[0]?.userRole === 'OWNER'\n\n      if (!inviteAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      await prisma.team.update({\n        where: {\n          id,\n        },\n        data: {\n          members: {\n            upsert: invites.map((invite) => {\n              const invitedUser = invitedUsers.find(\n                (user) => user.email === invite.email,\n              )!\n\n              return {\n                where: {\n                  userId_teamId: {\n                    userId: invitedUser.id,\n                    teamId: id,\n                  },\n                },\n                create: {\n                  user: {\n                    connect: {\n                      id: invitedUser.id,\n                    },\n                  },\n                  userRole: invite.role,\n                },\n                update: {},\n              }\n            }),\n          },\n        },\n      })\n    }),\n  removeMember: t.protectedProcedure\n    .input(z.object({id: z.string(), email: z.string()}))\n    .mutation(async ({ctx, input}) => {\n      const {id, email} = input\n      const {session} = ctx\n      const currentUserId = session.user.id\n\n      const team = await prisma.team.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          members: {\n            where: {\n              userId: currentUserId,\n            },\n            include: {\n              user: {\n                select: {\n                  email: true,\n                },\n              },\n            },\n          },\n        },\n      })\n\n      // Only team owners are allowed to remove members, or the member themselves\n      const removeAllowed =\n        team?.members[0]?.userRole === 'OWNER' ||\n        team?.members[0]?.user.email === email\n\n      if (!removeAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      const userToRemove = await prisma.user.findUnique({\n        where: {\n          email,\n        },\n      })\n\n      await prisma.team.update({\n        where: {\n          id,\n        },\n        data: {\n          members: {\n            delete: {\n              userId_teamId: {\n                userId: userToRemove?.id!,\n                teamId: id,\n              },\n            },\n          },\n        },\n      })\n    }),\n  changeMemberRole: t.protectedProcedure\n    .input(\n      z.object({\n        id: z.string(),\n        email: z.string(),\n        role: z.enum(['OWNER', 'MEMBER']),\n      }),\n    )\n    .mutation(async ({ctx, input}) => {\n      const {id, email, role} = input\n      const {session} = ctx\n      const currentUserId = session.user.id\n\n      const team = await prisma.team.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          members: {\n            where: {\n              userId: currentUserId,\n            },\n            include: {\n              user: {\n                select: {\n                  email: true,\n                },\n              },\n            },\n          },\n        },\n      })\n\n      // Only team owners are allowed to change member roles and a team owner cannot demote themselves\n      const changeAllowed =\n        team?.members[0]?.userRole === 'OWNER' &&\n        email !== team?.members[0]?.user.email\n\n      if (!changeAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      const userToChange = await prisma.user.findUnique({\n        where: {\n          email,\n        },\n      })\n\n      await prisma.team.update({\n        where: {\n          id,\n        },\n        data: {\n          members: {\n            update: {\n              where: {\n                userId_teamId: {\n                  userId: userToChange?.id!,\n                  teamId: id,\n                },\n              },\n              data: {\n                userRole: role,\n              },\n            },\n          },\n        },\n      })\n    }),\n  acceptInvite: t.protectedProcedure\n    .input(z.object({id: z.string()}))\n    .mutation(async ({ctx, input}) => {\n      const {id} = input\n      const {session} = ctx\n      const userId = session.user.id\n\n      const team = await prisma.team.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          members: {\n            where: {\n              userId,\n            },\n          },\n        },\n      })\n\n      // Only team members are allowed to accept invites\n      const acceptAllowed = team?.members.length !== 0\n\n      console.log(acceptAllowed)\n\n      if (!acceptAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      await prisma.teamMember.update({\n        where: {\n          userId_teamId: {\n            userId,\n            teamId: id,\n          },\n        },\n        data: {\n          accepted: true,\n        },\n      })\n    }),\n  getMembers: t.protectedProcedure\n    .input(z.object({id: z.string()}))\n    .output(\n      z.array(\n        z.object({\n          email: z.string(),\n          name: z.string().nullable(),\n          image: z.string().nullable(),\n          role: z.enum(['OWNER', 'MEMBER']),\n          accepted: z.boolean(),\n        }),\n      ),\n    )\n    .query(async ({ctx, input}) => {\n      const {id} = input\n      const {session} = ctx\n      const userId = session.user.id\n\n      const team = await prisma.team.findFirst({\n        where: {\n          id,\n          members: {\n            some: {\n              userId,\n            },\n          },\n        },\n        include: {\n          members: {\n            include: {\n              user: {\n                select: {\n                  email: true,\n                  name: true,\n                  image: true,\n                },\n              },\n            },\n          },\n        },\n      })\n\n      if (!team) {\n        throw new TRPCError({code: 'NOT_FOUND'})\n      }\n\n      const clientData = team.members.map((member) => {\n        return {\n          email: member.user.email!,\n          name: member.accepted ? member.user.name : null,\n          image: member.accepted ? member.user.image : null,\n          role: member.userRole,\n          accepted: member.accepted,\n        }\n      })\n\n      return clientData\n    }),\n})\n"
  },
  {
    "path": "packages/app/src/server/api/routes/workspaceRouter.ts",
    "content": "import {z} from 'zod'\nimport * as t from '../trpc'\nimport prisma from '../../../prisma'\nimport {TRPCError} from '@trpc/server'\n\nexport const workspaceRouter = t.createRouter({\n  get: t.protectedProcedure\n    .input(z.object({id: z.string()}))\n    .output(\n      z.object({\n        id: z.string(),\n        name: z.string(),\n        description: z.string(),\n        accessType: z.enum(['TEAM', 'GUEST', 'GUEST_PENDING']),\n        accessLevel: z.string(),\n      }),\n    )\n    .query(async (opts) => {\n      const {id} = opts.input\n      const {session} = opts.ctx\n      const userId = session.user.id\n\n      const workspace = await prisma.workspace.findUnique({\n        where: {\n          id,\n        },\n        include: {\n          team: {\n            select: {\n              members: {\n                where: {\n                  userId,\n                },\n              },\n            },\n          },\n          guests: {\n            where: {\n              userId,\n            },\n          },\n        },\n      })\n\n      if (!workspace) {\n        throw new TRPCError({code: 'NOT_FOUND'})\n      }\n\n      const isGuest = workspace?.guests.length !== 0\n\n      // Only team members and guests are allowed to view workspaces\n      const allowed = workspace?.team?.members.length !== 0 || isGuest\n\n      if (!allowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      // workspace including guests\n      const clientData = {\n        id: workspace.id,\n        name: workspace.name,\n        description: workspace?.description,\n        accessType: !isGuest\n          ? ('TEAM' as const)\n          : workspace?.guests[0].accepted\n          ? ('GUEST' as const)\n          : ('GUEST_PENDING' as const),\n        accessLevel: isGuest ? workspace?.guests[0].accessLevel : 'READ_WRITE',\n      }\n\n      return clientData\n    }),\n  getAll: t.protectedProcedure\n    .output(\n      z.array(\n        z\n          .object({\n            id: z.string(),\n            name: z.string(),\n            description: z.string(),\n            accessType: z.enum(['TEAM', 'GUEST', 'GUEST_PENDING']),\n            accessLevel: z.string(),\n          })\n          .strict(),\n      ),\n    )\n    .query(async ({ctx, input}) => {\n      const {session} = ctx\n      const userId = session.user.id\n\n      const workspaces = await prisma.workspace.findMany({\n        where: {\n          OR: [\n            {\n              guests: {\n                some: {\n                  userId,\n                },\n              },\n            },\n            {\n              team: {\n                members: {\n                  some: {\n                    userId,\n                  },\n                },\n              },\n            },\n          ],\n        },\n        include: {\n          guests: {\n            where: {\n              userId,\n            },\n          },\n        },\n      })\n\n      const clientData = workspaces.map((workspace) => {\n        const guest = workspace.guests.find((guest) => guest.userId === userId)\n\n        const filtered = {\n          id: workspace.id,\n          name: workspace.name,\n          description: workspace.description,\n          accessType: !guest\n            ? ('TEAM' as const)\n            : guest.accepted\n            ? ('GUEST' as const)\n            : ('GUEST_PENDING' as const),\n        }\n\n        // If guest, they have the access level defined in the guest settings\n        if (guest) {\n          return {\n            ...filtered,\n            accessLevel: guest.accessLevel,\n          }\n        }\n\n        // If not guest, they have read/write access because they are a team member\n        return {\n          ...filtered,\n          accessLevel: 'READ_WRITE',\n        }\n      })\n\n      return clientData\n    }),\n\n  create: t.protectedProcedure\n    .input(\n      z.object({name: z.string(), description: z.string(), teamId: z.string()}),\n    )\n    .output(z.object({id: z.string()}))\n    .mutation(async (opts) => {\n      const {name, description, teamId} = opts.input\n      const {session} = opts.ctx\n      const userId = session.user.id\n\n      const team = await prisma.team.findUnique({\n        where: {\n          id: teamId,\n        },\n        select: {\n          members: {\n            where: {\n              userId,\n            },\n          },\n        },\n      })\n\n      // Only team members are allowed to create workspaces\n      const createAllowed = team?.members.length !== 0\n\n      if (!createAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      const workspace = await prisma.workspace.create({\n        data: {\n          name,\n          description,\n          teamId,\n        },\n      })\n\n      return {id: workspace.id}\n    }),\n  duplicate: t.protectedProcedure\n    .input(z.object({id: z.string()}))\n    .mutation(async (opts) => {\n      const {id} = opts.input\n      const {session} = opts.ctx\n      const userId = session.user.id\n\n      const workspaceToDuplicate = await prisma.workspace.findUnique({\n        where: {\n          id,\n        },\n      })\n\n      if (!workspaceToDuplicate) {\n        throw new TRPCError({code: 'NOT_FOUND'})\n      }\n\n      const team = await prisma.team.findUnique({\n        where: {\n          id: workspaceToDuplicate?.teamId,\n        },\n        select: {\n          members: {\n            where: {\n              userId,\n            },\n          },\n        },\n      })\n\n      // Only team members are allowed to duplicate workspaces\n      const createAllowed = team?.members.length !== 0\n\n      if (!createAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      const workspace = await prisma.workspace.create({\n        data: {\n          name: `${workspaceToDuplicate?.name} (Copy)`,\n          description: workspaceToDuplicate?.description,\n          teamId: workspaceToDuplicate?.teamId,\n        },\n      })\n\n      return {id: workspace.id}\n    }),\n  update: t.protectedProcedure\n    .input(\n      z.object({\n        id: z.string(),\n        name: z.string().optional(),\n        description: z.string().optional(),\n      }),\n    )\n    .mutation(async (opts) => {\n      const {id, name, description} = opts.input\n      const {session} = opts.ctx\n      const userId = session.user.id\n\n      const workspace = await prisma.workspace.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          team: {\n            select: {\n              members: {\n                where: {\n                  userId,\n                },\n              },\n            },\n          },\n          guests: {\n            where: {\n              userId,\n            },\n          },\n        },\n      })\n\n      // Team members and guests with write access are allowed to edit workspaces\n      const editAllowed =\n        workspace?.team?.members.length !== 0 ||\n        workspace?.guests[0]?.accessLevel === 'READ_WRITE'\n\n      if (!editAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      await prisma.workspace.update({\n        where: {\n          id,\n        },\n        data: {\n          name,\n          description,\n        },\n      })\n    }),\n  delete: t.protectedProcedure\n    .input(z.object({id: z.string(), safety: z.string()}))\n    .mutation(async (opts) => {\n      const {id, safety} = opts.input\n      const {session} = opts.ctx\n      const userId = session.user.id\n\n      const workspace = await prisma.workspace.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          name: true,\n          team: {\n            select: {\n              members: {\n                where: {\n                  userId,\n                },\n              },\n            },\n          },\n          guests: {\n            where: {\n              userId,\n            },\n          },\n        },\n      })\n\n      if (safety !== `delete ${workspace?.name}`) {\n        throw new TRPCError({code: 'BAD_REQUEST'})\n      }\n\n      // Only team members are allowed to remove workspaces\n      const deleteAllowed = workspace?.team?.members.length !== 0\n\n      if (!deleteAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      await prisma.workspace.delete({\n        where: {\n          id,\n        },\n      })\n    }),\n  inviteGuests: t.protectedProcedure\n    .input(\n      z.object({\n        id: z.string(),\n        invites: z.array(\n          z.object({\n            email: z.string(),\n            accessLevel: z.enum(['READ', 'READ_WRITE']),\n          }),\n        ),\n      }),\n    )\n    .mutation(async (opts) => {\n      const {id, invites} = opts.input\n      const emails = invites.map((invite) => invite.email)\n      const {session} = opts.ctx\n      const userId = session.user.id\n\n      const workspace = await prisma.workspace.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          team: {\n            select: {\n              members: {\n                where: {\n                  userId,\n                },\n              },\n            },\n          },\n          guests: {\n            where: {\n              userId,\n            },\n          },\n        },\n      })\n\n      // Only team members are allowed to invite guests\n      const inviteAllowed = workspace?.team?.members.length !== 0\n\n      if (!inviteAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      // Make sure users exist\n      const invitedUsers = await prisma.user.findMany({\n        where: {\n          email: {\n            in: emails,\n          },\n        },\n      })\n\n      if (invitedUsers.length !== emails.length) {\n        throw new TRPCError({code: 'BAD_REQUEST'})\n      }\n\n      // Create guest access records\n      await prisma.workspace.update({\n        where: {\n          id,\n        },\n        data: {\n          guests: {\n            upsert: invites.map((invite) => {\n              const invitedUser = invitedUsers.find(\n                (user) => user.email === invite.email,\n              )!\n\n              return {\n                where: {\n                  userId_workspaceId: {\n                    userId: invitedUser.id,\n                    workspaceId: id,\n                  },\n                },\n                create: {\n                  user: {\n                    connect: {\n                      id: invitedUser.id,\n                    },\n                  },\n                  accessLevel: invite.accessLevel,\n                },\n                update: {},\n              }\n            }),\n          },\n        },\n      })\n    }),\n  removeGuest: t.protectedProcedure\n    .input(z.object({id: z.string(), email: z.string()}))\n    .mutation(async (opts) => {\n      const {id, email} = opts.input\n      const {session} = opts.ctx\n      const userId = session.user.id\n\n      const workspace = await prisma.workspace.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          team: {\n            select: {\n              members: {\n                where: {\n                  userId,\n                },\n              },\n            },\n          },\n          guests: {\n            where: {\n              userId,\n            },\n            select: {\n              userId: true,\n              user: {\n                select: {\n                  email: true,\n                },\n              },\n            },\n          },\n        },\n      })\n\n      // Team members can remove guests, or the guest can remove themselves\n      const removeAllowed =\n        workspace?.team?.members.length !== 0 ||\n        email === workspace?.guests[0]?.user.email\n\n      if (!removeAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      const userToRemove = await prisma.user.findUnique({\n        where: {\n          email,\n        },\n      })\n\n      await prisma.guestAccess.delete({\n        where: {\n          userId_workspaceId: {\n            userId: userToRemove?.id!,\n            workspaceId: id,\n          },\n        },\n      })\n    }),\n  changeGuestAccess: t.protectedProcedure\n    .input(\n      z.object({\n        id: z.string(),\n        email: z.string(),\n        accessLevel: z.enum(['READ', 'READ_WRITE']),\n      }),\n    )\n    .mutation(async (opts) => {\n      const {id, email, accessLevel} = opts.input\n      const {session} = opts.ctx\n      const userId = session.user.id\n\n      const workspace = await prisma.workspace.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          team: {\n            select: {\n              members: {\n                where: {\n                  userId,\n                },\n              },\n            },\n          },\n          guests: {\n            where: {\n              userId,\n            },\n            select: {\n              userId: true,\n              user: {\n                select: {\n                  email: true,\n                },\n              },\n            },\n          },\n        },\n      })\n\n      // Team members can change guest access\n      const changeAllowed = workspace?.team?.members.length !== 0\n\n      if (!changeAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      const userToChange = await prisma.user.findUnique({\n        where: {\n          email,\n        },\n      })\n\n      await prisma.guestAccess.update({\n        where: {\n          userId_workspaceId: {\n            userId: userToChange?.id!,\n            workspaceId: id,\n          },\n        },\n        data: {\n          accessLevel,\n        },\n      })\n    }),\n  acceptInvite: t.protectedProcedure\n    .input(z.object({id: z.string()}))\n    .mutation(async (opts) => {\n      const {id} = opts.input\n      const {session} = opts.ctx\n      const userId = session.user.id\n\n      const workspace = await prisma.workspace.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          guests: {\n            where: {\n              userId,\n            },\n          },\n        },\n      })\n\n      // Only invitees can accept invites\n      const acceptAllowed = workspace?.guests.length !== 0\n\n      if (!acceptAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      await prisma.guestAccess.update({\n        where: {\n          userId_workspaceId: {\n            userId,\n            workspaceId: id,\n          },\n        },\n        data: {\n          accepted: true,\n        },\n      })\n    }),\n  getGuests: t.protectedProcedure\n    .input(z.object({id: z.string()}))\n    .output(\n      z.array(\n        z.object({\n          email: z.string(),\n          name: z.string().nullable(),\n          image: z.string().nullable(),\n          accessLevel: z.enum(['READ', 'READ_WRITE']),\n          accepted: z.boolean(),\n        }),\n      ),\n    )\n    .query(async (opts) => {\n      const {id} = opts.input\n      const {session} = opts.ctx\n      const userId = session.user.id\n\n      const workspace = await prisma.workspace.findUnique({\n        where: {\n          id,\n        },\n        select: {\n          team: {\n            select: {\n              members: {\n                where: {\n                  userId,\n                },\n              },\n            },\n          },\n          guests: {\n            select: {\n              user: {\n                select: {\n                  email: true,\n                  image: true,\n                  name: true,\n                },\n              },\n              accessLevel: true,\n              accepted: true,\n            },\n          },\n        },\n      })\n\n      if (!workspace) {\n        throw new TRPCError({code: 'NOT_FOUND'})\n      }\n\n      // Only team members can view guests\n      const viewAllowed = workspace.team.members.length !== 0\n\n      if (!viewAllowed) {\n        throw new TRPCError({code: 'FORBIDDEN'})\n      }\n\n      const guests = workspace.guests.map((guest) => {\n        return {\n          email: guest.user.email!,\n          name: guest.accepted ? guest.user.name : null,\n          image: guest.accepted ? guest.user.image : null,\n          accessLevel: guest.accessLevel,\n          accepted: guest.accepted,\n        }\n      })\n\n      return guests\n    }),\n})\n"
  },
  {
    "path": "packages/app/src/server/api/trpc.ts",
    "content": "import {TRPCError, initTRPC} from '@trpc/server'\nimport superjson from 'superjson'\nimport {ZodError} from 'zod'\nimport prisma from '../../prisma'\nimport {getAppSession} from 'src/utils/authUtils'\nimport {type Session} from 'next-auth'\n\n/**\n * 1. CONTEXT\n *\n * This section defines the \"contexts\" that are available in the backend API.\n *\n * These allow you to access things when processing a request, like the database, the session, etc.\n */\ninterface CreateContextOptions {\n  session: Session | null\n}\n\n/**\n * This helper generates the \"internals\" for a tRPC context. If you need to use it, you can export\n * it from here.\n *\n * Examples of things you may need it for:\n * - testing, so we don't have to mock Next.js' req/res\n * - tRPC's `createSSGHelpers`, where we don't have req/res\n *\n * @see https://create.t3.gg/en/usage/trpc#-serverapitrpcts\n */\nconst createInnerTRPCContext = async (opts: CreateContextOptions) => {\n  return {\n    session: opts.session,\n    prisma,\n  }\n}\n\n/**\n * This is the actual context you will use in your router. It will be used to process every request\n * that goes through your tRPC endpoint.\n *\n * @see https://trpc.io/docs/context\n */\nexport const createTRPCContext = async () => {\n  const session = await getAppSession()\n\n  return createInnerTRPCContext({session})\n}\n\n/**\n * 2. INITIALIZATION\n *\n * This is where the tRPC API is initialized, connecting the context and transformer. We also parse\n * ZodErrors so that you get typesafety on the frontend if your procedure fails due to validation\n * errors on the backend.\n */\n\nconst t = initTRPC.context<typeof createTRPCContext>().create({\n  transformer: superjson,\n  errorFormatter({shape, error}) {\n    return {\n      ...shape,\n      data: {\n        ...shape.data,\n        zodError:\n          error.cause instanceof ZodError ? error.cause.flatten() : null,\n      },\n    }\n  },\n})\n\n/**\n * 3. ROUTER & PROCEDURE (THE IMPORTANT BIT)\n *\n * These are the pieces you use to build your tRPC API. You should import these a lot in the\n * \"/src/server/api/routers\" directory.\n */\n\n/**\n * This is how you create new routers and sub-routers in your tRPC API.\n *\n * @see https://trpc.io/docs/router\n */\nexport const createRouter = t.router\n\n/**\n * Public (unauthenticated) procedure\n *\n * This is the base piece you use to build new queries and mutations on your tRPC API. It does not\n * guarantee that a user querying is authorized, but you can still access user session data if they\n * are logged in.\n */\nexport const publicProcedure = t.procedure\n\nconst isAuthed = t.middleware(({ctx, next}) => {\n  if (!ctx.session || !ctx.session.user) {\n    throw new TRPCError({code: 'UNAUTHORIZED'})\n  }\n\n  return next({\n    ctx: {\n      // infers the `session` as non-nullable\n      session: ctx.session,\n    },\n  })\n})\n\n/**\n * Protected (authenticated) procedure\n *\n * This is the base piece you use to build new queries and mutations on your tRPC API. It guarantees\n * that a user querying is authorized, and you can access user session data.\n */\nexport const protectedProcedure = t.procedure.use(isAuthed)\n"
  },
  {
    "path": "packages/app/src/server/studio-api/root.ts",
    "content": "import {studioAuthRouter} from './routes/studioAuthRouter'\nimport * as t from '../api/trpc'\n\nexport const studioTrpcRouter = t.createRouter({\n  syncServerUrl: t.publicProcedure.query(() => `ws://localhost:3001/api/trpc`),\n  studioAuth: studioAuthRouter,\n})\n\nexport type StudioTRPCRouter = typeof studioTrpcRouter\n"
  },
  {
    "path": "packages/app/src/server/studio-api/routes/studioAuthRouter.ts",
    "content": "import {z} from 'zod'\nimport {nanoid} from 'nanoid'\nimport {studioAuth} from 'src/utils/authUtils'\nimport {v4} from 'uuid'\nimport * as t from '../../api/trpc'\nimport prisma from 'src/prisma'\nimport {calculatePKCECodeChallenge} from 'oauth4webapi'\nimport type {studioAuthTokens} from '~/types'\nimport {studioAccessScopes} from '~/types'\n\nexport const userCodeLength = 8\nexport const FLOW_CHECK_INTERVAL = 1000\n\nexport const studioAuthRouter = t.createRouter({\n  deviceCode: t.publicProcedure\n    .input(\n      z.object({\n        nounce: z\n          .string()\n          .min(32)\n          .describe(\n            `This is a random string that should be unique for each client flow. It is generated by the client, will be included in the refresh token.`,\n          ),\n        codeChallenge: z\n          .string()\n          .min(43)\n          .max(1024)\n          .describe(`The code_challenge as defined in OAuth RFC 7636`),\n        codeChallengeMethod: z\n          .enum(['S256'])\n          .describe(`The code_challenge_method as defined in OAuth RFC 7636`),\n\n        scopes: studioAccessScopes.scopes.describe(\n          `The scopes the client is requesting access to. In case \\`originalIdToken\\` is provided, only the additional scopes should be defined here`,\n        ),\n        originalIdToken: z\n          .string()\n          .optional()\n          .describe(\n            `In case the client (the studio) already has an idToken but is requesting more access, it should provide the original idToken. (This happens e.g. when the studio has access to workspaceA, but now also needs access to workspaceB)`,\n          ),\n      }),\n    )\n    .output(\n      z.object({\n        interval: z\n          .number()\n          .int()\n          .min(1000)\n          .describe(\n            'If 1000, it means the library should check the `$.tokens()` every 1000ms or longer.',\n          ),\n        verificationUriComplete: z\n          .string()\n          .url()\n          .describe(\n            `The URL that the user should be redirected to (or the url to be open via popup) ` +\n              `for the user to log in. Note that if the user is already logged ` +\n              `into the app, they won't be prompted to log in again.`,\n          ),\n        deviceCode: z\n          .string()\n          .min(72)\n          .describe(`A unique token that should be passed to $.tokens()`),\n      }),\n    )\n    .mutation(async (opts) => {\n      const userCode = nanoid(userCodeLength)\n      const deviceCode = v4() + v4()\n\n      await prisma.deviceAuthorizationFlow.create({\n        data: {\n          nounce: opts.input.nounce,\n          createdAt: new Date().toISOString(),\n          lastCheckTime: new Date().toISOString(),\n          codeChallenge: opts.input.codeChallenge,\n          codeChallengeMethod: opts.input.codeChallengeMethod,\n          deviceCode,\n          tokens: '',\n          userCode: userCode,\n          state: 'initialized',\n        },\n      })\n\n      return {\n        interval: FLOW_CHECK_INTERVAL,\n        verificationUriComplete:\n          process.env.NEXT_PUBLIC_WEBAPP_URL +\n          `/api/studio-auth?userCode=${userCode}`,\n        deviceCode,\n      }\n    }),\n  tokens: t.publicProcedure\n    .input(\n      z.object({\n        deviceCode: z\n          .string()\n          .describe(`The \\`deviceCode\\` generated by deviceCode()`),\n        codeVerifier: z\n          .string()\n          .describe(`The \\`codeVerifier\\` as defined in 7636`),\n      }),\n    )\n    .output(\n      z.union([\n        z.object({\n          isError: z.literal(true),\n          error: z.enum([\n            'invalidDeviceCode',\n            'invalidCodeVerifier',\n            'userDeniedAuth',\n            'slowDown',\n            'notYetReady',\n          ]),\n          errorMessage: z.string(),\n        }),\n        z.object({\n          isError: z.literal(false),\n          accessToken: z.string(),\n          idToken: z.string(),\n        }),\n      ]),\n    )\n    .mutation(async ({input}) => {\n      const flow = await prisma.deviceAuthorizationFlow.findFirst({\n        where: {deviceCode: input.deviceCode},\n      })\n      if (!flow) {\n        return {\n          isError: true,\n          error: 'invalidDeviceCode',\n          errorMessage:\n            'The deviceCode is invalid. It may also have been expired, or already used.',\n        }\n      }\n      await prisma.deviceAuthorizationFlow.update({\n        where: {deviceCode: input.deviceCode},\n        data: {lastCheckTime: new Date().toISOString()},\n      })\n      // if flow.lastCheckTime is more recent than 5 seconds ago, return the same thing as last time\n      if (\n        new Date(flow.lastCheckTime).getTime() >\n        Date.now() - FLOW_CHECK_INTERVAL\n      ) {\n        return {\n          isError: true,\n          error: 'slowDown',\n          errorMessage: 'You are checking too often. Slow down.',\n        }\n      }\n\n      switch (flow.state) {\n        case 'initialized':\n          return {\n            isError: true,\n            error: 'notYetReady',\n            errorMessage: `The user hasn't decided to grant/deny access yet.`,\n          }\n        case 'userDeniedAuth':\n          return {\n            isError: true,\n            error: 'userDeniedAuth',\n            errorMessage: `The user denied access.`,\n          }\n        case 'userAllowedAuth':\n          const tokens = JSON.parse(flow.tokens)\n\n          const codeChallenge = await calculatePKCECodeChallenge(\n            input.codeVerifier,\n          )\n          if (codeChallenge !== flow.codeChallenge) {\n            return {\n              isError: true,\n              error: 'invalidCodeVerifier',\n              errorMessage: `The codeVerifier is invalid.`,\n            }\n          }\n\n          await prisma.deviceAuthorizationFlow.update({\n            where: {deviceCode: input.deviceCode},\n            data: {state: 'tokenAlreadyUsed'},\n          })\n\n          return {\n            isError: false,\n            accessToken: tokens.accessToken,\n            idToken: tokens.refreshToken,\n          }\n        // otherwise\n        default:\n          console.error('Invalid state', flow.state)\n          return {\n            isError: true,\n            error: 'invalidDeviceCode',\n            errorMessage:\n              'The preAutenticationToken is invalid. It may also have been expired, or already used.',\n          }\n      }\n    }),\n  invalidateRefreshToken: t.publicProcedure\n    .input(\n      z.object({\n        refreshToken: z.string(),\n      }),\n    )\n    .output(\n      z.union([\n        z.object({\n          isError: z.literal(true),\n          error: z.enum(['unknown']),\n          errorMessage: z.string(),\n        }),\n        z.object({\n          isError: z.literal(false),\n        }),\n      ]),\n    )\n    .mutation(async ({input}) => {\n      try {\n        await studioAuth.destroySession(input.refreshToken)\n        return {isError: false}\n      } catch (err) {\n        console.error(err)\n        return {\n          isError: true,\n          error: 'unknown',\n          errorMessage: `An unknown error occured.`,\n        }\n      }\n    }),\n  refreshAccessToken: t.publicProcedure\n    .input(\n      z.object({\n        refreshToken: z.string(),\n      }),\n    )\n    .output(\n      z.union([\n        z.object({\n          isError: z.literal(true),\n          error: z.enum(['invalidRefreshToken', 'unknown']),\n          errorMessage: z.string(),\n        }),\n        z.object({\n          isError: z.literal(false),\n          accessToken: z.string(),\n          refreshToken: z\n            .string()\n            .describe(\n              `The new refresh token. The old refresh token is now invalid.`,\n            ),\n        }),\n      ]),\n    )\n    .mutation(async ({input}) => {\n      try {\n        const {accessToken, refreshToken} = await studioAuth.refreshSession(\n          input.refreshToken,\n        )\n        return {isError: false, accessToken, refreshToken}\n      } catch (err: any) {\n        console.error(err)\n        if (err.message === 'Invalid refresh token') {\n          return {\n            isError: true,\n            error: 'invalidRefreshToken',\n            errorMessage: `The refresh token is invalid.`,\n          }\n        } else {\n          return {\n            isError: true,\n            error: 'unknown',\n            errorMessage: `An unknown error occured.`,\n          }\n        }\n      }\n    }),\n  destroyIdToken: t.publicProcedure\n    .input(z.object({idToken: z.string()}))\n    .output(\n      z.union([\n        z.object({\n          isError: z.literal(true),\n          error: z.enum(['unknown']),\n          errorMessage: z.string(),\n        }),\n        z.object({\n          isError: z.literal(false),\n        }),\n      ]),\n    )\n    .mutation(async ({input}) => {\n      try {\n        await studioAuth.destroySession(input.idToken)\n        return {isError: false}\n      } catch (err) {\n        console.error(err)\n        return {\n          isError: true,\n          error: 'unknown',\n          errorMessage: `An unknown error occured.`,\n        }\n      }\n    }),\n\n  canIEditProject: t.publicProcedure\n    .input(\n      z.object({\n        studioAuth: studioAuth.input,\n        projectId: z.string(),\n      }),\n    )\n    .output(\n      z.union([\n        z.object({canEdit: z.literal(true)}),\n        z.object({\n          canEdit: z.literal(false),\n          reason: z.enum(['AccessTokenInvalid', 'UserHasNoAccess', 'Unknown']),\n        }),\n      ]),\n    )\n    .query(async (opts) => {\n      let payload!: studioAuthTokens.AccessTokenPayload\n      try {\n        payload = await studioAuth.verifyStudioAccessTokenOrThrow(opts)\n      } catch (err) {\n        return {canEdit: false, reason: 'AccessTokenInvalid'}\n      }\n      const {userId} = payload\n      const proj = await prisma.workspace.findFirst({\n        where: {\n          // TODO check if user has access to project\n          // userId,\n          id: opts.input.projectId,\n        },\n      })\n      if (proj) {\n        return {canEdit: true}\n      } else {\n        return {canEdit: false, reason: 'UserHasNoAccess'}\n      }\n    }),\n})\n"
  },
  {
    "path": "packages/app/src/trpc/react.tsx",
    "content": "'use client'\n\nimport {QueryClient, QueryClientProvider} from '@tanstack/react-query'\nimport {loggerLink, unstable_httpBatchStreamLink} from '@trpc/client'\nimport {createTRPCReact} from '@trpc/react-query'\nimport {useState} from 'react'\n\nimport {type AppRouter} from '~/server/api/root'\nimport {getUrl, transformer} from './shared'\n\nexport const api = createTRPCReact<AppRouter>()\n\nexport function TRPCReactProvider(props: {\n  children: React.ReactNode\n  headers: Headers\n}) {\n  const [queryClient] = useState(\n    () =>\n      new QueryClient({\n        defaultOptions: {\n          queries: {\n            suspense: true,\n          },\n        },\n      }),\n  )\n\n  const [trpcClient] = useState(() =>\n    api.createClient({\n      transformer,\n      links: [\n        loggerLink({\n          enabled: (op) =>\n            process.env.NODE_ENV === 'development' ||\n            (op.direction === 'down' && op.result instanceof Error),\n        }),\n        unstable_httpBatchStreamLink({\n          url: getUrl(),\n          headers() {\n            const heads = new Map(props.headers)\n            heads.set('x-trpc-source', 'react')\n            return Object.fromEntries(heads)\n          },\n        }),\n      ],\n    }),\n  )\n\n  return (\n    <QueryClientProvider client={queryClient}>\n      <api.Provider client={trpcClient} queryClient={queryClient}>\n        {props.children}\n      </api.Provider>\n    </QueryClientProvider>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/trpc/server.ts",
    "content": "import {\n  createTRPCProxyClient,\n  loggerLink,\n  unstable_httpBatchStreamLink,\n} from '@trpc/client'\nimport {headers} from 'next/headers'\n\nimport {type AppRouter} from '~/server/api/root'\nimport {getUrl, transformer} from './shared'\n\nexport const api = createTRPCProxyClient<AppRouter>({\n  transformer,\n  links: [\n    loggerLink({\n      enabled: (op) =>\n        process.env.NODE_ENV === 'development' ||\n        (op.direction === 'down' && op.result instanceof Error),\n    }),\n    unstable_httpBatchStreamLink({\n      url: getUrl(),\n      headers() {\n        const heads = new Map(headers())\n        heads.set('x-trpc-source', 'rsc')\n        return Object.fromEntries(heads)\n      },\n    }),\n  ],\n})\n"
  },
  {
    "path": "packages/app/src/trpc/shared.ts",
    "content": "import {type inferRouterInputs, type inferRouterOutputs} from '@trpc/server'\nimport superjson from 'superjson'\n\nimport {type AppRouter} from '~/server/api/root'\n\nexport const transformer = superjson\n\nfunction getBaseUrl() {\n  if (typeof window !== 'undefined')\n    // browser should use relative path\n    return ''\n  if (process.env.VERCEL_URL)\n    // reference for vercel.com\n    return `https://${process.env.VERCEL_URL}`\n  if (process.env.RENDER_INTERNAL_HOSTNAME)\n    // reference for render.com\n    return `http://${process.env.RENDER_INTERNAL_HOSTNAME}:${process.env.PORT}`\n  // assume localhost\n  return `http://localhost:${process.env.PORT ?? 3000}`\n}\n\nexport function getUrl() {\n  return getBaseUrl() + '/api/trpc'\n}\n\n/**\n * Inference helper for inputs.\n *\n * @example type HelloInput = RouterInputs['example']['hello']\n */\nexport type RouterInputs = inferRouterInputs<AppRouter>\n\n/**\n * Inference helper for outputs.\n *\n * @example type HelloOutput = RouterOutputs['example']['hello']\n */\nexport type RouterOutputs = inferRouterOutputs<AppRouter>\n"
  },
  {
    "path": "packages/app/src/types.ts",
    "content": "import {z} from 'zod'\n\nexport namespace studioAccessScopes {\n  export const listWorkspaces = z\n    .literal(`workspaces-list`)\n    .describe(\n      `This scope allows the client (studio) to get the list of workspaces the user has access to, including their ids, names, thumbnails, and last edit time`,\n    )\n\n  export type ListWorkspaces = z.infer<typeof listWorkspaces>\n  export const editWorkspace = z\n    .custom<`edit-workspace:${string}`>((v) =>\n      typeof v === 'string' && /^edit-workspace\\:([a-zA-Z0-9\\n\\-]+)$/.test(v)\n        ? true\n        : false,\n    )\n    .describe(\n      `This scope allows the client (studio) to edit a specific workspace (assuming the user has access to it).`,\n    )\n  export type EditWorkspace = z.infer<typeof editWorkspace>\n\n  export const scope = z.union([listWorkspaces, editWorkspace])\n  export type Scope = z.infer<typeof scope>\n\n  export const scopes = z.array(scope)\n  export type Scopes = z.infer<typeof scopes>\n}\n\nexport namespace studioAuthTokens {\n  export const accessTokenPayload = z.object({\n    userId: z.string(),\n    email: z.string(),\n    scopes: studioAccessScopes.scopes,\n  })\n  export type AccessTokenPayload = z.infer<typeof accessTokenPayload>\n\n  export const idTokenPayload = accessTokenPayload.extend({nounce: z.string()})\n  export type IdTokenPayload = z.infer<typeof idTokenPayload>\n}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/alert-dialog.tsx",
    "content": "import * as React from 'react'\nimport * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog'\n\nimport {cn} from 'src/ui/lib/utils'\nimport {buttonVariants} from 'src/ui/components/ui/button'\n\nconst AlertDialog = AlertDialogPrimitive.Root\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal\n\nconst AlertDialogOverlay = React.forwardRef<\n  React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({className, children, ...props}, ref) => (\n  <AlertDialogPrimitive.Overlay\n    className={cn(\n      'fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n      className,\n    )}\n    {...props}\n    ref={ref}\n  />\n))\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\n\nconst AlertDialogContent = React.forwardRef<\n  React.ElementRef<typeof AlertDialogPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({className, ...props}, ref) => (\n  <AlertDialogPortal>\n    <AlertDialogOverlay />\n    <AlertDialogPrimitive.Content\n      ref={ref}\n      className={cn(\n        'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg md:w-full',\n        className,\n      )}\n      {...props}\n    />\n  </AlertDialogPortal>\n))\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\n\nconst AlertDialogHeader = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\n      'flex flex-col space-y-2 text-center sm:text-left',\n      className,\n    )}\n    {...props}\n  />\n)\nAlertDialogHeader.displayName = 'AlertDialogHeader'\n\nconst AlertDialogFooter = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\n      'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',\n      className,\n    )}\n    {...props}\n  />\n)\nAlertDialogFooter.displayName = 'AlertDialogFooter'\n\nconst AlertDialogTitle = React.forwardRef<\n  React.ElementRef<typeof AlertDialogPrimitive.Title>,\n  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({className, ...props}, ref) => (\n  <AlertDialogPrimitive.Title\n    ref={ref}\n    className={cn('text-lg font-semibold', className)}\n    {...props}\n  />\n))\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\n\nconst AlertDialogDescription = React.forwardRef<\n  React.ElementRef<typeof AlertDialogPrimitive.Description>,\n  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({className, ...props}, ref) => (\n  <AlertDialogPrimitive.Description\n    ref={ref}\n    className={cn('text-sm text-muted-foreground', className)}\n    {...props}\n  />\n))\nAlertDialogDescription.displayName =\n  AlertDialogPrimitive.Description.displayName\n\nconst AlertDialogAction = React.forwardRef<\n  React.ElementRef<typeof AlertDialogPrimitive.Action>,\n  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({className, ...props}, ref) => (\n  <AlertDialogPrimitive.Action\n    ref={ref}\n    className={cn(buttonVariants(), className)}\n    {...props}\n  />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n  React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({className, ...props}, ref) => (\n  <AlertDialogPrimitive.Cancel\n    ref={ref}\n    className={cn(\n      buttonVariants({variant: 'outline'}),\n      'mt-2 sm:mt-0',\n      className,\n    )}\n    {...props}\n  />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n  AlertDialog,\n  AlertDialogPortal,\n  AlertDialogOverlay,\n  AlertDialogTrigger,\n  AlertDialogContent,\n  AlertDialogHeader,\n  AlertDialogFooter,\n  AlertDialogTitle,\n  AlertDialogDescription,\n  AlertDialogAction,\n  AlertDialogCancel,\n}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/avatar.tsx",
    "content": "import * as React from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport {cn} from 'src/ui/lib/utils'\n\nconst Avatar = React.forwardRef<\n  React.ElementRef<typeof AvatarPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({className, ...props}, ref) => (\n  <AvatarPrimitive.Root\n    ref={ref}\n    className={cn(\n      'relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full',\n      className,\n    )}\n    {...props}\n  />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n  React.ElementRef<typeof AvatarPrimitive.Image>,\n  React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({className, ...props}, ref) => (\n  <AvatarPrimitive.Image\n    ref={ref}\n    className={cn('aspect-square h-full w-full', className)}\n    {...props}\n  />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n  React.ElementRef<typeof AvatarPrimitive.Fallback>,\n  React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({className, ...props}, ref) => (\n  <AvatarPrimitive.Fallback\n    ref={ref}\n    className={cn(\n      'flex h-full w-full items-center justify-center rounded-full bg-muted',\n      className,\n    )}\n    {...props}\n  />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport {Avatar, AvatarImage, AvatarFallback}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/button.tsx",
    "content": "import * as React from 'react'\nimport {Slot} from '@radix-ui/react-slot'\nimport {cva, type VariantProps} from 'class-variance-authority'\n\nimport {cn} from 'src/ui/lib/utils'\n\nconst buttonVariants = cva(\n  'inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n  {\n    variants: {\n      variant: {\n        default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n        destructive:\n          'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n        outline:\n          'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n        secondary:\n          'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n        ghost: 'hover:bg-accent hover:text-accent-foreground',\n        link: 'text-primary underline-offset-4 hover:underline',\n      },\n      size: {\n        default: 'h-10 px-4 py-2',\n        sm: 'h-9 rounded-md px-3',\n        lg: 'h-11 rounded-md px-8',\n        icon: 'h-10 w-10',\n      },\n    },\n    defaultVariants: {\n      variant: 'default',\n      size: 'default',\n    },\n  },\n)\n\nexport interface ButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n    VariantProps<typeof buttonVariants> {\n  asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  ({className, variant, size, asChild = false, ...props}, ref) => {\n    const Comp = asChild ? Slot : 'button'\n    return (\n      <Comp\n        className={cn(buttonVariants({variant, size, className}))}\n        ref={ref}\n        {...props}\n      />\n    )\n  },\n)\nButton.displayName = 'Button'\n\nexport {Button, buttonVariants}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/context-menu.tsx",
    "content": "import * as React from 'react'\nimport * as ContextMenuPrimitive from '@radix-ui/react-context-menu'\nimport {Check, ChevronRight, Circle} from 'lucide-react'\n\nimport {cn} from 'src/ui/lib/utils'\n\nconst ContextMenu = ContextMenuPrimitive.Root\n\nconst ContextMenuTrigger = ContextMenuPrimitive.Trigger\n\nconst ContextMenuGroup = ContextMenuPrimitive.Group\n\nconst ContextMenuPortal = ContextMenuPrimitive.Portal\n\nconst ContextMenuSub = ContextMenuPrimitive.Sub\n\nconst ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup\n\nconst ContextMenuSubTrigger = React.forwardRef<\n  React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {\n    inset?: boolean\n  }\n>(({className, inset, children, ...props}, ref) => (\n  <ContextMenuPrimitive.SubTrigger\n    ref={ref}\n    className={cn(\n      'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground',\n      inset && 'pl-8',\n      className,\n    )}\n    {...props}\n  >\n    {children}\n    <ChevronRight className=\"ml-auto h-4 w-4\" />\n  </ContextMenuPrimitive.SubTrigger>\n))\nContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName\n\nconst ContextMenuSubContent = React.forwardRef<\n  React.ElementRef<typeof ContextMenuPrimitive.SubContent>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(({className, ...props}, ref) => (\n  <ContextMenuPrimitive.SubContent\n    ref={ref}\n    className={cn(\n      'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n      className,\n    )}\n    {...props}\n  />\n))\nContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName\n\nconst ContextMenuContent = React.forwardRef<\n  React.ElementRef<typeof ContextMenuPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(({className, ...props}, ref) => (\n  <ContextMenuPrimitive.Portal>\n    <ContextMenuPrimitive.Content\n      ref={ref}\n      className={cn(\n        'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n        className,\n      )}\n      {...props}\n    />\n  </ContextMenuPrimitive.Portal>\n))\nContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName\n\nconst ContextMenuItem = React.forwardRef<\n  React.ElementRef<typeof ContextMenuPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {\n    inset?: boolean\n  }\n>(({className, inset, ...props}, ref) => (\n  <ContextMenuPrimitive.Item\n    ref={ref}\n    className={cn(\n      'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n      inset && 'pl-8',\n      className,\n    )}\n    {...props}\n  />\n))\nContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName\n\nconst ContextMenuCheckboxItem = React.forwardRef<\n  React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(({className, children, checked, ...props}, ref) => (\n  <ContextMenuPrimitive.CheckboxItem\n    ref={ref}\n    className={cn(\n      'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n      className,\n    )}\n    checked={checked}\n    {...props}\n  >\n    <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n      <ContextMenuPrimitive.ItemIndicator>\n        <Check className=\"h-4 w-4\" />\n      </ContextMenuPrimitive.ItemIndicator>\n    </span>\n    {children}\n  </ContextMenuPrimitive.CheckboxItem>\n))\nContextMenuCheckboxItem.displayName =\n  ContextMenuPrimitive.CheckboxItem.displayName\n\nconst ContextMenuRadioItem = React.forwardRef<\n  React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(({className, children, ...props}, ref) => (\n  <ContextMenuPrimitive.RadioItem\n    ref={ref}\n    className={cn(\n      'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n      className,\n    )}\n    {...props}\n  >\n    <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n      <ContextMenuPrimitive.ItemIndicator>\n        <Circle className=\"h-2 w-2 fill-current\" />\n      </ContextMenuPrimitive.ItemIndicator>\n    </span>\n    {children}\n  </ContextMenuPrimitive.RadioItem>\n))\nContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName\n\nconst ContextMenuLabel = React.forwardRef<\n  React.ElementRef<typeof ContextMenuPrimitive.Label>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {\n    inset?: boolean\n  }\n>(({className, inset, ...props}, ref) => (\n  <ContextMenuPrimitive.Label\n    ref={ref}\n    className={cn(\n      'px-2 py-1.5 text-sm font-semibold text-foreground',\n      inset && 'pl-8',\n      className,\n    )}\n    {...props}\n  />\n))\nContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName\n\nconst ContextMenuSeparator = React.forwardRef<\n  React.ElementRef<typeof ContextMenuPrimitive.Separator>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>\n>(({className, ...props}, ref) => (\n  <ContextMenuPrimitive.Separator\n    ref={ref}\n    className={cn('-mx-1 my-1 h-px bg-border', className)}\n    {...props}\n  />\n))\nContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName\n\nconst ContextMenuShortcut = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n  return (\n    <span\n      className={cn(\n        'ml-auto text-xs tracking-widest text-muted-foreground',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\nContextMenuShortcut.displayName = 'ContextMenuShortcut'\n\nexport {\n  ContextMenu,\n  ContextMenuTrigger,\n  ContextMenuContent,\n  ContextMenuItem,\n  ContextMenuCheckboxItem,\n  ContextMenuRadioItem,\n  ContextMenuLabel,\n  ContextMenuSeparator,\n  ContextMenuShortcut,\n  ContextMenuGroup,\n  ContextMenuPortal,\n  ContextMenuSub,\n  ContextMenuSubContent,\n  ContextMenuSubTrigger,\n  ContextMenuRadioGroup,\n}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/dialog.tsx",
    "content": "import * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport {X} from 'lucide-react'\n\nimport {cn} from 'src/ui/lib/utils'\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Overlay>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({className, ...props}, ref) => (\n  <DialogPrimitive.Overlay\n    ref={ref}\n    className={cn(\n      'fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n      className,\n    )}\n    {...props}\n  />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({className, children, ...props}, ref) => (\n  <DialogPortal>\n    <DialogOverlay />\n    <DialogPrimitive.Content\n      ref={ref}\n      className={cn(\n        'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg md:w-full',\n        className,\n      )}\n      {...props}\n    >\n      {children}\n      <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n        <X className=\"h-4 w-4\" />\n        <span className=\"sr-only\">Close</span>\n      </DialogPrimitive.Close>\n    </DialogPrimitive.Content>\n  </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\n      'flex flex-col space-y-1.5 text-center sm:text-left',\n      className,\n    )}\n    {...props}\n  />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\n      'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',\n      className,\n    )}\n    {...props}\n  />\n)\nDialogFooter.displayName = 'DialogFooter'\n\nconst DialogTitle = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Title>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({className, ...props}, ref) => (\n  <DialogPrimitive.Title\n    ref={ref}\n    className={cn(\n      'text-lg font-semibold leading-none tracking-tight',\n      className,\n    )}\n    {...props}\n  />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Description>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({className, ...props}, ref) => (\n  <DialogPrimitive.Description\n    ref={ref}\n    className={cn('text-sm text-muted-foreground', className)}\n    {...props}\n  />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n  Dialog,\n  DialogPortal,\n  DialogOverlay,\n  DialogClose,\n  DialogTrigger,\n  DialogContent,\n  DialogHeader,\n  DialogFooter,\n  DialogTitle,\n  DialogDescription,\n}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/form.tsx",
    "content": "import * as React from 'react'\nimport type * as LabelPrimitive from '@radix-ui/react-label'\nimport {Slot} from '@radix-ui/react-slot'\nimport type {\n  ControllerProps,\n  FieldPath,\n  FieldValues} from 'react-hook-form';\nimport {\n  Controller,\n  FormProvider,\n  useFormContext,\n} from 'react-hook-form'\n\nimport {cn} from 'src/ui/lib/utils'\nimport {Label} from 'src/ui/components/ui/label'\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n  name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n  {} as FormFieldContextValue,\n)\n\nconst FormField = <\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n  ...props\n}: ControllerProps<TFieldValues, TName>) => {\n  return (\n    <FormFieldContext.Provider value={{name: props.name}}>\n      <Controller {...props} />\n    </FormFieldContext.Provider>\n  )\n}\n\nconst useFormField = () => {\n  const fieldContext = React.useContext(FormFieldContext)\n  const itemContext = React.useContext(FormItemContext)\n  const {getFieldState, formState} = useFormContext()\n\n  const fieldState = getFieldState(fieldContext.name, formState)\n\n  if (!fieldContext) {\n    throw new Error('useFormField should be used within <FormField>')\n  }\n\n  const {id} = itemContext\n\n  return {\n    id,\n    name: fieldContext.name,\n    formItemId: `${id}-form-item`,\n    formDescriptionId: `${id}-form-item-description`,\n    formMessageId: `${id}-form-item-message`,\n    ...fieldState,\n  }\n}\n\ntype FormItemContextValue = {\n  id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n  {} as FormItemContextValue,\n)\n\nconst FormItem = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({className, ...props}, ref) => {\n  const id = React.useId()\n\n  return (\n    <FormItemContext.Provider value={{id}}>\n      <div ref={ref} className={cn('space-y-2', className)} {...props} />\n    </FormItemContext.Provider>\n  )\n})\nFormItem.displayName = 'FormItem'\n\nconst FormLabel = React.forwardRef<\n  React.ElementRef<typeof LabelPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({className, ...props}, ref) => {\n  const {error, formItemId} = useFormField()\n\n  return (\n    <Label\n      ref={ref}\n      className={cn(error && 'text-destructive', className)}\n      htmlFor={formItemId}\n      {...props}\n    />\n  )\n})\nFormLabel.displayName = 'FormLabel'\n\nconst FormControl = React.forwardRef<\n  React.ElementRef<typeof Slot>,\n  React.ComponentPropsWithoutRef<typeof Slot>\n>(({...props}, ref) => {\n  const {error, formItemId, formDescriptionId, formMessageId} = useFormField()\n\n  return (\n    <Slot\n      ref={ref}\n      id={formItemId}\n      aria-describedby={\n        !error\n          ? `${formDescriptionId}`\n          : `${formDescriptionId} ${formMessageId}`\n      }\n      aria-invalid={!!error}\n      {...props}\n    />\n  )\n})\nFormControl.displayName = 'FormControl'\n\nconst FormDescription = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({className, ...props}, ref) => {\n  const {formDescriptionId} = useFormField()\n\n  return (\n    <p\n      ref={ref}\n      id={formDescriptionId}\n      className={cn('text-sm text-muted-foreground', className)}\n      {...props}\n    />\n  )\n})\nFormDescription.displayName = 'FormDescription'\n\nconst FormMessage = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({className, children, ...props}, ref) => {\n  const {error, formMessageId} = useFormField()\n  const body = error ? String(error?.message) : children\n\n  if (!body) {\n    return null\n  }\n\n  return (\n    <p\n      ref={ref}\n      id={formMessageId}\n      className={cn('text-sm font-medium text-destructive', className)}\n      {...props}\n    >\n      {body}\n    </p>\n  )\n})\nFormMessage.displayName = 'FormMessage'\n\nexport {\n  useFormField,\n  Form,\n  FormItem,\n  FormLabel,\n  FormControl,\n  FormDescription,\n  FormMessage,\n  FormField,\n}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/input.tsx",
    "content": "import * as React from 'react'\n\nimport {cn} from 'src/ui/lib/utils'\n\nexport interface InputProps\n  extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n  ({className, type, ...props}, ref) => {\n    return (\n      <input\n        type={type}\n        className={cn(\n          'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n          className,\n        )}\n        ref={ref}\n        {...props}\n      />\n    )\n  },\n)\nInput.displayName = 'Input'\n\nexport {Input}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/label.tsx",
    "content": "import * as React from 'react'\nimport * as LabelPrimitive from '@radix-ui/react-label'\nimport {cva, type VariantProps} from 'class-variance-authority'\n\nimport {cn} from 'src/ui/lib/utils'\n\nconst labelVariants = cva(\n  'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n)\n\nconst Label = React.forwardRef<\n  React.ElementRef<typeof LabelPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n    VariantProps<typeof labelVariants>\n>(({className, ...props}, ref) => (\n  <LabelPrimitive.Root\n    ref={ref}\n    className={cn(labelVariants(), className)}\n    {...props}\n  />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport {Label}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/popover.tsx",
    "content": "import * as React from 'react'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\n\nimport {cn} from 'src/ui/lib/utils'\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n  React.ElementRef<typeof PopoverPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({className, align = 'center', sideOffset = 4, ...props}, ref) => (\n  <PopoverPrimitive.Portal>\n    <PopoverPrimitive.Content\n      ref={ref}\n      align={align}\n      sideOffset={sideOffset}\n      className={cn(\n        'z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n        className,\n      )}\n      {...props}\n    />\n  </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport {Popover, PopoverTrigger, PopoverContent}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/select.tsx",
    "content": "import * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport {Check, ChevronDown} from 'lucide-react'\n\nimport {cn} from 'src/ui/lib/utils'\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({className, children, ...props}, ref) => (\n  <SelectPrimitive.Trigger\n    ref={ref}\n    className={cn(\n      'flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n      className,\n    )}\n    {...props}\n  >\n    {children}\n    <SelectPrimitive.Icon asChild>\n      <ChevronDown className=\"h-4 w-4 opacity-50\" />\n    </SelectPrimitive.Icon>\n  </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectContent = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({className, children, position = 'popper', ...props}, ref) => (\n  <SelectPrimitive.Portal>\n    <SelectPrimitive.Content\n      ref={ref}\n      className={cn(\n        'relative z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n        position === 'popper' &&\n          'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n        className,\n      )}\n      position={position}\n      {...props}\n    >\n      <SelectPrimitive.Viewport\n        className={cn(\n          'p-1',\n          position === 'popper' &&\n            'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]',\n        )}\n      >\n        {children}\n      </SelectPrimitive.Viewport>\n    </SelectPrimitive.Content>\n  </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Label>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({className, ...props}, ref) => (\n  <SelectPrimitive.Label\n    ref={ref}\n    className={cn('py-1.5 pl-8 pr-2 text-sm font-semibold', className)}\n    {...props}\n  />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({className, children, ...props}, ref) => (\n  <SelectPrimitive.Item\n    ref={ref}\n    className={cn(\n      'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n      className,\n    )}\n    {...props}\n  >\n    <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n      <SelectPrimitive.ItemIndicator>\n        <Check className=\"h-4 w-4\" />\n      </SelectPrimitive.ItemIndicator>\n    </span>\n\n    <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n  </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Separator>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({className, ...props}, ref) => (\n  <SelectPrimitive.Separator\n    ref={ref}\n    className={cn('-mx-1 my-1 h-px bg-muted', className)}\n    {...props}\n  />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n  Select,\n  SelectGroup,\n  SelectValue,\n  SelectTrigger,\n  SelectContent,\n  SelectLabel,\n  SelectItem,\n  SelectSeparator,\n}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/separator.tsx",
    "content": "import * as React from 'react'\nimport * as SeparatorPrimitive from '@radix-ui/react-separator'\n\nimport {cn} from 'src/ui/lib/utils'\n\nconst Separator = React.forwardRef<\n  React.ElementRef<typeof SeparatorPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n  (\n    {className, orientation = 'horizontal', decorative = true, ...props},\n    ref,\n  ) => (\n    <SeparatorPrimitive.Root\n      ref={ref}\n      decorative={decorative}\n      orientation={orientation}\n      className={cn(\n        'shrink-0 bg-border',\n        orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',\n        className,\n      )}\n      {...props}\n    />\n  ),\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport {Separator}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/toast.tsx",
    "content": "import * as React from 'react'\nimport * as ToastPrimitives from '@radix-ui/react-toast'\nimport {cva, type VariantProps} from 'class-variance-authority'\nimport {X} from 'lucide-react'\n\nimport {cn} from 'src/ui/lib/utils'\n\nconst ToastProvider = ToastPrimitives.Provider\n\nconst ToastViewport = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Viewport>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({className, ...props}, ref) => (\n  <ToastPrimitives.Viewport\n    ref={ref}\n    className={cn(\n      'fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]',\n      className,\n    )}\n    {...props}\n  />\n))\nToastViewport.displayName = ToastPrimitives.Viewport.displayName\n\nconst toastVariants = cva(\n  'group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full',\n  {\n    variants: {\n      variant: {\n        default: 'border bg-background text-foreground',\n        destructive:\n          'destructive group border-destructive bg-destructive text-destructive-foreground',\n      },\n    },\n    defaultVariants: {\n      variant: 'default',\n    },\n  },\n)\n\nconst Toast = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Root>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &\n    VariantProps<typeof toastVariants>\n>(({className, variant, ...props}, ref) => {\n  return (\n    <ToastPrimitives.Root\n      ref={ref}\n      className={cn(toastVariants({variant}), className)}\n      {...props}\n    />\n  )\n})\nToast.displayName = ToastPrimitives.Root.displayName\n\nconst ToastAction = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Action>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({className, ...props}, ref) => (\n  <ToastPrimitives.Action\n    ref={ref}\n    className={cn(\n      'inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive',\n      className,\n    )}\n    {...props}\n  />\n))\nToastAction.displayName = ToastPrimitives.Action.displayName\n\nconst ToastClose = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Close>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({className, ...props}, ref) => (\n  <ToastPrimitives.Close\n    ref={ref}\n    className={cn(\n      'absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600',\n      className,\n    )}\n    toast-close=\"\"\n    {...props}\n  >\n    <X className=\"h-4 w-4\" />\n  </ToastPrimitives.Close>\n))\nToastClose.displayName = ToastPrimitives.Close.displayName\n\nconst ToastTitle = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Title>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({className, ...props}, ref) => (\n  <ToastPrimitives.Title\n    ref={ref}\n    className={cn('text-sm font-semibold', className)}\n    {...props}\n  />\n))\nToastTitle.displayName = ToastPrimitives.Title.displayName\n\nconst ToastDescription = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Description>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({className, ...props}, ref) => (\n  <ToastPrimitives.Description\n    ref={ref}\n    className={cn('text-sm opacity-90', className)}\n    {...props}\n  />\n))\nToastDescription.displayName = ToastPrimitives.Description.displayName\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>\n\nexport {\n  type ToastProps,\n  type ToastActionElement,\n  ToastProvider,\n  ToastViewport,\n  Toast,\n  ToastTitle,\n  ToastDescription,\n  ToastClose,\n  ToastAction,\n}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/toaster.tsx",
    "content": "'use client'\n\nimport {\n  Toast,\n  ToastClose,\n  ToastDescription,\n  ToastProvider,\n  ToastTitle,\n  ToastViewport,\n} from 'src/ui/components/ui/toast'\nimport {useToast} from 'src/ui/components/ui/use-toast'\n\nexport function Toaster() {\n  const {toasts} = useToast()\n\n  return (\n    <ToastProvider>\n      {toasts.map(function ({id, title, description, action, ...props}) {\n        return (\n          <Toast key={id} {...props}>\n            <div className=\"grid gap-1\">\n              {title && <ToastTitle>{title}</ToastTitle>}\n              {description && (\n                <ToastDescription>{description}</ToastDescription>\n              )}\n            </div>\n            {action}\n            <ToastClose />\n          </Toast>\n        )\n      })}\n      <ToastViewport />\n    </ToastProvider>\n  )\n}\n"
  },
  {
    "path": "packages/app/src/ui/components/ui/use-toast.ts",
    "content": "// Inspired by react-hot-toast library\nimport * as React from 'react'\n\nimport type {ToastActionElement, ToastProps} from 'src/ui/components/ui/toast'\n\nconst TOAST_LIMIT = 1\nconst TOAST_REMOVE_DELAY = 1000000\n\ntype ToasterToast = ToastProps & {\n  id: string\n  title?: React.ReactNode\n  description?: React.ReactNode\n  action?: ToastActionElement\n}\n\nconst actionTypes = {\n  ADD_TOAST: 'ADD_TOAST',\n  UPDATE_TOAST: 'UPDATE_TOAST',\n  DISMISS_TOAST: 'DISMISS_TOAST',\n  REMOVE_TOAST: 'REMOVE_TOAST',\n} as const\n\nlet count = 0\n\nfunction genId() {\n  count = (count + 1) % Number.MAX_VALUE\n  return count.toString()\n}\n\ntype ActionType = typeof actionTypes\n\ntype Action =\n  | {\n      type: ActionType['ADD_TOAST']\n      toast: ToasterToast\n    }\n  | {\n      type: ActionType['UPDATE_TOAST']\n      toast: Partial<ToasterToast>\n    }\n  | {\n      type: ActionType['DISMISS_TOAST']\n      toastId?: ToasterToast['id']\n    }\n  | {\n      type: ActionType['REMOVE_TOAST']\n      toastId?: ToasterToast['id']\n    }\n\ninterface State {\n  toasts: ToasterToast[]\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>()\n\nconst addToRemoveQueue = (toastId: string) => {\n  if (toastTimeouts.has(toastId)) {\n    return\n  }\n\n  const timeout = setTimeout(() => {\n    toastTimeouts.delete(toastId)\n    dispatch({\n      type: 'REMOVE_TOAST',\n      toastId: toastId,\n    })\n  }, TOAST_REMOVE_DELAY)\n\n  toastTimeouts.set(toastId, timeout)\n}\n\nexport const reducer = (state: State, action: Action): State => {\n  switch (action.type) {\n    case 'ADD_TOAST':\n      return {\n        ...state,\n        toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n      }\n\n    case 'UPDATE_TOAST':\n      return {\n        ...state,\n        toasts: state.toasts.map((t) =>\n          t.id === action.toast.id ? {...t, ...action.toast} : t,\n        ),\n      }\n\n    case 'DISMISS_TOAST': {\n      const {toastId} = action\n\n      // ! Side effects ! - This could be extracted into a dismissToast() action,\n      // but I'll keep it here for simplicity\n      if (toastId) {\n        addToRemoveQueue(toastId)\n      } else {\n        state.toasts.forEach((toast) => {\n          addToRemoveQueue(toast.id)\n        })\n      }\n\n      return {\n        ...state,\n        toasts: state.toasts.map((t) =>\n          t.id === toastId || toastId === undefined\n            ? {\n                ...t,\n                open: false,\n              }\n            : t,\n        ),\n      }\n    }\n    case 'REMOVE_TOAST':\n      if (action.toastId === undefined) {\n        return {\n          ...state,\n          toasts: [],\n        }\n      }\n      return {\n        ...state,\n        toasts: state.toasts.filter((t) => t.id !== action.toastId),\n      }\n  }\n}\n\nconst listeners: Array<(state: State) => void> = []\n\nlet memoryState: State = {toasts: []}\n\nfunction dispatch(action: Action) {\n  memoryState = reducer(memoryState, action)\n  listeners.forEach((listener) => {\n    listener(memoryState)\n  })\n}\n\ntype Toast = Omit<ToasterToast, 'id'>\n\nfunction toast({...props}: Toast) {\n  const id = genId()\n\n  const update = (props: ToasterToast) =>\n    dispatch({\n      type: 'UPDATE_TOAST',\n      toast: {...props, id},\n    })\n  const dismiss = () => dispatch({type: 'DISMISS_TOAST', toastId: id})\n\n  dispatch({\n    type: 'ADD_TOAST',\n    toast: {\n      ...props,\n      id,\n      open: true,\n      onOpenChange: (open) => {\n        if (!open) dismiss()\n      },\n    },\n  })\n\n  return {\n    id: id,\n    dismiss,\n    update,\n  }\n}\n\nfunction useToast() {\n  const [state, setState] = React.useState<State>(memoryState)\n\n  React.useEffect(() => {\n    listeners.push(setState)\n    return () => {\n      const index = listeners.indexOf(setState)\n      if (index > -1) {\n        listeners.splice(index, 1)\n      }\n    }\n  }, [state])\n\n  return {\n    ...state,\n    toast,\n    dismiss: (toastId?: string) => dispatch({type: 'DISMISS_TOAST', toastId}),\n  }\n}\n\nexport {useToast, toast}\n"
  },
  {
    "path": "packages/app/src/ui/lib/utils.ts",
    "content": "import {type ClassValue, clsx} from 'clsx'\nimport {twMerge} from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n"
  },
  {
    "path": "packages/app/src/useApi.ts",
    "content": "import * as React from 'react'\n\nfunction initialState(args: {\n  error?: any\n  isLoading?: boolean\n  response?: any\n}) {\n  return {\n    response: null,\n    error: null,\n    isLoading: true,\n    ...args,\n  }\n}\n\nconst useApi = (\n  url: RequestInfo,\n  options = {},\n): {\n  error: unknown\n  isLoading: boolean\n  response: any\n} => {\n  const [state, setState] = React.useState(() => initialState({}))\n\n  React.useEffect(() => {\n    const fetchData = async () => {\n      try {\n        const res = await fetch(url, {\n          ...options,\n        })\n\n        if (res.status >= 400) {\n          setState(\n            initialState({\n              error: await res.json(),\n              isLoading: false,\n            }),\n          )\n        } else {\n          setState(\n            initialState({\n              response: await res.json(),\n              isLoading: false,\n            }),\n          )\n        }\n      } catch (error) {\n        setState(\n          initialState({\n            error: {\n              error: (error as any).message,\n            },\n            isLoading: false,\n          }),\n        )\n      }\n    }\n    void fetchData()\n  }, [options, url])\n  return state\n}\n\nexport default useApi\n"
  },
  {
    "path": "packages/app/src/utils/authUtils.ts",
    "content": "import type {\n  GetServerSidePropsContext,\n  NextApiRequest,\n  NextApiResponse,\n} from 'next'\nimport type {LibSession, User} from '../../prisma/client-generated'\nimport prisma from '../prisma'\nimport * as jose from 'jose'\nimport type {studioAccessScopes} from 'src/types'\nimport {TRPCError} from '@trpc/server'\nimport {z} from 'zod'\nimport type {AuthOptions} from 'next-auth'\nimport {getServerSession} from 'next-auth'\nimport GithubProvider from 'next-auth/providers/github'\nimport {PrismaAdapter} from '@auth/prisma-adapter'\nimport type {Adapter} from 'next-auth/adapters'\nimport type {studioAuthTokens} from 'src/types'\nimport type {$FixMe, $IntentionalAny} from '@theatre/utils/types'\n\n// Extend NextAuth Session type to include all fields from the User model\ndeclare module 'next-auth' {\n  interface Session {\n    user: User\n  }\n}\n\nexport const nextAuthConfig = {\n  // Why type assertion: https://github.com/nextauthjs/next-auth/issues/6106#issuecomment-1582582312\n  adapter: PrismaAdapter(prisma) as Adapter,\n  providers: [\n    GithubProvider({\n      clientId: process.env.GITHUB_ID,\n      clientSecret: process.env.GITHUB_SECRET,\n    }),\n  ],\n  callbacks: {\n    session({session, token, user}) {\n      session.user = {...session.user, ...user}\n      return session\n    },\n    // redirect({url, baseUrl}) {\n    //   if (url === '/api/auth/signin') return baseUrl\n    //   // Allows relative callback URLs\n    //   if (url.startsWith('/')) return `${baseUrl}${url}`\n    //   // Allows callback URLs on the same origin\n    //   else if (new URL(url).origin === baseUrl) return url\n    //   return baseUrl\n    // },\n  },\n} satisfies AuthOptions\n\n// Use it in server contexts\nexport function getAppSession(\n  ...args:\n    | [GetServerSidePropsContext['req'], GetServerSidePropsContext['res']]\n    | [NextApiRequest, NextApiResponse]\n    | []\n) {\n  return getServerSession(...args, nextAuthConfig)\n}\n\nexport namespace studioAuth {\n  export const jwtAlg = 'RS256'\n  export const input = z.object({accessToken: z.string()})\n  async function generateIdToken(\n    nounce: string,\n    user: User,\n    scopes: studioAccessScopes.Scopes,\n    expirationTime: Date,\n  ): Promise<string> {\n    const privateKey = await privateKeyPromise\n    const payload: studioAuthTokens.IdTokenPayload = {\n      userId: user.id,\n      email: user.email ?? '',\n      nounce,\n      scopes,\n    }\n    const jwt = await new jose.SignJWT(payload)\n      .setProtectedHeader({alg: jwtAlg})\n      .setIssuedAt()\n      .setExpirationTime(expirationTime.getTime())\n      .sign(privateKey)\n\n    return jwt\n  }\n\n  export async function parseAndVerifyIdToken(\n    idToken: string,\n  ): Promise<undefined | studioAuthTokens.IdTokenPayload> {\n    const privateKey = await privateKeyPromise\n\n    try {\n      const s = await jose.jwtVerify(idToken, privateKey, {\n        algorithms: [jwtAlg],\n      })\n      return s.payload as $FixMe\n    } catch (err) {\n      console.log(`parseAndVerifyIdToken failed:`, err)\n      return undefined\n    }\n  }\n\n  export function getIdTokenClaimsWithoutVerifying(\n    idToken: string,\n  ): undefined | studioAuthTokens.IdTokenPayload {\n    try {\n      const s = jose.decodeJwt(idToken)\n      return s as $FixMe\n    } catch (err) {\n      console.log(`getIdTokenClaimsWithoutVerifying failed:`, err)\n      return undefined\n    }\n  }\n\n  /**\n   * Generates an access token for the given user.\n   */\n  async function generateAccessToken(\n    user: User,\n    scopes: studioAccessScopes.Scopes,\n  ): Promise<string> {\n    const privateKey = await privateKeyPromise\n    const payload: studioAuthTokens.AccessTokenPayload = {\n      userId: user.id,\n      email: user.email ?? '',\n      scopes,\n    }\n    const jwt = await new jose.SignJWT(payload)\n      .setProtectedHeader({alg: 'RS256'})\n      .setIssuedAt()\n      .setExpirationTime('2h')\n      .sign(privateKey)\n\n    return jwt\n  }\n\n  export async function createSession(\n    nounce: string,\n    user: User,\n    scopes: studioAccessScopes.Scopes,\n  ): Promise<{refreshToken: string; accessToken: string}> {\n    // now + 2 months\n    const validUntil = new Date(Date.now() + 1000 * 60 * 60 * 24 * 30 * 2)\n\n    const idToken = await generateIdToken(nounce, user, scopes, validUntil)\n\n    const session = await prisma.libSession.create({\n      data: {\n        createdAt: new Date().toISOString(),\n        refreshToken: idToken,\n        validUntil: validUntil.toISOString(),\n        userId: user.id,\n      },\n    })\n\n    const accessToken = await generateAccessToken(user, scopes)\n\n    return {refreshToken: idToken, accessToken}\n  }\n\n  export async function destroySession(refreshToken: string) {\n    await prisma.libSession.delete({\n      where: {\n        refreshToken,\n      },\n    })\n  }\n\n  /**\n   * Returns a new accessToken, and a new refreshToken. The old refreshToken is invalidated.\n   */\n  export async function refreshSession(\n    originalIdToken: string,\n  ): Promise<{refreshToken: string; accessToken: string}> {\n    const session = await prisma.libSession.findUnique({\n      where: {\n        refreshToken: originalIdToken,\n      },\n    })\n\n    if (!session) {\n      throw new Error(`Invalid refresh token`)\n    }\n\n    let originalSuccessorSession: null | LibSession = null\n\n    // client has already tried to get a new refresh token using this refresh token.\n    if (session.succeededByRefreshToken) {\n      // there is a grace period in which the old refresh token is still valid (in case the new one didn't reach the client due to a network error or a race condition)\n      if (session.successorLinkExpresAt! < new Date()) {\n        // the grace period is over, the old refresh token is now invalid. let's delete it.\n        await destroySession(session.refreshToken)\n        throw new Error(`Invalid refresh token`)\n      } else {\n        // the grace period is still active, so a new id token has been issued. We should now find and remove that token before we issue another one\n        originalSuccessorSession = await prisma.libSession.findUnique({\n          where: {\n            refreshToken: session.succeededByRefreshToken,\n          },\n        })\n\n        // well, the new refresh token been removed for some reason. at this point, the client has to re-authenticate.\n        if (!originalSuccessorSession) {\n          // let's GC the old token while we're at it\n          await destroySession(session.refreshToken)\n          throw new Error(`Invalid refresh token`)\n        }\n      }\n    }\n\n    // the refresh token is expired\n    if (session.validUntil < new Date()) {\n      await destroySession(session.refreshToken)\n      throw new Error(`Invalid refresh token`)\n    }\n\n    const user = await prisma.user.findUnique({\n      where: {\n        id: session.userId,\n      },\n    })\n\n    if (!user) {\n      throw new Error(`Invalid refresh token`)\n    }\n\n    const {nounce, scopes} = getIdTokenClaimsWithoutVerifying(originalIdToken)!\n\n    const {refreshToken: newRefreshToken, accessToken} = await createSession(\n      nounce,\n      user,\n      scopes,\n    )\n\n    await prisma.libSession.update({\n      where: {refreshToken: originalIdToken},\n      data: {\n        succeededByRefreshToken: newRefreshToken,\n        successorLinkExpresAt: new Date(Date.now() + 60).toISOString(),\n      },\n    })\n\n    if (originalSuccessorSession) {\n      await destroySession(originalSuccessorSession.refreshToken)\n    }\n\n    return {refreshToken: newRefreshToken, accessToken}\n  }\n\n  export async function verifyStudioAccessTokenOrThrow(opts: {\n    input: {\n      studioAuth: {accessToken: string}\n    }\n  }): Promise<studioAuthTokens.AccessTokenPayload> {\n    const publicKey = await publicKeyPromise\n    try {\n      const res = await jose.jwtVerify(\n        opts.input.studioAuth.accessToken,\n        publicKey,\n        {\n          maxTokenAge: '1h',\n        },\n      )\n\n      const {payload} = res as $IntentionalAny\n\n      return payload as studioAuthTokens.AccessTokenPayload\n    } catch (e) {\n      throw new TRPCError({\n        code: 'UNAUTHORIZED',\n        cause: 'InvalidSession',\n        message: 'Access token could not be verified',\n      })\n    }\n  }\n\n  const privateKeyPromise = jose.importPKCS8(\n    process.env.STUDIO_AUTH_JWT_PRIVATE_KEY!,\n    'RS256',\n  )\n\n  const publicKeyPromise = jose.importSPKI(\n    process.env.STUDIO_AUTH_JWT_PUBLIC_KEY!,\n    'RS256',\n  )\n}\n"
  },
  {
    "path": "packages/app/src/utils/index.ts",
    "content": "export function allowCors(res: Response) {\n  res.headers.set('Access-Control-Allow-Origin', '*')\n  res.headers.set('Access-Control-Request-Method', '*')\n  res.headers.set('Access-Control-Allow-Methods', '*')\n  res.headers.set('Access-Control-Allow-Headers', '*')\n}\n"
  },
  {
    "path": "packages/app/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  darkMode: ['class'],\n  content: [\n    './pages/**/*.{ts,tsx}',\n    './components/**/*.{ts,tsx}',\n    './app/**/*.{ts,tsx}',\n    './src/**/*.{ts,tsx}',\n  ],\n  theme: {\n    container: {\n      center: true,\n      padding: '2rem',\n      screens: {\n        '2xl': '1400px',\n      },\n    },\n    extend: {\n      colors: {\n        border: 'hsl(var(--border))',\n        input: 'hsl(var(--input))',\n        ring: 'hsl(var(--ring))',\n        background: 'hsl(var(--background))',\n        foreground: 'hsl(var(--foreground))',\n        primary: {\n          DEFAULT: 'hsl(var(--primary))',\n          foreground: 'hsl(var(--primary-foreground))',\n        },\n        secondary: {\n          DEFAULT: 'hsl(var(--secondary))',\n          foreground: 'hsl(var(--secondary-foreground))',\n        },\n        destructive: {\n          DEFAULT: 'hsl(var(--destructive))',\n          foreground: 'hsl(var(--destructive-foreground))',\n        },\n        muted: {\n          DEFAULT: 'hsl(var(--muted))',\n          foreground: 'hsl(var(--muted-foreground))',\n        },\n        accent: {\n          DEFAULT: 'hsl(var(--accent))',\n          foreground: 'hsl(var(--accent-foreground))',\n        },\n        popover: {\n          DEFAULT: 'hsl(var(--popover))',\n          foreground: 'hsl(var(--popover-foreground))',\n        },\n        card: {\n          DEFAULT: 'hsl(var(--card))',\n          foreground: 'hsl(var(--card-foreground))',\n        },\n      },\n      borderRadius: {\n        lg: 'var(--radius)',\n        md: 'calc(var(--radius) - 2px)',\n        sm: 'calc(var(--radius) - 4px)',\n      },\n      keyframes: {\n        'accordion-down': {\n          from: {height: 0},\n          to: {height: 'var(--radix-accordion-content-height)'},\n        },\n        'accordion-up': {\n          from: {height: 'var(--radix-accordion-content-height)'},\n          to: {height: 0},\n        },\n      },\n      animation: {\n        'accordion-down': 'accordion-down 0.2s ease-out',\n        'accordion-up': 'accordion-up 0.2s ease-out',\n      },\n    },\n  },\n  plugins: [require('tailwindcss-animate')],\n}\n"
  },
  {
    "path": "packages/app/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"outDir\": \"dist\",\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"jsx\": \"preserve\",\n    \"baseUrl\": \".\",\n    \"composite\": true,\n    \"incremental\": true,\n    \"rootDir\": \"../..\",\n    \"plugins\": [\n      {\n        \"name\": \"next\"\n      }\n    ],\n    \"paths\": {\n      \"@prisma/client\": [\"./prisma/client-generated\"],\n      \"~/*\": [\"./src/*\"],\n      \"@theatre/utils/*\": [\"../utils/src/*\"]\n    },\n    \"noEmit\": false\n  },\n  \"include\": [\n    \"next-env.d.ts\",\n    \"src/**/*\",\n    \"devEnv/**/*\",\n    \".next/types/**/*.ts\",\n    \"prisma/seed.ts\"\n  ],\n  \"exclude\": [\"node_modules\"],\n  \"references\": [{\"path\": \"../utils\"}]\n}\n"
  },
  {
    "path": "packages/benchmarks/.gitignore",
    "content": "/dist"
  },
  {
    "path": "packages/benchmarks/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "packages/benchmarks/devEnv/serveBenchmarks.ts",
    "content": "import path from 'path'\nimport {definedGlobals} from '../../core/devEnv/definedGlobals'\n\nconst benchmarksDir = path.join(__dirname, '..')\n\nconst port = 8087\n\nconst allEnvs = {\n  '0.5.0': () => {},\n}\n\nrequire('esbuild')\n  .serve(\n    {\n      port,\n      servedir: path.join(benchmarksDir, 'src'),\n    },\n    {\n      entryPoints: [path.join(benchmarksDir, 'src/index.tsx')],\n      target: ['firefox88'],\n      loader: {'.png': 'file', '.glb': 'file', '.svg': 'dataurl'},\n      bundle: true,\n      sourcemap: true,\n      define: definedGlobals,\n    },\n  )\n  .then((server: unknown) => {\n    console.log('serving', 'http://localhost:' + port)\n  })\n"
  },
  {
    "path": "packages/benchmarks/package.json",
    "content": "{\n  \"name\": \"benchmarks\",\n  \"version\": \"1.0.0-dev\",\n  \"license\": \"Apache-2.0\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"files\": [\n    \"dist/**/*\"\n  ],\n  \"scripts\": {\n    \"serve\": \"tsx devEnv/serveBenchmarks.ts\",\n    \"typecheck\": \"yarn run build\",\n    \"build\": \"tsc --build ./tsconfig.json\"\n  },\n  \"devDependencies\": {\n    \"@theatre/core\": \"workspace:*\",\n    \"@theatre/core-0.5.0\": \"npm:@theatre/core@0.5.0\",\n    \"@theatre/dataverse-0.5.0\": \"npm:@theatre/dataverse@0.5.0\",\n    \"@theatre/r3f\": \"workspace:*\",\n    \"@theatre/studio\": \"workspace:*\",\n    \"@theatre/studio-0.5.0\": \"npm:@theatre/studio@0.5.0\",\n    \"@types/jest\": \"^29.2.3\",\n    \"@types/lodash-es\": \"^4.17.6\",\n    \"@types/node\": \"^18.11.9\",\n    \"@types/react\": \"^18.0.25\",\n    \"esbuild\": \"^0.15.15\",\n    \"tsx\": \"4.7.0\",\n    \"typescript\": \"5.1.6\"\n  }\n}\n"
  },
  {
    "path": "packages/benchmarks/src/Bench project 1.theatre-project-state.json",
    "content": "{\n  \"sheetsById\": {\n    \"Sheet\": {\n      \"staticOverrides\": {\n        \"byObject\": {}\n      },\n      \"sequence\": {\n        \"subUnitsPerUnit\": 30,\n        \"length\": 10,\n        \"type\": \"PositionalSequence\",\n        \"tracksByObject\": {\n          \"Obj\": {\n            \"trackData\": {\n              \"CGrOP0P1pj\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Vj4ipWd1RA\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1GMPk5ARYL\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -8.277777491086074\n                  },\n                  {\n                    \"id\": \"rrF5mhoajS\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -16.699204690583507\n                  },\n                  {\n                    \"id\": \"QITarrsTeW\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -23.618264692634618\n                  },\n                  {\n                    \"id\": \"CtIWqu8q7C\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -27.81213711194001\n                  },\n                  {\n                    \"id\": \"1G-vdIbCm3\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -30.814279648791448\n                  },\n                  {\n                    \"id\": \"0k5nIvsUxI\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -34\n                  },\n                  {\n                    \"id\": \"cxZTIe_Wi6\",\n                    \"position\": 5.533,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -30.72765811483147\n                  },\n                  {\n                    \"id\": \"PmZinnxw0m\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -24.20518043099978\n                  },\n                  {\n                    \"id\": \"nPh_L16cgl\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -19\n                  },\n                  {\n                    \"id\": \"4yYRwi42Vb\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -10.70492829532793\n                  },\n                  {\n                    \"id\": \"3RQdhvGDvZ\",\n                    \"position\": 9.267,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -1\n                  },\n                  {\n                    \"id\": \"tpMqEqQyB3\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -1\n                  }\n                ]\n              },\n              \"bYDBIcFOB6\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"cKcKct9V7J\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VETdccUgC1\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -6.086601096386819\n                  },\n                  {\n                    \"id\": \"OSe_x6tEtK\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -12.278826978370226\n                  },\n                  {\n                    \"id\": \"Qeth9hOYZ-\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17.366371097525455\n                  },\n                  {\n                    \"id\": \"pvZL53imt2\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20.450100817602948\n                  },\n                  {\n                    \"id\": \"-j0HH8b4E5\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -22.65755856528783\n                  },\n                  {\n                    \"id\": \"BNfUMC3oul\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -25\n                  },\n                  {\n                    \"id\": \"vHX8uz3YmI\",\n                    \"position\": 5.533,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -19.54609685805245\n                  },\n                  {\n                    \"id\": \"s1KbHDVYYU\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -8.675300718332966\n                  },\n                  {\n                    \"id\": \"6dlN5LU9Td\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Si_wh6Op_2\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 14.28595682471301\n                  },\n                  {\n                    \"id\": \"RnnN8MfoC2\",\n                    \"position\": 9.267,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 31\n                  },\n                  {\n                    \"id\": \"H0hWAeiEXl\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 31\n                  }\n                ]\n              },\n              \"k3MBk9RTij\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"DZKOAaEoOZ\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Aspjgl5SBA\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -3.1650325701211455\n                  },\n                  {\n                    \"id\": \"oszW7ZvmNY\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -6.384990028752517\n                  },\n                  {\n                    \"id\": \"BYrTETt6QG\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -9.030512970713236\n                  },\n                  {\n                    \"id\": \"b2JlXtjM3y\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -10.634052425153532\n                  },\n                  {\n                    \"id\": \"EwRpCnAYY8\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -11.78193045394967\n                  },\n                  {\n                    \"id\": \"BzVPlUWml_\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -13\n                  },\n                  {\n                    \"id\": \"PqFtKwH5aZ\",\n                    \"position\": 5.533,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -5.582691726951335\n                  },\n                  {\n                    \"id\": \"ddk4uwirTR\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 9.201591023067166\n                  },\n                  {\n                    \"id\": \"9kQItuAotm\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 21\n                  },\n                  {\n                    \"id\": \"wFGBV7veKz\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 37.12930609241791\n                  },\n                  {\n                    \"id\": \"nY6UuhouDH\",\n                    \"position\": 9.267,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 56\n                  },\n                  {\n                    \"id\": \"G5arYr51dJ\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 56\n                  }\n                ]\n              },\n              \"vgZnW2JjRc\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"4qzsxm64wa\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UUMl10Hr39\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -4.138888745543037\n                  },\n                  {\n                    \"id\": \"-yi01-e2Ny\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -8.349602345291753\n                  },\n                  {\n                    \"id\": \"PaEDcHWtEd\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -11.809132346317309\n                  },\n                  {\n                    \"id\": \"FtaeiVrUH8\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -13.906068555970005\n                  },\n                  {\n                    \"id\": \"-lDXQIpBMF\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -15.407139824395724\n                  },\n                  {\n                    \"id\": \"AZA_ogBVCg\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17\n                  },\n                  {\n                    \"id\": \"H4-rJ0p0hG\",\n                    \"position\": 5.533,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17\n                  },\n                  {\n                    \"id\": \"LwhP4jmvTE\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17\n                  },\n                  {\n                    \"id\": \"QzDMOUeHhc\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17\n                  },\n                  {\n                    \"id\": \"Fu0m8IPvJx\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -1.7923685414345396\n                  },\n                  {\n                    \"id\": \"F6nBQD8JTq\",\n                    \"position\": 9.267,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 16\n                  },\n                  {\n                    \"id\": \"kcUOVUhtsc\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 16\n                  }\n                ]\n              },\n              \"7rZf-o82s4\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"ejVEfl4F0x\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XfaaSrs7lq\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -4.869280877109455\n                  },\n                  {\n                    \"id\": \"p7yKajSFNE\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -9.82306158269618\n                  },\n                  {\n                    \"id\": \"5dE3JNbIDa\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -13.893096878020364\n                  },\n                  {\n                    \"id\": \"1oR3S9hBpn\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -16.36008065408236\n                  },\n                  {\n                    \"id\": \"7wquXEjHpA\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -18.126046852230264\n                  },\n                  {\n                    \"id\": \"OI5r3BRRj0\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"JU1giSNfmJ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"Sn9g7puKVv\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"gwQxeWiEsJ\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -1.1056700060247309\n                  },\n                  {\n                    \"id\": \"8E-EsaVOIB\",\n                    \"position\": 9.267,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 21\n                  },\n                  {\n                    \"id\": \"auGPvz1mVP\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 21\n                  }\n                ]\n              },\n              \"CNa_lk2VPZ\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"roFBbhadI6\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WjAPNe-h33\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 5.599673008675873\n                  },\n                  {\n                    \"id\": \"-naY9456k7\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 11.296520820100607\n                  },\n                  {\n                    \"id\": \"p7ypx3iim2\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 15.977061409723417\n                  },\n                  {\n                    \"id\": \"zcqnbvsHZm\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 18.81409275219471\n                  },\n                  {\n                    \"id\": \"XxA01aLkJL\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 20.8449538800648\n                  },\n                  {\n                    \"id\": \"nNcprRbZXz\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 23\n                  },\n                  {\n                    \"id\": \"eH1n5QdtEt\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 23\n                  },\n                  {\n                    \"id\": \"vnAbfXf7Mv\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 23\n                  },\n                  {\n                    \"id\": \"rJ7Iz4PSAS\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 38.20763145856546\n                  },\n                  {\n                    \"id\": \"54SAguBKe5\",\n                    \"position\": 9.267,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 56\n                  },\n                  {\n                    \"id\": \"oaVEl7MR06\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 56\n                  }\n                ]\n              },\n              \"jkvS_EkKG5\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"SnOqZgrrSO\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TaDqntFC7j\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -4.869280877109455\n                  },\n                  {\n                    \"id\": \"OQ9T40Wyk9\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -9.82306158269618\n                  },\n                  {\n                    \"id\": \"rVK41Sj8uD\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -13.893096878020364\n                  },\n                  {\n                    \"id\": \"H3qSZYDP4s\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -16.36008065408236\n                  },\n                  {\n                    \"id\": \"bB9c_nm6mz\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -18.126046852230264\n                  },\n                  {\n                    \"id\": \"eTvL7-iXdv\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"HnhA__pu1I\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"1L1NyPJ4Rn\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"osdoy-_KzS\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -7.09655512606567\n                  },\n                  {\n                    \"id\": \"qFHPXkPRls\",\n                    \"position\": 9.267,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 8\n                  },\n                  {\n                    \"id\": \"JNuVZwTrq5\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 8\n                  }\n                ]\n              },\n              \"19Fwi28MH1\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"ghVA96jtpN\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SXPfXm7LmO\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 8.0343134472306\n                  },\n                  {\n                    \"id\": \"f7PKbM1NPF\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 16.208051611448695\n                  },\n                  {\n                    \"id\": \"e6YbGM0LpC\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 22.923609848733598\n                  },\n                  {\n                    \"id\": \"E-pmgYI74S\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26.99413307923589\n                  },\n                  {\n                    \"id\": \"N3Kg5bLqhx\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 29.907977306179934\n                  },\n                  {\n                    \"id\": \"S26h_5mTl5\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 33\n                  },\n                  {\n                    \"id\": \"i-a25RVN0_\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 33\n                  },\n                  {\n                    \"id\": \"TLx1QfoN9T\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 33\n                  },\n                  {\n                    \"id\": \"-O01CrFrSF\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 22.4007417106968\n                  },\n                  {\n                    \"id\": \"M4Ck0TOSKq\",\n                    \"position\": 9.267,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 10\n                  },\n                  {\n                    \"id\": \"VjYjUZB511\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 10\n                  }\n                ]\n              },\n              \"WFz8R2KfHP\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"QaRVDZuJol\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ab65gzoTKJ\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 4.138888745543037\n                  },\n                  {\n                    \"id\": \"OWJeqMiXZA\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 8.349602345291753\n                  },\n                  {\n                    \"id\": \"5DNVRp_-4C\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 11.809132346317309\n                  },\n                  {\n                    \"id\": \"hU6VBav-9N\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 13.906068555970005\n                  },\n                  {\n                    \"id\": \"7En1K82lMN\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 15.407139824395724\n                  },\n                  {\n                    \"id\": \"805qkVGy8L\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"sYDam-EVkA\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"l4CHdE9U8E\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"edoRKLk6iR\",\n                    \"position\": 7.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"ZcOkoPhQZq\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"PTPqhnwjKC\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  }\n                ]\n              },\n              \"kiizLK2qop\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"64-YoLz8vW\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Fawd5tencG\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -6.086601096386819\n                  },\n                  {\n                    \"id\": \"gge6OtTUt5\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -12.278826978370226\n                  },\n                  {\n                    \"id\": \"x7uvjVjxpS\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17.366371097525455\n                  },\n                  {\n                    \"id\": \"E5Im8PPcwl\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20.450100817602948\n                  },\n                  {\n                    \"id\": \"JWjz1Gthsc\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -22.65755856528783\n                  },\n                  {\n                    \"id\": \"QvdGtOqgYZ\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -25\n                  },\n                  {\n                    \"id\": \"OzhmTNdblM\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -25\n                  },\n                  {\n                    \"id\": \"B2Dk_DIb5A\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -25\n                  },\n                  {\n                    \"id\": \"s0OK7nJOHd\",\n                    \"position\": 7.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -25\n                  },\n                  {\n                    \"id\": \"MveF5HGevu\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -25\n                  },\n                  {\n                    \"id\": \"GomHkXQqyl\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -25\n                  }\n                ]\n              },\n              \"r3u2xPKfpI\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"PO9GOU20VS\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BEznZpWV5T\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6.330065140242291\n                  },\n                  {\n                    \"id\": \"IMQazvQp9z\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 12.769980057505034\n                  },\n                  {\n                    \"id\": \"PqdYJQO4dr\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 18.06102594142647\n                  },\n                  {\n                    \"id\": \"FUjqLXY5he\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 21.268104850307065\n                  },\n                  {\n                    \"id\": \"AXOXBg3vkR\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 23.56386090789934\n                  },\n                  {\n                    \"id\": \"HpikQJWRI2\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26\n                  },\n                  {\n                    \"id\": \"gAAtO1GrVY\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26\n                  },\n                  {\n                    \"id\": \"P-CvvinnrN\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26\n                  },\n                  {\n                    \"id\": \"3ugEbavNRb\",\n                    \"position\": 7.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26\n                  },\n                  {\n                    \"id\": \"joFtL1Fvau\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26\n                  },\n                  {\n                    \"id\": \"s9aWF7ChVL\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26\n                  }\n                ]\n              },\n              \"yiK4Bj9y-1\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"4-h3d1vQEU\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1Z8xj1gYDI\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -4.869280877109455\n                  },\n                  {\n                    \"id\": \"ZobVcwz8TK\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -9.82306158269618\n                  },\n                  {\n                    \"id\": \"ufuhkjz7CM\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -13.893096878020364\n                  },\n                  {\n                    \"id\": \"u2slRPKgZw\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -16.36008065408236\n                  },\n                  {\n                    \"id\": \"ZWJpmGvxY7\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -18.126046852230264\n                  },\n                  {\n                    \"id\": \"RMfRjKR5b7\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"_BuwEgUHiJ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"ECAlte_oQx\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"ZZRQ1P7Gzd\",\n                    \"position\": 7.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"FzpT9-3u3K\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"c_VOayrujP\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  }\n                ]\n              },\n              \"pvQX_GJjgT\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"IcvgXsNHiu\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HnKL9woNAe\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 7.303921315664183\n                  },\n                  {\n                    \"id\": \"EDeX6N1I--\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 14.73459237404427\n                  },\n                  {\n                    \"id\": \"lYxANybjqn\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 20.839645317030545\n                  },\n                  {\n                    \"id\": \"dslSK7mAML\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 24.540120981123536\n                  },\n                  {\n                    \"id\": \"pb1_bXnvRK\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 27.189070278345394\n                  },\n                  {\n                    \"id\": \"D18IslAB4t\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 30\n                  },\n                  {\n                    \"id\": \"HpI816dkoO\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 30\n                  },\n                  {\n                    \"id\": \"v0W1kGdaRj\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 30\n                  },\n                  {\n                    \"id\": \"mznCjgCf9A\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 30\n                  },\n                  {\n                    \"id\": \"so47wtObtm\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 30\n                  }\n                ]\n              },\n              \"G8J6BdGDLG\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"vp-6rB8XRf\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zP2LXNXdwg\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -6.330065140242291\n                  },\n                  {\n                    \"id\": \"wCX7yP5w--\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -12.769980057505034\n                  },\n                  {\n                    \"id\": \"kpyDmtY7g1\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -18.06102594142647\n                  },\n                  {\n                    \"id\": \"O2_TBMG5IQ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -21.268104850307065\n                  },\n                  {\n                    \"id\": \"Zc6cGuww39\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -23.56386090789934\n                  },\n                  {\n                    \"id\": \"liGJIUPU36\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -26\n                  },\n                  {\n                    \"id\": \"dBTl3PMzWJ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -26\n                  },\n                  {\n                    \"id\": \"lpzLKc_646\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -26\n                  },\n                  {\n                    \"id\": \"nzSjwZJg68\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -26\n                  },\n                  {\n                    \"id\": \"LQO5KMqAC7\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -26\n                  }\n                ]\n              },\n              \"IYOGPqyogg\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"s3YfjBKAq8\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"p9v6G56xas\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6.573529184097764\n                  },\n                  {\n                    \"id\": \"hwtZQjHdlB\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 13.261133136639845\n                  },\n                  {\n                    \"id\": \"yhJiEw88p0\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 18.755680785327492\n                  },\n                  {\n                    \"id\": \"OxiVSk0ps1\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 22.086108883011185\n                  },\n                  {\n                    \"id\": \"KKyM49Da0Z\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 24.470163250510858\n                  },\n                  {\n                    \"id\": \"bUr8k2qTdy\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 27\n                  },\n                  {\n                    \"id\": \"Pp7-PTLQGw\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 27\n                  },\n                  {\n                    \"id\": \"WYZrmJfmid\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 27\n                  },\n                  {\n                    \"id\": \"2MRYTasMqa\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 27\n                  },\n                  {\n                    \"id\": \"vtj9nz44n-\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 27\n                  }\n                ]\n              },\n              \"2DTXFjbbT5\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"0\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"QcNm0-qocR\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"E70nGm42hq\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -4.138888745543037\n                  },\n                  {\n                    \"id\": \"AmLFob4XyS\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -8.349602345291753\n                  },\n                  {\n                    \"id\": \"hTZBr9tLa0\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -11.809132346317309\n                  },\n                  {\n                    \"id\": \"LTWcjlo_2z\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -13.906068555970005\n                  },\n                  {\n                    \"id\": \"bjSO9QxLR2\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -15.407139824395724\n                  },\n                  {\n                    \"id\": \"NRpuY9mKfM\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17\n                  },\n                  {\n                    \"id\": \"9ADOJEnZCz\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17\n                  },\n                  {\n                    \"id\": \"VzhIrLMRyV\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17\n                  },\n                  {\n                    \"id\": \"QCNO_TJoFd\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17\n                  },\n                  {\n                    \"id\": \"DF3Wi-5oaN\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17\n                  }\n                ]\n              },\n              \"CDpYVpKaKS\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"PFq91dFEBf\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6L_MyTjF8j\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 4.138888745543037\n                  },\n                  {\n                    \"id\": \"C4ppSYctJc\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 8.349602345291753\n                  },\n                  {\n                    \"id\": \"CG5r4CK1fQ\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 11.809132346317309\n                  },\n                  {\n                    \"id\": \"U46vtEtn3_\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 13.906068555970005\n                  },\n                  {\n                    \"id\": \"Js1GDEiPvW\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 15.407139824395724\n                  },\n                  {\n                    \"id\": \"yG78o6pKYQ\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"wilCfhKDo1\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"vHMnacaswi\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"KKB_ndDUwq\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"91YwaoygCc\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  }\n                ]\n              },\n              \"RggkFVBAKD\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"8KZfrZWtaQ\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Jh9bzdtrOx\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 5.3562089648204\n                  },\n                  {\n                    \"id\": \"0DqHZ7qfU6\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 10.805367740965798\n                  },\n                  {\n                    \"id\": \"v9zdABfiAO\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 15.282406565822399\n                  },\n                  {\n                    \"id\": \"CdFOZET7nD\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17.996088719490594\n                  },\n                  {\n                    \"id\": \"w-7l02qtyN\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 19.93865153745329\n                  },\n                  {\n                    \"id\": \"ae9DZJbBcO\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 22\n                  },\n                  {\n                    \"id\": \"7M3MoHzChv\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 22\n                  },\n                  {\n                    \"id\": \"5EG-_yZrq2\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 22\n                  },\n                  {\n                    \"id\": \"LgLuG1JC9S\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 22\n                  },\n                  {\n                    \"id\": \"s1AJr0ng76\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 22\n                  }\n                ]\n              },\n              \"i6xuats2B2\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"IzKo5AhxhL\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qGuTc7Vi6M\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 8.764705578797019\n                  },\n                  {\n                    \"id\": \"Zj5Wns4DO8\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17.681510848853126\n                  },\n                  {\n                    \"id\": \"HgypCuNDxZ\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 25.007574380436655\n                  },\n                  {\n                    \"id\": \"Ki3rPRu5wp\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 29.448145177348245\n                  },\n                  {\n                    \"id\": \"3vQIEhxqDt\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 32.62688433401448\n                  },\n                  {\n                    \"id\": \"2Yz1OzQZu9\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  },\n                  {\n                    \"id\": \"hZ4gQK0MNT\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  },\n                  {\n                    \"id\": \"3mWb-J_sdl\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  },\n                  {\n                    \"id\": \"VIQGHjzJty\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  },\n                  {\n                    \"id\": \"1tmPkU8ykl\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  }\n                ]\n              },\n              \"nv6jrvAiGS\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"9zYH9J1Z0w\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eHW8dQnNgj\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6.816993227953237\n                  },\n                  {\n                    \"id\": \"2Lxc0gRgvY\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 13.752286215774653\n                  },\n                  {\n                    \"id\": \"CUDxZwcpeL\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 19.45033562922851\n                  },\n                  {\n                    \"id\": \"1LyqJc7JTT\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 22.904112915715302\n                  },\n                  {\n                    \"id\": \"8U07_EReje\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 25.37646559312237\n                  },\n                  {\n                    \"id\": \"368UJ--i3l\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 28\n                  },\n                  {\n                    \"id\": \"UsIEqhPKA2\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 28\n                  },\n                  {\n                    \"id\": \"w517KOwIbz\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 28\n                  },\n                  {\n                    \"id\": \"Yz_R__4OBN\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 28\n                  },\n                  {\n                    \"id\": \"C0BjTjCDkp\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 28\n                  }\n                ]\n              },\n              \"D-volqZhoG\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"lEbWL83fBG\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"p8jtpW2ig7\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 7.790849403375128\n                  },\n                  {\n                    \"id\": \"Tf-LSLjLy9\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 15.71689853231389\n                  },\n                  {\n                    \"id\": \"Sun5e_7Qbp\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 22.22895500483258\n                  },\n                  {\n                    \"id\": \"xBxfwD4ZPF\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26.176129046531774\n                  },\n                  {\n                    \"id\": \"f3kHbkkFLD\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 29.00167496356842\n                  },\n                  {\n                    \"id\": \"L1CoWE0sEa\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 32\n                  },\n                  {\n                    \"id\": \"Z_NFCOoFb4\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 32\n                  },\n                  {\n                    \"id\": \"dVjBQf8wfO\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 32\n                  },\n                  {\n                    \"id\": \"sJ3kAjK_H1\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 32\n                  },\n                  {\n                    \"id\": \"BdJCqhBaPA\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 32\n                  }\n                ]\n              },\n              \"4nQ8gbHGi2\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"yNn4yVOogt\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"i0ItbWO1S1\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 5.843137052531346\n                  },\n                  {\n                    \"id\": \"-7N8thVqQP\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 11.787673899235415\n                  },\n                  {\n                    \"id\": \"Etr4frTnJ2\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 16.671716253624435\n                  },\n                  {\n                    \"id\": \"dwzjWDcJ3Z\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 19.63209678489883\n                  },\n                  {\n                    \"id\": \"5CTM3Pxwp9\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 21.751256222676318\n                  },\n                  {\n                    \"id\": \"f68AaNZFCP\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 24\n                  },\n                  {\n                    \"id\": \"V2D6CkKKNF\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 24\n                  },\n                  {\n                    \"id\": \"uRWuX2Mfkj\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 24\n                  },\n                  {\n                    \"id\": \"tlg2twoEWW\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 24\n                  },\n                  {\n                    \"id\": \"Rs3TJp_-Sw\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 24\n                  }\n                ]\n              },\n              \"gsgjUc6CmT\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"irf6GI1EIW\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wEeXFUJa0y\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6.573529184097764\n                  },\n                  {\n                    \"id\": \"o0SGQEmHDi\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 13.261133136639845\n                  },\n                  {\n                    \"id\": \"vBj6pUPS37\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 18.755680785327492\n                  },\n                  {\n                    \"id\": \"4fpNTj6vKc\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 22.086108883011185\n                  },\n                  {\n                    \"id\": \"tLE8E8SZdH\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 24.470163250510858\n                  },\n                  {\n                    \"id\": \"vj6XKRiJ-X\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 27\n                  },\n                  {\n                    \"id\": \"A2MyuY0VXM\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 27\n                  },\n                  {\n                    \"id\": \"wQJp6J8nP0\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 27\n                  },\n                  {\n                    \"id\": \"BJWMZq0pIw\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 27\n                  },\n                  {\n                    \"id\": \"yOb4Vji9Z2\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 27\n                  }\n                ]\n              },\n              \"IxBGi0XYYB\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"ng4Qv4aSnO\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DH6uP79_5c\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 8.764705578797019\n                  },\n                  {\n                    \"id\": \"LIkc0iez6t\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17.681510848853126\n                  },\n                  {\n                    \"id\": \"-i84rq74XR\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 25.007574380436655\n                  },\n                  {\n                    \"id\": \"lwdvP7nUgh\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 29.448145177348245\n                  },\n                  {\n                    \"id\": \"bHmyzCjwmF\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 32.62688433401448\n                  },\n                  {\n                    \"id\": \"Svu8c8Dz_O\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  },\n                  {\n                    \"id\": \"bswxU2oHJk\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  },\n                  {\n                    \"id\": \"4mKlVuAWP9\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  },\n                  {\n                    \"id\": \"qzA9W7Fahg\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  },\n                  {\n                    \"id\": \"4EK1YX0NUG\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  }\n                ]\n              },\n              \"069otj14Ze\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"5K6rjtD-pI\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zOPRA8OuH1\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 4.382352789398509\n                  },\n                  {\n                    \"id\": \"jhYhJEKB_B\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 8.840755424426563\n                  },\n                  {\n                    \"id\": \"anzGxDVJ0d\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 12.503787190218327\n                  },\n                  {\n                    \"id\": \"d_t8rW12rj\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 14.724072588674122\n                  },\n                  {\n                    \"id\": \"JLGP8Ir4QM\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 16.31344216700724\n                  },\n                  {\n                    \"id\": \"_Y_NxDUwAp\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 18\n                  },\n                  {\n                    \"id\": \"N_k-0nOwA6\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 18\n                  },\n                  {\n                    \"id\": \"vwjeddb8nK\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 18\n                  },\n                  {\n                    \"id\": \"9SmbN4Cjw8\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 18\n                  },\n                  {\n                    \"id\": \"4ip_ytXtA5\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 18\n                  }\n                ]\n              },\n              \"4coArzoxNP\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Z70aGrjIbR\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_GYR4LJ4nM\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 8.764705578797019\n                  },\n                  {\n                    \"id\": \"UOec8J5EAd\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17.681510848853126\n                  },\n                  {\n                    \"id\": \"fpeY04bR_g\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 25.007574380436655\n                  },\n                  {\n                    \"id\": \"Gzhglk1Khs\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 29.448145177348245\n                  },\n                  {\n                    \"id\": \"j-gv8dLfva\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 32.62688433401448\n                  },\n                  {\n                    \"id\": \"1agNePD7sV\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  },\n                  {\n                    \"id\": \"8U5MBjlMpH\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  },\n                  {\n                    \"id\": \"iVnsKpnEsh\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  },\n                  {\n                    \"id\": \"LAjIo2-7Ir\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  },\n                  {\n                    \"id\": \"RgaoXg6HoC\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 36\n                  }\n                ]\n              },\n              \"1oyt_pr48E\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"FnXMJG5VXc\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mLLRFJ_qkj\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6.330065140242291\n                  },\n                  {\n                    \"id\": \"FpXfiJoV2m\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 12.769980057505034\n                  },\n                  {\n                    \"id\": \"1NHKJPk9x1\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 18.06102594142647\n                  },\n                  {\n                    \"id\": \"XqW5zwBYHe\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 21.268104850307065\n                  },\n                  {\n                    \"id\": \"Nzqw7FN3_7\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 23.56386090789934\n                  },\n                  {\n                    \"id\": \"8ev8mk0uBe\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26\n                  },\n                  {\n                    \"id\": \"_g8Isq9xjr\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26\n                  },\n                  {\n                    \"id\": \"romgcu5zEE\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26\n                  },\n                  {\n                    \"id\": \"2O2_fOfQZo\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26\n                  },\n                  {\n                    \"id\": \"shvdQcM13V\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 26\n                  }\n                ]\n              },\n              \"qwXL0W07b8\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"7Z3vuI4bWP\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5K2kZWBi7P\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -4.869280877109455\n                  },\n                  {\n                    \"id\": \"pGKO40MQ83\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -9.82306158269618\n                  },\n                  {\n                    \"id\": \"nT90W2tIvf\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -13.893096878020364\n                  },\n                  {\n                    \"id\": \"j3_Eoie6PO\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -16.36008065408236\n                  },\n                  {\n                    \"id\": \"Ag0OMzUSs2\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -18.126046852230264\n                  },\n                  {\n                    \"id\": \"-ZRBU9rj-y\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"HYBy-69Gtp\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"mRyXZcHyxA\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"8WNuVyYD2v\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  },\n                  {\n                    \"id\": \"f2Cr2LvsQ-\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20\n                  }\n                ]\n              },\n              \"yT1c983LeG\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"L4uyhBe6i1\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"inZxM1AoLF\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 3.4084966139766184\n                  },\n                  {\n                    \"id\": \"ons6w0DDWH\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6.8761431078873265\n                  },\n                  {\n                    \"id\": \"KzUG1cvkqj\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 9.725167814614254\n                  },\n                  {\n                    \"id\": \"kcVPbgvW2O\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 11.452056457857651\n                  },\n                  {\n                    \"id\": \"lprTHLh8wd\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 12.688232796561184\n                  },\n                  {\n                    \"id\": \"RzGxiuIOmI\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 14\n                  },\n                  {\n                    \"id\": \"gDl84YsAES\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 14\n                  },\n                  {\n                    \"id\": \"g9WabM5vGE\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 14\n                  },\n                  {\n                    \"id\": \"kPgvnWUS5H\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 14\n                  },\n                  {\n                    \"id\": \"5RRMq1cpca\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 14\n                  }\n                ]\n              },\n              \"qNLTAP8-LA\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Z-0zDAWbok\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"93BB0_X2eN\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -3.6519606578320913\n                  },\n                  {\n                    \"id\": \"1S-ibjfMZc\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -7.367296187022135\n                  },\n                  {\n                    \"id\": \"muwn2tSeAS\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -10.419822658515272\n                  },\n                  {\n                    \"id\": \"0GvPVjXaLa\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -12.270060490561768\n                  },\n                  {\n                    \"id\": \"W59JBxDHk2\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -13.594535139172697\n                  },\n                  {\n                    \"id\": \"7jz4gUYjnR\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -15\n                  },\n                  {\n                    \"id\": \"Des0sdzXCX\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -15\n                  },\n                  {\n                    \"id\": \"9wb5yeKyZz\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -15\n                  },\n                  {\n                    \"id\": \"WS3izKAB8g\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -15\n                  },\n                  {\n                    \"id\": \"Nrrjzn_Yuq\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -15\n                  }\n                ]\n              },\n              \"D7NdrPiR-g\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"cYc1lIwPuZ\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"89qJ9MczYm\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 4.138888745543037\n                  },\n                  {\n                    \"id\": \"swAcJCsAG0\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 8.349602345291753\n                  },\n                  {\n                    \"id\": \"tHTj60VsvN\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 11.809132346317309\n                  },\n                  {\n                    \"id\": \"3fs8xMwfb1\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 13.906068555970005\n                  },\n                  {\n                    \"id\": \"LSdEkwIfy1\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 15.407139824395724\n                  },\n                  {\n                    \"id\": \"72NQuDiEev\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"CQPT5ypFkD\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"va-mo49zH2\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"jeoxfPYKIn\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  },\n                  {\n                    \"id\": \"3rovl25_R6\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 17\n                  }\n                ]\n              },\n              \"B8fPUUpkVs\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"1\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Lj5Lx6C8aK\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hJdxHqJiP0\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -6.086601096386819\n                  },\n                  {\n                    \"id\": \"-Yu6l0rqA_\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -12.278826978370226\n                  },\n                  {\n                    \"id\": \"LXFzzewEwB\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17.366371097525455\n                  },\n                  {\n                    \"id\": \"V2mpnfp07s\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -20.450100817602948\n                  },\n                  {\n                    \"id\": \"hCWyBVNeTL\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -22.65755856528783\n                  },\n                  {\n                    \"id\": \"Ig0GqHQGTz\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -25\n                  },\n                  {\n                    \"id\": \"r3wPBr--Bn\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -25\n                  },\n                  {\n                    \"id\": \"7BigCzdQ2l\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -25\n                  },\n                  {\n                    \"id\": \"gWeADGxLSS\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -25\n                  },\n                  {\n                    \"id\": \"Sv_JDDtYY9\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -25\n                  }\n                ]\n              },\n              \"CfYMg0-jmG\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"xxrAS85Grr\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"p453hEgs-9\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 1.4607842631328365\n                  },\n                  {\n                    \"id\": \"2XtzwRNkqI\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 2.9469184748088537\n                  },\n                  {\n                    \"id\": \"ZNuZgl3A9L\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 4.167929063406109\n                  },\n                  {\n                    \"id\": \"tScVdZ6USc\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 4.908024196224708\n                  },\n                  {\n                    \"id\": \"49OX4nlzWo\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 5.4378140556690795\n                  },\n                  {\n                    \"id\": \"mxU1sllG9S\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6\n                  },\n                  {\n                    \"id\": \"f5b9_VvZCE\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6\n                  },\n                  {\n                    \"id\": \"BvsajPTn0i\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6\n                  },\n                  {\n                    \"id\": \"gtvCIDZp-Q\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6\n                  },\n                  {\n                    \"id\": \"EH74XVQmtO\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6\n                  }\n                ]\n              },\n              \"0Xx2HM9KEG\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"37hGO2lypJ\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"18YT7Nicu2\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -5.112744920964928\n                  },\n                  {\n                    \"id\": \"99n-60Lslj\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -10.314214661830988\n                  },\n                  {\n                    \"id\": \"cmSqf_62g-\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -14.587751721921382\n                  },\n                  {\n                    \"id\": \"H_Extb3rDJ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17.178084686786477\n                  },\n                  {\n                    \"id\": \"T-VwhRl5zh\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -19.032349194841775\n                  },\n                  {\n                    \"id\": \"LpovCCxcDE\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -21\n                  },\n                  {\n                    \"id\": \"zC1hIYAs_W\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -21\n                  },\n                  {\n                    \"id\": \"MM5tCz3OUz\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -21\n                  },\n                  {\n                    \"id\": \"EgpsL0zvLU\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -21\n                  },\n                  {\n                    \"id\": \"lZ4rJDX_oE\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -21\n                  }\n                ]\n              },\n              \"hWImmVZnTB\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"R2mcgxgJQY\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gQWQtg2RIH\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 2.6781044824102\n                  },\n                  {\n                    \"id\": \"l0u1Tfdd3e\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 5.402683870482899\n                  },\n                  {\n                    \"id\": \"YhyvOhKbAT\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 7.641203282911199\n                  },\n                  {\n                    \"id\": \"Q9dTd51JYA\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 8.998044359745297\n                  },\n                  {\n                    \"id\": \"ttnncaCkOS\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 9.969325768726645\n                  },\n                  {\n                    \"id\": \"sHL0JFymfU\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 11\n                  },\n                  {\n                    \"id\": \"215Mzu1LbS\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 11\n                  },\n                  {\n                    \"id\": \"ifTGfO7vWx\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 11\n                  },\n                  {\n                    \"id\": \"5iyp-zpM9w\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 11\n                  },\n                  {\n                    \"id\": \"mYETT9p-jO\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 11\n                  }\n                ]\n              },\n              \"6gx4FwFbrz\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"w-HvPqurXB\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BVCU2n4JKn\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -3.6519606578320913\n                  },\n                  {\n                    \"id\": \"2vvpjFlQV2\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -7.367296187022135\n                  },\n                  {\n                    \"id\": \"B1BitcAynv\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -10.419822658515272\n                  },\n                  {\n                    \"id\": \"1WMEGoAj5j\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -12.270060490561768\n                  },\n                  {\n                    \"id\": \"JiBIHMCuFX\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -13.594535139172697\n                  },\n                  {\n                    \"id\": \"wJHsWOmzvk\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -15\n                  },\n                  {\n                    \"id\": \"MGbi8bh-7b\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -15\n                  },\n                  {\n                    \"id\": \"t9EgdG3JOE\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -15\n                  },\n                  {\n                    \"id\": \"tufcAPYWAP\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -15\n                  },\n                  {\n                    \"id\": \"OyFSQvOK3_\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -15\n                  }\n                ]\n              },\n              \"qBUAkmVj94\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"sMqUWUR9uw\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9H8cxAcORy\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"u0WN4tIY_g\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"No4CA7akX3\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nAT27IJcot\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iHjVeuD08r\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t2kMlyOq2z\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nlIyy9kPiT\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vOmmxvwPWO\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BOFlTxMKsd\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"65A9Smdaj0\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"DfU2p3tTpC\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"mjYHU0uMkv\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VEWbSqi3Rz\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eehWttjZEA\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oTW78-4YV1\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bg-2RPB5W4\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dNbCUOIK8O\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-3b2_fyrEr\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CSDFcYb-ZV\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ui-TH6-Qbz\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MWTYGFow24\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Sjn7HKTQYU\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"EvbGthTWgJ\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"TOiwuy3005\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qKUT0KH-wh\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"swjlDvQr0G\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"l7YV_p1tN8\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ll1-tU8nZC\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vtIpLRr4tZ\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FbT_Cjjy-k\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZA2suyb6ru\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WwO1-uB_72\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PLiQlHkrog\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZbPlRhUy2c\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"f1EBYqvFOj\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"OwzrbY8tul\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nDtwl2i5Wk\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"H6GgQIWsea\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7LlRUfp9Xo\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TBZovkIOjT\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3NNhhwr4fG\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"E88HhuwAcm\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"H2u-AzSlfs\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WI2Q1B_LBe\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LN6QSoLjLe\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"T0aJpu3MRr\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"898WNeChmJ\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"9PSbHJhG8R\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SooPKdF41R\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"juduShdppl\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qk49P1eFLx\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EJgao0BfIZ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AVmpv7eIna\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pkTqbOhboa\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zT8M2jqsaB\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5jLSuCkptf\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"v1_6bDlZfK\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fHVkPNrmGX\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"JkbLWpTzu9\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"c_0eqGjomU\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yfyMCCE6an\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NHwdZHSyin\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JK9GGxQBAt\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-YSJgYe-ZI\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mGPktUQFIK\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EgIRiF9M5T\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lcXcTdbC94\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TtjSLw4ffs\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-js9r1ApBv\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2Rt3p4VdU_\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"2T6QhhNzYs\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Wfho5O86sw\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"w7BVNLaXRj\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"o7xEAvlhma\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_obAHyLv_I\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HbfZ1QzArZ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CJHtbOUNC7\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mVdOtEOfED\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RGfE3NR1DL\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HZgnGTV-Ij\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YGkdKWj0X9\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WnNVECqSMc\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"qbPBwt2RLW\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"SXSrtVpLSc\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"s2muQ4qNJe\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yWOlB-8hx4\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xksoJn0K_k\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wxxehBkdAE\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7YUrLJ4e9w\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3CmMDht37G\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KC8CSv6l95\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tBS2bE3DX6\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"N3iiaq_qwl\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ADaP6MFah7\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"1fw1H4c5jT\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"GzS9JVeHdz\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QVMhLR92jX\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NSKFRSGKdu\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MqMDEEAzv6\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hMHxlIdx4X\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tP5S4NYOqz\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5LQo1QwT4H\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nJLkC2WeOs\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZU1FWGxBs6\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hwa16LfAHY\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_wJ27qajSL\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"SKTzY8Q-rp\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"NUS55A2197\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9EI6E3_xVB\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"v7chMK1VHm\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NiqSBJcCVc\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MY03s6FLvB\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CUDNukGX00\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kGpxkmkDPj\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_YjVE7v9MJ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uPubQGNwGy\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TzwMyHeS11\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"P14Rlag4A7\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"F3Pw7XQyxq\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"rdTeDCR7JO\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kEMITwqoiv\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"M8kgvB2HP6\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"b2ICg3wyZl\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SrTfozQmU_\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"U5LtD3hnlM\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bwZw8DbAZV\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fUw97ymWKE\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PDZ-Bq1Wck\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Fjn0wgLl28\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8v9vPxAQDy\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"yjenJb9vUa\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"2\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"0mmtb4axQV\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6KyJNJjNtI\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rzgAcQ0PhK\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ujQ4KOihux\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RiGINBMSv2\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JElS93EzKl\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kLy-gKALt5\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zhM2tulqAP\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9H-IaQMiCb\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XhfP-KPqMg\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oQ8xyFxnE2\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"ouy--JKUIm\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"LftpHdw8MZ\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7ecxAw4PPb\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bHp49_FakT\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tFgMfRrzyS\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eHHWfgEW0b\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-xN2tqw271\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YGAcZnKe3d\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4wMTmrEykf\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YMH8Dpa0Ee\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lh14qm-7Sl\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZSmsoIeZVV\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"7RhetHWp-b\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"d3cLgf4KhF\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vO4HfQVkac\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2uEKq9r7ac\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Fq-KgbYJlb\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aBl7UNpoWW\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sTp4FEIbyZ\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t7IEMegzRb\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qL7KDASekU\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"w7fThfnNK3\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"w_7OKrHvjU\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"72sB7T1ina\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"Q-qfrr9Ft1\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"RczGMiEeAf\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JMYYspebWX\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iqKjefDOLW\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_cbz3G5eGz\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kb0yJGaNwZ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"L5TIl8cGv3\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"82S9xf-AiV\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"S2_gBAT1Hi\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"imzhCv3oC2\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nlQNduGLUe\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ph-TMTTXuS\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"5AOPRk-8-j\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"jBhgLFGZHR\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8Uscm8Qz1L\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MakaPB6avT\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qN3QhnDRfH\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VQA0CbzkV3\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VCL-3bAS87\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QAA8c3wY8f\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"inBExmYSjk\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2s7luSIp1k\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oig2VAJ6yF\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"U-nyZ_bmJ8\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"NBErtbfFKq\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Xmf3W9Rr6J\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"A_8Yh7aGkj\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"N2Iq4L9aoZ\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kuIedtZ2pU\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zLESFavsiS\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-ZNYUnT_hg\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cWgl4xKnip\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"I3-NJvGNeK\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"APJdJivi7w\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hSFOPH1Pc2\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fHHmrqve-C\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"1MHLOKnEtV\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"iCV9mHCfI1\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9CjThsO4TV\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7Zv-9f5T8V\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1L9hfgUxsT\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wPPH4Te-US\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tVHSIjwQ0b\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6dlJHsXGxN\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qSIKSg4mG7\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"473Mw9XomA\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fA1pmTNjwd\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t7t2K8yRSU\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"S1rjxXfC1m\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"kKQ-4Hv_cL\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"k8iIX4YFJr\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SfU9aegK6v\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hu3QVaoNGi\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OWbm5Y3GRT\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ws2I3iLj9I\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9iv6mo91UO\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uybq8LwykS\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VYe8N7ANqQ\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jNJq0FW0Li\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vCdIPlFxkc\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"z_W8fSZPuD\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"wXBHcNzuV7\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PE3w6JLt8G\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Obf9LodLWp\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AfI-9TL0i8\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VjUyN6Cbu5\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iHSjuqDHQl\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sFpT9xxTpN\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UrB_43fDkm\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GdHbnI_3uX\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ky3LK13Gy7\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"73DbAFYSWm\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"OP1H60Ub46\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"suXjR1O-mW\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"E2tFoCv0hV\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ra9ZzyhCtC\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZYR-6i_nUP\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"esh2QIrJM9\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EjoPdgAQ7b\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Wk6783vsGC\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WyaO6a9-PK\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SXTHfWxDpu\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7sjl9gQskx\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uF-sQLJHVW\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"Ds4TWLz43a\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"ryFXQA9h8Z\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"feW6PkoEYb\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jno4gfBe8i\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OvLg286S7d\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pG3l5Jm8k-\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IwtN-NrUG3\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FJDnVy8k0U\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0yv0IFCIdJ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5AwifuEmIO\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1VTZ49NGzn\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gH6oPxjkRN\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"zsngssqZiX\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"9XsVYdoUsj\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6Vaz0VVruI\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GYzyH-Ykot\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iCIlhytyLF\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"C-1ZL1dwCT\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"31rC9vSLpX\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LpcEufaXY-\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zgUKJPG9PF\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oWY8F6U07Y\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5UwwqfBoKD\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DYIhovQgsf\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"jMsr5iS1aO\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"0Q4QIoC9YU\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CSmEPssu-C\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2gcJwSgEI5\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kDUPK86EVU\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JCp0M1YSFp\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"M2eRv5hkJj\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"s9-t8BjYwv\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rBePX2uTEJ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DROSiHd4uF\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"r0yKQFpw7_\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mirz3SFbYX\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"poee1huwk_\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"QWgZQImyjj\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rtRxrF_eLf\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3bd1pwy1fM\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lZ9tiLTkFF\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FL_zFy-pcr\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EcgI6DXD_6\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uJepi9rQMJ\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oIpUaoevKC\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yFr6DVUUcv\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"S1m7SgPJpa\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9KU6InWcH8\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"a2BC1oJP2k\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"F7wvXidAPY\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ucGSATyoJ8\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"j7cCW2zPlF\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"g70lAbA2rh\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YRN7SUiGvG\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pyrOrimuDK\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZqkyKwroLh\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"52rWKkERDa\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Z9qL4gEIoA\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FpJ7DMMgg7\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6ZjoFFwlwo\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"vtMlX0BLdr\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"wOjbU7_AMb\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lOicECnYIn\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Sx4ABsZlDw\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3wuwMaEGCW\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QxmiXEar2S\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lYAu_auAn0\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aXL_2qFyHW\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RDqTlFpUJi\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZGjb7o3ynC\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4ctKqzfcdn\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tphxEh7Y24\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"DnCwNCdetq\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"0\\\",\\\"3\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"udkHlTceQm\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zPUswB_xxL\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"49qeR9kBD_\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"M56edVKo4l\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7aSc0SFBE6\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aWqnd710dp\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dXNBbuCfcM\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Qtk_1jOeIu\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"G8PgdaohIo\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ri0tTRGbEi\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gPUjZ4dOO0\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"GHvPzcnwLf\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"rpHpl2e5Cm\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"q-beFN1VxQ\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DEgQK-eWwR\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZeD29iATHc\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gQdXr3p9a8\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mY4q6o_jph\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rucGNcuu8X\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gj5ZEX0g0N\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0dM5pmkGIt\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"94dIOilR8L\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WJlmrxd7Yx\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jRE8liLUKO\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"8OjXS-jo17\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"XzNkvqa9rM\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hLpT6k1d1D\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SCRRYiTsVD\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"91EES9n6AX\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jts2wnysYP\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JuFDO5uPxw\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ydeTq_CiOi\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t9yioZ5nMS\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"l2UHp1FnNj\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"53FoZVtBp1\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ua6NVaLUqk\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qMcConMgaB\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"soEWPbCqhx\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"1HI7YKal6x\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7tMgDG1MLj\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZgoZ_IOSXU\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ob5KbtJ85s\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e-iLm6ffic\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JhYlTprZny\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KIOkLCbdFV\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QZJXu1yBHK\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1f5noNZ3Mj\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gWPQryLFqN\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bCgGXD6Zoc\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"l7U4n0fsJj\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"e18xOsaZw9\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"LL2iPTnfXi\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lce1Ov0vOV\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Vh7NlmnYyr\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8jmIzy2pWK\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UW7H8kyy4V\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cM6iPIFhRV\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GdflipWp2y\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xh5b8ZMh-Y\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SbDfiGvUoZ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KAff3xntiC\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"G_INpbU_SD\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"87GQErvCMy\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"hbp7mhB5Ic\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"ouOe1DZpLm\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6shZz4zke4\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aGS0HT6rCV\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Y4c61oEOF2\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"haMw4GhjoM\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"N4P91LiCg1\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"INlbzXxW_2\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EnzNuZPDoY\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VXDbHpYjbv\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1oz39Y13uQ\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"k34h3FHBmv\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cIy3uU0ogj\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"VknWvhvLh6\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"50onFRof-F\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6mGBBfEwU0\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"O-LY_QYwU2\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ORwebO5nwS\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XRyahQpZT5\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"A6-FBrW3wE\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MHfxJFQG5w\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pXmAJI55iU\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BBM-q_59w3\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eo7hszvMys\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lK_GTk0LPC\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bFJ2h1TPSQ\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"lhmqA3FP83\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"37jUg3ASKB\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BMM7xx17Eb\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PNqUBEpoAi\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oQ_43cd0Qq\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oZH2dIcwOW\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"D8GFw6ppOt\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CXOE3_zUxE\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"I8JQUFhA8C\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Tcma_fhvRP\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HpIxP8rxN_\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1FXPdaIH5i\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6qZE9LVlkz\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"Bgo1S314Gj\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"MmmmxkbGEC\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1HHxj8RbfN\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7EYqNzHOsV\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fYK1g0V5uS\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"p5xu0YaUo7\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qlFuvx3i8Z\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DsEmeN9UXT\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-gnmKBEzKT\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4pdjvivjvm\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ovtjFIRtZl\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"50VWMXLZAz\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4CgF2INy7I\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"mG8SVKyYo-\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Gy67jfvNJ5\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_PlwwDyIUU\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iPtdb2yBBa\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Vu3qUUscf8\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e_vSERUVqQ\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"s28P0cxfVc\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xdROCz8SZ_\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zmFZqOLfN5\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nD_fl9MSyX\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"35KqJf0X2d\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4o-tFqiJFg\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bKHA49_JmD\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"zzgqrkT7Be\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"iOjYdR_dgJ\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YLjTc1DPgk\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1nOFqTxn4_\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dZBedzXwM7\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3FnZ1Y2bCs\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jQMiAG-xB7\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eqnAgy7dfI\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TiIStGy1Sb\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kQHbv6v45U\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"V37bIW3Pfm\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"004eput2Lq\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FejPA1C65t\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"PuCAkO05QG\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"i3jWkXeEGP\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"stXUaWaKtv\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lE5cP7Yc-i\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"N-H7YbRt-L\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HcuiSd8MFx\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UhlDiGzCOJ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZfCD3F8InZ\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-9nQLphrqt\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kbQ_xLh0YT\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nM_ShsUTIs\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FPN_g5FKuD\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8R-iuupwTQ\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"GTK8oerHoV\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"wgsm7p_pmw\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dvN0LFq9J5\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_0WpgNiXa7\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YYsKXtCkGq\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"h7_A-hEJix\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lfO9mTRwUe\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UuVRReSOqa\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_OML0WoCEu\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NtwTSZk8G-\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"A17_SMukqI\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cgzqYxJ8hE\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xGE6Jh3jlK\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"Af9DopTJKg\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"eUlahNiIL_\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jd-Qx47BzH\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e50cU36_cL\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KJZCUVIPrB\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tRsJolZTET\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"y5QPIrabfi\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0kQg8_PR34\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jX4gdvh0eG\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vajzTwChqU\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"J7Q95XDJ6m\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"izZ_RjCg2j\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6ecx-zk8HO\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"mmaq_1yRn1\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"RyA2yCQ2HN\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gwCavS04Kp\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rC_UFH0Bhm\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SPIJVsbL53\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"We6GV1sn0X\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6-9jz7iJyb\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jCRzTRRVUH\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"c1oGErvPq0\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Axf_NnQwY2\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ftCWV77BwX\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"a8KS-gm7Fd\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GowXdnHQrZ\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"vyNJMwyb0V\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"0gkVn52DPR\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_5ilUtZ4mx\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aDdkX3_QxB\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9dyeKnwtZp\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Q3OgEVCSfs\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QtFSUguQZn\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lYVcUfLtUE\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"r5ATlFZfOX\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SLaYA--Z2O\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ljs70FJGw9\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ovvYfF2pHc\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8ZoggXFtjr\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"iu4hgKSJvS\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"0\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Y_2P8b6rnP\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Bt7gNldoK-\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"G36PjK8MX6\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WP9hLU2N1Y\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GC6vt6Szyn\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"v04qdibcd6\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"18_IWHhCFT\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iTzMFBHy8U\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gIh8K0ckQC\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6Dj9JKQMmb\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XUhxzc5Pye\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lnpQTmh_pu\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"_UzWgp78E6\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"xkcEw-WUJV\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BKovZyw8om\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"O2nMC3pvFy\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wuUnjqb_XW\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rCWWQKe0d7\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"R-MCfYqV09\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gMtlubmq7T\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HFm-HSt-Bq\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XIyl6bf6ug\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oLNnewUaLZ\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Zaj_8mcR3r\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mbtpl_Zz4x\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"kqlHfhT6rQ\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"fRoMyEADy6\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BHjdiUykuw\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"plFK28s8hX\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Vs2_s8RGrQ\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6-LWhLPdHZ\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GmUcv_jDzL\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WCrRXO76LC\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9VDK9gLUZg\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dIX9dYKE17\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WoHHUrec6X\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7twap9iDJ8\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pC-AjNkKzB\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"WUdZj1jopJ\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"l5qf3DDfM1\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LMtlIJO890\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Zk0aH1uCan\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_99TUtDk_c\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eKoAMgZzSJ\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xgrqFAT97x\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yqPJhLml3B\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ItvtmaPSBu\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vhUV5shIBF\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LMV_Xm_ptS\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8I4UZv87bu\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HpbsNGIFkD\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"dgDsy8ybmt\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"xYDltFyv8s\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9FueMqqRdG\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"J7dhssmZdp\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ztpIL0lMNL\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"q12hTW6PFz\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"po_vi_nVv1\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VppmGqJvSF\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uo0AJhWj4a\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PQc5oKI73t\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LuL1MmihTz\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WJB5ctwjKL\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"B03BxF_doK\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"Y68BstNVRo\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"rvWdcA0U7y\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"C_Ob34zJA6\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5khHhugZw2\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LS3z9MsQNa\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"w9NQcxHYZy\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8ONkrdvvsn\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xk1N2fTzd0\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mTkBDG4pNy\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TI1xvyGQw4\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SwCNtYYU1-\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0is4EMX2YM\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"I8S1V-6oPR\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"LvhOVcYds7\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"bOxfjzgKyT\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2p-3bAIUo_\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1OfBEsVSiZ\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wkZdOCY4IN\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IMSTqcTOvP\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NBx7t6LuRr\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Oq__uSAKMY\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rXboTfadPb\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"918aApH72b\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7VFmuWtL28\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9DHqsvyuyT\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"M-4Mrd-XcX\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"MTBPlevH3A\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"bIsjQ1L7_6\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZHdJgENWYY\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3Z1t47cXgl\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"M0B0cEyl3t\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qvvswlN0re\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BBMKWoNUkM\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"d0r41I0RVs\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZtmmjoAeKw\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2FLnmH-ads\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oWhV6fEQJm\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"affyhd8Np0\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5ihJiDAvXd\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"cl4A0PThGV\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"vBgiKhAUVS\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"o1PXgEnLiT\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"N1iTzZwIBN\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"r1OhZEPyrl\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cuKggjW4NG\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Z7bvi2Hv8c\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HcIk5zt5uA\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AF7zwQQaYi\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ehyKWok2pw\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oocPV3okbA\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QJ6v-U8w1P\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AN_VmFSW3P\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"ydlfkc2I8t\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"5Mj_CtI_4P\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"E36uAS1OiZ\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"J4kEchDx1k\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FxfsCbR7st\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"n5Nik6uyMu\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-weO7iqdgU\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5DNfRUsEou\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NquiTFRjnD\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"O4saxkOZ_9\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0rKfRKdBDp\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"03yQr9slUM\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yMe7YOvoMO\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"wV5kU09468\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"A9IaFfHCH1\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vKwa2st7p_\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"d9qg8eS2mL\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wwpg1TaW1Z\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CEX0hgv1By\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zNGSXqg0cE\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cAtjAkTTK2\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OCQf2QM0-n\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Z3GNI-3OHb\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ArdWb8GqCF\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"orYr6hb8-x\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WQ_jyhbk1V\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"ChAAEvWCYj\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"ikHuUtxAdw\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"avfUrvyO5Z\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5niAfkQJ6I\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ELk6LJaId7\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jZ2DZKGbi1\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZWHqA25VQV\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ipbl_TPC7I\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wtmeAe-Yvc\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qZiL2xv-Xw\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"i6dJThWIyN\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aBkSzLpnqc\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SKSN-IK0VM\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"bPODTJdASq\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"kSBmrmPKgL\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qgIPnBPxdz\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xu4-skGYcV\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hfk13X8mM5\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IzwGPj_6c-\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hXttWU9MBC\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Vpv0XPdGtk\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0pJt3-iPm6\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iBZhlTLi-X\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gygB81Wx00\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fsTAXXTNe7\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2deaH8T4ba\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"s5AKmBkB-J\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"SsNtI9F_1_\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WEemRibNKL\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KabTm_27MF\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9hbmvl5PYw\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"b4jLcmiQYP\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qcilLFadYv\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UVpOE9KJsU\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2YXEJEkJ14\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Q3eujEr_CW\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZKQQDotL8I\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VzbC9ArxUs\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kn3mLIXXPo\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"1pb7rVAcJR\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"eLLvQcuUxH\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"phLq1uYCmy\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vQHoUUt_EO\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7vm_SroJ4b\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"I3HClv0Udo\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eNkiCc1V6F\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"J_F3Fv3Yvj\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"H1HRCveEyy\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"X1DufPP-AK\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Gefy07hlPS\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Sled0g08-9\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ijAYOKlzND\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"x6_SluFmrJ\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"bLLcCyNfY0\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Czs3O0TfgL\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wSLq6DUY5q\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-dcHiXKcYD\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6s8534ypIc\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MFyDX9rP-C\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DPdm86CvwK\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JQ9--deT32\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UG-utQ0EA8\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bWh_3gr9uY\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yr2LEW1Fq_\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eB5eCbN7JG\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"QKIDi8Zcfz\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"1\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"PeSJwNoUZD\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UtR5XovCrg\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Eta_Im_5QR\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vWs7FvDSYf\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oEfUt1Pc5Y\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_Nz8OSGLb_\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e-9-Il1X1x\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MziM-D5VDO\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xtmzgn_Qdu\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wY8S7HMoJz\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ziZ8Kz8Fer\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"edfqdQb2Tc\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"gQfpoyCy4Y\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"pfjV3eQuru\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TN0QWMCVA3\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Lgt_4ZPyFr\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dem0YAbO0C\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0dr1aGRWAC\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RXs-qwNj1G\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zIKtmge_1B\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PMeLmVfyj7\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MsnHb-KCLy\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1dQIBPvmM4\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kgKoimJr_C\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AIiiuV_wGO\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"acTLffT0zE\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"rDsfVHDtqw\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"I2nBONB9Dz\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aEsZM8QFXX\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YZvPtQMG0a\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AuHHLLXr2A\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"I0yXChn6OI\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ueoDgSvd-J\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iGoYXy2IjU\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"o9PPx_glu-\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QZqN8f7u8I\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GAtEQqQEbt\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"W6d08hdbV8\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"erFQvCrefE\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"KxQhLcs5EG\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"p7uBpNh5Lx\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bAt1uI-pLp\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cdLO2PcSWK\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"l35nXVtOxm\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CuGqJEinm7\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OfHKef8FOu\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AaZQ3B91s7\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PNms5182U3\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YoVif01VMO\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CIR6SgWH_R\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DKeVR-fPQ4\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"tiM9iKNfzr\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"TvLE_9mulf\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aAOX7IcTrP\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-6CpILyMhr\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"r-gSnMcba9\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7CKGxUxjlw\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cxaaJz-lEF\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZuDS0qhind\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KbP14reJ_m\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zYHDvGfnsc\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SdOIxlzupT\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NQVbMDhkrq\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WsAEoWelx-\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"Fp8yX3ntpW\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"IbBHt-Wf9F\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KDXgON5l2I\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Z6St5mcJsn\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JvKWJil34S\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Otx_xVIo8O\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BWEWVwy21b\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XZj9yuzGvF\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BDTixT4lGL\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rscSmIryDL\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aD6llM588v\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"otagRYqe0F\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bWrTzVUSg-\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"64JIUKZLZU\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"GI80zadSLn\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aPU9Z23euS\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tmi1mVS0dM\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-BYDZxMJID\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"muQMOxkCg2\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pmGwogfJbr\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"N7j8vhX4dB\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UgM7vF0lXC\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QeMBAD-m8C\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8HuNioQ6Gg\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"B8YB1A8ivF\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"W2Zjc1DOwM\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"UaEgJpmSle\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"PjRXYmcsiY\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3kH7-241dW\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t9gOlazpcn\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"k584JL9du2\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"grKxh1H71p\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TyqxWSA5jF\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qVjsKLpWZK\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Cx_6abEo0p\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"q9-le_AiqE\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"caKwiU6uI7\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"51Dszf3rHS\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DanS_n8Gh4\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"6dV1-2TdY3\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"TchhM-LbHQ\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4iCT4Vsw6s\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t8TYMJp3wb\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"px8gTVi1Bj\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UpKSHjCRLr\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Y2yQFMWJgd\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zpaNJ6lkw8\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"v3BkcXrNXX\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"h2Mb3xEAg7\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-_HolmQLIy\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CakOazBs3w\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kbT9pOtK-b\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"JqQZNLl0ng\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"BeUuw30IDR\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bPwRC1tHln\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"G2Y99wD2Et\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MQ9a-sfjWu\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"B-i0bbMxZS\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4wCsOPF_dl\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HV8Z4ajMhF\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Hb2v-6KMVm\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"i_Ly689ji8\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Vg4UZBjz9J\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"byCMQj1yVP\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5YcXLD192M\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"wQtVD1qBhh\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"nCsaSjxo8x\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rh7g36rt9U\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4KiPIzE8gb\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QB9np5TQS4\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lHvtuoGlEV\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SFZqQ-tPMp\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9gWQnC9-T_\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"f3GbCkIzk4\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UwZ16erb5G\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lWrEiJVZ-p\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GwQo6iBPDB\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gR0Qj-2niT\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"iV0UwnP7Or\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"pUqVyYLkt9\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Su4DihfmzH\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"770sJ4lJZP\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"P4zWw5Ssye\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bDXQHpH4T_\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gBdMCwUokk\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"z1861Pvojh\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gSt7l0DGkU\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sWvvxo_DGd\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0m1yErPVEp\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pqbRY89gEq\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"49S0ZJxLrt\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"vPf9wr8MUi\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"aqlf1mxrkA\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Y_svIO_WUp\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tLLwKKc0su\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8-bXyo0Bok\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mf6BKIAne7\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WI9sS-4yYo\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jJRzPytuxk\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vjPmdrHnme\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CYYG18jElz\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FsUgcZZLBO\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WbwnqCTEUt\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"idajRc5rzR\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"M0VJR7WUAy\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"G3MGyoWIb_\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Zcv-PFjvpk\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_3KKpL4HxP\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_X4pNYMbrg\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RQ1QcL8kZ2\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Imlan9srnu\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"k3qRr2y5Fz\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yznFpRTBwQ\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8Tw64ASLof\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NcmKe5fEAb\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3tu7sUw1xc\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aq6_4vjsoM\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"7mdHS6m5Ue\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"XxYWxSpRBX\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wDp6tz0r1Z\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"R6tEUbAZVl\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NjyL1ISqpV\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VLttLkpbbS\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aHuC9J6RE4\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rnp-swpjYf\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"r-vLUZ_bKN\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JHo_SRurfg\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mGOZZhHjmV\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8ZS2QVsstz\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OJE13lrDrs\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"rs9SyF7VTL\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Avz4JkgksQ\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CtGGQ_ZWvn\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iUOulTOPiN\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7jQB9znJrq\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PFE5hraKmp\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"z2iVZzlRCH\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ylU8nxsQIV\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-Yh9hCVxiP\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NRBZbM_PCT\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FphgOpI9wS\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6DptXLxQb4\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2xDYYGeQcv\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"eyvMeiNsQL\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"GgScqiJ439\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NGYT96wWmf\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bDM2RR1zny\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yFcNsAPEub\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ai4j48eOpf\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ncU5D59e_U\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"04CXwACWbC\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Tl8VjySYDH\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xygLx0DDIH\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4AuN8MUQck\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KJfOywOlNZ\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"i3RgGehmB5\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"eJtv5euPIS\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"FWE1xrrg7t\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6rgAjw44ey\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DjCaRrM8jm\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e4q0uggHZz\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2eePF8kcDC\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0cTwZnmNnm\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nssu8DbVtU\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nPmeM-SL7q\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uXtl13NU9r\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vS7pSQvC5Q\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EGnHeT1RLx\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1ur4clINil\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"HvUc-veJim\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"UJ4cuYiAFd\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ToOP6095_l\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Z98hOPYmvf\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"S3L5hoF6v-\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"P_5dvL6wkK\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YxSd0Mrexh\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MqpDhgo9yc\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oRgz-jSLYo\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nJilv-ZfGl\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2flaQhnLlh\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ByEsPkz60G\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dPbJvh76lA\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"MFPevtmrXR\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"qCugOSH6-R\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7G8ZZD-auI\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zeRzcPRJnq\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jGro8Xy9nC\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SJ4s2RXigc\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Gt2BY7hnsc\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vsT-ggUe8C\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jl8va5nyMW\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yatSxH6LS6\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LrscObU1It\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"x7HDwANYPT\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oa9Cae5Wfi\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"r9tJGhEZGc\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"WYF3qlwk_e\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lVIOkCrf6Q\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Sbv1F72whz\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZZOxO3LYsG\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EHM_RXkU5k\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0miZl3P9gj\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4_qb88haRI\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bX306kLJAn\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4a5D0aYlmx\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zHqfXJXiy-\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uAxkLc0FKd\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"j4Tj6B_N2M\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"WR79SeH5VD\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"vEqBGfVWY6\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"50-XsacJNw\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8LlmUbwVvP\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e31kJcIK02\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QdZXC32peN\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RXnd9WeY_v\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"I8hETyjgzN\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"J-VcaLQ4qD\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"51aTfUZ4QP\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mF0SJ8Izph\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rW6vz8DmSh\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OtSrfibeG0\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"iepOQQpV0Y\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"kkaMdR6v5z\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"P9qyIB0JlA\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XXi8cVKxtj\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0w0c1Fm_6O\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EAsp6g3DrU\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JiYexVPUOh\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LzahVV1yld\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e1lgUaxHj3\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pZ8-yjCtOu\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"s8MHQ5aiMT\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XBkS3M_Fip\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1sSDrNjvis\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"XYgeE0MFQY\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"P0y4WFMsyd\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XHLvi1gy-4\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9Juqw1KQ1c\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JOdBoDhtsl\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fddZGOGYo0\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ej1XvNA1qB\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KLSu01nOrS\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t-hiAJbIjz\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zgsU2-HYC_\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"55z9R3J_mo\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"q_8Dkav9GU\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"g_FRWNAqtm\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"Yn5FxGPdSR\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"cPpQSNxVUq\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XAvZfOXBAJ\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"p5xS95UL2P\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-7eGzuOb_O\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IroB51JPfm\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"K1C6grxTsd\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tuleDtnxQK\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PeDQx2-HL0\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KaHk3Jt4CV\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"77HkFbfnyI\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NNpFMQjkln\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2nI1cbkPz5\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"lV3_J_2VR5\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"l-H0nboGV4\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VGA5zggGpS\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NMPazFyt2K\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5UAAGaY-SL\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jAlVWv0-0z\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"P4qu43qDpS\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dhNae1dj-T\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gK7YflWVYf\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jlueCsww9B\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Q4T9y7uD1I\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-Xn1Pt2h_x\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lT4rEpqSaO\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"yoVipXbDAq\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"9mPeq0GfPL\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yjlr5RgM6R\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZfHD2wEwxN\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ti2a5FiE_8\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ua1XqjWsr1\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Nj6Jg-6omE\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CwkrBSrpU8\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XGPjscpkpg\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"abH25YYfjH\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Naz9atX5rU\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AkeX3gvly2\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LmoUoCqRK8\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"vVCPOdCJaS\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Q6czKS7aKg\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aU7QM2pvmJ\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ihzuzCIsE3\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TodXT1oMqw\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SN1IfFQmVQ\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"olcZKNuzQ2\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nfukdLrB8V\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZUDf0FsUng\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SnlwdcFgZK\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VT2g8vgf2V\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FrOE8Jva-y\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qmBzURNxhS\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"8utq_jfLxL\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"VSGEw9p-wW\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DrGzN5VWfK\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jaj9PHuTTF\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FPUeu2YhQp\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gPjtQdTIsh\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_e5eDrYrDG\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GS_fkn-pIU\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8odEDk06z9\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e2PIMoBsCR\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Xl01EmCSxc\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OMXXNqYTow\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WcV2LRItEN\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"EEe7rMiQdR\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"UPBdFWGAAw\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CiEmzZnpDe\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sovKzWAkiZ\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Eng3dPkFmU\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lT8ml87JYB\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8Ajse7cj5u\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"13kHeo-7bZ\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zTa8gFvgv4\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dSDVxk3e4y\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JJBDCAx71V\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oVSX8f-Ir3\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CBhDi4ZTHf\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"KkBHr_c5YW\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"EKk5OHZnoX\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4nfxtox3Kl\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BkBQm0iLrn\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0JnB7Q2jOQ\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sJqkRDGSkj\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kjF-TX-C1o\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LMsLu5WfN5\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pCe7oEmGpL\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0B3WXm2z-C\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"adIYKZzVz6\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nLghHUGquz\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ymI2ywPrUD\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"cp5aLYQsvI\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"B0WZjwQCLu\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"r6YzYktomG\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_rvAb6ALsn\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QyWuk2ayaH\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qo-ozqAQZj\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8LedQJGujf\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AWn0Ncfi-V\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SEkGvPXGV2\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DvXDvQH9O0\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5ZuSPdI_q6\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"doYSTvecXW\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"V0FtG49iJt\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"pwzO_92rPH\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"1\\\",\\\"3\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"d3LXY7pTpa\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZzGWDmm7lu\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XRGc119uK2\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZOwhqQW3hK\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Yho2Vs0ND4\",\n                    \"position\": 2.933,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"meF9cRawm4\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7JVn3-rAkj\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yKSyuBefJr\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aALHdXb_-R\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"f2RkaEWIS1\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"G_1EqVwhGI\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"10bz4vl3HO\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"hzQUqWEw9A\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"J3plP0_LIv\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"24BYV9--oS\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZMlM0cxExk\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8TVJpYo2cv\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cgNudAUkgC\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dWdRHqZH5x\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vKRhp3A38-\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eDnBnEp6kN\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kcjms8c6iG\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cS59hOTivC\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0Y_WL8OzLr\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KwVgSopd2_\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"gfbxBggrsu\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"v2lq20iAHZ\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JNjq8kBTG8\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"n4HdugLhW_\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GoPe8LPJ3u\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"O-YklQQ7Og\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vftSBcFCBy\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mQWF5aRkGy\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JqSLNHhnpW\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vy9GYzeP39\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4pkfbZFgos\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SlAd-coj7s\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YAP2cckgCy\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"VV3HPEunJt\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"MjjigUdbaw\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ku2CJdPSs0\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3hGK-ED5xS\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QVDsAvgRkm\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"K2b_J-04eo\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"emI6NLGjih\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Is9GU6CWZ3\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"p8Oc9VifaD\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4Y3gieVZo0\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"H0yL6tpT3t\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"o0x0zuaHSO\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"T84iJv0Xao\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"YE59Ds2ofp\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"X6aUmmlTIw\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5J0Sqk4h2C\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t__aWBvA3c\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0IRal3at3t\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"j2ruJvmEeD\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2oNxO3GLoV\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fPjWDlmWj8\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qmO6RgPTFk\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_ZUcn_W_hW\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4nQ9nQ-QqG\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e0BWyPAJ9F\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"A3Sx7BGFSX\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"2J6WimTtl9\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"jVPwJPeQmn\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QHzvz0v3As\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t4UEzPW1iU\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pDpgkYj-CM\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SbfMawVD0A\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zpGMhn7u0C\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nyZWka-hz9\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QeVIjzrRMi\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lOxhRqLxA6\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eDRv8Y949B\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"m20A7UlLkJ\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nS57qsNT1q\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"RCL1c523Su\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"vmAFAq88eC\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZEcg275ffD\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t8IcXoz73f\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1RYqPyHkyD\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qqVIet3Go2\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8xNhLR9ruk\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OgEfvEYjx4\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"W4Cpl89G3w\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SLT_wETaZU\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cDrMSIFESw\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"D_ymf94X9W\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-1kohm5SgF\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"KQkVYPVx7H\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"K_6Woz7pgS\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YTEQNvarVm\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qQppE-4V9N\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vC9QRltLY7\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IUtkTujDUu\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pGAqmqBqX8\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iZgZHR6S8C\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zWLw1VuA1L\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lIfvE_uHxZ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tvvvT9ge8t\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-BOKxQ19hr\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QoTT55q6fW\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"_2n1fz4_v5\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"SHzlSwWpSz\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NP3SzeNB2c\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"y-rD4_WS-G\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"whIBR8l-8o\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"u8sqmDqij-\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Mb2GtMnqSS\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Byqm1RUXu2\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UIHXhxUZju\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wuvAdI0OXi\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VCbmVCzSEK\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Tm16tuENZF\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AGaaIvR1YL\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"p5LD5eF1X_\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"cojb-vI1VC\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2cn2SZut5r\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1zficsG1mr\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PW17QC83VG\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SdRtlioPWk\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"V7IRJ8PIth\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Vxvr-cCbgC\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2WvXQM-nj0\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4ZBCFTDBV4\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5fagbMDFBC\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kq5i-Ad63f\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"B9Xjp-ZuWv\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"zcO9j5IyUO\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"p7DUCr0NIo\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dnvnRe57Zj\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nLnnanSoYT\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jz-i7Q-m6-\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7fOZWlaF9H\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"k1IPPoXRyK\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"j_1QvfujQ_\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uhH0S_MefN\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tLip4LpFQP\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"S-mYx2_kqW\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3CHdq_g2Ao\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Sh8XiNqeGK\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"EXTj_PDUmR\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"OSC93Q065U\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JJMVk90agh\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"E7hDB11yFW\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UVNyyJooMW\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JEX_oCVpSJ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pBhF4krnpY\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"D7f8Ny_VjM\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Hm4w6rZfcL\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JehLLg7G1y\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5YAy7r_7hf\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jygMe1s8pC\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Asn6wyNDY5\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"cuDei_FIul\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"fPN9GekuyK\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"f21NjZ6wCd\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2nb1r2EeXw\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Qtg5LO-wkl\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NH1kwj45lX\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pteEdt7HCt\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"l-n0GKL74c\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3NEYXx2_m4\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xhVDoXi3an\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3njYrH3oM8\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jSyOO-wKlY\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7JVDL7RZ-c\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"9oGdKihxfi\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"yz6jwkMFKo\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hnv4JgyJ0r\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NksqUV51ix\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Dx39eyNmVY\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jqt95dTT4p\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XpPHJwu2mE\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rTHvwmYOvH\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PTVvPgPysW\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Bwse1TRQEm\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tTmWaovYP5\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"u6UU80hhS8\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IQFazN4c5q\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"1k36somDVZ\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"lPXLzc5BP_\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"C0H7GXjFEa\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"X_ATbq72fJ\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ICXexq9mqB\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qtrKONwWxc\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nQZNGbuFfH\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pt1zsZE38B\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qQoJt9I5jK\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rPcl50HQaN\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ggMqv8UMeN\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FxvYrGPBEw\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mTQqMZGCUO\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"SnsuB88W61\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"JkZBiiYoRQ\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3x5NLG6s4x\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rXoso4wb0j\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CXtDURU3gF\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QYxAKOPtjC\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YZ6YbqkqcP\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"x8eoKYF6tg\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NwmFpKvqpE\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"U_Po8YobhA\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7R3_WBTHi4\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dAYeVutieg\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"y0fTYratb0\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"NZtQsPG5CG\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"0\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"3lC8pvlUC_\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HHiENOvRUK\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"d89vQA11cX\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9MIGvy4vmm\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7YTSWUjjU1\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yHxbXOiZRB\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QI-YVPitZ3\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QjZxg02HhV\",\n                    \"position\": 5.767,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"i71UoNuFW7\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"c21FkpzE-P\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zFRpTsbTqA\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JSi7QZT6IH\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"-LNVw4qB_T\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"STEcI_GL3Z\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_G82ibuerl\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KhbZPYayHT\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FJnDirp-f6\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"esozEI2eUk\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WP0OmCwlq8\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VO6Agdh2mi\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RLpYc4Rueg\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dO3AufItE9\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JbRCr2CtjZ\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"o_49pA36s6\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"r1SBGMD0Er\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"C2MtKuB8fu\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jQ_L_CYzHx\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"a0elwCDi8J\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JXLJ-3etG8\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_ZkqNgbX4h\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oF7s2hKR8-\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"De4zj4kzHf\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ovGJ8IfPeB\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"18c_LUQj3K\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4LeNCVBDOM\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"w-zlgXhgUj\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"jxiiLrVhnm\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"tMr8Mv8giY\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Zm5pVKys3Q\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aOgPzUqnhn\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"p5i8d7r1hH\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IW62aq2D9S\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qhP7XH57Tu\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"toWgwsB9bU\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XuEKJJsLxj\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nHy6r9Z0_m\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2I1X1GMl_8\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0G3pTtZsZX\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"RWgqMpySBb\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"ys2GauPzM1\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oXzS7fSOvc\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"I31WVXcu1b\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dpIrwSKhX1\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"V7AfjGwzUw\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Qwg0LW1d7_\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IFK-h3T7uO\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6bPIEjXrIQ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6E7TS4eWYM\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qCv-UomN80\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"67-hx3LqST\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"5RFytUQjoa\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"c6zbw3jba4\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PAfW7SzgLf\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"genpkpPa-k\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Wgt4dIy3sS\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SIdCE4zQDX\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jdJxy3kmOj\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"byd_Y4KSki\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Os9yzWqzvE\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"X1jyzLGJIG\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4PmP658_Wp\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LM5l_y9yL0\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"s772ZoJM8q\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"6mi-bj8Qih\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"b3I0jGLUlk\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Vw35X2h1-W\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3wvr-VD31e\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"45hnsK3-5k\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VKAsbRqWrU\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3cTTGYeJJg\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cEKorde3y6\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"K0z4jubRv9\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NdIZcaOZL9\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iTQtVbvzqB\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"hvFMPNIauK\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"H3ftQ1nMyL\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vV2qOmKegR\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ItrhvZIKI2\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ebl2gyt3IE\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RdsUTGmobZ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WwAoI_Tk7W\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"51EPl8Nx5e\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"H-hdk4oDvT\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bAI7AH2j0R\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jEKLpaH6G4\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fGWtCmBr20\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"IiXIhTqQhl\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"sfFhC185Db\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"k36lQ9TT8z\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JdVS9zQBcl\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"odyiSnsYNI\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6GC96TEUCR\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"25MrFJjXs8\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"N-ZaM9Mght\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"j0y6D9W6AV\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"s9KSyTngSA\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"B1rH_Qwi8V\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NII6kyZbcq\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"eLHXiZZdFx\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"l_VkMWUcpa\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rhbXfPKCPs\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ntzKRgJxZd\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8BCex30TER\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FU-GMZ-vQa\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OK1OtuRdCG\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AOKDnrGBQh\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"H0XfHwKIAQ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IpGzefRPDJ\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dxQdpU9arO\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"v1RrpZhZ1s\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"cGBymPyR7o\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"SVVrc59roA\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dib3hOD_U2\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SbOYMfbgIs\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WPJSm1USfN\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RkgFImdLi-\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8hkD03pnqJ\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7rawflubiN\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xwS5jp-r1j\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HqQ_K_eWwT\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"anRDQu3rd3\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iWBRPtAJeC\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"ZbHu4OwRo1\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"9IsrE4ETne\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0kzM_2mvv5\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PN6vuAKzqs\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hVThMq0D8i\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CsZXCTMxr4\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"G20LRuQLbb\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2GFuXx66dZ\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HYCpb4guue\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wcmDatBXo9\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gHcQZrzImo\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ec1tWQqwsv\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"3GZ5Fb9oUv\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"al-rjrhFn_\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LYS--z-ri_\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CgJr_bF5ut\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"71jdM5ElRm\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_v1k58O0C1\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ICnaz_uOR6\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"x9ouPAeGCy\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IQQVe3KUwe\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RfiDOonNTD\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"R1OtmUafd7\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"thZRjJqSqW\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"StnB-jI_5U\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"3Go9-ADbqm\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8GFyXOCC6f\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uw_2k5y4-i\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3wMut3Xa5w\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4zhhZW3nq3\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Wig-KSh2LM\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZXfeI-uGyr\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uFtVX1qxEE\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2QCBAtZOn9\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fnR4fEAOAc\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tmXkXPB3Gj\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"3AN1cBG4vZ\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"aDCRCVRdgL\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iIbsCFF-0W\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mrKjpOtWbX\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UEC_rU44GD\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"c-T_ndC_b_\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"A-MqtaJCyy\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0XBIULgDOb\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1lq_hVqd1s\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vkugX0XJvS\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HQdnvDrIhp\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"24FvctbZiA\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"_E2r043ISI\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"cCP6v7p6l9\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zNGGwGd4vz\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tE9-WAE1c0\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fdhi5OOHXx\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4LJx41-kwn\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ruYTVtBqjn\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cojntW-LJ4\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"503eHhJHmy\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Jtc-RC9wQS\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1mCkpIpg9T\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ycdX9yJ1Zy\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"I0dZAcWWbc\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"1\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Y6fU5eEnco\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e6sxiOe4vv\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zJbqQwACWx\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"K7oY6GBJOb\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HBkc9jge9E\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5G2bAn7qP0\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Yi8JRSoPqf\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QSM-QbBE3U\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aQQQ8G-sri\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ryfYcCSNlg\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EYQyzPWVLi\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"8TvDO5hRZg\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"nThED05nMh\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"c7Sc26rMMh\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mNIfRwpUyV\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WryxKTvOuT\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FYe9F86F6j\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"d9xM_Ldaxj\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Nl_Gyk3sk_\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"juOl6sNXID\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6kuUED9adF\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AbDP9gsHBQ\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SNyaI2kjcP\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"kCFd5IbLX7\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"JG5JAOSRob\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2aknlqRrh-\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3-sbE4kzqF\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Bcbq1MaY0W\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"y68GaZF63X\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"y4lLyhbLQe\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7ZteEmiY5Q\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-DRrxHkULz\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OVgWg4nrHh\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qYv1BEGdd8\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"i8j0np1lKG\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"GJ2yigthL7\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"q3sgpaMlVw\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ld1GstBQVL\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EaKrlPAVTp\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"064G5YgTHa\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"H_wqfh6zhg\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qgyluR7uPF\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jbcp19wQtK\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pmA2l22cn_\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cbQCE2-GsA\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Jm03vcJywg\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e3jEWU4FYT\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"aToZXuTKDq\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"OkuJVTRaxj\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tgJKQvVpDO\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iZ3S0FBZf8\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4LACdOMsLH\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JljOHAHQE1\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"W7bEzRU8Ll\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rggmyYFv19\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eK5NlJuJYB\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uKSjqHRPhu\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"m9LRsMpXqR\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lYY-8SCJOX\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"5lVy3z6SfM\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"eguSsnRO7E\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"h5FgzHAY6c\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PmHy5ccJwV\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JFWXCfNJZV\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GQscJ7Atr1\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UXaZOdcgdG\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gt-EwFNhPv\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_ZDKYHMfOJ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"039VSptgnc\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YiHKZSk_Qb\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZYPBWQAV-v\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"6gSbO0Edds\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"kYlWxWKw5C\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_xaokeE6E8\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hqI_GjzntK\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aTILcAv_mZ\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8TvmfAA2jK\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"q3pV1BN1-N\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nCosYKFbkt\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bHIl4o_qFy\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VDe5rO6oXn\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NaNwbv3NMR\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wrZBXaYclL\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"fFbdlqESp8\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"thdDOkRfBK\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SaGCTemM53\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DxBuhye1gg\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ilkoNN5q6a\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yeZsI2S9Dj\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eEFEiZUAu1\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ryeGflDLcK\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0nsul5ktQU\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Nrt2_2-QjU\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fWxvCtOWnm\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"A9gWd9Uexk\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"DhbkQcsnsa\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"3VOgn9TkH9\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"k6tGq0DsRk\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"he_QjTwPTz\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t--BwuvX4o\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JB-o36YyaY\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"I4w0gxmOho\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AQ8GfMgQbJ\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uB3ZZxjKie\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mW8T3sBLEa\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wB_hAmoZn-\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"q8jiaPxGx7\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"-4mk1ewxoT\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"vAK7mNZ_BT\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BuEu6imdSK\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LbYU0FjnsP\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NlWNts8gHb\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gqF-nTymWO\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kP5lvjIVFe\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4YPxqGP2se\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SsV1ykb5A9\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yM9o-B8LQX\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QCMDks06PI\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uVWdBAl3D7\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"UT3mH6gBz3\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"azXC0Eymb7\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"io6CIsNu9w\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MjZRGtI5eH\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"P7nkpT5BQQ\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jBuOAhZOhf\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"30B7lDzxW7\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZqQn456vsB\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"82LIo2DviQ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ybmaJXVMSp\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eYPvpBWE11\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"U_Gg-F0Gsr\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"VsA7qYQW2e\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"aIqj_6NjeO\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zbDBRHYDer\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DLqS5m3gfu\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1mshQ8pCt6\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iJIkpo33hy\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1ugDUQj0hV\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7W42i2pwTe\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WyaZRDn_9_\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lT-eTLTGcp\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cx63_7T3HA\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4h9rgrVHaF\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"lnLZvLE5_g\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"helEWKB08j\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"f_P0UKe_0f\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jMZnsaTeIk\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UBMmmQpW1J\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wmegJUkP6z\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"C2iFHfptjJ\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xWXWWZmZU7\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"et_5We0mAk\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5QQD5uUG3D\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Lpoc_eML7u\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YCothaE8Ki\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"PFspXzxPPM\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"NE8_NuJyUP\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6oVSGsFfTH\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VvFhCr1mW1\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iHWrbs8_h-\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"f1DvfCHDbQ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Bjxy77L7an\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fPp2ARDcb5\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KzaIeuCsX1\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ktugyp6sz-\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Mf2io8Ycgc\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ygdZPa0GUr\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"4sLvBmE4uM\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"nETYzBDTQM\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ov87nCys1x\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QQZaFveK3v\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Jxbru9BjuF\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lOM3JhFANZ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bVUeVEMcyb\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6Yh_xHYtjv\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"B24Zbu6Eeo\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QMthEqxY-H\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xGTe6YF372\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PwYa59gMNR\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"rd2mAIinpJ\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"X26ZYTfDU6\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kGAIyn_yVa\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wd_NWzfvU4\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cswmW07dRs\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"glmbOyUKr2\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"98E0V4xEpC\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ODG8fnHs_l\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7pkw_jCYCW\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HchNRYgBvE\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"I4OOELiXHY\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uA7gtARrQh\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"RbnMnQRSXe\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"2\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Dsb5QrEEio\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UtM5j4AM-T\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RfuHm3xr9h\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4c9eB4U8qr\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YqppIfi7UU\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DUcZwen2T8\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QL7QAnrbvz\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uh_k1b-6yZ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"csprUitfcm\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ukl2VjTe0r\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zt-T0Q-ZjJ\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"cY6Z9RaqKC\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"84wus2KLTY\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EPiXOEdYiS\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"W2FfSt2a9O\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xUXJtRKspw\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mqaHsByVe-\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Sc6qTnuvaa\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bGYALfFSmb\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"s8xhNTl1O4\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SGiRU4OQfz\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ECeS84Wpal\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7uBjE7u4wx\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"CVvcA_1Onp\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"KIMw6UsIOX\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tGyYvz4hUM\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Mj-twWWX_H\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xhgf3Qs1BU\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ivbr7AJFPr\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"j-drAJV4vx\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pgdQsdDGXJ\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Rl64BEmO32\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BFfaNWx8tP\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"j65oxJmdxW\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IkyQEfM5o1\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"vt1kRSU-3Q\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"fLOFil49cB\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6AmrsPCEZE\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4SfaUF3pa-\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"es9xFPqsPP\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AT0Maq4jRW\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Z3Nk0XxRtw\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nuLeClRAfr\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"d3erM8vCmg\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qZMH6SA0NF\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ou7Tg4tsul\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oOT-HeMqYw\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"LE1liYUcPM\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"aIA3APflRU\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YpH6dBdC6n\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7Ab0RRGvss\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sCeMTG4Ti9\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OkBjPKJkef\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"G4sdINGZMb\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Z1hztW4J2G\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7-vnpQ_Q9Z\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NzV_3ww4C0\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yOXNQdx9lV\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Xbf0yIIcEx\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"speaHNU_UB\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"N-v9bkdl3_\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HGYAHph8kS\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pXnCewCptc\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"w9v3X5wR9T\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"L98H4aDQt5\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zw55nRp231\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SqdA46ywCR\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZRwsG8Pai-\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"U6R6kvm3eh\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CnqamGKvsd\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uci65Xwnmx\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"jIPv85jnBa\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"U6syPLTNfO\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Wfzu2SvFha\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"i274J4GzSZ\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yUEnQM7emC\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eCqXtned5D\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gFhRnFfHgD\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Q7d68g0_Ja\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BunccvKjBb\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"joOieje9aK\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6nS0HmMzeu\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"p8k4pX5dcM\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"45CBxoRsWt\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"ScLfOF7pz0\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gHwMuv2-XR\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7lXMhJt9_l\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dKk1u6vnLH\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zZEY5mlsMH\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9OXpMlOdC5\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SIGHGg8GaS\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wDeS78iQub\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7IoK2mnaoO\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QzapcMdksW\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LDKUH1WEtP\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"iJesf-txI2\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"-i_0h37-J0\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9tHaCfpl5_\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-BVwHsOqsR\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vrN5Zfl6xl\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nwFw5yeKrq\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JWYt2QrVPg\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jqU1bGoM6L\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"udteG0Upla\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ILObEAv2SL\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KomRU7A9m7\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"i6NXmPPgFE\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"txl7bJEWyk\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"d-7jCxlYjN\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"U4MNM6QhaC\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dQV_RlFXcm\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-tC3_IsI5q\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wPvnyarrX1\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Owg3bI08rt\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aqRyrQBsiD\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"X1l2sRVGzI\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"q-fnfawWhR\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"30ejeCRPcv\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_KO_FL1TSX\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"9-cU_xGlDy\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"cBXjFTqdl2\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7SdVP6NNBV\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8PcEZhDYxk\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"j8zaEZdUeS\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gHpfCx9J5V\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"s0yQOLhejG\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eyQxYvpp2T\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kBLAch-JqJ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bML3mqjcGN\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fxeutpjexJ\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vvw7jkoeVo\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"UoX5Xw3rIW\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"xjI4-JXoHb\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_WAR7yTqlH\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2la5WoJAnv\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DIL1m_yj61\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rSqyC5_B26\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ok7Rsd86z0\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"E4mGdtLePb\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uyH_oQAKIK\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8ko9Z3iCSr\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JNCDQRpktL\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FH-BWj0KiC\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"qIbGnahATi\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"n9zEfUL1-A\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GvsCuMOZpg\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"J5e24JWYdS\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BLWvJI9cdh\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"u5DPZ1cIu-\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1eKpEWT2MJ\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UCxs9_wD02\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"F33ZbDUOmy\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8NWwFr3h80\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"P_quyKHgDV\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tOoIB1wC_V\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"9LBebgCz0n\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"aAWVO_Vh1Q\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VR_StF9rAt\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TOyU3xgLb4\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IhIrP6Goeh\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rz10JUSJCF\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"K299HopsLg\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xDWBQk3Md2\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"l4mxQMtasu\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dpZjeIql8D\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kL0_hnaGAa\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JO3Mzz6ORI\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"dVwSI4uDaz\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"f2NNYXUFBz\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"goQ5p0qZ18\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Vwj-zRdexJ\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0BUP8Kli0y\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t0B19JSpUF\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1J9us67j3S\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pdUffo9lUL\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"i1Ilq3AyHz\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"et5TzcbV-Q\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vveFGry3K0\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kcFjbx4-o-\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"sYIZF1jNVg\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"0eRehaAXIr\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e2Wo5cxij7\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zZ1ijQ9qvY\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_377NdPzaR\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hF_jHTjSad\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kv5bvINuRD\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QP2oY11zBD\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sefjU9tSgv\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JpMNDsl5x4\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ylAKo9OhEh\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HIdr9_VnlB\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"Hoe3eJhFN-\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"2\\\",\\\"3\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"5KeyEQzIv7\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LSN2clK0Xt\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IDsoQuhGtF\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nWkBT9RdDO\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"q6_wdXx1qG\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MZ6xpbQ41_\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UfNW_KA3wF\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TluEqpg4h6\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EJGRJE-68h\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qZYkhg7DMI\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mzqUqSGbzb\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"lG6GEu-yee\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"y_8dUps156\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"U1b0ZzF4qK\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7kpc1L1mxZ\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VpbxWq_YAp\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DM16XGw5fk\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xU6Q8OIFP2\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JZf3Tb_5a3\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oID8QeQ7dB\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pCJDEKfWxg\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mwC90ZrXUr\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1r-ib6ftZs\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"c9EzX1gm7L\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"eHxJd0-_mf\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xHGayg2IWU\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8x7-0MbNZr\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XAI-fEfXlP\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hHxu009r57\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AnvywVXh8q\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DQt2XIXB6n\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bcidmlGDzU\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4VjBZyJ9jD\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0MXUP9VI5U\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KvVCCGv1S2\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"FcCxuHH282\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"NYEnDHPJAC\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"G-OaTA8Atj\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"h1b1ww0wCF\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pjFoeCm47l\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"v3o7vkVqn8\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Q0Lyjz4oSN\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kwSdtTQQnl\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rKRd2htXcu\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BwugrVniho\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9zdd5CZ4IJ\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZaGY11CSln\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"boS2IEC_aW\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Klx4zCJ6bl\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WY2nsduwnH\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xCCBHsNROR\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uQnaeyFcfp\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Fy-F8AGVET\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"w3jrNG24l6\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5-4aGarZBG\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"izpyeykyLC\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pVnTUfW7EJ\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TPx1nt6M6M\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Q2-pUxK8ok\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"1VecZbe7K1\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"iQ3x9fiLwk\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uv_OCRW7eH\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"F67NAuktiA\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1vu9RANDXG\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HK6dqneY7e\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vHgqu5qQMk\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XqqWfT9l2a\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"enQwjqoJss\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yWuTRq-ifl\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aF4oKuA1qv\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"W7BA6yZMvm\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"gEw3uxDlS4\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"qCElgUtkOF\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8hzhbn59-8\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uW6CWDFhAV\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4Jbm_5Tve8\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IIxy_u6hdi\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Cxa60P-u9o\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8NO--Gu7YT\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fIyOOOjukE\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kLSj5OGE7b\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UE5lno60vm\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Gdf_gMKXh6\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"ffTKwQutDy\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"SBOUtnJ3Gp\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OWIYJ4OJUD\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jZaheIjKYI\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VdIvGg55Hx\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nBj_SUneWM\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_slhyrKDM4\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Z9smDB7Q6j\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3W5F-7Hj5u\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6p9gIfU-Wo\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"A7kGVICR_4\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lOi3P2t7e7\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"asJFpsNC8m\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"HQ_fmG-JF_\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0jeMaaBl5N\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ReLPi_ib1f\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_6zsGDomRZ\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zM9NENFfks\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aimrcduxfL\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"J0xYnB2ws3\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"766jdSLoJ-\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bXeDGq9FoM\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LXlA4gEFSz\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3w0GZjYi2m\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"bUOMS1BD_t\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"TUYuJBGU7s\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Fop7s6evnX\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UJagJeMTU8\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9ZI9Bk7FhT\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2Mn2sJWsGa\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ytFdP85fd9\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"svkYp4Uq-x\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lJYQSvYiNI\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iw1v4mtssV\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"v-TERyfRNn\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"t1g4sNA1Zl\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"ePzI6woxo-\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"cdi4LVH1VX\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IDGvbBOAwD\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"u1IPQ_8SWm\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZJwBu9ihy4\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8sPjKv1sjq\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YTSnlbFsSo\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gbXz2Eaequ\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TsqAEr4bPb\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YQ--6qfzBb\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hcyjrksrkj\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"V0y5SfR2lr\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"64EqcdyKP3\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"GrzY_FChNv\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HBCarUCMEj\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"f92rvsIUrH\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rE7okIHZv_\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IduEcHbriK\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZCUUUjtDY3\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ih432sjVv5\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"R47gHMn_uR\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2Cior6HZ-K\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5sYVow1q3-\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xg8xJnLEIZ\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"PNyZeHnYsG\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"5BAq_59cj1\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LXQ0uTVWXz\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dGMhMyxYL1\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wE2yVDHQVm\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SPnzCsb9c3\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XcVlKeiE0v\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KepRDNvH6h\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xJvxQhkGC_\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hI28DKDV7V\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"x5C9hCkGI_\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"j_NUI26fV_\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"HG5veV1ltt\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"eOlwKoUueV\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8zpbpQjv0q\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bUABnOcUxq\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HugXvEoCyk\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"16QLU_WIfG\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"B0jEN0-VxF\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GRZ43jaiJG\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5Zmz-XstlK\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"I8Ps2s50j6\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AvDheQiHXK\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UclO5r9HKL\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"9C66GYzvIL\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"j6nMTPIPOh\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RpCtRorJdv\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"H6Kt7fm65y\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dkEyUPzwvs\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lmubqQhJhS\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZPDvcOKvr_\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uU_P1jhZ5R\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7j9q5TZewr\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NNCT8gh29n\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XwF4kVkTWG\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZvwtzcM2m4\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"fHT7on9IzM\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"elzCrv4eVU\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hTfIlmCg4-\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"omD9fyUr4j\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"O6bPmJkeX4\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kV1yS6Xy1Q\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nRaAInJ6eh\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"W0FqmHmJoV\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gemvuFhKnC\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_9ZgYjW9o1\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xCVNnaG1FZ\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Bk9ivVwClp\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"lvtuJe8lQ4\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"0\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"GHoXHJlwQU\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zqCog87VMs\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qeofkO9ecn\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2hPiu0jjq9\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EKJzXZHHaE\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"S5O31IiP8i\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8s-y17vMop\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"twMFGVT0fZ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VAZaQhsE-C\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DwP4U3zT9q\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"k6YeGsk9pl\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"AdzOksqBUt\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"vDx664VVO_\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IZAuJpmz_R\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"k7RWTfwAgP\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"J_Yo1vQCCW\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pZx-Kc650k\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Iop1a4qVEu\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TwaCzGO2BX\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qYtUIx2_TF\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"j_9EWXUM36\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sGj7hLfiuK\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7tSJyiJdLh\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"tEUkx7cDFm\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Oo5vgP_bu2\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VewHjxmXDz\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VgljSOsryR\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-vv43yrQ21\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Vp4hZsf_9S\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"liAVhOdFiD\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4JVmggPh_g\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Xgui35w03R\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yQNgkAGMUu\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Oq_Snx_qGs\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fSdXpPOanj\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"sbGll3zlG6\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"1r1N7elwpp\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"viCkz8ibYW\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5VUM5zrlJl\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"su7cqqgiav\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EoENDMD4DQ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZQZ-mcrQfP\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tfJG2uL18i\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"p-NYVaoBL4\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yGTU7bzTau\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"o31sNEK-Dm\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"D_lG0y5QJy\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"mxY4yf7WPz\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"mQtxIaM02k\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KdPflsiBit\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3ND91udZbE\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dLRryukJF8\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uieW4vEqMa\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XomhL5nHcp\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bTOwQVzydT\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gqDPqb9WNV\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ArZwjka2is\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jnPxH5m0m6\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IHfNMV0mdU\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"0wdK9VNkgm\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"1tpRoP5trX\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sZbnpJRDpY\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iaOi2r6yfJ\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JDVP8bFeGT\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ApO2ckELvL\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"R9cSoM9df1\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Y5tuhvBc-E\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RZTGADVfph\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JrMG52G8Fm\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2uUp2ZmvAf\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9pJhSPoc9M\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"9ZfswCroUG\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"PrjDvT6LhV\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IyXjM6a8Bp\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZHdHqsA0KI\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FslzlxrT27\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fDZTZouwce\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uttjlgPiVO\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OEJCTRwi8u\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Q7dVH9kyw_\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JUoV24lIlr\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WwQigwnRXm\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZUN8RzVAaC\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"kt5xd6vshn\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"jciFWS6qA7\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_fvF8UP43e\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iGfJ8IvxX7\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YE7mIZt4rf\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tLaElo9pJS\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Qq_RIx4wQW\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"N5kFs3hyv-\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0e2j9xw8Yu\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"u0FBlhCqa3\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TyNbT030_v\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"faFB8Zrw4j\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"RsRiAADEU0\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"ApGZdFrREs\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"epjzdSLb3Z\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uBphTAalJN\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zrGY-tlpOG\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"g3eyGogGRj\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bqK8oYCcvv\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"o4RhxerMbb\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6eqNst70XR\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BIk_paXMUp\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"F1mGgeI9QR\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DDCxWKBMfV\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"_n2iPhbWXP\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"CD21Zs6slr\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SQMSU6knma\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hFsSR0s7eD\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sRBovQ3ge9\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"c-82BgHQRd\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9bgHKrpi-R\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gt0JZW1jzo\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sYeBzOUkTv\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VoPeD2lOYw\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DPoUHGfQGj\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nQkMnfyDcm\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"3t_buM40JO\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"08MaaeQKDu\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"acpWzBYH5x\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3aBj2XIWeD\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"c-2A13xEL9\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4ggZis9OIY\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ys9677gIMt\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"akmsabef5H\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"482m7BcM56\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8AMTlllkgK\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EgbzD84elc\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Fl09Iglo59\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"YUk4RLajsN\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"6rsb3AAglo\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YTYSJFyQB6\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"85I6AiGjnl\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LELyARnt8K\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1Xv0QczkKf\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ow-Bq9ft3C\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_TSPoYTjAS\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CqYNY35_FN\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"nDnLtqw5Lt\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"i4dzyCgTmc\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZiVaCqH0OR\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"T-p6GdnT_0\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"9uzf-ubmE4\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"v6k0vWK8qh\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LGyEu7O4Jh\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mXnIIUJtw9\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AP2S2mLq3o\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ox6-dKtm7_\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2YwSE7QzS2\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"E5ZkwY-EBH\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wsz10h22k6\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"a7Av4yjL1I\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"x_5ifhKrvk\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"otohb4R_Gu\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"f2SNIJziIJ\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eTM5g7WArY\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-YZXmgux_8\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vUDKxSH0Uh\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dwg0HwTa2U\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VX-vN05rW-\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UbRtO1kpgg\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xLyHMPJWxE\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RzYqHoeLxB\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"r4JFFBPnzb\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0R0vK4I897\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"mzSR8WeEuG\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"hrVbdkPOHH\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"26DVnDYMW1\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aFyUod9iNx\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dRyzJr8GWT\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-LCC1IXiBQ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MA6Qfup5kA\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"73QWWQJ1sH\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2Z21Us-aMq\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Q0x3hAmqQs\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WuEnLqnSc_\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uOn8cfGF5x\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"dS4ZdfREl1\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"XCmdYqACUg\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lxxiaOY6TB\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1dXE3urnKl\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dMKeIFNTYD\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XAGlkihB_q\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dLz0YpHVXk\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"b83TaO_cmd\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wMyJ6YJMjY\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6VWRJ-oEMU\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0lE1zItTnW\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5D4_C16bQ3\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"nK94Z_4YvK\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"1\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Gwhz-fgTh5\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cTG5WOboTc\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qd9pRW3CoJ\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OtZRxrKCrd\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yKLMmQBdD2\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4azu3Z4_as\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BMfTTO81sy\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BwytI76Jry\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UOabK9lpDz\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2WJS_MAlNd\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vkGYVCme5G\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"hR2k_74-Sp\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"JBqwEmxwff\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_Xrkc1p7YB\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JncxWkZWE1\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2YqaC_Q5K4\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"iyEeog-6bm\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"46att1N8ba\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bQ-tCpVy9O\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9WzJdWsxU8\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Rc63-vS8lQ\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bmjOA7vAEl\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sWieeCCeJi\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"yFzjnRCeX7\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"XC3tFA2IIX\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"N9biwZbn7-\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"w2R5-21uNY\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"s50XHMCf7X\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_JIX8XYSVp\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"knPjtbaLc_\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eUF0C6pC9N\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UwWulmW1AV\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4XMbZS2Jp8\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9Y76STOXPa\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gzlvbbAQRC\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"EIr44OhrVH\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Pm4Pq5RMd-\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3YwTDzT--l\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AnnrG0e8wo\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RPfDIKs7U5\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NqkzJ_38LG\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7Y-phajO3j\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bRxb4wJGNp\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CFWVxlIWwS\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2opCx_oMUJ\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4cnCLbcRRl\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yDYE6JdYvw\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"SEmxqvKT3u\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"0S_mIKo1XO\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JUsqkSkI1A\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eNVDvI_-0C\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zaK2scE2lM\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"X-tH5EDP4b\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WnMDcsdeU1\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KtN5tt5peB\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OF6dzkB1iv\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"giWfcz0dwr\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Cu8bxwSO-D\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Fw0xh265Ns\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"Y6pknv8K6Q\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"HDOzpwVY_k\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8o9e2e-jYo\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"irmLqbiEqH\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_dWZh9jX-8\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cnO6oerOFN\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4Q_450NxjF\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8UbN2-B5-l\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"v1zg1uu5gJ\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2wSg_LU1b6\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"c5DUYYvT1q\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1O3FcB-yoB\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"xSUofmIQrV\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"dAWTw44o--\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zjDZCBdQqx\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NU091tsId4\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HsOHJNK0H7\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6K5_F_8sMM\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UiEHZRLo11\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"33dwMoQg7R\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qKwz-NQsny\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"op8G09ES2n\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sWNF08EYjq\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vFhOL2cZ2p\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"BAFw7IMw0C\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"tzytqiBAnv\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EG_-q2e1TM\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rdqqCNWwBd\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"03avAU6jcK\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aWfaFz4rQo\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DSA4WmgT__\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UtVOwaanzh\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"o2DcvG2U_F\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"REByCESsyX\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7JTb2LhugE\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BixrlmwOCa\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"eyDbYsrHDb\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Me23TaNxVs\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3KQdCFkMQu\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Hq1BzZ0CBt\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-ubgXFa_A2\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"o-BDJn7mx_\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"53Wdxfj2tv\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QQ3uXzLk71\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gZMM5OFsh-\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Wjdyqti7Bm\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Cn-3jMGs-p\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hf5S2Fdl4C\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"-mHMjO5hAp\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"xVlOCxW7uO\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BLajWumj82\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qEdvq9OMjW\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fC30YIY5yi\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QmyzKStAH0\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Z_s45kXlt7\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vL-6kk-IbB\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KhTZiZJgnT\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RX9DS3jy-X\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"B9Qlt2e0im\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MViDkQAUry\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"QnXDXeDz4l\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"vJpSUiYwL3\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"opFgFQuMfa\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aMQHoziqWs\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sWWF0xybHc\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ta5BhSUyuv\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XZTuemCP5T\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fpXzQf9r8j\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"C1a6n0c1GK\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_EqVcwuxdq\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"dNZ7en56am\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wW5ozztdTS\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"BioQsePmP4\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"kpUw5Tthj7\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Nj6pDQ2t4i\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AMLUZhNZtZ\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2c9ZDJpimI\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"odwgrYk1ys\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_eQngJw__Z\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"euOp-Ahmu9\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"J4a6p7MqoM\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gQvMONejOZ\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-sWC-A0uPJ\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LvoIjgNdEU\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"tRzDHMxiVt\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"5amidoV0PV\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5_ELn8mDK2\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RhdOuZR0oS\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"3pQlRUPbfw\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cuwK7bgLjw\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VQ3AkWmGiR\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ffTuSM8lv0\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aM35yIFux9\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LfD_cQfB_V\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SPUX6as-Gr\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ZpRnDT29Dt\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"YiPg9F4Q3e\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"M1xfZiR6Vk\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xFtNp6mAd3\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"un033dmb7g\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NuTc2rvjG-\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ztbW299W__\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lznh3gWCx5\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"cYHhiL4emK\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6Dg56sHBfO\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eWfG0YTx2L\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"M5KrveOzrh\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"V4AtKQqwef\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"tc6DrF5IVI\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"4rLeX7jrBw\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"31u_6xp8td\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gU3X5ilrke\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uZbnnXCBYN\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wBeGtHpN-d\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PuPK4XPZiq\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"OGNJ2ObVE8\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"YRuFyESRC9\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"F4BY8I_kFb\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"sgvu26Im7p\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"H8jvc7DZza\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"TKXpwbh5iu\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"69X0ToKhOa\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FWCz6M2IWY\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vF5F7V4p5j\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4fioc-WSMu\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QGdzFaik9n\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ekzjZIaeoO\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VY-d7y_jPh\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JNpU440r3h\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PDXcF37Gq8\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zYAU6Jl4wA\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uKvJDqMBT1\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"h_BczOsvxK\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"2\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"aSydl1cOAy\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ojGWQcj3Wa\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"maw8ILob1B\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Gv8o7GJk-F\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"66vV0IH-lX\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"a06xPIrwjf\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"17EqZyga8H\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_dBJkpNjiL\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bZfzrLMbhD\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"eOkeyHgFXI\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"9B1R2UbrCR\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"RpNy2eP1_l\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"0\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"LV7jLRnVmm\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"gckltZqWEc\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"bLqc9HWrPE\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jm8ivcYeuA\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qD4UvSR-e3\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"IDoEFFOlpo\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"2pCPI5MFCj\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"XBnd5do78e\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Xsn5Laib-N\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"COomnFFoJo\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Wl3EwkLb1B\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"_y9x5fE6Qx\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"0\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"P_7cXLn5iT\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TBZwPeA4Ej\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xAW8xnODmb\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qkTg9eq_W5\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5tZHeq0DxM\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aOG_u4dACb\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"03Npmw3fsK\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"80VY2VyiAg\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UJBJMHHsl0\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SJYlqW7Hrq\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"S_0lrdwXHL\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"7AVwpr477T\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"0\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"ydOb1XAEeS\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mGupPvRIB_\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"7Wvy8B7Dpj\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AzC_Lm4FbP\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"n-cs4jjHGx\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"omrYbzu7EE\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FC7qjFHY-U\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hZkTgfyw1K\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4uyRKBIvU1\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jOpQkj8eQO\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wn_6L1UL70\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"vrxyf2Rnrn\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"0\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"junuXfhbMC\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UVNnhTs6Fz\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"26HlIgS2SI\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Glw-Ofkrt-\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ywl0QxS7U0\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"e3gj-EWcwy\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"_5TKhK5eKb\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qzuXkgeerL\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oHM5gaLhFw\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zShvEM2Vif\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"v25M6nSAta\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"uKpMxq-3_g\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"1\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"RjovLhRP0g\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fm41tCXyxc\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"StnlLQBHIh\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jTW23XVaiF\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"hfjQ-w8KeJ\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BllBBm65Xw\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"zKYpAS9sBn\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BBogJJ335-\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"KM4dPuvXGp\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qwqY2lfiCu\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8wXJH5IuEz\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"VtZzeHgeLk\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"1\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"pla8A--Vdz\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"V9qT2zD2wb\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"N87bgWbEox\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PnKa91o_mB\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AnUSi6AJmn\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"LFHPWvgrnv\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PyT2WkSvIq\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wJFNzRlWC1\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"-Fp5km95xU\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4xbq1S98AV\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lT4JA-im30\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"vnSfOIIxk4\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"1\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"aWd0GPz9rY\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ba3Oz3o2l9\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WKY4-iIbb5\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8Sap62wgwT\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"HP3AfODOlh\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UPQ0uxuhwG\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"C-IabJkjhh\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"QGfVmjHXns\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WIHF1YP63z\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ulsr2XaOuB\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RbUAy6HAOL\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"eOJDoYWL7t\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"1\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"EQyZkpgOJz\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ivcsn9Dnpv\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6FKFcRLeEG\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UnfgCsASVP\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CszBVH3Fz4\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Eit0-Y_QoT\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"CoJW4Nvg0r\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BstSX0gVj0\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fY9Toc5_Od\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"FtLBCoFUYa\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fbuYvajN-j\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"3mejJLeecU\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"2\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"fZwTZg1a3C\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"aH8rbjLEiW\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"TlcNHpzZr5\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Dh4maofZQn\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yfN49CAM_5\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Y1XznEKW79\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"4XFlqf8QNM\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BJGLP9tVEx\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wVaQkwNe4g\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ATVD-prKD3\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"fkx3dMHZiO\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"ZfMJCIm7n4\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"2\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"um8bjNthcJ\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"A_LKXdT1k6\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Ruoybo62_v\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5PdXtTOFEH\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"1gGUvC2M3K\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"k5D9RF6pAm\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"amdLNV9OLO\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"S1mcjC0oPN\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"exKJWNs7__\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VkXWF_xCI_\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"yjDjqfzTWG\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"mi8q9ArPTT\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"2\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"RUCuJFdSDI\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"r-IHkwCiAD\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"6_rLmkQgwv\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"GBOAyQuysY\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"RhVL29p6FB\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"SPfqiDEUGK\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BvBl3-t2d4\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"E5BACbNRAa\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"P-VOBtvO-Q\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"MkoYgNJzYN\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AYLl193_UY\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"CdRB6HAD9T\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"2\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"uA9KH9Tuyj\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"x_RPMg1sNQ\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BhPhkgCaPN\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UcDrJe_Nd8\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"lBwpfsYeTL\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JV4gQPYHmP\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tv-fLTxgUb\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"oKXheIWmXc\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"52bx-WF9QH\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PCPL6zSJjr\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"rsEdOlhFGp\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"t4ZcBnq4dz\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"3\\\",\\\"0\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"5K6XJNYKWt\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PbIewWk9tf\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"UmbSzYQ8IL\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NzPxb5-sw4\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"keRWfzQbhq\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"f-O_iW4IMf\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"5cjG4YqMfA\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"WN6_o0DfNs\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"vuRriMqU0M\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qH2GlYDRjh\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"W6SFsddx-F\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"OWGxFx9E8c\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"3\\\",\\\"1\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"gyHnltpwVS\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"18ash7pNeJ\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ys8hRqfvZA\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"epch2lmWUb\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"qJwlwMwbiO\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"h7L2sNi2gt\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"PCt9uGiCqJ\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"BKcnJEUND9\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"R28DUDYzV8\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"ir1v-7IRtb\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"tLuSt8HcqK\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"MCv8ncHZWq\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"3\\\",\\\"2\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"k_3mpLJVAM\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"V7X3xz7-jQ\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xYaoH5g399\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"uaaiW2Md3M\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"r6p5n57_jS\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"EgP_YvjxiW\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"xuH98xbh26\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"NweFn976N0\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Msislycyjk\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JF0OPxSe0d\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8L8WTbNmuA\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"fegTxFOH2u\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Obj:[\\\"3\\\",\\\"3\\\",\\\"3\\\",\\\"3\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"JlJcmhiubV\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"DiYA0jfYp1\",\n                    \"position\": 1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"wfuyIc7hui\",\n                    \"position\": 1.733,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"l2uDy9QM_T\",\n                    \"position\": 2.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"8KjLQtKZhG\",\n                    \"position\": 3.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"G3yrQvdk5O\",\n                    \"position\": 4.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"0FWs19B2SI\",\n                    \"position\": 4.967,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"AS6VNQQps8\",\n                    \"position\": 6.367,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"Qq9WQkN9qu\",\n                    \"position\": 7.4,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"43ZMFz2Bx7\",\n                    \"position\": 8.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"T_q1ih0DEx\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              }\n            },\n            \"trackIdByPropPath\": {\n              \"[\\\"0\\\",\\\"0\\\",\\\"0\\\",\\\"0\\\"]\": \"CGrOP0P1pj\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"0\\\",\\\"1\\\"]\": \"bYDBIcFOB6\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"0\\\",\\\"2\\\"]\": \"k3MBk9RTij\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"0\\\",\\\"3\\\"]\": \"vgZnW2JjRc\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"1\\\",\\\"0\\\"]\": \"7rZf-o82s4\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"1\\\",\\\"1\\\"]\": \"CNa_lk2VPZ\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"1\\\",\\\"2\\\"]\": \"jkvS_EkKG5\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"1\\\",\\\"3\\\"]\": \"19Fwi28MH1\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"2\\\",\\\"0\\\"]\": \"WFz8R2KfHP\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"2\\\",\\\"1\\\"]\": \"kiizLK2qop\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"2\\\",\\\"2\\\"]\": \"r3u2xPKfpI\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"2\\\",\\\"3\\\"]\": \"yiK4Bj9y-1\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"3\\\",\\\"0\\\"]\": \"pvQX_GJjgT\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"3\\\",\\\"1\\\"]\": \"G8J6BdGDLG\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"3\\\",\\\"2\\\"]\": \"IYOGPqyogg\",\n              \"[\\\"0\\\",\\\"0\\\",\\\"3\\\",\\\"3\\\"]\": \"2DTXFjbbT5\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"0\\\",\\\"0\\\"]\": \"CDpYVpKaKS\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"0\\\",\\\"1\\\"]\": \"RggkFVBAKD\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"0\\\",\\\"2\\\"]\": \"i6xuats2B2\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"0\\\",\\\"3\\\"]\": \"nv6jrvAiGS\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"1\\\",\\\"0\\\"]\": \"D-volqZhoG\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"1\\\",\\\"1\\\"]\": \"4nQ8gbHGi2\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"1\\\",\\\"2\\\"]\": \"gsgjUc6CmT\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"1\\\",\\\"3\\\"]\": \"IxBGi0XYYB\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"0\\\"]\": \"069otj14Ze\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"1\\\"]\": \"4coArzoxNP\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"2\\\"]\": \"1oyt_pr48E\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\"]\": \"qwXL0W07b8\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"3\\\",\\\"0\\\"]\": \"yT1c983LeG\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"3\\\",\\\"1\\\"]\": \"qNLTAP8-LA\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"3\\\",\\\"2\\\"]\": \"D7NdrPiR-g\",\n              \"[\\\"0\\\",\\\"1\\\",\\\"3\\\",\\\"3\\\"]\": \"B8fPUUpkVs\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"0\\\",\\\"0\\\"]\": \"CfYMg0-jmG\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"0\\\",\\\"1\\\"]\": \"0Xx2HM9KEG\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"0\\\",\\\"2\\\"]\": \"hWImmVZnTB\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"0\\\",\\\"3\\\"]\": \"6gx4FwFbrz\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"1\\\",\\\"0\\\"]\": \"qBUAkmVj94\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"1\\\",\\\"1\\\"]\": \"DfU2p3tTpC\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"1\\\",\\\"2\\\"]\": \"EvbGthTWgJ\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"1\\\",\\\"3\\\"]\": \"f1EBYqvFOj\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"2\\\",\\\"0\\\"]\": \"898WNeChmJ\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"2\\\",\\\"1\\\"]\": \"JkbLWpTzu9\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"2\\\",\\\"2\\\"]\": \"2T6QhhNzYs\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"2\\\",\\\"3\\\"]\": \"qbPBwt2RLW\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"3\\\",\\\"0\\\"]\": \"1fw1H4c5jT\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"3\\\",\\\"1\\\"]\": \"SKTzY8Q-rp\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"3\\\",\\\"2\\\"]\": \"F3Pw7XQyxq\",\n              \"[\\\"0\\\",\\\"2\\\",\\\"3\\\",\\\"3\\\"]\": \"yjenJb9vUa\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"0\\\",\\\"0\\\"]\": \"ouy--JKUIm\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"0\\\",\\\"1\\\"]\": \"7RhetHWp-b\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"0\\\",\\\"2\\\"]\": \"Q-qfrr9Ft1\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"0\\\",\\\"3\\\"]\": \"5AOPRk-8-j\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"1\\\",\\\"0\\\"]\": \"NBErtbfFKq\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"1\\\",\\\"1\\\"]\": \"1MHLOKnEtV\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"1\\\",\\\"2\\\"]\": \"S1rjxXfC1m\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"1\\\",\\\"3\\\"]\": \"z_W8fSZPuD\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"2\\\",\\\"0\\\"]\": \"OP1H60Ub46\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"2\\\",\\\"1\\\"]\": \"Ds4TWLz43a\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"2\\\",\\\"2\\\"]\": \"zsngssqZiX\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"2\\\",\\\"3\\\"]\": \"jMsr5iS1aO\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"3\\\",\\\"0\\\"]\": \"poee1huwk_\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"3\\\",\\\"1\\\"]\": \"a2BC1oJP2k\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"3\\\",\\\"2\\\"]\": \"vtMlX0BLdr\",\n              \"[\\\"0\\\",\\\"3\\\",\\\"3\\\",\\\"3\\\"]\": \"DnCwNCdetq\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"0\\\",\\\"0\\\"]\": \"GHvPzcnwLf\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"0\\\",\\\"1\\\"]\": \"8OjXS-jo17\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"0\\\",\\\"2\\\"]\": \"soEWPbCqhx\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"0\\\",\\\"3\\\"]\": \"e18xOsaZw9\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"1\\\",\\\"0\\\"]\": \"hbp7mhB5Ic\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"1\\\",\\\"1\\\"]\": \"VknWvhvLh6\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"1\\\",\\\"2\\\"]\": \"lhmqA3FP83\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"1\\\",\\\"3\\\"]\": \"Bgo1S314Gj\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"2\\\",\\\"0\\\"]\": \"mG8SVKyYo-\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"2\\\",\\\"1\\\"]\": \"zzgqrkT7Be\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"2\\\",\\\"2\\\"]\": \"PuCAkO05QG\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"2\\\",\\\"3\\\"]\": \"GTK8oerHoV\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"3\\\",\\\"0\\\"]\": \"Af9DopTJKg\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"3\\\",\\\"1\\\"]\": \"mmaq_1yRn1\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"3\\\",\\\"2\\\"]\": \"vyNJMwyb0V\",\n              \"[\\\"1\\\",\\\"0\\\",\\\"3\\\",\\\"3\\\"]\": \"iu4hgKSJvS\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"0\\\",\\\"0\\\"]\": \"_UzWgp78E6\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"0\\\",\\\"1\\\"]\": \"kqlHfhT6rQ\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"0\\\",\\\"2\\\"]\": \"WUdZj1jopJ\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"0\\\",\\\"3\\\"]\": \"dgDsy8ybmt\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"1\\\",\\\"0\\\"]\": \"Y68BstNVRo\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"1\\\",\\\"1\\\"]\": \"LvhOVcYds7\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"1\\\",\\\"2\\\"]\": \"MTBPlevH3A\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"1\\\",\\\"3\\\"]\": \"cl4A0PThGV\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"2\\\",\\\"0\\\"]\": \"ydlfkc2I8t\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"2\\\",\\\"1\\\"]\": \"wV5kU09468\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"2\\\",\\\"2\\\"]\": \"ChAAEvWCYj\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\"]\": \"bPODTJdASq\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"3\\\",\\\"0\\\"]\": \"s5AKmBkB-J\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"3\\\",\\\"1\\\"]\": \"1pb7rVAcJR\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"3\\\",\\\"2\\\"]\": \"x6_SluFmrJ\",\n              \"[\\\"1\\\",\\\"1\\\",\\\"3\\\",\\\"3\\\"]\": \"QKIDi8Zcfz\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"0\\\",\\\"0\\\"]\": \"gQfpoyCy4Y\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"0\\\",\\\"1\\\"]\": \"acTLffT0zE\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"0\\\",\\\"2\\\"]\": \"erFQvCrefE\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"0\\\",\\\"3\\\"]\": \"tiM9iKNfzr\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"1\\\",\\\"0\\\"]\": \"Fp8yX3ntpW\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"1\\\",\\\"1\\\"]\": \"64JIUKZLZU\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"1\\\",\\\"2\\\"]\": \"UaEgJpmSle\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"1\\\",\\\"3\\\"]\": \"6dV1-2TdY3\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"2\\\",\\\"0\\\"]\": \"JqQZNLl0ng\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"2\\\",\\\"1\\\"]\": \"wQtVD1qBhh\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"2\\\",\\\"2\\\"]\": \"iV0UwnP7Or\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"2\\\",\\\"3\\\"]\": \"vPf9wr8MUi\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"0\\\"]\": \"M0VJR7WUAy\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"1\\\"]\": \"7mdHS6m5Ue\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"2\\\"]\": \"rs9SyF7VTL\",\n              \"[\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"3\\\"]\": \"eyvMeiNsQL\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"0\\\",\\\"0\\\"]\": \"eJtv5euPIS\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"0\\\",\\\"1\\\"]\": \"HvUc-veJim\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"0\\\",\\\"2\\\"]\": \"MFPevtmrXR\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"0\\\",\\\"3\\\"]\": \"r9tJGhEZGc\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"1\\\",\\\"0\\\"]\": \"WR79SeH5VD\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"1\\\",\\\"1\\\"]\": \"iepOQQpV0Y\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"1\\\",\\\"2\\\"]\": \"XYgeE0MFQY\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"1\\\",\\\"3\\\"]\": \"Yn5FxGPdSR\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"2\\\",\\\"0\\\"]\": \"lV3_J_2VR5\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"2\\\",\\\"1\\\"]\": \"yoVipXbDAq\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"2\\\",\\\"2\\\"]\": \"vVCPOdCJaS\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"2\\\",\\\"3\\\"]\": \"8utq_jfLxL\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"3\\\",\\\"0\\\"]\": \"EEe7rMiQdR\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"3\\\",\\\"1\\\"]\": \"KkBHr_c5YW\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"3\\\",\\\"2\\\"]\": \"cp5aLYQsvI\",\n              \"[\\\"1\\\",\\\"3\\\",\\\"3\\\",\\\"3\\\"]\": \"pwzO_92rPH\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"0\\\",\\\"0\\\"]\": \"hzQUqWEw9A\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"0\\\",\\\"1\\\"]\": \"gfbxBggrsu\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"0\\\",\\\"2\\\"]\": \"VV3HPEunJt\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"0\\\",\\\"3\\\"]\": \"YE59Ds2ofp\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"1\\\",\\\"0\\\"]\": \"2J6WimTtl9\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"1\\\",\\\"1\\\"]\": \"RCL1c523Su\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"1\\\",\\\"2\\\"]\": \"KQkVYPVx7H\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"1\\\",\\\"3\\\"]\": \"_2n1fz4_v5\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"2\\\",\\\"0\\\"]\": \"p5LD5eF1X_\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"2\\\",\\\"1\\\"]\": \"zcO9j5IyUO\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"2\\\",\\\"2\\\"]\": \"EXTj_PDUmR\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"2\\\",\\\"3\\\"]\": \"cuDei_FIul\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"3\\\",\\\"0\\\"]\": \"9oGdKihxfi\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"3\\\",\\\"1\\\"]\": \"1k36somDVZ\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"3\\\",\\\"2\\\"]\": \"SnsuB88W61\",\n              \"[\\\"2\\\",\\\"0\\\",\\\"3\\\",\\\"3\\\"]\": \"NZtQsPG5CG\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"0\\\",\\\"0\\\"]\": \"-LNVw4qB_T\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"0\\\",\\\"1\\\"]\": \"r1SBGMD0Er\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"0\\\",\\\"2\\\"]\": \"jxiiLrVhnm\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"0\\\",\\\"3\\\"]\": \"RWgqMpySBb\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"1\\\",\\\"0\\\"]\": \"5RFytUQjoa\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"1\\\",\\\"1\\\"]\": \"s772ZoJM8q\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"1\\\",\\\"2\\\"]\": \"hvFMPNIauK\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"1\\\",\\\"3\\\"]\": \"IiXIhTqQhl\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"2\\\",\\\"0\\\"]\": \"eLHXiZZdFx\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"2\\\",\\\"1\\\"]\": \"cGBymPyR7o\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"2\\\",\\\"2\\\"]\": \"ZbHu4OwRo1\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\"]\": \"3GZ5Fb9oUv\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"3\\\",\\\"0\\\"]\": \"StnB-jI_5U\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"3\\\",\\\"1\\\"]\": \"3AN1cBG4vZ\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"3\\\",\\\"2\\\"]\": \"_E2r043ISI\",\n              \"[\\\"2\\\",\\\"1\\\",\\\"3\\\",\\\"3\\\"]\": \"I0dZAcWWbc\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"0\\\",\\\"0\\\"]\": \"8TvDO5hRZg\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"0\\\",\\\"1\\\"]\": \"kCFd5IbLX7\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"0\\\",\\\"2\\\"]\": \"GJ2yigthL7\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"0\\\",\\\"3\\\"]\": \"aToZXuTKDq\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"1\\\",\\\"0\\\"]\": \"5lVy3z6SfM\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"1\\\",\\\"1\\\"]\": \"6gSbO0Edds\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"1\\\",\\\"2\\\"]\": \"fFbdlqESp8\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"1\\\",\\\"3\\\"]\": \"DhbkQcsnsa\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"2\\\",\\\"0\\\"]\": \"-4mk1ewxoT\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"2\\\",\\\"1\\\"]\": \"UT3mH6gBz3\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"2\\\",\\\"2\\\"]\": \"VsA7qYQW2e\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"2\\\",\\\"3\\\"]\": \"lnLZvLE5_g\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"3\\\",\\\"0\\\"]\": \"PFspXzxPPM\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"3\\\",\\\"1\\\"]\": \"4sLvBmE4uM\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"3\\\",\\\"2\\\"]\": \"rd2mAIinpJ\",\n              \"[\\\"2\\\",\\\"2\\\",\\\"3\\\",\\\"3\\\"]\": \"RbnMnQRSXe\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"0\\\",\\\"0\\\"]\": \"cY6Z9RaqKC\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"0\\\",\\\"1\\\"]\": \"CVvcA_1Onp\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"0\\\",\\\"2\\\"]\": \"vt1kRSU-3Q\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"0\\\",\\\"3\\\"]\": \"LE1liYUcPM\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"1\\\",\\\"0\\\"]\": \"speaHNU_UB\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"1\\\",\\\"1\\\"]\": \"jIPv85jnBa\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"1\\\",\\\"2\\\"]\": \"45CBxoRsWt\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"1\\\",\\\"3\\\"]\": \"iJesf-txI2\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"2\\\",\\\"0\\\"]\": \"txl7bJEWyk\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"2\\\",\\\"1\\\"]\": \"9-cU_xGlDy\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"2\\\",\\\"2\\\"]\": \"UoX5Xw3rIW\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"2\\\",\\\"3\\\"]\": \"qIbGnahATi\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"3\\\",\\\"0\\\"]\": \"9LBebgCz0n\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"3\\\",\\\"1\\\"]\": \"dVwSI4uDaz\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"3\\\",\\\"2\\\"]\": \"sYIZF1jNVg\",\n              \"[\\\"2\\\",\\\"3\\\",\\\"3\\\",\\\"3\\\"]\": \"Hoe3eJhFN-\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"0\\\",\\\"0\\\"]\": \"lG6GEu-yee\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"0\\\",\\\"1\\\"]\": \"c9EzX1gm7L\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"0\\\",\\\"2\\\"]\": \"FcCxuHH282\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"0\\\",\\\"3\\\"]\": \"boS2IEC_aW\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"1\\\",\\\"0\\\"]\": \"1VecZbe7K1\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"1\\\",\\\"1\\\"]\": \"gEw3uxDlS4\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"1\\\",\\\"2\\\"]\": \"ffTKwQutDy\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"1\\\",\\\"3\\\"]\": \"asJFpsNC8m\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"2\\\",\\\"0\\\"]\": \"bUOMS1BD_t\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"2\\\",\\\"1\\\"]\": \"ePzI6woxo-\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"2\\\",\\\"2\\\"]\": \"64EqcdyKP3\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"2\\\",\\\"3\\\"]\": \"PNyZeHnYsG\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"3\\\",\\\"0\\\"]\": \"HG5veV1ltt\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"3\\\",\\\"1\\\"]\": \"9C66GYzvIL\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"3\\\",\\\"2\\\"]\": \"fHT7on9IzM\",\n              \"[\\\"3\\\",\\\"0\\\",\\\"3\\\",\\\"3\\\"]\": \"lvtuJe8lQ4\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"0\\\",\\\"0\\\"]\": \"AdzOksqBUt\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"0\\\",\\\"1\\\"]\": \"tEUkx7cDFm\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"0\\\",\\\"2\\\"]\": \"sbGll3zlG6\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"0\\\",\\\"3\\\"]\": \"mxY4yf7WPz\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"1\\\",\\\"0\\\"]\": \"0wdK9VNkgm\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"1\\\",\\\"1\\\"]\": \"9ZfswCroUG\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"1\\\",\\\"2\\\"]\": \"kt5xd6vshn\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"1\\\",\\\"3\\\"]\": \"RsRiAADEU0\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"2\\\",\\\"0\\\"]\": \"_n2iPhbWXP\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"2\\\",\\\"1\\\"]\": \"3t_buM40JO\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"2\\\",\\\"2\\\"]\": \"YUk4RLajsN\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\"]\": \"T-p6GdnT_0\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"3\\\",\\\"0\\\"]\": \"otohb4R_Gu\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"3\\\",\\\"1\\\"]\": \"mzSR8WeEuG\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"3\\\",\\\"2\\\"]\": \"dS4ZdfREl1\",\n              \"[\\\"3\\\",\\\"1\\\",\\\"3\\\",\\\"3\\\"]\": \"nK94Z_4YvK\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"0\\\",\\\"0\\\"]\": \"hR2k_74-Sp\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"0\\\",\\\"1\\\"]\": \"yFzjnRCeX7\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"0\\\",\\\"2\\\"]\": \"EIr44OhrVH\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"0\\\",\\\"3\\\"]\": \"SEmxqvKT3u\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"1\\\",\\\"0\\\"]\": \"Y6pknv8K6Q\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"1\\\",\\\"1\\\"]\": \"xSUofmIQrV\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"1\\\",\\\"2\\\"]\": \"BAFw7IMw0C\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"1\\\",\\\"3\\\"]\": \"eyDbYsrHDb\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"2\\\",\\\"0\\\"]\": \"-mHMjO5hAp\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"2\\\",\\\"1\\\"]\": \"QnXDXeDz4l\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"2\\\",\\\"2\\\"]\": \"BioQsePmP4\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"2\\\",\\\"3\\\"]\": \"tRzDHMxiVt\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"3\\\",\\\"0\\\"]\": \"YiPg9F4Q3e\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"3\\\",\\\"1\\\"]\": \"tc6DrF5IVI\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"3\\\",\\\"2\\\"]\": \"TKXpwbh5iu\",\n              \"[\\\"3\\\",\\\"2\\\",\\\"3\\\",\\\"3\\\"]\": \"h_BczOsvxK\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"0\\\",\\\"0\\\"]\": \"RpNy2eP1_l\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"0\\\",\\\"1\\\"]\": \"_y9x5fE6Qx\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"0\\\",\\\"2\\\"]\": \"7AVwpr477T\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"0\\\",\\\"3\\\"]\": \"vrxyf2Rnrn\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"1\\\",\\\"0\\\"]\": \"uKpMxq-3_g\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"1\\\",\\\"1\\\"]\": \"VtZzeHgeLk\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"1\\\",\\\"2\\\"]\": \"vnSfOIIxk4\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"1\\\",\\\"3\\\"]\": \"eOJDoYWL7t\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"2\\\",\\\"0\\\"]\": \"3mejJLeecU\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"2\\\",\\\"1\\\"]\": \"ZfMJCIm7n4\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"2\\\",\\\"2\\\"]\": \"mi8q9ArPTT\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"2\\\",\\\"3\\\"]\": \"CdRB6HAD9T\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"3\\\",\\\"0\\\"]\": \"t4ZcBnq4dz\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"3\\\",\\\"1\\\"]\": \"OWGxFx9E8c\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"3\\\",\\\"2\\\"]\": \"MCv8ncHZWq\",\n              \"[\\\"3\\\",\\\"3\\\",\\\"3\\\",\\\"3\\\"]\": \"fegTxFOH2u\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitionVersion\": \"0.4.0\",\n  \"revisionHistory\": [\n    \"tqO0VRBRQhnFmXbd\"\n  ]\n}"
  },
  {
    "path": "packages/benchmarks/src/benchmarks-globals.d.ts",
    "content": "declare module '*.png' {\n  export default string\n}\n\ndeclare module '*.json' {\n  export default {}\n}\n\ndeclare module '*.glb' {\n  export default string\n}\n"
  },
  {
    "path": "packages/benchmarks/src/index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>Benchmarks – Theatre.js</title>\n    <style>\n      body {\n        margin: 0;\n        padding: 0;\n        height: 100%;\n        background-color: #1a1a1a;\n      }\n    </style>\n  </head>\n\n  <body>\n    <div id=\"root\"></div>\n\n    <script src=\"./index.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/benchmarks/src/index.tsx",
    "content": "// import theatre from '@theatre/core'\nimport {createRafDriver, getProject} from '@theatre/core'\nimport type {\n  UnknownShorthandCompoundProps,\n  ISheet,\n  ISheetObject,\n} from '@theatre/core'\n// @ts-ignore\nimport benchProject1State from './Bench project 1.theatre-project-state.json'\nimport {setCoreRafDriver} from '@theatre/core/coreTicker'\n\nconst driver = createRafDriver({name: 'BenchmarkRafDriver'})\n\nsetCoreRafDriver(driver)\n\n// theatre.init({studio: true, })\n\n/**\n * This test will create a project with `numberOfInstances` instances of the same sheet. Each instance\n * will have a single object, and that object will have a bunch of props (see `CONFIG.depthOfProps` and `CONFIG.leavePropsAtEachBranch`).\n * All of those props have been set to be sequenced in `./Bench project 1.theatre-project-state.json`.\n * The test will then play the sequence from the beginning to the end, split into `CONFIG.numberOfIterations` iterations.\n * We then measure the time it takes to play the sequence through.\n */\nasync function test1() {\n  const project = getProject('Bench project 1', {state: benchProject1State})\n\n  const CONFIG = {\n    numberOfInstances: 20,\n    depthOfProps: 4,\n    leavePropsAtEachBranch: 4,\n    sequenceLength: 10, // seconds\n    numberOfIterations: 20,\n  }\n\n  function getObjConf(\n    depth: number,\n    count: number,\n  ): UnknownShorthandCompoundProps | 0 {\n    if (depth === 0) {\n      return 0\n    }\n\n    return Object.fromEntries(\n      new Array(count)\n        .fill(0)\n        .map((_, i) => [String(i), getObjConf(depth - 1, count)]),\n    )\n  }\n\n  const rootConf = getObjConf(\n    CONFIG.depthOfProps,\n    CONFIG.leavePropsAtEachBranch,\n  ) as UnknownShorthandCompoundProps\n\n  const sheets: Array<ISheet> = []\n  const objects: Array<ISheetObject> = []\n\n  for (let i = 0; i < CONFIG.numberOfInstances; i++) {\n    const sheet = project.sheet(`Sheet`, `Instance ${i}`)\n    sheets.push(sheet)\n    const obj = sheet.object(`Obj`, rootConf)\n    objects.push(obj)\n  }\n\n  let onChangeEventsFired = 0\n\n  function subscribeToAllObjects() {\n    const startTime = performance.now()\n    for (const obj of objects) {\n      obj.onValuesChange((v) => {\n        onChangeEventsFired++\n      })\n    }\n    const endTime = performance.now()\n    console.log(\n      `Subscribing to ${objects.length} objects took ${endTime - startTime}ms`,\n    )\n  }\n\n  function iterateOnSequence() {\n    driver.tick(performance.now())\n    const startTime = performance.now()\n    for (let i = 1; i < CONFIG.numberOfIterations; i++) {\n      onChangeEventsFired = 0\n      const pos = (i / CONFIG.numberOfIterations) * CONFIG.sequenceLength\n      for (const sheet of sheets) {\n        sheet.sequence.position = pos\n      }\n      driver.tick(performance.now())\n      if (onChangeEventsFired !== objects.length) {\n        console.info(\n          `Expected ${objects.length} onChange events, got ${onChangeEventsFired}`,\n        )\n      }\n    }\n    const endTime = performance.now()\n    console.log(\n      `Scrubbing the sequence in ${CONFIG.numberOfIterations} iterations took ${\n        endTime - startTime\n      }ms`,\n    )\n  }\n\n  subscribeToAllObjects()\n  iterateOnSequence()\n}\n\nvoid test1().then(() => {\n  console.log('test1 done')\n})\n"
  },
  {
    "path": "packages/benchmarks/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \".\",\n    \"types\": [\"jest\", \"node\"],\n    \"emitDeclarationOnly\": false,\n    \"composite\": true,\n    \"resolveJsonModule\": true\n  },\n  \"references\": [\n    {\"path\": \"../core\"},\n    {\"path\": \"../studio\"},\n    {\"path\": \"../dataverse\"},\n    {\"path\": \"../r3f\"}\n  ],\n  \"include\": [\"./src/**/*\", \"./devEnv/**/*\"]\n}\n"
  },
  {
    "path": "packages/browser-bundles/.gitignore",
    "content": "/dist"
  },
  {
    "path": "packages/browser-bundles/LICENSE",
    "content": "This is a bundle of @theatre/core and @theatre/studio packages.\n\nSee their licenses in their repo: https://github.com/theatre-js/theatre"
  },
  {
    "path": "packages/browser-bundles/README.md",
    "content": "# Theatre.js browser bundles\n\nA custom build of Theatre.js that you can use via a `<script>` tag rather than using a bundler.\n\n## How to use\n\nThere are currently two builds:\n\n* `dist/core-and-studio.js`\n* `dist/core-only.min.js`\n\nAs the names imply, one includes both `@theatre/studio` and `@theatre/core`, while the other is a minified version of `@theatre/core`.\n\nExample:\n\n```html\n<script src=\"path/to/core-and-studio.js\"></script>\n<script>\n  // here, core is equal to `import * as core from '@theatre/core`\n  const core = Theatre.core\n  // here, studio is equal to `import studio from '@theatre/studio`.\n  // Note this would be undefined if you're using `core-only.min.js`\n  const studio = Theatre.studio\n\n  // only call this if you're using the core-and-studio.js bundle\n  studio.initialize()\n\n  const project = core.getProject(\"My project\")\n  const sheet = project.sheet(\"...\")\n  // and so on...\n</script>\n```"
  },
  {
    "path": "packages/browser-bundles/devEnv/build.ts",
    "content": "import * as path from 'path'\nimport * as esbuild from 'esbuild'\nimport {definedGlobals} from '../../core/devEnv/definedGlobals'\n\nfunction createBundles() {\n  const pathToPackage = path.join(__dirname, '../')\n  const esbuildConfig: Parameters<typeof esbuild.context>[0] = {\n    bundle: true,\n    sourcemap: true,\n    define: {\n      ...definedGlobals,\n      __IS_VISUAL_REGRESSION_TESTING: 'false',\n      'process.env.NODE_ENV': '\"production\"',\n    },\n    platform: 'browser',\n    supported: {\n      // 'unicode-escapes': false,\n      'template-literal': false,\n    },\n    loader: {\n      '.png': 'dataurl',\n      '.glb': 'dataurl',\n      '.gltf': 'dataurl',\n      '.svg': 'dataurl',\n    },\n    mainFields: ['browser', 'module', 'main'],\n    target: ['firefox57', 'chrome58'],\n    conditions: ['browser', 'node'],\n  }\n\n  void esbuild.build({\n    ...esbuildConfig,\n    entryPoints: [path.join(pathToPackage, 'src/core-and-studio.ts')],\n    outfile: path.join(pathToPackage, 'dist/core-and-studio.js'),\n    format: 'iife',\n    minifyIdentifiers: false,\n    minifySyntax: true,\n    minifyWhitespace: false,\n    treeShaking: true,\n  })\n\n  void esbuild.build({\n    ...esbuildConfig,\n    entryPoints: [path.join(pathToPackage, 'src/core-only.ts')],\n    outfile: path.join(pathToPackage, 'dist/core-only.min.js'),\n    minify: true,\n    format: 'iife',\n  })\n}\n\ncreateBundles()\n"
  },
  {
    "path": "packages/browser-bundles/devEnv/tsconfig.json",
    "content": "{\n  \n}"
  },
  {
    "path": "packages/browser-bundles/package.json",
    "content": "{\n  \"name\": \"@theatre/browser-bundles\",\n  \"version\": \"0.7.0\",\n  \"license\": \"SEE LICENSE IN LICENSE\",\n  \"author\": {\n    \"name\": \"Aria Minaei\",\n    \"email\": \"aria@theatrejs.com\",\n    \"url\": \"https://github.com/AriaMinaei\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/AriaMinaei/theatre\",\n    \"directory\": \"packages/browser-bundles\"\n  },\n  \"files\": [\n    \"dist/**/*\"\n  ],\n  \"scripts\": {\n    \"build\": \"yarn run build:js\",\n    \"build:js\": \"tsx ./devEnv/build.ts\",\n    \"prepublish\": \"node ../../devEnv/ensurePublishing.js\",\n    \"clean\": \"rm -rf ./dist && rm -f tsconfig.tsbuildinfo\"\n  },\n  \"devDependencies\": {\n    \"@theatre/core\": \"workspace:*\",\n    \"@theatre/studio\": \"workspace:*\",\n    \"esbuild\": \"^0.19.11\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"tsx\": \"4.7.0\",\n    \"typescript\": \"5.1.6\"\n  }\n}\n"
  },
  {
    "path": "packages/browser-bundles/src/core-and-studio.ts",
    "content": "import * as core from '@theatre/core'\nimport '@theatre/studio'\n\n// @ts-ignore\nwindow.Theatre = core\n"
  },
  {
    "path": "packages/browser-bundles/src/core-only.ts",
    "content": "import * as core from '@theatre/core'\n\n// @ts-ignore\nwindow.Theatre = core\n"
  },
  {
    "path": "packages/browser-bundles/test.html",
    "content": "<script src=\"./dist/core-and-studio.js\"></script>\n<script>\n  const {core} = Theatre\n  const studio = Theatre.studio\n  studio.initialize()\n\n  const project = core.getProject('My project')\n  const sheet = project.sheet('My sheet')\n  const obj = sheet.object('Box', {x: 0, y: 0})\n  console.log(obj.value.x)\n</script>\n"
  },
  {
    "path": "packages/browser-bundles/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \"src\",\n    \"types\": [\"jest\", \"node\"],\n    \"emitDeclarationOnly\": true,\n    \"target\": \"es6\",\n    \"composite\": true\n  },\n  \"include\": [\"./src/**/*\"]\n}\n"
  },
  {
    "path": "packages/core/.eslintrc.js",
    "content": "const path = require('path')\n\nmodule.exports = {\n  rules: {\n    'no-relative-imports': [\n      'warn',\n      {\n        aliases: [\n          {name: '@theatre/core', path: path.resolve(__dirname, './src')},\n        ],\n      },\n    ],\n  },\n}\n"
  },
  {
    "path": "packages/core/.gitignore",
    "content": "development.env.json\nproduction.env.json"
  },
  {
    "path": "packages/core/.npmignore",
    "content": "/node_modules\n/xeno\n/.vscode\n/src\n/devEnv\n*.log\n/.*\n/*.env.json\n/tsconfig.json\n/.temp"
  },
  {
    "path": "packages/core/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "packages/core/README.md",
    "content": "# Theatre.js - Core\n\nTheatre.js is an animation library for high-fidelity motion graphics. It is designed to help you express detailed animation, enabling you to create intricate movement, and convey nuance.\n\nTheatre.js can be used both programmatically _and_ visually.\n\nYou can use Theatre.js to:\n\n* Animate 3D objects made with THREE.js or other 3D libraries\n  \n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-3d-short.gif)\n\n  <sub>Art by [drei.lu](https://sketchfab.com/models/91964c1ce1a34c3985b6257441efa500)</sub>\n\n* Animate HTML/SVG via React or other libraries\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-dom.gif)\n\n* Design micro-interactions\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-micro-interaction.gif)\n\n* Choreograph generative interactive art\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-generative.gif)\n\n* Or animate any other JS variable\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-console.gif)\n\n## Documentation and Tutorials\n\nYou can find the documentation and video tutorials [here](https://theatrejs.com/docs/latest).\n\n## Community\n\nJoin us on [Discord](https://discord.gg/bm9f8F9Y9N), follow the updates on [twitter](https://twitter.com/AriaMinaei) or write us an [email](mailto:hello@theatrejs.com).\n\n## `@theatre/core`\n\nTheatre.js comes in two packages: `@theatre/core` (the library) and `@theatre/studio` (the editor). This package is the core library.\n\n## Bundle size\n\n`@theatre/core` is currently around 20KiB compressed with all its dependencies.\n\n## License\n\nApache 2.0\n"
  },
  {
    "path": "packages/core/devEnv/cli.ts",
    "content": "import sade from 'sade'\nimport {path, $} from '@cspotcode/zx'\nimport * as esbuild from 'esbuild'\nimport {definedGlobals} from './definedGlobals'\nconst packageRoot = path.join(__dirname, '..')\n\nconst prog = sade('cli')\n\nprog\n  .command('build js', 'Generate the .js bundle')\n  .option('--watch', 'Watch')\n  .action(async (opts) => {\n    await bundle(opts.watch)\n  })\n\nprog.command('build ts', 'Generate the .d.ts bundle').action(async () => {\n  await bundleTypes()\n})\n\nprog.command('build', 'Generate the .js and .d.ts bundles').action(async () => {\n  await Promise.all([bundle(false), bundleTypes()])\n})\n\nprog.parse(process.argv)\n\nasync function bundleTypes() {\n  await $`tsc --build`\n  await $`rollup -c devEnv/declarations-bundler/rollup.config.js --bundleConfigAsCjs`\n}\n\nasync function bundle(watch: boolean) {\n  const esbuildConfig: Parameters<typeof esbuild.context>[0] = {\n    entryPoints: [path.join(packageRoot, 'src/index.ts')],\n    target: ['es6'],\n    // loader: {'.png': 'file', '.svg': 'dataurl'},\n    bundle: true,\n    sourcemap: true,\n    supported: {\n      // 'unicode-escapes': false,\n      'template-literal': false,\n    },\n    define: {\n      ...definedGlobals,\n      __IS_VISUAL_REGRESSION_TESTING: 'false',\n      'process.env.NODE_ENV': '\"production\"',\n    },\n    external: ['@theatre/dataverse'],\n    minifyIdentifiers: false,\n    minifySyntax: true,\n    minifyWhitespace: false,\n    treeShaking: true,\n  }\n\n  esbuildConfig.platform = 'neutral'\n  esbuildConfig.mainFields = ['browser', 'module', 'main']\n  esbuildConfig.target = ['firefox57', 'chrome58']\n  esbuildConfig.conditions = ['browser', 'node']\n\n  const ctx = await esbuild.context({\n    ...esbuildConfig,\n    outfile: path.join(packageRoot, 'dist/index.js'),\n    format: 'cjs',\n  })\n\n  if (watch) {\n    await ctx.watch()\n  } else {\n    await ctx.rebuild()\n    await ctx.dispose()\n  }\n}\n"
  },
  {
    "path": "packages/core/devEnv/declarations-bundler/README.md",
    "content": "## Bundling typescript declarations\n\nThe stuff in this folder are responsible for producing the `.d.ts` declaration\nfiles in `lib/`.\n\nDeclarations are produced in two steps:\n\n1. (`$ npm run build:declarations:emit`): `$ tsc` is run with\n   `tsconfig.declarations.json`. This produces a `.d.ts` file for every module\n   in the project and emits them to `.temp/`.\n2. (`$ npm run build:declarations:bundle`): We then use rollup with\n   [rollup-plugin-dts](https://github.com/Swatinem/rollup-plugin-dts) to bundle\n   the declaration files into a concise bundle.\n"
  },
  {
    "path": "packages/core/devEnv/declarations-bundler/rollup.config.js",
    "content": "import alias from '@rollup/plugin-alias'\nimport path from 'path'\nimport {dts} from 'rollup-plugin-dts'\n\nconst fromPackages = (s) => path.join(__dirname, '../../../', s)\nconst fromPackage = (s) => path.join(__dirname, '../..', s)\n\nconst config = {\n  input: fromPackage(`.temp/declarations/src/index.d.ts`),\n  output: {\n    dir: fromPackage('dist'),\n    entryFileNames: 'index.d.ts',\n    format: 'es',\n  },\n  external: (s) => {\n    if (s === '@theatre/dataverse') {\n      return true\n    }\n\n    if (s.startsWith('@theatre')) {\n      return false\n    }\n\n    if (s.startsWith('/') || s.startsWith('./') || s.startsWith('../')) {\n      return false\n    }\n\n    return true\n  },\n\n  plugins: [\n    dts({\n      respectExternal: true,\n      compilerOptions: {\n        paths: {\n          '@theatre/core': [fromPackage(`.temp/declarations/src`)],\n        },\n      },\n    }),\n    alias({\n      entries: [\n        {\n          find: `@theatre/core`,\n          replacement: fromPackage(`.temp/declarations/src`),\n        },\n        {\n          find: `@theatre/utils`,\n          replacement: fromPackages(`utils/src`),\n        },\n      ],\n    }),\n  ],\n}\n\nexport default config\n"
  },
  {
    "path": "packages/core/devEnv/definedGlobals.ts",
    "content": "import type {Env} from '@theatre/core/envSchema'\nimport type {$IntentionalAny} from '@theatre/utils/types'\n// This file gets imported by other packages who may ot have set up path aliases, so we should use relative imports here\n// eslint-disable-next-line no-relative-imports\nimport {fullSchema} from '../src/envSchema'\n\nconst env: Env = {\n  THEATRE_VERSION: require('../package.json').version,\n  BUILT_FOR_PLAYGROUND: 'false',\n  BACKEND_URL: `https://app.theatrejs.com`,\n}\n\nfullSchema.parse(env)\n\nexport const definedGlobals: Record<string, string> = {\n  // json-touch-patch (an unmaintained package) reads this value. We patch it to just 'Set', becauce\n  // this is only used in `@theatre/studio`, which only supports evergreen browsers\n  'global.Set': 'Set',\n}\n\nfor (const entry of Object.entries(env)) {\n  const [key, value] = entry as $IntentionalAny\n  definedGlobals[`process.env.${key}`] = JSON.stringify(value)\n}\n"
  },
  {
    "path": "packages/core/globals.d.ts",
    "content": "declare module globalThis {\n  /**\n   * This is set to true when running the tests, so that `@theatre/core` will try to conenct to `@theatre/studio`,\n   * even if `typeof window === 'undefined'`.\n   */\n  var __THEATREJS__FORCE_CONNECT_CORE_AND_STUDIO: boolean | undefined\n}\n\ninterface NodeModule {\n  hot?: {\n    accept(path: string, callback: () => void): void\n  }\n}\n\ninterface Window {\n  __IS_VISUAL_REGRESSION_TESTING?: boolean\n}\n\ndeclare module '*.svg' {\n  var s: string\n  export default s\n}\n\ndeclare module '*.png' {\n  const s: string\n  export default s\n}\n\ndeclare module 'json-touch-patch' {\n  type Diff = $FixMe\n  const patch: <State>(s: State, diffs: Diff[]) => State\n  export default patch\n}\n\ndeclare module 'jiff'\ndeclare module '*.json'\n\n// declare module 'inspect.macro' {\n//   const inspect: (...vals: $IntentionalAny[]) => void\n//   export default inspect\n// }\n\ndeclare module 'timing-function/lib/UnitBezier' {\n  export default class UnitBezier {\n    constructor(p1x: numbe, p1y: number, p2x: number, p2y: number)\n    solve(progression: number, epsilon: number)\n    solveSimple(progression: number)\n  }\n}\ndeclare module 'circular-dependency-plugin'\ndeclare module 'merge-deep'\ndeclare module 'blob-compare' {\n  const compare: (left: File | Blob, right: File | Blob) => Promise<boolean>\n  export default compare\n}\n"
  },
  {
    "path": "packages/core/package.json",
    "content": "{\n  \"name\": \"@theatre/core\",\n  \"version\": \"0.7.0\",\n  \"license\": \"Apache-2.0\",\n  \"description\": \"Motion design editor for the web\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/AriaMinaei/theatre\",\n    \"directory\": \"theatre/core\"\n  },\n  \"author\": {\n    \"name\": \"TheaterJS Oy\",\n    \"email\": \"hello@theatrejs.com\",\n    \"url\": \"https://www.theatrejs.com\"\n  },\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"type\": \"commonjs\",\n  \"files\": [\n    \"dist/*\"\n  ],\n  \"scripts\": {\n    \"prepublish\": \"node ../../devEnv/ensurePublishing.js\",\n    \"typecheck\": \"tsc --build\",\n    \"cli\": \"tsx devEnv/cli.ts\",\n    \"build\": \"yarn cli build\"\n  },\n  \"sideEffects\": true,\n  \"devDependencies\": {\n    \"@rollup/plugin-alias\": \"^5.1.0\",\n    \"@rollup/plugin-multi-entry\": \"^6.0.1\",\n    \"@rollup/plugin-replace\": \"^5.0.5\",\n    \"@rollup/plugin-typescript\": \"^11.1.5\",\n    \"@theatre/utils\": \"workspace:*\",\n    \"@types/node\": \"^20.10.5\",\n    \"@types/rollup\": \"0.54.0\",\n    \"esbuild\": \"0.18.17\",\n    \"fast-deep-equal\": \"^3.1.3\",\n    \"lodash-es\": \"4.17.21\",\n    \"rollup\": \"^4.9.2\",\n    \"rollup-plugin-dts\": \"^6.1.0\",\n    \"sade\": \"^1.8.1\",\n    \"timing-function\": \"^0.2.3\",\n    \"tsx\": \"4.7.0\",\n    \"typescript\": \"5.1.6\",\n    \"zod\": \"^3.21.4\",\n    \"zod-validation-error\": \"^1.3.1\"\n  },\n  \"dependencies\": {\n    \"@theatre/dataverse\": \"workspace:*\"\n  },\n  \"//\": \"Add packages here to make them externals of core. Add them to theatre/package.json if you want to bundle them with studio.\"\n}\n"
  },
  {
    "path": "packages/core/src/.eslintrc.js",
    "content": "module.exports = {\n  rules: {\n    'no-restricted-syntax': [\n      'error',\n      {\n        selector: `ImportDeclaration[importKind!='type'][source.value=/@theatre\\\\u002Fstudio/]`,\n        message:\n          '@theatre/core may not import @theatre/studio modules except via type imports.',\n      },\n    ],\n  },\n}\n"
  },
  {
    "path": "packages/core/src/CoreBundle.ts",
    "content": "// import type {Studio} from '@theatre/studio/Studio'\nimport projectsSingleton from './projects/projectsSingleton'\nimport {privateAPI} from './privateAPIs'\nimport * as coreExports from './coreExports'\nimport {getCoreRafDriver} from './coreTicker'\nimport type {$____FixmeStudio} from '@theatre/core/types/public'\nimport {env} from './env'\n\ntype Studio = $____FixmeStudio\n\nexport type CoreBits = {\n  projectsP: typeof projectsSingleton.atom.pointer.projects\n  privateAPI: typeof privateAPI\n  coreExports: typeof coreExports\n  getCoreRafDriver: typeof getCoreRafDriver\n}\n\nexport default class CoreBundle {\n  private _studio: Studio | undefined = undefined\n  constructor(private _opts: {onAttach: (studio: Studio) => void}) {}\n\n  get type(): 'Theatre_CoreBundle' {\n    return 'Theatre_CoreBundle'\n  }\n\n  get version() {\n    return env.THEATRE_VERSION\n  }\n\n  getBitsForStudio(studio: Studio, callback: (bits: CoreBits) => void) {\n    if (this._studio) {\n      throw new Error(`@theatre/core is already attached to @theatre/studio`)\n    }\n    this._studio = studio\n    const bits: CoreBits = {\n      projectsP: projectsSingleton.atom.pointer.projects,\n      privateAPI: privateAPI,\n      coreExports,\n      getCoreRafDriver,\n    }\n\n    callback(bits)\n    this._opts.onAttach(studio)\n  }\n}\n"
  },
  {
    "path": "packages/core/src/copyToClipboard.ts",
    "content": "export async function copyToClipboard(text: string): Promise<boolean> {\n  if (navigator.clipboard) {\n    return navigator.clipboard\n      .writeText(text)\n      .then(() => {\n        return true\n      })\n      .catch(() => {\n        return false\n      })\n  } else {\n    const tempTextArea = document.createElement('textarea')\n    tempTextArea.value = text\n    document.body.appendChild(tempTextArea)\n    tempTextArea.focus()\n    tempTextArea.select()\n    try {\n      const successful = document.execCommand('copy')\n      document.body.removeChild(tempTextArea)\n      return Promise.resolve(successful)\n    } catch (err) {\n      document.body.removeChild(tempTextArea)\n      return Promise.resolve(false)\n    }\n  }\n}\n"
  },
  {
    "path": "packages/core/src/coreExports.ts",
    "content": "import projectsSingleton from './projects/projectsSingleton'\nimport TheatreProject from './projects/TheatreProject'\nimport * as types from './propTypes'\nimport {validateName} from '@theatre/utils/sanitizers'\nimport deepEqual from 'fast-deep-equal'\nimport type {PointerType, Prism} from '@theatre/dataverse'\nimport {isPointer} from '@theatre/dataverse'\nimport {isPrism, pointerToPrism} from '@theatre/dataverse'\nimport type {$IntentionalAny, VoidFn} from '@theatre/core/types/public'\nimport type {ProjectId} from '@theatre/core/types/public'\nimport {getCoreTicker} from './coreTicker'\nimport {privateAPI} from './privateAPIs'\nexport {notify} from '@theatre/core/utils/notify'\nexport {types}\nexport {createRafDriver} from './rafDrivers'\nimport * as propTypeUtils from './propTypes/utils'\nimport * as ids from './utils/ids'\nimport * as keyframeUtils from './utils/keyframeUtils'\nimport * as instanceTypes from './utils/instanceTypes'\nimport {globals} from './globals'\nimport {\n  deepValidateOnDiskState,\n  shallowValidateOnDiskState,\n  validateProjectIdOrThrow,\n} from './projects/Project'\nimport type {IProjectConfig, IProject, IRafDriver} from './types/public'\n\nexport const __private = {\n  propTypeUtils,\n  ids,\n  instanceTypes,\n  keyframeUtils,\n  currentProjectStateDefinitionVersion:\n    globals.currentProjectStateDefinitionVersion,\n}\n\n/**\n * Returns a project of the given id, or creates one if it doesn't already exist.\n *\n * @remarks\n * If \\@theatre/studio is also loaded, then the state of the project will be managed by the studio.\n *\n * [Learn more about exporting](https://www.theatrejs.com/docs/latest/manual/projects#state)\n *\n * @example\n * Usage:\n * ```ts\n * import {getProject} from '@theatre/core'\n * const config = {} // the config can be empty when starting a new project\n * const project = getProject(\"a-unique-id\", config)\n * ```\n *\n * @example\n * Usage with an explicit state:\n * ```ts\n * import {getProject} from '@theatre/core'\n * import state from './saved-state.json'\n * const config = {state} // here the config contains our saved state\n * const project = getProject(\"a-unique-id\", config)\n * ```\n */\nexport function getProject(id: string, config: IProjectConfig = {}): IProject {\n  const existingProject = projectsSingleton.get(id as ProjectId)\n  if (existingProject) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (!deepEqual(config, existingProject.config)) {\n        throw new Error(\n          `You seem to have called Theatre.getProject(\"${id}\", config) twice, with different config objects. ` +\n            `This is disallowed because changing the config of a project on the fly can lead to hard-to-debug issues.\\n\\n` +\n            `You can fix this by either calling Theatre.getProject() once per projectId,` +\n            ` or calling it multiple times but with the exact same config.`,\n        )\n      }\n    }\n    return existingProject.publicApi\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    validateName(id, 'projectName in Theatre.getProject(projectName)', true)\n    validateProjectIdOrThrow(id)\n  }\n\n  if (config.state) {\n    if (process.env.NODE_ENV !== 'production') {\n      shallowValidateOnDiskState(id as ProjectId, config.state)\n    } else {\n      deepValidateOnDiskState(id as ProjectId, config.state)\n    }\n  } else {\n  }\n\n  return new TheatreProject(id, config)\n}\n\n/**\n * Calls `callback` every time the pointed value of `pointer` changes.\n *\n * @param pointer - A Pointer (like `object.props.x`)\n * @param callback - The callback is called every time the value of pointer changes\n * @param rafDriver - (optional) The `rafDriver` to use. Learn how to use `rafDriver`s [from the docs](https://www.theatrejs.com/docs/latest/manual/advanced#rafdrivers).\n * @returns An unsubscribe function\n *\n * @example\n * Usage:\n * ```ts\n * import {getProject, onChange} from '@theatre/core'\n *\n * const obj = getProject(\"A project\").sheet(\"Scene\").object(\"Box\", {position: {x: 0}})\n *\n * const usubscribe = onChange(obj.props.position.x, (x) => {\n *   console.log('position.x changed to:', x)\n * })\n *\n * setTimeout(usubscribe, 10000) // stop listening to changes after 10 seconds\n * ```\n */\nexport function onChange<\n  P extends PointerType<$IntentionalAny> | Prism<$IntentionalAny>,\n>(\n  pointer: P,\n  callback: (\n    value: P extends PointerType<infer T>\n      ? T\n      : P extends Prism<infer T>\n        ? T\n        : unknown,\n  ) => void,\n  rafDriver?: IRafDriver,\n): VoidFn {\n  const ticker = rafDriver ? privateAPI(rafDriver).ticker : getCoreTicker()\n\n  if (isPointer(pointer)) {\n    const pr = pointerToPrism(pointer)\n    return pr.onChange(ticker, callback as $IntentionalAny, true)\n  } else if (isPrism(pointer)) {\n    return pointer.onChange(ticker, callback as $IntentionalAny, true)\n  } else {\n    throw new Error(\n      `Called onChange(p) where p is neither a pointer nor a prism.`,\n    )\n  }\n}\n\n/**\n * Takes a Pointer and returns the value it points to.\n *\n * @param pointer - A pointer (like `object.props.x`)\n * @returns The value the pointer points to\n *\n * @example\n *\n * Usage\n * ```ts\n * import {val, getProject} from '@theatre/core'\n *\n * const obj = getProject(\"A project\").sheet(\"Scene\").object(\"Box\", {position: {x: 0}})\n *\n * console.log(val(obj.props.position.x)) // logs the value of obj.props.x\n * ```\n */\nexport function val<T>(pointer: PointerType<T>): T {\n  if (isPointer(pointer)) {\n    return pointerToPrism(pointer).getValue() as $IntentionalAny\n  } else {\n    throw new Error(`Called val(p) where p is not a pointer.`)\n  }\n}\n"
  },
  {
    "path": "packages/core/src/coreTicker.ts",
    "content": "import type {Ticker} from '@theatre/dataverse'\nimport {privateAPI} from './privateAPIs'\nimport type {RafDriverPrivateAPI} from './rafDrivers'\nimport {createRafDriver} from './rafDrivers'\nimport type {IRafDriver} from './types/public'\n\n/**\n * Creates a rafDrive that uses `window.requestAnimationFrame` in browsers,\n * or a single `setTimeout` in SSR.\n */\nfunction createBasicRafDriver(): IRafDriver {\n  let rafId: number | null = null\n  const start = (): void => {\n    if (typeof window !== 'undefined') {\n      const onAnimationFrame = (t: number) => {\n        driver.tick(t)\n        rafId = window.requestAnimationFrame(onAnimationFrame)\n      }\n      rafId = window.requestAnimationFrame(onAnimationFrame)\n    } else {\n      driver.tick(0)\n      setTimeout(() => driver.tick(1), 0)\n    }\n  }\n\n  const stop = (): void => {\n    if (typeof window !== 'undefined') {\n      if (rafId !== null) {\n        window.cancelAnimationFrame(rafId)\n      }\n    } else {\n      // nothing to do in SSR\n    }\n  }\n\n  const driver = createRafDriver({name: 'DefaultCoreRafDriver', start, stop})\n\n  return driver\n}\n\nlet coreRafDriver: RafDriverPrivateAPI | undefined\n\n/**\n * Returns the rafDriver that is used by the core internally. Creates a new one if it's not set yet.\n */\nexport function getCoreRafDriver(): RafDriverPrivateAPI {\n  if (!coreRafDriver) {\n    setCoreRafDriver(createBasicRafDriver())\n  }\n  return coreRafDriver!\n}\n\n/**\n *\n * @returns The ticker that is used by the core internally.\n */\nexport function getCoreTicker(): Ticker {\n  return getCoreRafDriver().ticker\n}\n\n/**\n * Sets the rafDriver that is used by the core internally.\n */\nexport function setCoreRafDriver(driver: IRafDriver) {\n  if (coreRafDriver) {\n    throw new Error(`\\`setCoreRafDriver()\\` is already called.`)\n  }\n  const driverPrivateApi = privateAPI(driver)\n  coreRafDriver = driverPrivateApi\n}\n"
  },
  {
    "path": "packages/core/src/env.ts",
    "content": "import type {Env} from './envSchema'\n\n// process.env is guaranteed to be of type Env, because we validate it in the `devEnv` scripts.\nexport const env = process.env as Env\n"
  },
  {
    "path": "packages/core/src/envSchema.ts",
    "content": "import z from 'zod'\n\n// the env variables that both development and production require\nconst commonSchema = z.object({\n  BUILT_FOR_PLAYGROUND: z\n    .enum(['true', 'false'])\n    .describe(\n      `Whether the app is built for packages/playground. If true, some behavior is different, e.g. the update checker is disabled.`,\n    ),\n  THEATRE_VERSION: z\n    .string()\n    .describe(`The version of the package, as defined in package.json`),\n  BACKEND_URL: z.optional(\n    z\n      .string()\n      .url()\n      .describe(\n        `the url to the app, like 'http://localhost:3000'. If the protocol is omitted,` +\n          ` then https is assumed. If the port is omitted, then 80 is assumed.`,\n      ),\n  ),\n})\n\n// the env variables that are required in development (devOnly and commonSchema)\nexport const devSchema = commonSchema.extend({\n  // NODE_ENV: z.literal('development'),\n})\n\n// the env variables that are only required in production\nexport const productionSchema = commonSchema.extend({\n  // NODE_ENV: z.literal('production'),\n})\n\n// the env variables that are required in both development and production\nexport const fullSchema = z.union([productionSchema, devSchema])\n\nexport type Env = z.infer<typeof fullSchema>\n"
  },
  {
    "path": "packages/core/src/globals.ts",
    "content": "export const globals = {\n  /**\n   * If the schema of the redux store changes in a backwards-incompatible way, then this version number should be incremented.\n   *\n   * While this looks like semver, it is not. There are no patch numbers, so any change in this number is a breaking change.\n   *\n   * However, as long as the schema of the redux store is backwards-compatible, then we don't have to change this number.\n   *\n   * Since the 0.4.0 release, this number has not had to change.\n   */\n  currentProjectStateDefinitionVersion: '0.4.0',\n}\n\n/**\n * The names of the global variables that the core or studio bundle\n * use to store their references.\n */\nexport const globalVariableNames = {\n  StudioBundle: '__TheatreJS_StudioBundle',\n  coreBundle: '__TheatreJS_CoreBundle',\n  notifications: '__TheatreJS_Notifications',\n} as const\n\n// This type is easier to import by the studio, since studio can only import types from `@theatre/core/*`\nexport type GlobalVariableNames = typeof globalVariableNames\n"
  },
  {
    "path": "packages/core/src/index.ts",
    "content": "/**\n * The library providing the runtime functionality of Theatre.js.\n *\n * @packageDocumentation\n */\n\nexport * from './coreExports'\nexport * from './types/public'\nimport {defer} from '@theatre/utils/defer'\nimport CoreBundle from './CoreBundle'\nimport {globalVariableNames} from './globals'\nimport type {$____FixmeStudio} from '@theatre/core/types/public'\nimport type {IStudio, InitOpts} from './types/public'\n\nconst studioDeferred = defer<$____FixmeStudio>()\n\nexport async function getStudio(): Promise<IStudio> {\n  return (await studioDeferred.promise).publicApi\n}\n\nexport function getStudioSync(\n  errorIfNotReady: boolean = false,\n): IStudio | undefined {\n  if (studioDeferred.status !== 'resolved') {\n    if (errorIfNotReady) throw new Error(`Studio is not ready yet.`)\n    return undefined\n  }\n  return studioDeferred.currentValue!.publicApi\n}\n\nlet initCalled = false\nconst initOptsDeferred = defer<InitOpts | undefined>()\n\nexport async function init(opts?: InitOpts) {\n  if (initCalled) {\n    return\n  }\n  initCalled = true\n  initOptsDeferred.resolve(opts)\n}\n\nconst theatre = {getStudio, getStudioSync, init}\nexport default theatre\n\ntype StudioBundle = $____FixmeStudio // todo\n\nregisterCoreBundle()\n\n/**\n * @remarks\n * the studio and core need to communicate with each other somehow, and currently we do that\n * by registering each of them as a global variable. This function does the work of registering\n * the core bundle (everything exported from `@theatre/core`) to window.__TheatreJS_CoreBundle.\n */\nfunction registerCoreBundle() {\n  // This only works in a browser environment\n  if (\n    typeof window == 'undefined' &&\n    global.__THEATREJS__FORCE_CONNECT_CORE_AND_STUDIO !== true\n  )\n    return\n\n  const globalContext = typeof window !== 'undefined' ? window : global\n\n  // another core bundle may already be registered\n\n  const existingBundle: CoreBundle | undefined =\n    // @ts-ignore ignore\n    globalContext[globalVariableNames.coreBundle]\n\n  if (typeof existingBundle !== 'undefined') {\n    if (\n      typeof existingBundle === 'object' &&\n      existingBundle &&\n      typeof existingBundle.version === 'string'\n    ) {\n      /*\n      Another core bundle is registered. This usually means the bundler is not configured correctly and\n      is bundling `@theatre/core` multiple times, but, there are legitimate scenarios where a user may want\n      to include multiple instances of `@theatre/core` on the same page.\n\n      For example, an article might embed two separate interactive graphics that\n      are made by different teams (and even different tech stacks -- one in JS, the other in clojurescript).\n\n      If both of those graphics use Theatre.js, our current setup makes them conflict with one another.\n\n      ----------------------\n      --------------------\n      ----------------------\n      -------.\n\n      |   /\\_/\\   |\n      |  ( o.o )  |      --------> graphic1 made with JS+Theatre.js\n      |   > ^ <   |\n\n      ## ---\n      ----------------------\n      --------------------\n      ----------------------\n      -------.\n\n      |    __      _   |\n      |  o'')}____//   | --------> graphic2 made with clojurescript+Theatre.js\n      |  `_/      )    |\n      |  (_(_/-(_/     |\n      \n      ---------------------\n      -----♥.\n\n      @todo Make it possible to have multiple separate bundles on the same page, but still communicate\n      that there is more than one bundle so we can warn the user about bundler misconfiguration.\n      \n      */\n      throw new Error(\n        `It seems that the module '@theatre/core' is loaded more than once. This could have two possible causes:\\n` +\n          `1. You might have two separate versions of Theatre.js in node_modules.\\n` +\n          `2. Or this might be a bundling misconfiguration, in case you're using a bundler like Webpack/ESBuild/Rollup.\\n\\n` +\n          `Note that it **is okay** to import '@theatre/core' multiple times. But those imports should point to the same module.`,\n      )\n    } else {\n      throw new Error(\n        `The variable window.${globalVariableNames.coreBundle} seems to be already set by a module other than @theatre/core.`,\n      )\n    }\n  }\n\n  const coreBundle = new CoreBundle({\n    onAttach: (s) => {\n      void initOptsDeferred.promise.then((opts) => {\n        s.initialize(opts)\n        studioDeferred.resolve(s)\n      })\n    },\n  })\n\n  // @ts-ignore ignore\n  globalContext[globalVariableNames.coreBundle] = coreBundle\n\n  const possibleExistingStudioBundle: undefined | StudioBundle =\n    // @ts-ignore ignore\n    globalContext[globalVariableNames.studioBundle]\n\n  if (\n    possibleExistingStudioBundle &&\n    possibleExistingStudioBundle !== null &&\n    possibleExistingStudioBundle.type === 'Theatre_StudioBundle'\n  ) {\n    possibleExistingStudioBundle.registerCoreBundle(coreBundle)\n  }\n}\n"
  },
  {
    "path": "packages/core/src/privateAPIs.ts",
    "content": "import type Project from '@theatre/core/projects/Project'\nimport type Sequence from '@theatre/core/sequences/Sequence'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport type {RafDriverPrivateAPI} from './rafDrivers'\nimport type {\n  IProject,\n  IRafDriver,\n  ISequence,\n  ISheet,\n  ISheetObject,\n  UnknownShorthandCompoundProps,\n} from './types/public'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\n\nconst publicAPIToPrivateAPIMap = new WeakMap()\n\n/**\n * Given a public API object, returns the corresponding private API object.\n */\nexport function privateAPI<P extends {type: string}>(\n  pub: P,\n): P extends IProject\n  ? Project\n  : P extends ISheet\n    ? Sheet\n    : P extends ISheetObject<$IntentionalAny>\n      ? SheetObject\n      : P extends ISequence\n        ? Sequence\n        : P extends IRafDriver\n          ? RafDriverPrivateAPI\n          : never {\n  return publicAPIToPrivateAPIMap.get(pub)\n}\n\n/**\n * Notes the relationship between a public API object and its corresponding private API object,\n * so that `privateAPI` can find it.\n */\nexport function setPrivateAPI(pub: IProject, priv: Project): void\nexport function setPrivateAPI(pub: ISheet, priv: Sheet): void\nexport function setPrivateAPI(pub: ISequence, priv: Sequence): void\nexport function setPrivateAPI(pub: IRafDriver, priv: RafDriverPrivateAPI): void\nexport function setPrivateAPI<Props extends UnknownShorthandCompoundProps>(\n  pub: ISheetObject<Props>,\n  priv: SheetObject,\n): void\nexport function setPrivateAPI(pub: {}, priv: {}): void {\n  publicAPIToPrivateAPIMap.set(pub, priv)\n}\n"
  },
  {
    "path": "packages/core/src/projects/Project.ts",
    "content": "import type {\n  OnDiskState,\n  ProjectEphemeralState,\n  ProjectState,\n} from '@theatre/core/types/private/core'\nimport type TheatreProject from '@theatre/core/projects/TheatreProject'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport SheetTemplate from '@theatre/core/sheets/SheetTemplate'\n// import type {Studio} from '@theatre/studio/Studio'\nimport type {ProjectAddress} from '@theatre/core/types/public'\nimport type {Pointer} from '@theatre/dataverse'\nimport {PointerProxy} from '@theatre/dataverse'\nimport {Atom} from '@theatre/dataverse'\nimport initialiseProjectState from './initialiseProjectState'\nimport projectsSingleton from './projectsSingleton'\nimport type {Deferred} from '@theatre/utils/defer'\nimport {defer} from '@theatre/utils/defer'\nimport {globals} from '@theatre/core/globals'\nimport type {\n  ProjectId,\n  SheetId,\n  SheetInstanceId,\n} from '@theatre/core/types/public'\n\nimport type {\n  $IntentionalAny,\n  $____FixmeStudio,\n} from '@theatre/core/types/public'\nimport {InvalidArgumentError} from '@theatre/utils/errors'\nimport userReadableTypeOfValue from '@theatre/utils/userReadableTypeOfValue'\n\ntype Studio = $____FixmeStudio\n\ntype ICoreAssetStorage = {\n  /** Returns a URL for the provided asset ID */\n  getAssetUrl: (assetId: string) => string\n}\n\ninterface IStudioAssetStorage extends ICoreAssetStorage {\n  /** Creates an asset from the provided blob and returns a promise to its ID */\n  createAsset: (asset: File) => Promise<string | null>\n}\n\nexport type IAssetStorageConfig = {\n  /**\n   * An object containing the core asset storage methods.\n   */\n  coreAssetStorage: ICoreAssetStorage\n}\n\ntype IAssetConf = {\n  /** The base URL for assets. */\n  baseUrl?: string\n}\n\nexport type Conf = Partial<{\n  state: OnDiskState\n  assets: IAssetConf\n  experiments: ExperimentsConf\n}>\n\nexport type ExperimentsConf = Partial<{}>\n\nexport default class Project {\n  readonly pointers: {\n    historic: Pointer<ProjectState['historic'] | undefined>\n    ephemeral: Pointer<ProjectEphemeralState>\n  }\n\n  private readonly _pointerProxies: {\n    historic: PointerProxy<ProjectState['historic']>\n    ephemeral: PointerProxy<ProjectEphemeralState>\n  }\n\n  readonly address: ProjectAddress\n\n  private readonly _studioReadyDeferred: Deferred<undefined>\n  private readonly _assetStorageReadyDeferred: Deferred<undefined>\n  private readonly _readyPromise: Promise<void>\n\n  private _sheetTemplates = new Atom<{\n    [sheetId: string]: SheetTemplate | undefined\n  }>({})\n  sheetTemplatesP = this._sheetTemplates.pointer\n  private _studio: Studio | undefined\n  assetStorage: IStudioAssetStorage\n\n  type: 'Theatre_Project' = 'Theatre_Project'\n\n  constructor(\n    id: ProjectId,\n    readonly config: Conf = {},\n    readonly publicApi: TheatreProject,\n  ) {\n    this.address = {projectId: id}\n\n    const onDiskEphemeralAtom = new Atom<ProjectEphemeralState>({\n      loadingState: {\n        type: 'loaded',\n      },\n      lastExportedObject: null,\n    })\n\n    const onDiskStateAtom = new Atom<ProjectState>({\n      historic: config.state ?? {\n        sheetsById: {},\n        definitionVersion: globals.currentProjectStateDefinitionVersion,\n        revisionHistory: [],\n      },\n    })\n\n    this._assetStorageReadyDeferred = defer()\n    this.assetStorage = {\n      getAssetUrl: (assetId: string) => `${config.assets?.baseUrl}/${assetId}`,\n\n      // Until the asset storage is ready, we'll throw an error when the user tries to use it\n      createAsset: () => {\n        throw new Error(`Please wait for Project.ready to use assets.`)\n      },\n    }\n\n    this._pointerProxies = {\n      historic: new PointerProxy(onDiskStateAtom.pointer.historic),\n      ephemeral: new PointerProxy(onDiskEphemeralAtom.pointer),\n    }\n\n    this.pointers = {\n      historic: this._pointerProxies.historic.pointer,\n      ephemeral: this._pointerProxies.ephemeral.pointer,\n    }\n\n    projectsSingleton.add(id, this)\n\n    this._studioReadyDeferred = defer()\n\n    this._readyPromise = Promise.all([\n      this._studioReadyDeferred.promise,\n      this._assetStorageReadyDeferred.promise,\n      // hide the array from the user, i.e. make it Promise<void> instead of Promise<[undefined, undefined]>\n    ]).then(() => {})\n\n    if (config.state) {\n      setTimeout(() => {\n        // The user has provided config.state but in case @theatre/studio is loaded,\n        // let's give it one tick to attach itself\n        if (!this._studio) {\n          this._studioReadyDeferred.resolve(undefined)\n          this._assetStorageReadyDeferred.resolve(undefined)\n        }\n      }, 0)\n    } else {\n      if (typeof window === 'undefined') {\n        if (process.env.NODE_ENV === 'production') {\n          console.error(\n            `Argument config.state in Theatre.getProject(\"${id}\", config) is empty. ` +\n              `You can safely ignore this message if you're developing a Next.js/Remix project in development mode. But if you are shipping to your end-users, ` +\n              `then you need to set config.state, ` +\n              `otherwise your project's state will be empty and nothing will animate. Learn more at https://www.theatrejs.com/docs/latest/manual/projects#state`,\n          )\n        }\n      } else {\n        setTimeout(() => {\n          if (!this._studio) {\n            throw new Error(\n              `Argument config.state in Theatre.getProject(\"${id}\", config) is empty. This is fine ` +\n                `while you are using @theatre/core along with @theatre/studio. But since @theatre/studio ` +\n                `is not loaded, the state of project \"${id}\" will be empty.\\n\\n` +\n                `To fix this, you need to add @theatre/studio into the bundle and export ` +\n                `the project's state. Learn how to do that at https://www.theatrejs.com/docs/latest/manual/projects#state\\n`,\n            )\n          }\n        }, 1000)\n      }\n    }\n  }\n\n  attachToStudio(studio: Studio) {\n    if (this._studio) {\n      if (this._studio !== studio) {\n        throw new Error(\n          `Project ${this.address.projectId} is already attached to studio ${this._studio.address.studioId}`,\n        )\n      } else {\n        console.warn(\n          `Project ${this.address.projectId} is already attached to studio ${this._studio.address.studioId}`,\n        )\n        return\n      }\n    }\n    this._studio = studio\n\n    studio.initialized\n      .then(async () => {\n        await initialiseProjectState(studio, this, this.config.state)\n\n        this._pointerProxies.historic.setPointer(\n          studio.atomP.historic.coreByProject[\n            this.address.projectId\n          ] as $IntentionalAny,\n        )\n\n        this._pointerProxies.ephemeral.setPointer(\n          studio.ephemeralAtom.pointer.coreByProject[this.address.projectId],\n        )\n\n        // asset storage has to be initialized after the pointers are set\n        await studio\n          .createAssetStorage(this, this.config.assets?.baseUrl)\n          .then((assetStorage: $____FixmeStudio) => {\n            this.assetStorage = assetStorage\n            this._assetStorageReadyDeferred.resolve(undefined)\n          })\n\n        this._studioReadyDeferred.resolve(undefined)\n      })\n      .catch((err: $____FixmeStudio) => {\n        console.error(err)\n        throw err\n      })\n  }\n\n  get isAttachedToStudio() {\n    return !!this._studio\n  }\n\n  get ready() {\n    return this._readyPromise\n  }\n\n  isReady() {\n    return (\n      this._studioReadyDeferred.status === 'resolved' &&\n      this._assetStorageReadyDeferred.status === 'resolved'\n    )\n  }\n\n  getOrCreateSheet(\n    sheetId: SheetId,\n    instanceId: SheetInstanceId = 'default' as SheetInstanceId,\n  ): Sheet {\n    let template = this._sheetTemplates.get()[sheetId]\n\n    if (!template) {\n      template = new SheetTemplate(this, sheetId)\n      this._sheetTemplates.reduce((s) => ({...s, [sheetId]: template}))\n    }\n\n    return template.getInstance(instanceId)\n  }\n}\n\n/**\n * Lightweight validator that only makes sure the state's definitionVersion is correct.\n * Does not do a thorough validation of the state.\n */\nexport const shallowValidateOnDiskState = (\n  projectId: ProjectId,\n  s: OnDiskState,\n) => {\n  if (\n    Array.isArray(s) ||\n    s == null ||\n    s.definitionVersion !== globals.currentProjectStateDefinitionVersion\n  ) {\n    throw new InvalidArgumentError(\n      `Error validating conf.state in Theatre.getProject(${JSON.stringify(\n        projectId,\n      )}, conf). The state seems to be formatted in a way that is unreadable to Theatre.js. Read more at https://www.theatrejs.com/docs/latest/manual/projects#state`,\n    )\n  }\n}\n\nexport const deepValidateOnDiskState = (\n  projectId: ProjectId,\n  s: OnDiskState,\n) => {\n  shallowValidateOnDiskState(projectId, s)\n  // @TODO do a deep validation here\n}\n\nexport const validateProjectIdOrThrow = (value: string) => {\n  if (typeof value !== 'string') {\n    throw new InvalidArgumentError(\n      `Argument 'projectId' in \\`Theatre.getProject(projectId, ...)\\` must be a string. Instead, it was ${userReadableTypeOfValue(\n        value,\n      )}.`,\n    )\n  }\n\n  const idTrimmed = value.trim()\n  if (idTrimmed.length !== value.length) {\n    throw new InvalidArgumentError(\n      `Argument 'projectId' in \\`Theatre.getProject(\"${value}\", ...)\\` should not have surrounding whitespace.`,\n    )\n  }\n\n  if (idTrimmed.length < 3) {\n    throw new InvalidArgumentError(\n      `Argument 'projectId' in \\`Theatre.getProject(\"${value}\", ...)\\` should be at least 3 characters long.`,\n    )\n  }\n}\n"
  },
  {
    "path": "packages/core/src/projects/TheatreProject.ts",
    "content": "import {privateAPI, setPrivateAPI} from '@theatre/core/privateAPIs'\nimport Project from '@theatre/core/projects/Project'\nimport type {Asset, ProjectAddress} from '@theatre/core/types/public'\nimport type {\n  ProjectId,\n  SheetId,\n  SheetInstanceId,\n} from '@theatre/core/types/public'\nimport {validateInstanceId} from '@theatre/utils/sanitizers'\nimport {validateAndSanitiseSlashedPathOrThrow} from '@theatre/utils/slashedPaths'\nimport type {IProject, IProjectConfig, ISheet} from '@theatre/core/types/public'\nimport {notify} from '@theatre/core/coreExports'\n\n// export type IProjectConfigExperiments = {\n//   /**\n//    * Defaults to using global `console` with style args.\n//    *\n//    * (TODO: check for browser environment before using style args)\n//    */\n//   /**\n//    * Defaults:\n//    *  * `production` builds: console - error\n//    *  * `development` builds: console - error, warning\n//    */\n// }\n\nexport default class TheatreProject implements IProject {\n  get type(): 'Theatre_Project_PublicAPI' {\n    return 'Theatre_Project_PublicAPI'\n  }\n  /**\n   * @internal\n   */\n  constructor(id: string, config: IProjectConfig = {}) {\n    setPrivateAPI(this, new Project(id as ProjectId, config, this))\n  }\n\n  get ready(): Promise<void> {\n    return privateAPI(this).ready\n  }\n\n  get isReady(): boolean {\n    return privateAPI(this).isReady()\n  }\n\n  get address(): ProjectAddress {\n    return {...privateAPI(this).address}\n  }\n\n  getAssetUrl(asset: Asset): string | undefined {\n    // probably should put this in project.getAssetUrl but this will do for now\n    if (!this.isReady) {\n      console.error(\n        'Calling `project.getAssetUrl()` before `project.ready` is resolved, will always return `undefined`. ' +\n          'Either use `project.ready.then(() => project.getAssetUrl())` or `await project.ready` before calling `project.getAssetUrl()`.',\n      )\n      return undefined\n    }\n\n    return asset.id\n      ? privateAPI(this).assetStorage.getAssetUrl(asset.id)\n      : undefined\n  }\n\n  sheet(sheetId: string, instanceId: string = 'default'): ISheet {\n    const sanitizedPath = validateAndSanitiseSlashedPathOrThrow(\n      sheetId,\n      'project.sheet',\n      notify.warning,\n    )\n\n    if (process.env.NODE_ENV !== 'production') {\n      validateInstanceId(\n        instanceId,\n        'instanceId in project.sheet(sheetId, instanceId)',\n        true,\n      )\n    }\n\n    return privateAPI(this).getOrCreateSheet(\n      sanitizedPath as SheetId,\n      instanceId as SheetInstanceId,\n    ).publicApi\n  }\n}\n"
  },
  {
    "path": "packages/core/src/projects/initialiseProjectState.ts",
    "content": "// import type {Studio} from '@theatre/studio/Studio'\nimport delay from '@theatre/utils/delay'\nimport type Project from './Project'\nimport type {OnDiskState} from '@theatre/core/types/private/core'\nimport {globals} from '@theatre/core/globals'\nimport {val} from '@theatre/dataverse'\nimport type {$____FixmeStudio} from '@theatre/core/types/public'\n\ntype Studio = $____FixmeStudio\n\n/**\n * @remarks\n * TODO this could be turned into a simple prism, like:\n * `editor.isReady: Prism<{isReady: true} | {isReady: false, reason: 'conflictBetweenDiskStateAndBrowserState'}>`\n */\nexport default async function initialiseProjectState(\n  studio: Studio,\n  project: Project,\n  onDiskState: OnDiskState | undefined,\n) {\n  /*\n   * If in the future we move to IndexedDB to store the state, we'll have\n   * to deal with it being async (as opposed to localStorage that is synchronous.)\n   * so here we're artifically delaying the loading of the state to make sure users\n   * don't count on the state always being already loaded synchronously\n   */\n  await delay(0)\n\n  const projectId = project.address.projectId\n\n  studio.ephemeralAtom.setByPointer(\n    (p: $____FixmeStudio) => p.coreByProject[projectId],\n    {\n      lastExportedObject: null,\n      loadingState: {type: 'loading'},\n    },\n  )\n\n  const browserState = val(studio.atomP.historic.coreByProject[projectId])\n\n  if (!browserState) {\n    if (!onDiskState) {\n      useInitialState()\n    } else {\n      useOnDiskState(onDiskState)\n    }\n  } else {\n    if (!onDiskState) {\n      useBrowserState()\n    } else {\n      if (\n        browserState.revisionHistory.indexOf(onDiskState.revisionHistory[0]) ==\n        -1\n      ) {\n        browserStateIsNotBasedOnDiskState(onDiskState)\n      } else {\n        useBrowserState()\n      }\n    }\n  }\n\n  function useInitialState() {\n    studio.transaction(({stateEditors}: $____FixmeStudio) => {\n      stateEditors.coreByProject.historic.setProjectState({\n        projectId,\n        state: {\n          sheetsById: {},\n          definitionVersion: globals.currentProjectStateDefinitionVersion,\n          revisionHistory: [],\n        },\n      })\n    }, false)\n    studio.ephemeralAtom.setByPointer(\n      (p: $____FixmeStudio) => p.coreByProject[projectId].loadingState,\n      {\n        type: 'loaded',\n      },\n    )\n  }\n\n  function useOnDiskState(state: OnDiskState) {\n    studio.transaction(({stateEditors}: $____FixmeStudio) => {\n      stateEditors.coreByProject.historic.setProjectState({\n        projectId,\n        state,\n      })\n    })\n\n    studio.ephemeralAtom.setByPointer(\n      (p: $____FixmeStudio) => p.coreByProject[projectId].loadingState,\n      {\n        type: 'loaded',\n      },\n    )\n  }\n\n  function useBrowserState() {\n    studio.ephemeralAtom.setByPointer(\n      (p: $____FixmeStudio) => p.coreByProject[projectId].loadingState,\n      {\n        type: 'loaded',\n      },\n    )\n  }\n\n  function browserStateIsNotBasedOnDiskState(onDiskState: OnDiskState) {\n    studio.ephemeralAtom.setByPointer(\n      (p: $____FixmeStudio) => p.coreByProject[projectId].loadingState,\n      {\n        type: 'browserStateIsNotBasedOnDiskState',\n        onDiskState,\n      },\n    )\n  }\n}\n"
  },
  {
    "path": "packages/core/src/projects/projectsSingleton.ts",
    "content": "import {Atom} from '@theatre/dataverse'\nimport type {ProjectId} from '@theatre/core/types/public'\nimport type Project from './Project'\n\ninterface State {\n  projects: Record<ProjectId, Project>\n}\n\nclass ProjectsSingleton {\n  readonly atom = new Atom({projects: {}} as State)\n  constructor() {}\n\n  /**\n   * We're trusting here that each project id is unique\n   */\n  add(id: ProjectId, project: Project) {\n    this.atom.setByPointer((p) => p.projects[id], project)\n  }\n\n  get(id: ProjectId): Project | undefined {\n    return this.atom.get().projects[id]\n  }\n\n  has(id: ProjectId) {\n    return !!this.get(id)\n  }\n}\n\nconst singleton = new ProjectsSingleton()\n\nexport default singleton\n"
  },
  {
    "path": "packages/core/src/propTypes/index.ts",
    "content": "import type {$FixMe, $IntentionalAny} from '@theatre/core/types/public'\nimport userReadableTypeOfValue from '@theatre/utils/userReadableTypeOfValue'\n\nimport {\n  decorateRgba,\n  linearSrgbToOklab,\n  oklabToLinearSrgb,\n  srgbToLinearSrgb,\n  linearSrgbToSrgb,\n} from '@theatre/utils/color'\nimport {clamp, mapValues} from 'lodash-es'\nimport {propTypeSymbol, type NumberNudgeFn} from '@theatre/core/types/public'\nimport {sanitizeCompoundProps} from './internals'\n\nimport type {\n  Interpolator,\n  PropTypeConfig_Boolean,\n  PropTypeConfig_Compound,\n  PropTypeConfig_File,\n  PropTypeConfig_Image,\n  PropTypeConfig_Number,\n  PropTypeConfig_Rgba,\n  PropTypeConfig_String,\n  PropTypeConfig_StringLiteral,\n  UnknownShorthandCompoundProps,\n  ShorthandCompoundPropsToLonghandCompoundProps,\n  Rgba,\n  File,\n  Asset,\n} from '@theatre/core/types/public'\n\n// Notes on naming:\n// As of now, prop types are either `simple` or `composite`.\n// The compound type is a composite type. So is the upcoming enum type.\n// Composite types are not directly sequenceable yet. Their simple sub/descendent props are.\n\n/**\n * Validates the common options given to all prop types, such as `opts.label`\n *\n * @param fnCallSignature - See references for examples\n * @param opts - The common options of all prop types\n * @returns void - will throw if options are invalid\n */\nconst validateCommonOpts = (fnCallSignature: string, opts?: CommonOpts) => {\n  if (process.env.NODE_ENV !== 'production') {\n    if (opts === undefined) return\n    if (typeof opts !== 'object' || opts === null) {\n      throw new Error(\n        `opts in ${fnCallSignature} must either be undefined or an object.`,\n      )\n    }\n    if (Object.prototype.hasOwnProperty.call(opts, 'label')) {\n      const {label} = opts\n      if (typeof label !== 'string') {\n        throw new Error(\n          `opts.label in ${fnCallSignature} should be a string. ${userReadableTypeOfValue(\n            label,\n          )} given.`,\n        )\n      }\n      if (label.trim().length !== label.length) {\n        throw new Error(\n          `opts.label in ${fnCallSignature} should not start/end with whitespace. \"${label}\" given.`,\n        )\n      }\n      if (label.length === 0) {\n        throw new Error(\n          `opts.label in ${fnCallSignature} should not be an empty string. If you wish to have no label, remove opts.label from opts.`,\n        )\n      }\n    }\n  }\n}\n\n/**\n * A compound prop type (basically a JS object).\n *\n * @example\n * Usage:\n * ```ts\n * // shorthand\n * const position = {\n *   x: 0,\n *   y: 0\n * }\n * assert(sheet.object('some object', position).value.x === 0)\n *\n * // nesting\n * const foo = {bar: {baz: {quo: 0}}}\n * assert(sheet.object('some object', foo).value.bar.baz.quo === 0)\n *\n * // With additional options:\n * const position = t.compound(\n *   {x: 0, y: 0},\n *   // a custom label for the prop:\n *   {label: \"Position\"}\n * )\n * ```\n *\n */\nexport const compound = <Props extends UnknownShorthandCompoundProps>(\n  props: Props,\n  opts: CommonOpts = {},\n): PropTypeConfig_Compound<\n  ShorthandCompoundPropsToLonghandCompoundProps<Props>\n> => {\n  validateCommonOpts('t.compound(props, opts)', opts)\n  const sanitizedProps = sanitizeCompoundProps(props)\n  const deserializationCache = new WeakMap<{}, unknown>()\n  const config: PropTypeConfig_Compound<\n    ShorthandCompoundPropsToLonghandCompoundProps<Props>\n  > = {\n    type: 'compound',\n    props: sanitizedProps as $IntentionalAny,\n    valueType: null as $IntentionalAny,\n    [propTypeSymbol]: 'TheatrePropType',\n    label: opts.label,\n    default: mapValues(sanitizedProps, (p) => p.default) as $IntentionalAny,\n    deserializeAndSanitize: (json: unknown) => {\n      if (typeof json !== 'object' || !json) return undefined\n      if (deserializationCache.has(json)) {\n        return deserializationCache.get(json)\n      }\n\n      // TODO we should probably also check here whether `json` is a pure object rather\n      // than an instance of a class, just to avoid the possible edge cases of handling\n      // class instances.\n\n      const deserialized: $FixMe = {}\n      let atLeastOnePropWasDeserialized = false\n      for (const [key, propConfig] of Object.entries(sanitizedProps)) {\n        if (Object.prototype.hasOwnProperty.call(json, key)) {\n          const deserializedSub = propConfig.deserializeAndSanitize(\n            (json as $IntentionalAny)[key] as unknown,\n          )\n          if (deserializedSub != null) {\n            atLeastOnePropWasDeserialized = true\n            deserialized[key] = deserializedSub\n          }\n        }\n      }\n      deserializationCache.set(json, deserialized)\n      if (atLeastOnePropWasDeserialized) {\n        return deserialized\n      }\n    },\n  }\n  return config\n}\n\n/**\n * A file prop type\n *\n * @example\n * Usage:\n * ```ts\n *\n * // with a label:\n * const obj = sheet.object('key', {\n *   url: t.file('My file.glb', {\n *     label: 'Model'\n *   })\n * })\n * ```\n *\n * @param opts - Options (See usage examples)\n */\nexport const file = (\n  // The defaultValue parameter is a string for convenience, but it will be converted to an Asset object\n  defaultValue: File['id'],\n  opts: {\n    label?: string\n    interpolate?: Interpolator<File['id']>\n  } = {},\n): PropTypeConfig_File => {\n  if (process.env.NODE_ENV !== 'production') {\n    validateCommonOpts('t.file(defaultValue, opts)', opts)\n  }\n\n  const interpolate: Interpolator<File> = (left, right, progression) => {\n    const stringInterpolate = opts.interpolate ?? leftInterpolate\n\n    return {\n      type: 'file',\n      id: stringInterpolate(left.id, right.id, progression),\n    }\n  }\n\n  return {\n    type: 'file',\n    default: {type: 'file', id: defaultValue},\n    valueType: null as $IntentionalAny,\n    [propTypeSymbol]: 'TheatrePropType',\n    label: opts.label,\n    interpolate,\n    deserializeAndSanitize: _ensureFile,\n  }\n}\n\nconst _ensureFile = (val: unknown): File | undefined => {\n  if (!val) return undefined\n\n  let valid = true\n\n  if (\n    typeof (val as $IntentionalAny).id !== 'string' &&\n    ![null, undefined].includes((val as $IntentionalAny).id)\n  ) {\n    valid = false\n  }\n\n  if ((val as $IntentionalAny).type !== 'file') valid = false\n\n  if (!valid) return undefined\n\n  return val as File\n}\n\n/**\n * An image prop type\n *\n * @example\n * Usage:\n * ```ts\n *\n * // with a label:\n * const obj = sheet.object('key', {\n *   url: t.image('My image.png', {\n *     label: 'texture'\n *   })\n * })\n * ```\n *\n * @param opts - Options (See usage examples)\n */\nexport const image = (\n  // The defaultValue parameter is a string for convenience, but it will be converted to an Asset object\n  defaultValue: Asset['id'],\n  opts: {\n    label?: string\n    interpolate?: Interpolator<Asset['id']>\n  } = {},\n): PropTypeConfig_Image => {\n  if (process.env.NODE_ENV !== 'production') {\n    validateCommonOpts('t.image(defaultValue, opts)', opts)\n  }\n\n  const interpolate: Interpolator<Asset> = (left, right, progression) => {\n    const stringInterpolate = opts.interpolate ?? leftInterpolate\n\n    return {\n      type: 'image',\n      id: stringInterpolate(left.id, right.id, progression),\n    }\n  }\n\n  return {\n    type: 'image',\n    default: {type: 'image', id: defaultValue},\n    valueType: null as $IntentionalAny,\n    [propTypeSymbol]: 'TheatrePropType',\n    label: opts.label,\n    interpolate,\n    deserializeAndSanitize: _ensureImage,\n  }\n}\n\nconst _ensureImage = (val: unknown): Asset | undefined => {\n  if (!val) return undefined\n\n  let valid = true\n\n  if (\n    typeof (val as $IntentionalAny).id !== 'string' &&\n    ![null, undefined].includes((val as $IntentionalAny).id)\n  ) {\n    valid = false\n  }\n\n  if ((val as $IntentionalAny).type !== 'image') valid = false\n\n  if (!valid) return undefined\n\n  return val as Asset\n}\n\n/**\n * A number prop type.\n *\n * @example\n * Usage\n * ```ts\n * // shorthand:\n * const obj = sheet.object('key', {x: 0})\n *\n * // With options (equal to above)\n * const obj = sheet.object('key', {\n *   x: t.number(0)\n * })\n *\n * // With a range (note that opts.range is just a visual guide, not a validation rule)\n * const x = t.number(0, {range: [0, 10]}) // limited to 0 and 10\n *\n * // With custom nudging\n * const x = t.number(0, {nudgeMultiplier: 0.1}) // nudging will happen in 0.1 increments\n *\n * // With custom nudging function\n * const x = t.number({\n *   nudgeFn: (\n *     // the mouse movement (in pixels)\n *     deltaX: number,\n *     // the movement as a fraction of the width of the number editor's input\n *     deltaFraction: number,\n *     // A multiplier that's usually 1, but might be another number if user wants to nudge slower/faster\n *     magnitude: number,\n *     // the configuration of the number\n *     config: {nudgeMultiplier?: number; range?: [number, number]},\n *   ): number => {\n *     return deltaX * magnitude\n *   },\n * })\n * ```\n *\n * @param defaultValue - The default value (Must be a finite number)\n * @param opts - The options (See usage examples)\n * @returns A number prop config\n */\nexport const number = (\n  defaultValue: number,\n  opts: {\n    nudgeFn?: PropTypeConfig_Number['nudgeFn']\n    range?: PropTypeConfig_Number['range']\n    nudgeMultiplier?: number\n    label?: string\n  } = {},\n): PropTypeConfig_Number => {\n  if (process.env.NODE_ENV !== 'production') {\n    validateCommonOpts('t.number(defaultValue, opts)', opts)\n    if (typeof defaultValue !== 'number' || !isFinite(defaultValue)) {\n      throw new Error(\n        `Argument defaultValue in t.number(defaultValue) must be a number. ${userReadableTypeOfValue(\n          defaultValue,\n        )} given.`,\n      )\n    }\n    if (typeof opts === 'object' && opts !== null) {\n      if (Object.prototype.hasOwnProperty.call(opts, 'range')) {\n        if (!Array.isArray(opts.range)) {\n          throw new Error(\n            `opts.range in t.number(defaultValue, opts) must be a tuple of two numbers. ${userReadableTypeOfValue(\n              opts.range,\n            )} given.`,\n          )\n        }\n        if (opts.range.length !== 2) {\n          throw new Error(\n            `opts.range in t.number(defaultValue, opts) must have two elements. ${opts.range.length} given.`,\n          )\n        }\n        if (!opts.range.every((n) => typeof n === 'number' && !isNaN(n))) {\n          throw new Error(\n            `opts.range in t.number(defaultValue, opts) must be a tuple of two numbers.`,\n          )\n        }\n        if (opts.range[0] >= opts.range[1]) {\n          throw new Error(\n            `opts.range[0] in t.number(defaultValue, opts) must be smaller than opts.range[1]. Given: ${JSON.stringify(\n              opts.range,\n            )}`,\n          )\n        }\n      }\n      if (Object.prototype.hasOwnProperty.call(opts, 'nudgeMultiplier')) {\n        if (\n          typeof opts.nudgeMultiplier !== 'number' ||\n          !isFinite(opts.nudgeMultiplier)\n        ) {\n          throw new Error(\n            `opts.nudgeMultiplier in t.number(defaultValue, opts) must be a finite number. ${userReadableTypeOfValue(\n              opts.nudgeMultiplier,\n            )} given.`,\n          )\n        }\n      }\n      if (Object.prototype.hasOwnProperty.call(opts, 'nudgeFn')) {\n        if (typeof opts.nudgeFn !== 'function') {\n          throw new Error(\n            `opts.nudgeFn in t.number(defaultValue, opts) must be a function. ${userReadableTypeOfValue(\n              opts.nudgeFn,\n            )} given.`,\n          )\n        }\n      }\n    }\n  }\n\n  return {\n    type: 'number',\n    valueType: 0,\n    default: defaultValue,\n    [propTypeSymbol]: 'TheatrePropType',\n    ...(opts ? opts : {}),\n    label: opts.label,\n    nudgeFn: opts.nudgeFn ?? defaultNumberNudgeFn,\n    nudgeMultiplier:\n      typeof opts.nudgeMultiplier === 'number'\n        ? opts.nudgeMultiplier\n        : undefined,\n    interpolate: _interpolateNumber,\n    deserializeAndSanitize: numberDeserializer(opts.range),\n  }\n}\n\nconst numberDeserializer = (range?: PropTypeConfig_Number['range']) =>\n  range\n    ? (json: unknown): undefined | number => {\n        if (!(typeof json === 'number' && isFinite(json))) return undefined\n        return clamp(json, range[0], range[1])\n      }\n    : _ensureNumber\n\nconst _ensureNumber = (value: unknown): undefined | number =>\n  typeof value === 'number' && isFinite(value) ? value : undefined\n\nconst _interpolateNumber = (\n  left: number,\n  right: number,\n  progression: number,\n): number => {\n  return left + progression * (right - left)\n}\n\nexport const rgba = (\n  defaultValue: Rgba = {r: 0, g: 0, b: 0, a: 1},\n  opts: CommonOpts = {},\n): PropTypeConfig_Rgba => {\n  if (process.env.NODE_ENV !== 'production') {\n    validateCommonOpts('t.rgba(defaultValue, opts)', opts)\n\n    // Lots of duplicated code and stuff that probably shouldn't be here, mostly\n    // because we are still figuring out how we are doing validation, sanitization,\n    // decoding, decorating.\n\n    // Validate default value\n    let valid = true\n    for (const p of ['r', 'g', 'b', 'a']) {\n      if (\n        !Object.prototype.hasOwnProperty.call(defaultValue, p) ||\n        typeof (defaultValue as $IntentionalAny)[p] !== 'number'\n      ) {\n        valid = false\n      }\n    }\n\n    if (!valid) {\n      throw new Error(\n        `Argument defaultValue in t.rgba(defaultValue) must be of the shape { r: number; g: number, b: number, a: number; }.`,\n      )\n    }\n  }\n\n  // Clamp defaultValue components between 0 and 1\n  const sanitized = {}\n  for (const component of ['r', 'g', 'b', 'a']) {\n    ;(sanitized as $IntentionalAny)[component] = Math.min(\n      Math.max((defaultValue as $IntentionalAny)[component], 0),\n      1,\n    )\n  }\n\n  return {\n    type: 'rgba',\n    valueType: null as $IntentionalAny,\n    default: decorateRgba(sanitized as Rgba),\n    [propTypeSymbol]: 'TheatrePropType',\n    label: opts.label,\n    interpolate: _interpolateRgba,\n    deserializeAndSanitize: _sanitizeRgba,\n  }\n}\n\nconst _sanitizeRgba = (val: unknown): Rgba | undefined => {\n  if (!val) return undefined\n  let valid = true\n  for (const c of ['r', 'g', 'b', 'a']) {\n    if (\n      !Object.prototype.hasOwnProperty.call(val, c) ||\n      typeof (val as $IntentionalAny)[c] !== 'number'\n    ) {\n      valid = false\n    }\n  }\n\n  if (!valid) return undefined\n\n  // Clamp defaultValue components between 0 and 1\n  const sanitized = {}\n  for (const c of ['r', 'g', 'b', 'a']) {\n    ;(sanitized as $IntentionalAny)[c] = Math.min(\n      Math.max((val as $IntentionalAny)[c], 0),\n      1,\n    )\n  }\n\n  return decorateRgba(sanitized as Rgba)\n}\n\nconst _interpolateRgba = (\n  left: Rgba,\n  right: Rgba,\n  progression: number,\n): Rgba => {\n  const leftLab = linearSrgbToOklab(srgbToLinearSrgb(left))\n  const rightLab = linearSrgbToOklab(srgbToLinearSrgb(right))\n\n  const interpolatedLab = {\n    L: (1 - progression) * leftLab.L + progression * rightLab.L,\n    a: (1 - progression) * leftLab.a + progression * rightLab.a,\n    b: (1 - progression) * leftLab.b + progression * rightLab.b,\n    alpha: (1 - progression) * leftLab.alpha + progression * rightLab.alpha,\n  }\n\n  const interpolatedRgba = linearSrgbToSrgb(oklabToLinearSrgb(interpolatedLab))\n\n  return decorateRgba(interpolatedRgba)\n}\n\n/**\n * A boolean prop type\n *\n * @example\n * Usage:\n * ```ts\n * // shorthand:\n * const obj = sheet.object('key', {isOn: true})\n *\n * // with a label:\n * const obj = sheet.object('key', {\n *   isOn: t.boolean(true, {\n *     label: 'Enabled'\n *   })\n * })\n * ```\n *\n * @param defaultValue - The default value (must be a boolean)\n * @param opts - Options (See usage examples)\n */\nexport const boolean = (\n  defaultValue: boolean,\n  opts: {\n    label?: string\n    interpolate?: Interpolator<boolean>\n  } = {},\n): PropTypeConfig_Boolean => {\n  if (process.env.NODE_ENV !== 'production') {\n    validateCommonOpts('t.boolean(defaultValue, opts)', opts)\n    if (typeof defaultValue !== 'boolean') {\n      throw new Error(\n        `defaultValue in t.boolean(defaultValue) must be a boolean. ${userReadableTypeOfValue(\n          defaultValue,\n        )} given.`,\n      )\n    }\n  }\n\n  return {\n    type: 'boolean',\n    default: defaultValue,\n    valueType: null as $IntentionalAny,\n    [propTypeSymbol]: 'TheatrePropType',\n    label: opts.label,\n    interpolate: opts.interpolate ?? leftInterpolate,\n    deserializeAndSanitize: _ensureBoolean,\n  }\n}\n\nconst _ensureBoolean = (val: unknown): boolean | undefined => {\n  return typeof val === 'boolean' ? val : undefined\n}\n\nfunction leftInterpolate<T>(left: T): T {\n  return left\n}\n\n/**\n * A string prop type\n *\n * @example\n * Usage:\n * ```ts\n * // shorthand:\n * const obj = sheet.object('key', {message: \"Animation loading\"})\n *\n * // with a label:\n * const obj = sheet.object('key', {\n *   message: t.string(\"Animation Loading\", {\n *     label: 'The Message'\n *   })\n * })\n * ```\n *\n * @param defaultValue - The default value (must be a string)\n * @param opts - The options (See usage examples)\n * @returns A string prop type\n */\nexport const string = (\n  defaultValue: string,\n  opts: {\n    label?: string\n    interpolate?: Interpolator<string>\n  } = {},\n): PropTypeConfig_String => {\n  if (process.env.NODE_ENV !== 'production') {\n    validateCommonOpts('t.string(defaultValue, opts)', opts)\n    if (typeof defaultValue !== 'string') {\n      throw new Error(\n        `defaultValue in t.string(defaultValue) must be a string. ${userReadableTypeOfValue(\n          defaultValue,\n        )} given.`,\n      )\n    }\n  }\n  return {\n    type: 'string',\n    default: defaultValue,\n    valueType: null as $IntentionalAny,\n    [propTypeSymbol]: 'TheatrePropType',\n    label: opts.label,\n    interpolate: opts.interpolate ?? leftInterpolate,\n    deserializeAndSanitize: _ensureString,\n  }\n}\n\nfunction _ensureString(s: unknown): string | undefined {\n  return typeof s === 'string' ? s : undefined\n}\n\n/**\n * A stringLiteral prop type, useful for building menus or radio buttons.\n *\n * @example\n * Usage:\n * ```ts\n * // Basic usage\n * const obj = sheet.object('key', {\n *   light: t.stringLiteral(\"r\", {r: \"Red\", \"g\": \"Green\"})\n * })\n *\n * // Shown as a radio switch with a custom label\n * const obj = sheet.object('key', {\n *   light: t.stringLiteral(\"r\", {r: \"Red\", \"g\": \"Green\"})\n * }, {as: \"switch\", label: \"Street Light\"})\n * ```\n *\n * @returns A stringLiteral prop type\n *\n */\nexport function stringLiteral<\n  ValuesAndLabels extends {[key in string]: string},\n>(\n  /**\n   * Default value (a string that equals one of the options)\n   */\n  defaultValue: Extract<keyof ValuesAndLabels, string>,\n  /**\n   * The options. Use the `\"value\": \"Label\"` format.\n   *\n   * An object like `{[value]: Label}`. Example: `{r: \"Red\", \"g\": \"Green\"}`\n   */\n  valuesAndLabels: ValuesAndLabels,\n  /**\n   * opts.as Determines if editor is shown as a menu or a switch. Either 'menu' or 'switch'.  Default: 'menu'\n   */\n  opts: {\n    as?: 'menu' | 'switch'\n    label?: string\n    interpolate?: Interpolator<Extract<keyof ValuesAndLabels, string>>\n  } = {},\n): PropTypeConfig_StringLiteral<Extract<keyof ValuesAndLabels, string>> {\n  return {\n    type: 'stringLiteral',\n    default: defaultValue,\n    valuesAndLabels: {...valuesAndLabels},\n    [propTypeSymbol]: 'TheatrePropType',\n    valueType: null as $IntentionalAny,\n    as: opts.as ?? 'menu',\n    label: opts.label,\n    interpolate: opts.interpolate ?? leftInterpolate,\n    deserializeAndSanitize(\n      json: unknown,\n    ): undefined | Extract<keyof ValuesAndLabels, string> {\n      if (typeof json !== 'string') return undefined\n      if (Object.prototype.hasOwnProperty.call(valuesAndLabels, json)) {\n        return json as $IntentionalAny\n      } else {\n        return undefined\n      }\n    },\n  }\n}\n\n/**\n * This is the default nudging behavior. It'll be used if `config.nudgeFn` is empty in {@link number} `types.number(defaultValue, config)`.\n *\n * Its behavior is as follows:\n * - If `config.nudgeMultiplier` is set, then it'll be used as the unit of incrementing/decrementing the prop's value.\n *   For example, if `types.number(0, {nudgeMultiplier: 0.5})`, then nudging the number will make its value go up/down by 0.5, so: 0, 0.5, 1.0, -0.5, ...\n *   Note that if the prop's value is, say, 0.1, then nudging it will still make its value go up/down by 0.5, so: 0.6, 1.1, -0.6, ...\n * - Otherwise, the amount of nudge will be determined based on whether the number has a range.\n *\n */\nconst defaultNumberNudgeFn: NumberNudgeFn = ({\n  config,\n  deltaX,\n  deltaFraction,\n  magnitude,\n}) => {\n  const {range} = config\n\n  if (\n    !config.nudgeMultiplier &&\n    range &&\n    !range.includes(Infinity) &&\n    !range.includes(-Infinity)\n  ) {\n    return deltaFraction * (range[1] - range[0]) * magnitude\n  }\n\n  return deltaX * magnitude * (config.nudgeMultiplier ?? 1)\n}\n\ntype CommonOpts = {\n  /**\n   * Each prop type may be given a custom label instead of the name of the sub-prop\n   * it is in.\n   *\n   * @example\n   * ```ts\n   * const position = {\n   *   x: t.number(0), // label would be 'x'\n   *   y: t.number(0, {label: 'top'}) // label would be 'top'\n   * }\n   * ```\n   */\n  label?: string\n}\n"
  },
  {
    "path": "packages/core/src/propTypes/internals.ts",
    "content": "import {InvalidArgumentError} from '@theatre/utils/errors'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport userReadableTypeOfValue from '@theatre/utils/userReadableTypeOfValue'\nimport {isPlainObject} from 'lodash-es'\nimport {\n  propTypeSymbol,\n  type PropTypeConfig,\n  type UnknownShorthandCompoundProps,\n  type UnknownValidCompoundProps,\n} from '@theatre/core/types/public'\nimport * as t from './index'\n\nexport function isLonghandPropType(t: unknown): t is PropTypeConfig {\n  return (\n    typeof t === 'object' &&\n    !!t &&\n    (t as $IntentionalAny)[propTypeSymbol] === 'TheatrePropType'\n  )\n}\n\nexport function toLonghandProp(p: unknown): PropTypeConfig {\n  if (typeof p === 'number') {\n    return t.number(p)\n  } else if (typeof p === 'boolean') {\n    return t.boolean(p)\n  } else if (typeof p === 'string') {\n    return t.string(p)\n  } else if (typeof p === 'object' && !!p) {\n    if (isLonghandPropType(p)) return p\n    if (isPlainObject(p)) {\n      return t.compound(p as $IntentionalAny)\n    } else {\n      throw new InvalidArgumentError(\n        `This value is not a valid prop type: ${userReadableTypeOfValue(p)}`,\n      )\n    }\n  } else {\n    throw new InvalidArgumentError(\n      `This value is not a valid prop type: ${userReadableTypeOfValue(p)}`,\n    )\n  }\n}\n\nexport function sanitizeCompoundProps(\n  props: UnknownShorthandCompoundProps,\n): UnknownValidCompoundProps {\n  const sanitizedProps: UnknownValidCompoundProps = {}\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof props !== 'object' || !props) {\n      throw new InvalidArgumentError(\n        `t.compound() expects an object, like: {x: 10}. ${userReadableTypeOfValue(\n          props,\n        )} given.`,\n      )\n    }\n  }\n  for (const key of Object.keys(props)) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof key !== 'string') {\n        throw new InvalidArgumentError(\n          `t.compound()'s keys must be all strings. ${userReadableTypeOfValue(\n            key,\n          )} given.`,\n        )\n      } else if (key.length === 0 || !key.match(/^\\w+$/)) {\n        throw new InvalidArgumentError(\n          `compound key ${userReadableTypeOfValue(\n            key,\n          )} is invalid. The keys must be alphanumeric and start with a letter.`,\n        )\n      } else if (key.length > 64) {\n        throw new InvalidArgumentError(\n          `compound key ${userReadableTypeOfValue(key)} is too long.`,\n        )\n      }\n    }\n\n    const val = props[key]\n    if (isLonghandPropType(val)) {\n      sanitizedProps[key] = val as $IntentionalAny\n    } else {\n      sanitizedProps[key] = toLonghandProp(val) as $IntentionalAny\n    }\n  }\n  return sanitizedProps\n}\n"
  },
  {
    "path": "packages/core/src/propTypes/utils.ts",
    "content": "import type {\n  IBasePropType,\n  PropTypeConfig,\n  PropTypeConfig_AllSimples,\n  PropTypeConfig_Compound,\n  PropTypeConfig_Enum,\n  PathToProp,\n  $IntentionalAny,\n} from '@theatre/core/types/public'\nimport memoizeFn from '@theatre/utils/memoizeFn'\n\n/**\n * Iterates recursively over all props of an object (which should be a {@link SerializableMap}) and runs `fn`\n * on each prop that has a primitive value (string/number/boolean) and is _NOT_ null/undefined.\n *\n * Example:\n * ```ts\n * forEachDeep(\n *   // The object to iterate over. The `fn` is going to be called on `b` and `c`.\n *   {a: {b: 1, c: 2, d: null, e: undefined}},\n *   // the function to run on each prop\n *   (value, pathToValue) => {\n *     console.log(value, pathToValue)\n *   },\n * // We can optionally pass a path prefix to prepend to the path of each prop\n * ['foo', 'bar'])\n *\n * // The above will log:\n * // 1 ['foo', 'bar', 'a', 'b']\n * // 2 ['foo', 'bar', 'a', 'c']\n * // Note that null and undefined values are skipped.\n * // Also note that `a` is also skippped, because it's not a primitive value.\n * ```\n */\nexport function forEachPropDeep<\n  Primitive extends\n    | string\n    | number\n    | boolean\n    | PropTypeConfig_AllSimples['valueType'],\n>(\n  m:\n    | PropTypeConfig_Compound<$IntentionalAny>['valueType']\n    | Primitive\n    | undefined\n    | unknown,\n  fn: (value: Primitive, path: PathToProp) => void,\n  startingPath: PathToProp = [],\n): void {\n  if (typeof m === 'object' && m) {\n    if (isImage(m) || isRGBA(m)) {\n      fn(m as $IntentionalAny as Primitive, startingPath)\n      return\n    }\n    for (const [key, value] of Object.entries(m)) {\n      forEachPropDeep(value!, fn, [...startingPath, key])\n    }\n  } else if (m === undefined || m === null) {\n    return\n  } else {\n    fn(m as $IntentionalAny as Primitive, startingPath)\n  }\n}\n\nconst isImage = (value: unknown): value is {type: 'image'; id: string} => {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    Object.hasOwnProperty.call(value, 'type') &&\n    // @ts-ignore\n    value.type === 'image' &&\n    Object.hasOwnProperty.call(value, 'id') &&\n    // @ts-ignore\n    typeof value.id === 'string' &&\n    // @ts-ignore\n    value.id !== ''\n  )\n}\n\nconst isRGBA = (\n  value: unknown,\n): value is {r: number; g: number; b: number; a: number} => {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    Object.hasOwnProperty.call(value, 'r') &&\n    Object.hasOwnProperty.call(value, 'g') &&\n    Object.hasOwnProperty.call(value, 'b') &&\n    Object.hasOwnProperty.call(value, 'a') &&\n    // @ts-ignore\n    typeof value.r === 'number' &&\n    // @ts-ignore\n    typeof value.g === 'number' &&\n    // @ts-ignore\n    typeof value.b === 'number' &&\n    // @ts-ignore\n    typeof value.a === 'number'\n  )\n}\n\n/**\n * Either compound or enum properties can be considered \"composite\"\n * */\nexport function isPropConfigComposite(\n  c: PropTypeConfig,\n): c is PropTypeConfig_Compound<{}> | PropTypeConfig_Enum {\n  return c.type === 'compound' || c.type === 'enum'\n}\n\n/**\n * Returns the prop config at the given path. Traverses composite props until\n * it reaches the deepest prop config. Returns `undefined` if none is found.\n *\n * This is _NOT_ type-safe, so use with caution.\n */\nexport function getPropConfigByPath(\n  parentConf: PropTypeConfig | undefined,\n  path: PathToProp,\n): undefined | PropTypeConfig {\n  if (!parentConf) return undefined\n  const [key, ...rest] = path\n  if (key === undefined) return parentConf\n  if (!isPropConfigComposite(parentConf)) return undefined\n\n  const sub =\n    parentConf.type === 'enum'\n      ? parentConf.cases[key]\n      : (parentConf as $IntentionalAny).props[key]\n\n  return getPropConfigByPath(sub, rest)\n}\n\n/**\n * @param value - An arbitrary value. May be matching the prop's type or not\n * @param propConfig - The configuration object for a prop\n * @returns value if it matches the prop's type\n * otherwise returns the default value for the prop\n */\nexport function valueInProp<PropConfig extends PropTypeConfig_AllSimples>(\n  value: unknown,\n  propConfig: PropConfig,\n): PropConfig extends IBasePropType<$IntentionalAny, $IntentionalAny, infer T>\n  ? T\n  : never {\n  const sanitizedVal = propConfig.deserializeAndSanitize(value)\n  if (sanitizedVal === undefined) {\n    return propConfig.default\n  } else {\n    return sanitizedVal\n  }\n}\n\n/**\n * Returns true if the prop can be sequenced according to its config. This basically returns false for composite props,\n * and true for everything else.\n */\nexport function isPropConfSequencable(\n  conf: PropTypeConfig,\n): conf is Extract<PropTypeConfig, {interpolate: any}> {\n  return !isPropConfigComposite(conf) // now all non-compounds are sequencable\n}\n\n/**\n * This basically checks of the compound prop has at least one simple prop in its descendants.\n * In other words, if the compound props has no subs, or its subs are only compounds that eventually\n * don't have simple subs, this will return false.\n */\nexport const compoundHasSimpleDescendants = memoizeFn(\n  (conf: PropTypeConfig_Compound<{}> | PropTypeConfig_Enum): boolean => {\n    if (conf.type === 'enum') {\n      throw new Error(`Not implemented yet for enums`)\n    }\n\n    for (const key in conf.props) {\n      const subConf = conf.props[\n        key as $IntentionalAny as keyof typeof conf.props\n      ] as PropTypeConfig\n      if (isPropConfigComposite(subConf)) {\n        if (compoundHasSimpleDescendants(subConf)) {\n          return true\n        }\n      } else {\n        return true\n      }\n    }\n    return false\n  },\n)\n\n/**\n * Iterates recursively over the simple props of a compound prop. Returns a generator.\n *\n *\n * @param conf - The prop config\n * @param pathPrefix - The path prefix to prepend to the paths of the props\n * @returns A generator that yields the path and the config of each simple prop\n *\n *  * Example:\n * ```ts\n * const conf = types.compound({a: {b: 1, c: {d: 2}}})\n * for (const {path, conf} of iteratePropType(conf, ['foo'])) {\n *   console.log({path, conf})\n * }\n * // logs:\n * // {path: ['foo', 'a', 'b'], conf: {type: 'number', default: 1}}\n * // {path: ['foo', 'a', 'c', 'd'], conf: {type: 'number', default: 2}}\n * ```\n */\nexport function* iteratePropType(\n  conf: PropTypeConfig,\n  pathPrefix: PathToProp,\n): Generator<{path: PathToProp; conf: PropTypeConfig}, void, void> {\n  if (conf.type === 'compound') {\n    for (const key in conf.props) {\n      yield* iteratePropType(conf.props[key] as PropTypeConfig, [\n        ...pathPrefix,\n        key,\n      ])\n    }\n  } else if (conf.type === 'enum') {\n    throw new Error(`Not implemented yet`)\n  } else {\n    return yield {path: pathPrefix, conf}\n  }\n}\n"
  },
  {
    "path": "packages/core/src/rafDrivers.ts",
    "content": "import {Ticker} from '@theatre/dataverse'\nimport {setPrivateAPI} from './privateAPIs'\nimport type {IRafDriver} from './types/public'\n\nexport interface RafDriverPrivateAPI {\n  readonly type: 'Theatre_RafDriver_PrivateAPI'\n  publicApi: IRafDriver\n  ticker: Ticker\n  start?: () => void\n  stop?: () => void\n}\n\nlet lastDriverId = 0\n\n/**\n * Creates a custom raf driver.\n * `rafDriver`s allow you to control when and how often computations in Theatre tick forward. (raf stands for [`requestAnimationFrame`](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame)).\n * The default `rafDriver` in Theatre creates a `raf` loop and ticks forward on each frame. You can create your own `rafDriver`, which enables the following use-cases:\n *\n * 1. When using Theatre.js alongside other animation libs (`@react-three/fiber`/`gsap`/`lenis`/`etc`), you'd want all animation libs to use a single `raf` loop to keep the libraries in sync and also to get better performance.\n * 2. In XR sessions, you'd want Theatre to tick forward using [`xr.requestAnimationFrame()`](https://developer.mozilla.org/en-US/docs/Web/API/XRSession/requestAnimationFrame).\n * 3. In some advanced cases, you'd just want to manually tick forward (many ticks per frame, or skipping many frames, etc). This is useful for recording an animation, rendering to a file, testing an animation, running benchmarks, etc.\n *\n * Here is how you'd create a custom `rafDriver`:\n *\n * ```js\n * import { createRafDriver } from '@theatre/core'\n *\n * const rafDriver = createRafDriver({ name: 'a custom 5fps raf driver' })\n *\n * setInterval(() => {\n *   rafDriver.tick(performance.now())\n * }, 200)\n * ```\n *\n * Now, any time you set up an `onChange()` listener, pass your custom `rafDriver`:\n *\n * ```js\n * import { onChange } from '@theatre/core'\n *\n * onChange(\n *   // let's say object is a Theatre object, the one returned from calling `sheet.object()`\n *   object.props,\n *   // this callback will now only be called at 5fps (and won't be called if there are no new values)\n *   // even if `sequence.play()` updates `object.props` at 60fps, this listener is called a maximum of 5fps\n *   (propValues) => {\n *     console.log(propValues)\n *   },\n *   rafDriver,\n * )\n *\n * // this will update the values of `object.props` at 60fps, but the listener above will still get called a maximum of 5fps\n * sheet.sequence.play()\n *\n * // we can also customize at what resolution the sequence's playhead moves forward\n * sheet.sequence.play({ rafDriver }) // the playhead will move forward at 5fps\n * ```\n *\n * You can optionally make studio use this `rafDriver`. This means the parts of the studio that tick based on raf, will now tick at 5fps. This is only useful if you're doing something crazy like running the studio (and not the core) in an XR frame.\n *\n * ```js\n * theatre.init({studio: true,\n *   __experimental_rafDriver: rafDriver,\n * })\n * ```\n *\n * `rafDriver`s can optionally provide a `start/stop` callback. Theatre will call `start()` when it actually has computations scheduled, and will call `stop` if there is nothing to update after a few ticks:\n *\n * ```js\n * import { createRafDriver } from '@theatre/core'\n * import type { IRafDriver } from '@theare/core'\n *\n * function createBasicRafDriver(): IRafDriver {\n *   let rafId: number | null = null\n *   const start = (): void => {\n *     if (typeof window !== 'undefined') {\n *       const onAnimationFrame = (t: number) => {\n *         driver.tick(t)\n *         rafId = window.requestAnimationFrame(onAnimationFrame)\n *       }\n *       rafId = window.requestAnimationFrame(onAnimationFrame)\n *     } else {\n *       driver.tick(0)\n *       setTimeout(() => driver.tick(1), 0)\n *     }\n *   }\n *\n *   const stop = (): void => {\n *     if (typeof window !== 'undefined') {\n *       if (rafId !== null) {\n *         window.cancelAnimationFrame(rafId)\n *       }\n *     } else {\n *       // nothing to do in SSR\n *     }\n *   }\n *\n *   const driver = createRafDriver({ name: 'DefaultCoreRafDriver', start, stop })\n *\n *   return driver\n * }\n * ```\n */\nexport function createRafDriver(conf?: {\n  name?: string\n  start?: () => void\n  stop?: () => void\n}): IRafDriver {\n  const tick = (time: number): void => {\n    ticker.tick(time)\n  }\n\n  const ticker = new Ticker({\n    onActive() {\n      conf?.start?.()\n    },\n    onDormant() {\n      conf?.stop?.()\n    },\n  })\n\n  const driverPublicApi: IRafDriver = {\n    tick,\n    id: lastDriverId++,\n    name: conf?.name ?? `CustomRafDriver-${lastDriverId}`,\n    type: 'Theatre_RafDriver_PublicAPI',\n  }\n\n  const driverPrivateApi: RafDriverPrivateAPI = {\n    type: 'Theatre_RafDriver_PrivateAPI',\n    publicApi: driverPublicApi,\n    ticker,\n    start: conf?.start,\n    stop: conf?.stop,\n  }\n\n  setPrivateAPI(driverPublicApi, driverPrivateApi)\n\n  return driverPublicApi\n}\n"
  },
  {
    "path": "packages/core/src/sequences/Sequence.ts",
    "content": "import type Project from '@theatre/core/projects/Project'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport {encodePathToProp} from '@theatre/utils/pathToProp'\nimport type {BasicKeyframe, SequenceAddress} from '@theatre/core/types/public'\nimport didYouMean from '@theatre/utils/didYouMean'\nimport {InvalidArgumentError} from '@theatre/utils/errors'\nimport type {\n  Prism,\n  Pointer,\n  Ticker,\n  PointerToPrismProvider,\n} from '@theatre/dataverse'\nimport {getPointerParts} from '@theatre/dataverse'\nimport {Atom} from '@theatre/dataverse'\nimport {pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport {padStart} from 'lodash-es'\nimport type {\n  IPlaybackController,\n  IPlaybackState,\n} from './playbackControllers/DefaultPlaybackController'\nimport DefaultPlaybackController from './playbackControllers/DefaultPlaybackController'\nimport TheatreSequence from './TheatreSequence'\n\nimport type {\n  IPlaybackDirection,\n  IPlaybackRange,\n  ISequence,\n} from '@theatre/core/types/public'\nimport {notify} from '@theatre/core/utils/notify'\nimport type {$IntentionalAny} from '@theatre/dataverse/src/types'\nimport {isSheetObject} from '@theatre/core/utils/instanceTypes'\nimport {getSortedKeyframesCached} from '@theatre/core/utils/keyframeUtils'\n\nconst possibleDirections = [\n  'normal',\n  'reverse',\n  'alternate',\n  'alternateReverse',\n]\n\nexport default class Sequence implements PointerToPrismProvider {\n  public readonly address: SequenceAddress\n  publicApi: ISequence\n\n  private _playbackControllerBox: Atom<IPlaybackController>\n  private _prismOfStatePointer: Prism<Pointer<IPlaybackState>>\n  private _positionD: Prism<number>\n  private _positionFormatterD: Prism<ISequencePositionFormatter>\n  _playableRangeD: undefined | Prism<{start: number; end: number}>\n\n  readonly pointer: ISequence['pointer'] = pointer({root: this, path: []})\n  readonly $$isPointerToPrismProvider = true\n\n  constructor(\n    readonly _project: Project,\n    readonly _sheet: Sheet,\n    readonly _lengthD: Prism<number>,\n    readonly _subUnitsPerUnitD: Prism<number>,\n    playbackController?: IPlaybackController,\n  ) {\n    this.address = {...this._sheet.address, sequenceName: 'default'}\n\n    this.publicApi = new TheatreSequence(this)\n\n    this._playbackControllerBox = new Atom(\n      playbackController ?? new DefaultPlaybackController(),\n    )\n\n    this._prismOfStatePointer = prism(\n      () => this._playbackControllerBox.prism.getValue().statePointer,\n    )\n\n    this._positionD = prism(() => {\n      const statePointer = this._prismOfStatePointer.getValue()\n      return val(statePointer.position)\n    })\n\n    this._positionFormatterD = prism(() => {\n      const subUnitsPerUnit = val(this._subUnitsPerUnitD)\n      return new TimeBasedPositionFormatter(subUnitsPerUnit)\n    })\n  }\n\n  pointerToPrism<V>(pointer: Pointer<V>): Prism<V> {\n    const {path} = getPointerParts(pointer)\n    if (path.length === 0) {\n      return prism((): ISequence['pointer']['$$__pointer_type'] => ({\n        length: val(this.pointer.length),\n        playing: val(this.pointer.playing),\n        position: val(this.pointer.position),\n      })) as $IntentionalAny as Prism<V>\n    }\n    if (path.length > 1) {\n      return prism(() => undefined) as $IntentionalAny as Prism<V>\n    }\n    const [prop] = path\n    if (prop === 'length') {\n      return this._lengthD as $IntentionalAny as Prism<V>\n    } else if (prop === 'position') {\n      return this._positionD as $IntentionalAny as Prism<V>\n    } else if (prop === 'playing') {\n      return prism(() => {\n        return val(this._prismOfStatePointer.getValue().playing)\n      }) as $IntentionalAny as Prism<V>\n    } else {\n      return prism(() => undefined) as $IntentionalAny as Prism<V>\n    }\n  }\n\n  /**\n   * Takes a pointer to a property of a SheetObject and returns the keyframes of that property.\n   *\n   * Theoretically, this method can be called from inside a prism so it can be reactive.\n   */\n  getKeyframesOfSimpleProp<V>(prop: Pointer<any>): BasicKeyframe[] {\n    const {path, root} = getPointerParts(prop)\n\n    if (!isSheetObject(root)) {\n      throw new InvalidArgumentError(\n        'Argument prop must be a pointer to a SheetObject property',\n      )\n    }\n\n    const trackP = val(\n      this._project.pointers.historic.sheetsById[this._sheet.address.sheetId]\n        .sequence.tracksByObject[root.address.objectKey],\n    )\n\n    if (!trackP) {\n      return []\n    }\n\n    const {trackData, trackIdByPropPath} = trackP\n    const objectAddress = encodePathToProp(path)\n    const id = trackIdByPropPath[objectAddress]\n\n    if (!id) {\n      return []\n    }\n\n    const track = trackData[id]\n\n    if (!track) {\n      return []\n    }\n\n    return getSortedKeyframesCached(track.keyframes)\n  }\n\n  get positionFormatter(): ISequencePositionFormatter {\n    return this._positionFormatterD.getValue()\n  }\n\n  get prismOfStatePointer() {\n    return this._prismOfStatePointer\n  }\n\n  get length() {\n    return this._lengthD.getValue()\n  }\n\n  get positionPrism() {\n    return this._positionD\n  }\n\n  get position() {\n    return this._playbackControllerBox.get().getCurrentPosition()\n  }\n\n  get subUnitsPerUnit(): number {\n    return this._subUnitsPerUnitD.getValue()\n  }\n\n  get positionSnappedToGrid(): number {\n    return this.closestGridPosition(this.position)\n  }\n\n  closestGridPosition = (posInUnitSpace: number): number => {\n    const subUnitsPerUnit = this.subUnitsPerUnit\n    const gridLength = 1 / subUnitsPerUnit\n\n    return parseFloat(\n      (Math.round(posInUnitSpace / gridLength) * gridLength).toFixed(3),\n    )\n  }\n\n  set position(requestedPosition: number) {\n    let position = requestedPosition\n    this.pause()\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof position !== 'number') {\n        console.error(\n          `value t in sequence.position = t must be a number. ${typeof position} given`,\n        )\n        position = 0\n      }\n      if (position < 0) {\n        console.error(\n          `sequence.position must be a positive number. ${position} given`,\n        )\n        position = 0\n      }\n    }\n    if (position > this.length) {\n      position = this.length\n    }\n    const dur = this.length\n    this._playbackControllerBox\n      .get()\n      .gotoPosition(position > dur ? dur : position)\n  }\n\n  getDurationCold() {\n    return this._lengthD.getValue()\n  }\n\n  get playing() {\n    return val(this._playbackControllerBox.get().statePointer.playing)\n  }\n\n  _makeRangeFromSequenceTemplate(): Prism<IPlaybackRange> {\n    return prism(() => {\n      return [0, val(this._lengthD)]\n    })\n  }\n\n  /**\n   * Controls the playback within a range. Repeats infinitely unless stopped.\n   *\n   * @remarks\n   *   One use case for this is to play the playback within the focus range.\n   *\n   * @param rangeD - The prism that contains the range that will be used for the playback\n   *\n   * @returns  a promise that gets rejected if the playback stopped for whatever reason\n   *\n   */\n  playDynamicRange(\n    rangeD: Prism<IPlaybackRange>,\n    ticker: Ticker,\n  ): Promise<unknown> {\n    return this._playbackControllerBox.get().playDynamicRange(rangeD, ticker)\n  }\n\n  async play(\n    conf: Partial<{\n      iterationCount: number\n      range: IPlaybackRange\n      rate: number\n      direction: IPlaybackDirection\n    }>,\n    ticker: Ticker,\n  ): Promise<boolean> {\n    const sequenceDuration = this.length\n    const range: IPlaybackRange =\n      conf && conf.range ? conf.range : [0, sequenceDuration]\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof range[0] !== 'number' || range[0] < 0) {\n        throw new InvalidArgumentError(\n          `Argument conf.range[0] in sequence.play(conf) must be a positive number. ${JSON.stringify(\n            range[0],\n          )} given.`,\n        )\n      }\n      if (range[0] >= sequenceDuration) {\n        throw new InvalidArgumentError(\n          `Argument conf.range[0] in sequence.play(conf) cannot be longer than the duration of the sequence, which is ${sequenceDuration}s. ${JSON.stringify(\n            range[0],\n          )} given.`,\n        )\n      }\n      if (typeof range[1] !== 'number' || range[1] <= 0) {\n        throw new InvalidArgumentError(\n          `Argument conf.range[1] in sequence.play(conf) must be a number larger than zero. ${JSON.stringify(\n            range[1],\n          )} given.`,\n        )\n      }\n\n      if (range[1] > sequenceDuration) {\n        notify.warning(\n          \"Couldn't play sequence in given range\",\n          `Your animation will still play until the end of the sequence, however the argument \\`conf.range[1]\\` given in \\`sequence.play(conf)\\` (${JSON.stringify(\n            range[1],\n          )}s) is longer than the duration of the sequence (${sequenceDuration}s).\n\nTo fix this, either set \\`conf.range[1]\\` to be less the duration of the sequence, or adjust the sequence duration in the UI.`,\n          [\n            {\n              url: 'https://www.theatrejs.com/docs/latest/manual/sequences',\n              title: 'Sequences',\n            },\n            {\n              url: 'https://www.theatrejs.com/docs/latest/manual/sequences',\n              title: 'Playback API',\n            },\n          ],\n        )\n        range[1] = sequenceDuration\n      }\n\n      if (range[1] <= range[0]) {\n        throw new InvalidArgumentError(\n          `Argument conf.range[1] in sequence.play(conf) must be larger than conf.range[0]. ${JSON.stringify(\n            range,\n          )} given.`,\n        )\n      }\n    }\n\n    const iterationCount =\n      conf && typeof conf.iterationCount === 'number' ? conf.iterationCount : 1\n    if (process.env.NODE_ENV !== 'production') {\n      if (\n        !(Number.isInteger(iterationCount) && iterationCount > 0) &&\n        iterationCount !== Infinity\n      ) {\n        throw new InvalidArgumentError(\n          `Argument conf.iterationCount in sequence.play(conf) must be an integer larger than 0. ${JSON.stringify(\n            iterationCount,\n          )} given.`,\n        )\n      }\n    }\n\n    const rate = conf && typeof conf.rate !== 'undefined' ? conf.rate : 1\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof rate !== 'number' || rate === 0) {\n        throw new InvalidArgumentError(\n          `Argument conf.rate in sequence.play(conf) must be a number larger than 0. ${JSON.stringify(\n            rate,\n          )} given.`,\n        )\n      }\n\n      if (rate < 0) {\n        throw new InvalidArgumentError(\n          `Argument conf.rate in sequence.play(conf) must be a number larger than 0. ${JSON.stringify(\n            rate,\n          )} given. If you want the animation to play backwards, try setting conf.direction to 'reverse' or 'alternateReverse'.`,\n        )\n      }\n    }\n\n    const direction = conf && conf.direction ? conf.direction : 'normal'\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (possibleDirections.indexOf(direction) === -1) {\n        throw new InvalidArgumentError(\n          `Argument conf.direction in sequence.play(conf) must be one of ${JSON.stringify(\n            possibleDirections,\n          )}. ${JSON.stringify(direction)} given. ${didYouMean(\n            direction,\n            possibleDirections,\n          )}`,\n        )\n      }\n    }\n\n    return await this._play(\n      iterationCount,\n      [range[0], range[1]],\n      rate,\n      direction,\n      ticker,\n    )\n  }\n\n  protected _play(\n    iterationCount: number,\n    range: IPlaybackRange,\n    rate: number,\n    direction: IPlaybackDirection,\n    ticker: Ticker,\n  ): Promise<boolean> {\n    return this._playbackControllerBox\n      .get()\n      .play(iterationCount, range, rate, direction, ticker)\n  }\n\n  pause() {\n    this._playbackControllerBox.get().pause()\n  }\n\n  replacePlaybackController(playbackController: IPlaybackController) {\n    this.pause()\n    const oldController = this._playbackControllerBox.get()\n    this._playbackControllerBox.set(playbackController)\n\n    const time = oldController.getCurrentPosition()\n    oldController.destroy()\n    playbackController.gotoPosition(time)\n  }\n}\n\nexport interface ISequencePositionFormatter {\n  formatSubUnitForGrid(posInUnitSpace: number): string\n  formatFullUnitForGrid(posInUnitSpace: number): string\n  formatForPlayhead(posInUnitSpace: number): string\n  formatBasic(posInUnitSpace: number): string\n}\n\nclass TimeBasedPositionFormatter implements ISequencePositionFormatter {\n  constructor(private readonly _fps: number) {}\n  formatSubUnitForGrid(posInUnitSpace: number): string {\n    const subSecondPos = posInUnitSpace % 1\n    const frame = 1 / this._fps\n\n    const frames = Math.round(subSecondPos / frame)\n    return frames + 'f'\n  }\n\n  formatFullUnitForGrid(posInUnitSpace: number): string {\n    let p = posInUnitSpace\n\n    let s = ''\n\n    if (p >= hour) {\n      const hours = Math.floor(p / hour)\n      s += hours + 'h'\n      p = p % hour\n    }\n\n    if (p >= minute) {\n      const minutes = Math.floor(p / minute)\n      s += minutes + 'm'\n      p = p % minute\n    }\n\n    if (p >= second) {\n      const seconds = Math.floor(p / second)\n      s += seconds + 's'\n      p = p % second\n    }\n\n    const frame = 1 / this._fps\n\n    if (p >= frame) {\n      const frames = Math.floor(p / frame)\n      s += frames + 'f'\n      p = p % frame\n    }\n\n    return s.length === 0 ? '0s' : s\n  }\n\n  formatForPlayhead(posInUnitSpace: number): string {\n    let p = posInUnitSpace\n\n    let s = ''\n\n    if (p >= hour) {\n      const hours = Math.floor(p / hour)\n      s += padStart(hours.toString(), 2, '0') + 'h'\n      p = p % hour\n    }\n\n    if (p >= minute) {\n      const minutes = Math.floor(p / minute)\n      s += padStart(minutes.toString(), 2, '0') + 'm'\n      p = p % minute\n    } else if (s.length > 0) {\n      s += '00m'\n    }\n\n    if (p >= second) {\n      const seconds = Math.floor(p / second)\n      s += padStart(seconds.toString(), 2, '0') + 's'\n      p = p % second\n    } else {\n      s += '00s'\n    }\n\n    const frameLength = 1 / this._fps\n\n    if (p >= frameLength) {\n      const frames = Math.round(p / frameLength)\n      s += padStart(frames.toString(), 2, '0') + 'f'\n      p = p % frameLength\n    } else if (p / frameLength > 0.98) {\n      const frames = 1\n      s += padStart(frames.toString(), 2, '0') + 'f'\n      p = p % frameLength\n    } else {\n      s += '00f'\n    }\n\n    return s.length === 0 ? '00s00f' : s\n  }\n\n  formatBasic(posInUnitSpace: number): string {\n    return posInUnitSpace.toFixed(2) + 's'\n  }\n}\n\nconst second = 1\nconst minute = second * 60\nconst hour = minute * 60\n"
  },
  {
    "path": "packages/core/src/sequences/TheatreSequence.ts",
    "content": "import {privateAPI, setPrivateAPI} from '@theatre/core/privateAPIs'\nimport {defer} from '@theatre/utils/defer'\nimport type Sequence from './Sequence'\nimport AudioPlaybackController from './playbackControllers/AudioPlaybackController'\nimport {getCoreTicker} from '@theatre/core/coreTicker'\nimport type {Pointer} from '@theatre/dataverse'\nimport {notify} from '@theatre/core/utils/notify'\nimport type {\n  IAttachAudioArgs,\n  IPlaybackDirection,\n  IPlaybackRange,\n  ISequence,\n  IRafDriver,\n  BasicKeyframe,\n} from '@theatre/core/types/public'\n\nexport default class TheatreSequence implements ISequence {\n  get type(): 'Theatre_Sequence_PublicAPI' {\n    return 'Theatre_Sequence_PublicAPI'\n  }\n\n  /**\n   * @internal\n   */\n  constructor(seq: Sequence) {\n    setPrivateAPI(this, seq)\n  }\n\n  play(\n    conf?: Partial<{\n      iterationCount: number\n      range: IPlaybackRange\n      rate: number\n      direction: IPlaybackDirection\n      rafDriver: IRafDriver\n    }>,\n  ): Promise<boolean> {\n    const priv = privateAPI(this)\n    if (priv._project.isReady()) {\n      const ticker = conf?.rafDriver\n        ? privateAPI(conf.rafDriver).ticker\n        : getCoreTicker()\n      return priv.play(conf ?? {}, ticker)\n    } else {\n      if (process.env.NODE_ENV !== 'production') {\n        notify.warning(\n          \"Sequence can't be played\",\n          'You seem to have called `sequence.play()` before the project has finished loading.\\n\\n' +\n            'This would **not** a problem in production when using `@theatre/core`, since Theatre.js loads instantly in core mode. ' +\n            \"However, when using `@theatre/studio`, it takes a few milliseconds for it to load your project's state, \" +\n            `before which your sequences cannot start playing.\\n` +\n            `\\n` +\n            'To fix this, simply defer calling `sequence.play()` until after the project is loaded, like this:\\n\\n' +\n            '```\\n' +\n            `project.ready.then(() => {\\n` +\n            `  sequence.play()\\n` +\n            `})\\n` +\n            '```',\n          [\n            {\n              url: 'https://www.theatrejs.com/docs/0.5/api/core#project.ready',\n              title: 'Project.ready',\n            },\n          ],\n        )\n      }\n      const d = defer<boolean>()\n      d.resolve(true)\n      return d.promise\n    }\n  }\n\n  pause() {\n    privateAPI(this).pause()\n  }\n\n  get position() {\n    return privateAPI(this).position\n  }\n\n  set position(position: number) {\n    privateAPI(this).position = position\n  }\n\n  __experimental_getKeyframes(prop: Pointer<any>): BasicKeyframe[] {\n    return privateAPI(this).getKeyframesOfSimpleProp(prop)\n  }\n\n  async attachAudio(args: IAttachAudioArgs): Promise<{\n    decodedBuffer: AudioBuffer\n    audioContext: AudioContext\n    destinationNode: AudioNode\n    gainNode: GainNode\n  }> {\n    const {audioContext, destinationNode, decodedBuffer, gainNode} =\n      await resolveAudioBuffer(args)\n\n    const playbackController = new AudioPlaybackController(\n      decodedBuffer,\n      audioContext,\n      gainNode,\n    )\n\n    privateAPI(this).replacePlaybackController(playbackController)\n\n    return {audioContext, destinationNode, decodedBuffer, gainNode}\n  }\n\n  get pointer(): ISequence['pointer'] {\n    return privateAPI(this).pointer\n  }\n}\n\nasync function resolveAudioBuffer(args: IAttachAudioArgs): Promise<{\n  decodedBuffer: AudioBuffer\n  audioContext: AudioContext\n  destinationNode: AudioNode\n  gainNode: GainNode\n}> {\n  function getAudioContext(): Promise<AudioContext> {\n    if (args.audioContext) return Promise.resolve(args.audioContext)\n    const ctx = new AudioContext()\n    if (ctx.state === 'running') return Promise.resolve(ctx)\n\n    // AudioContext is suspended, probably because the browser\n    // has blocked it since it is not initiated by a user gesture\n\n    // if in SSR, just resolve the promise, as there is not much more to be done\n    if (typeof window === 'undefined') {\n      return Promise.resolve(ctx)\n    }\n    return new Promise<AudioContext>((resolve) => {\n      const listener = () => {\n        ctx.resume().catch((err) => {\n          console.error(err)\n        })\n      }\n\n      const eventsToHookInto: Array<keyof WindowEventMap> = [\n        'mousedown',\n        'keydown',\n        'touchstart',\n      ]\n\n      const eventListenerOpts = {capture: true, passive: false}\n      eventsToHookInto.forEach((eventName) => {\n        window.addEventListener(eventName, listener, eventListenerOpts)\n      })\n\n      ctx.addEventListener('statechange', () => {\n        if (ctx.state === 'running') {\n          eventsToHookInto.forEach((eventName) => {\n            window.removeEventListener(eventName, listener, eventListenerOpts)\n          })\n          resolve(ctx)\n        }\n      })\n    })\n  }\n\n  async function getAudioBuffer(): Promise<AudioBuffer> {\n    if (args.source instanceof AudioBuffer) {\n      return args.source\n    }\n\n    const decodedBufferDeferred = defer<AudioBuffer>()\n    if (typeof args.source !== 'string') {\n      throw new Error(\n        `Error validating arguments to sequence.attachAudio(). ` +\n          `args.source must either be a string or an instance of AudioBuffer.`,\n      )\n    }\n\n    let fetchResponse\n    try {\n      fetchResponse = await fetch(args.source)\n    } catch (e) {\n      console.error(e)\n      throw new Error(\n        `Could not fetch '${args.source}'. Network error logged above.`,\n      )\n    }\n\n    let arrayBuffer\n    try {\n      arrayBuffer = await fetchResponse.arrayBuffer()\n    } catch (e) {\n      console.error(e)\n      throw new Error(`Could not read '${args.source}' as an arrayBuffer.`)\n    }\n\n    const audioContext = await audioContextPromise\n\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    audioContext.decodeAudioData(\n      arrayBuffer,\n      decodedBufferDeferred.resolve,\n      decodedBufferDeferred.reject,\n    )\n\n    let decodedBuffer\n    try {\n      decodedBuffer = await decodedBufferDeferred.promise\n    } catch (e) {\n      console.error(e)\n      throw new Error(`Could not decode ${args.source} as an audio file.`)\n    }\n\n    return decodedBuffer\n  }\n\n  const audioContextPromise = getAudioContext()\n  const audioBufferPromise = getAudioBuffer()\n\n  const [audioContext, decodedBuffer] = await Promise.all([\n    audioContextPromise,\n    audioBufferPromise,\n  ])\n\n  const destinationNode = args.destinationNode || audioContext.destination\n  const gainNode = audioContext.createGain()\n  gainNode.connect(destinationNode)\n\n  return {\n    audioContext,\n    decodedBuffer,\n    gainNode,\n    destinationNode,\n  }\n}\n"
  },
  {
    "path": "packages/core/src/sequences/interpolationTripleAtPosition.ts",
    "content": "import type {\n  BasicKeyframedTrack,\n  TrackData,\n} from '@theatre/core/types/private/core'\nimport type {Prism, Pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport UnitBezier from 'timing-function/lib/UnitBezier'\nimport type {BasicKeyframe, SerializableValue} from '@theatre/core'\nimport {getSortedKeyframesCached} from '@theatre/core/utils/keyframeUtils'\n\n/** `left` and `right` are not necessarily the same type.  */\nexport type InterpolationTriple = {\n  /** `left` and `right` are not necessarily the same type.  */\n  left: SerializableValue\n  /** `left` and `right` are not necessarily the same type.  */\n  right?: SerializableValue\n  progression: number\n}\n\n// @remarks This new implementation supports sequencing non-numeric props, but it's also heavier\n// on the GC. This shouldn't be a problem for the vast majority of users, but it's also a\n// low-hanging fruit for perf optimization.\n// It can be improved by:\n// 1. Not creating a new InterpolationTriple object on every change\n// 2. Caching propConfig.deserializeAndSanitize(value)\n\nexport default function interpolationTripleAtPosition(\n  trackP: Pointer<TrackData | undefined>,\n  timeD: Prism<number>,\n): Prism<InterpolationTriple | undefined> {\n  return prism(() => {\n    const track = val(trackP)\n    const driverD = prism.memo(\n      'driver',\n      () => {\n        if (!track) {\n          return prism(() => undefined)\n        } else if (track.type === 'BasicKeyframedTrack') {\n          return _forKeyframedTrack(track, timeD)\n        } else {\n          console.error(`Track type not yet supported.`)\n          return prism(() => undefined)\n        }\n      },\n      [track],\n    )\n\n    return driverD.getValue()\n  })\n}\n\ntype IStartedState = {\n  started: true\n  validFrom: number\n  validTo: number\n  der: Prism<InterpolationTriple | undefined>\n}\n\ntype IState = {started: false} | IStartedState\n\nfunction _forKeyframedTrack(\n  track: BasicKeyframedTrack,\n  timeD: Prism<number>,\n): Prism<InterpolationTriple | undefined> {\n  return prism(() => {\n    let stateRef = prism.ref<IState>('state', {started: false})\n    let state = stateRef.current\n\n    const time = timeD.getValue()\n\n    if (!state.started || time < state.validFrom || state.validTo <= time) {\n      stateRef.current = state = updateState(timeD, track)\n    }\n\n    return state.der.getValue()\n  })\n}\n\nconst undefinedConstD = prism(() => undefined)\n\nfunction updateState(\n  progressionD: Prism<number>,\n  track: BasicKeyframedTrack,\n): IStartedState {\n  const keyframes = getSortedKeyframesCached(track.keyframes)\n  const progression = progressionD.getValue()\n  if (keyframes.length === 0) {\n    return {\n      started: true,\n      validFrom: -Infinity,\n      validTo: Infinity,\n      der: undefinedConstD,\n    }\n  }\n\n  let currentKeyframeIndex = 0\n\n  while (true) {\n    const currentKeyframe = keyframes[currentKeyframeIndex]\n\n    if (!currentKeyframe) {\n      if (process.env.NODE_ENV !== 'production') {\n        console.warn(`Bug here`)\n      }\n      return states.error\n    }\n\n    const isLastKeyframe = currentKeyframeIndex === keyframes.length - 1\n\n    if (progression < currentKeyframe.position) {\n      if (currentKeyframeIndex === 0) {\n        return states.beforeFirstKeyframe(currentKeyframe)\n      } else {\n        if (process.env.NODE_ENV !== 'production') {\n          console.error(`Bug here`)\n        }\n        return states.error\n        // note: uncomment these if we support starting with currentPointIndex != 0\n        // currentPointIndex--\n        // continue\n      }\n    } else if (currentKeyframe.position === progression) {\n      if (isLastKeyframe) {\n        return states.lastKeyframe(currentKeyframe)\n      } else {\n        return states.between(\n          currentKeyframe,\n          keyframes[currentKeyframeIndex + 1],\n          progressionD,\n        )\n      }\n    } else {\n      // last point\n      if (currentKeyframeIndex === keyframes.length - 1) {\n        return states.lastKeyframe(currentKeyframe)\n      } else {\n        const nextKeyframeIndex = currentKeyframeIndex + 1\n        if (keyframes[nextKeyframeIndex].position <= progression) {\n          currentKeyframeIndex = nextKeyframeIndex\n          continue\n        } else {\n          return states.between(\n            currentKeyframe,\n            keyframes[currentKeyframeIndex + 1],\n            progressionD,\n          )\n        }\n      }\n    }\n  }\n}\n\nconst states = {\n  beforeFirstKeyframe(kf: BasicKeyframe): IStartedState {\n    return {\n      started: true,\n      validFrom: -Infinity,\n      validTo: kf.position,\n      der: prism(() => ({left: kf.value, progression: 0})),\n    }\n  },\n  lastKeyframe(kf: BasicKeyframe): IStartedState {\n    return {\n      started: true,\n      validFrom: kf.position,\n      validTo: Infinity,\n      der: prism(() => ({left: kf.value, progression: 0})),\n    }\n  },\n  between(\n    left: BasicKeyframe,\n    right: BasicKeyframe,\n    progressionD: Prism<number>,\n  ): IStartedState {\n    if (!left.connectedRight) {\n      return {\n        started: true,\n        validFrom: left.position,\n        validTo: right.position,\n        der: prism(() => ({left: left.value, progression: 0})),\n      }\n    }\n\n    const globalProgressionToLocalProgression = (\n      globalProgression: number,\n    ): number => {\n      return (\n        (globalProgression - left.position) / (right.position - left.position)\n      )\n    }\n\n    if (!left.type || left.type === 'bezier') {\n      const solver = new UnitBezier(\n        left.handles[2],\n        left.handles[3],\n        right.handles[0],\n        right.handles[1],\n      )\n\n      const bezierDer = prism(() => {\n        const progression = globalProgressionToLocalProgression(\n          progressionD.getValue(),\n        )\n        const valueProgression = solver.solveSimple(progression)\n\n        return {\n          left: left.value,\n          right: right.value,\n          progression: valueProgression,\n        }\n      })\n\n      return {\n        started: true,\n        validFrom: left.position,\n        validTo: right.position,\n        der: bezierDer,\n      }\n    }\n\n    const holdDer = prism(() => {\n      const progression = globalProgressionToLocalProgression(\n        progressionD.getValue(),\n      )\n      const valueProgression = Math.floor(progression)\n      return {\n        left: left.value,\n        right: right.value,\n        progression: valueProgression,\n      }\n    })\n\n    return {\n      started: true,\n      validFrom: left.position,\n      validTo: right.position,\n      der: holdDer,\n    }\n  },\n  error: {\n    started: true,\n    validFrom: -Infinity,\n    validTo: Infinity,\n    der: undefinedConstD,\n  } as IStartedState,\n}\n"
  },
  {
    "path": "packages/core/src/sequences/playbackControllers/AudioPlaybackController.ts",
    "content": "import {defer} from '@theatre/utils/defer'\nimport {InvalidArgumentError} from '@theatre/utils/errors'\nimport noop from '@theatre/utils/noop'\nimport type {Prism, Pointer, Ticker} from '@theatre/dataverse'\nimport {Atom} from '@theatre/dataverse'\nimport type {\n  IPlaybackController,\n  IPlaybackState,\n} from './DefaultPlaybackController'\nimport {notify} from '@theatre/core/utils/notify'\nimport type {\n  IPlaybackDirection,\n  IPlaybackRange,\n} from '@theatre/core/types/public'\n\nexport default class AudioPlaybackController implements IPlaybackController {\n  _mainGain: GainNode\n  private _state: Atom<IPlaybackState> = new Atom<IPlaybackState>({\n    position: 0,\n    playing: false,\n  })\n  readonly statePointer: Pointer<IPlaybackState>\n  _stopPlayCallback: () => void = noop\n\n  constructor(\n    private readonly _decodedBuffer: AudioBuffer,\n    private readonly _audioContext: AudioContext,\n    private readonly _nodeDestination: AudioNode,\n  ) {\n    this.statePointer = this._state.pointer\n\n    this._mainGain = this._audioContext.createGain()\n    this._mainGain.connect(this._nodeDestination)\n  }\n\n  playDynamicRange(\n    rangeD: Prism<IPlaybackRange>,\n    ticker: Ticker,\n  ): Promise<unknown> {\n    const deferred = defer<boolean>()\n    if (this._playing) this.pause()\n\n    this._playing = true\n\n    let stop: undefined | (() => void) = undefined\n\n    const play = () => {\n      stop?.()\n      stop = this._loopInRange(rangeD.getValue(), ticker).stop\n    }\n\n    // We're keeping the rangeD hot, so we can read from it on every tick without\n    // causing unnecessary recalculations\n    const untapFromRangeD = rangeD.onStale(play)\n    play()\n\n    this._stopPlayCallback = () => {\n      stop?.()\n      untapFromRangeD()\n      deferred.resolve(false)\n    }\n\n    return deferred.promise\n  }\n\n  private _loopInRange(\n    range: IPlaybackRange,\n    ticker: Ticker,\n  ): {stop: () => void} {\n    const rate = 1\n    let startPos = this.getCurrentPosition()\n    const iterationLength = range[1] - range[0]\n\n    if (startPos < range[0] || startPos > range[1]) {\n      // if we're currently out of the range\n      this._updatePositionInState(range[0])\n    } else if (startPos === range[1]) {\n      // if we're currently at the very end of the range\n      this._updatePositionInState(range[0])\n    }\n    startPos = this.getCurrentPosition()\n\n    const currentSource = this._audioContext.createBufferSource()\n    currentSource.buffer = this._decodedBuffer\n    currentSource.connect(this._mainGain)\n    currentSource.playbackRate.value = rate\n\n    currentSource.loop = true\n    currentSource.loopStart = range[0]\n    currentSource.loopEnd = range[1]\n\n    const initialTickerTime = ticker.time\n    let initialElapsedPos = startPos - range[0]\n\n    currentSource.start(0, startPos)\n\n    const tick = (currentTickerTime: number) => {\n      const elapsedTickerTime = Math.max(\n        currentTickerTime - initialTickerTime,\n        0,\n      )\n      const elapsedTickerTimeInSeconds = elapsedTickerTime / 1000\n\n      const elapsedPos = elapsedTickerTimeInSeconds * rate + initialElapsedPos\n\n      let currentIterationPos =\n        ((elapsedPos / iterationLength) % 1) * iterationLength\n\n      this._updatePositionInState(currentIterationPos + range[0])\n      requestNextTick()\n    }\n\n    const requestNextTick = () => ticker.onNextTick(tick)\n    ticker.onThisOrNextTick(tick)\n\n    const stop = () => {\n      currentSource.stop()\n      currentSource.disconnect()\n      ticker.offThisOrNextTick(tick)\n      ticker.offNextTick(tick)\n    }\n\n    return {stop}\n  }\n\n  private get _playing() {\n    return this._state.get().playing\n  }\n\n  private set _playing(playing: boolean) {\n    this._state.setByPointer((p) => p.playing, playing)\n  }\n\n  destroy() {}\n\n  pause() {\n    this._stopPlayCallback()\n    this._playing = false\n    this._stopPlayCallback = noop\n  }\n\n  gotoPosition(time: number) {\n    this._updatePositionInState(time)\n  }\n\n  private _updatePositionInState(time: number) {\n    this._state.reduce((s) => ({...s, position: time}))\n  }\n\n  getCurrentPosition() {\n    return this._state.get().position\n  }\n\n  play(\n    iterationCount: number,\n    range: IPlaybackRange,\n    rate: number,\n    direction: IPlaybackDirection,\n    ticker: Ticker,\n  ): Promise<boolean> {\n    if (this._playing) {\n      this.pause()\n    }\n\n    this._playing = true\n\n    let startPos = this.getCurrentPosition()\n    const iterationLength = range[1] - range[0]\n\n    if (direction !== 'normal') {\n      throw new InvalidArgumentError(\n        `Audio-controlled sequences can only be played in the \"normal\" direction. ` +\n          `'${direction}' given.`,\n      )\n    }\n\n    if (startPos < range[0] || startPos > range[1]) {\n      // if we're currently out of the range\n      this._updatePositionInState(range[0])\n    } else if (startPos === range[1]) {\n      // if we're currently at the very end of the range\n      this._updatePositionInState(range[0])\n    }\n    startPos = this.getCurrentPosition()\n\n    const deferred = defer<boolean>()\n\n    const currentSource = this._audioContext.createBufferSource()\n    currentSource.buffer = this._decodedBuffer\n    currentSource.connect(this._mainGain)\n    currentSource.playbackRate.value = rate\n\n    if (iterationCount > 1000) {\n      notify.warning(\n        \"Can't play sequences with audio more than 1000 times\",\n        `The sequence will still play, but only 1000 times. The \\`iterationCount: ${iterationCount}\\` provided to \\`sequence.play()\\`\nis too high for a sequence with audio.\n\nTo fix this, either set \\`iterationCount\\` to a lower value, or remove the audio from the sequence.`,\n        [\n          {\n            url: 'https://www.theatrejs.com/docs/latest/manual/audio',\n            title: 'Using Audio',\n          },\n          {\n            url: 'https://www.theatrejs.com/docs/latest/api/core#sequence.attachaudio',\n            title: 'Audio API',\n          },\n        ],\n      )\n      iterationCount = 1000\n    }\n\n    if (iterationCount > 1) {\n      currentSource.loop = true\n      currentSource.loopStart = range[0]\n      currentSource.loopEnd = range[1]\n    }\n\n    const initialTickerTime = ticker.time\n    let initialElapsedPos = startPos - range[0]\n    const totalPlaybackLength = iterationLength * iterationCount\n\n    currentSource.start(0, startPos, totalPlaybackLength - initialElapsedPos)\n\n    const tick = (currentTickerTime: number) => {\n      const elapsedTickerTime = Math.max(\n        currentTickerTime - initialTickerTime,\n        0,\n      )\n      const elapsedTickerTimeInSeconds = elapsedTickerTime / 1000\n\n      const elapsedPos = Math.min(\n        elapsedTickerTimeInSeconds * rate + initialElapsedPos,\n        totalPlaybackLength,\n      )\n\n      if (elapsedPos !== totalPlaybackLength) {\n        let currentIterationPos =\n          ((elapsedPos / iterationLength) % 1) * iterationLength\n\n        this._updatePositionInState(currentIterationPos + range[0])\n        requestNextTick()\n      } else {\n        this._updatePositionInState(range[1])\n        this._playing = false\n        cleanup()\n        deferred.resolve(true)\n      }\n    }\n\n    const cleanup = () => {\n      currentSource.stop()\n      currentSource.disconnect()\n    }\n\n    this._stopPlayCallback = () => {\n      cleanup()\n      ticker.offThisOrNextTick(tick)\n      ticker.offNextTick(tick)\n\n      if (this._playing) deferred.resolve(false)\n    }\n    const requestNextTick = () => ticker.onNextTick(tick)\n    ticker.onThisOrNextTick(tick)\n    return deferred.promise\n  }\n}\n"
  },
  {
    "path": "packages/core/src/sequences/playbackControllers/DefaultPlaybackController.ts",
    "content": "import {defer} from '@theatre/utils/defer'\nimport noop from '@theatre/utils/noop'\nimport type {Prism, Pointer, Ticker} from '@theatre/dataverse'\nimport {Atom} from '@theatre/dataverse'\nimport type {\n  IPlaybackDirection,\n  IPlaybackRange,\n} from '@theatre/core/types/public'\n\nexport interface IPlaybackState {\n  position: number\n  playing: boolean\n}\n\nexport interface IPlaybackController {\n  getCurrentPosition(): number\n  gotoPosition(position: number): void\n  readonly statePointer: Pointer<IPlaybackState>\n  destroy(): void\n\n  play(\n    iterationCount: number,\n    range: IPlaybackRange,\n    rate: number,\n    direction: IPlaybackDirection,\n    ticker: Ticker,\n  ): Promise<boolean>\n\n  /**\n   * Controls the playback within a range. Repeats infinitely unless stopped.\n   *\n   * @remarks\n   *   One use case for this is to play the playback within the focus range.\n   *\n   * @param rangeD - The prism that contains the range that will be used for the playback\n   *\n   * @returns  a promise that gets rejected if the playback stopped for whatever reason\n   *\n   */\n  playDynamicRange(\n    rangeD: Prism<IPlaybackRange>,\n    ticker: Ticker,\n  ): Promise<unknown>\n\n  pause(): void\n}\n\nexport default class DefaultPlaybackController implements IPlaybackController {\n  _stopPlayCallback: () => void = noop\n  private _state: Atom<IPlaybackState> = new Atom<IPlaybackState>({\n    position: 0,\n    playing: false,\n  })\n  readonly statePointer: Pointer<IPlaybackState>\n\n  constructor() {\n    this.statePointer = this._state.pointer\n  }\n\n  destroy() {}\n\n  pause() {\n    this._stopPlayCallback()\n    this.playing = false\n    this._stopPlayCallback = noop\n  }\n\n  gotoPosition(time: number) {\n    this._updatePositionInState(time)\n  }\n\n  private _updatePositionInState(time: number) {\n    this._state.setByPointer((p) => p.position, time)\n  }\n\n  getCurrentPosition() {\n    return this._state.get().position\n  }\n\n  get playing() {\n    return this._state.get().playing\n  }\n\n  set playing(playing: boolean) {\n    this._state.setByPointer((p) => p.playing, playing)\n  }\n\n  play(\n    iterationCount: number,\n    range: IPlaybackRange,\n    rate: number,\n    direction: IPlaybackDirection,\n    ticker: Ticker,\n  ): Promise<boolean> {\n    if (this.playing) {\n      this.pause()\n    }\n\n    this.playing = true\n\n    const iterationLength = range[1] - range[0]\n\n    {\n      const startPos = this.getCurrentPosition()\n\n      if (startPos < range[0] || startPos > range[1]) {\n        if (direction === 'normal' || direction === 'alternate') {\n          this._updatePositionInState(range[0])\n        } else if (\n          direction === 'reverse' ||\n          direction === 'alternateReverse'\n        ) {\n          this._updatePositionInState(range[1])\n        }\n      } else if (direction === 'normal' || direction === 'alternate') {\n        if (startPos === range[1]) {\n          this._updatePositionInState(range[0])\n        }\n      } else {\n        if (startPos === range[0]) {\n          this._updatePositionInState(range[1])\n        }\n      }\n    }\n\n    const deferred = defer<boolean>()\n    const initialTickerTime = ticker.time\n    const totalPlaybackLength = iterationLength * iterationCount\n\n    let initialElapsedPos = this.getCurrentPosition() - range[0]\n\n    if (direction === 'reverse' || direction === 'alternateReverse') {\n      initialElapsedPos = range[1] - this.getCurrentPosition()\n    }\n\n    const tick = (currentTickerTime: number) => {\n      const elapsedTickerTime = Math.max(\n        currentTickerTime - initialTickerTime,\n        0,\n      )\n      const elapsedTickerTimeInSeconds = elapsedTickerTime / 1000\n\n      const elapsedPos = Math.min(\n        elapsedTickerTimeInSeconds * rate + initialElapsedPos,\n        totalPlaybackLength,\n      )\n\n      if (elapsedPos !== totalPlaybackLength) {\n        const iterationNumber = Math.floor(elapsedPos / iterationLength)\n\n        let currentIterationPos =\n          ((elapsedPos / iterationLength) % 1) * iterationLength\n\n        if (direction !== 'normal') {\n          if (direction === 'reverse') {\n            currentIterationPos = iterationLength - currentIterationPos\n          } else {\n            const isCurrentIterationNumberEven = iterationNumber % 2 === 0\n            if (direction === 'alternate') {\n              if (!isCurrentIterationNumberEven) {\n                currentIterationPos = iterationLength - currentIterationPos\n              }\n            } else {\n              if (isCurrentIterationNumberEven) {\n                currentIterationPos = iterationLength - currentIterationPos\n              }\n            }\n          }\n        }\n\n        this._updatePositionInState(currentIterationPos + range[0])\n        requestNextTick()\n      } else {\n        if (direction === 'normal') {\n          this._updatePositionInState(range[1])\n        } else if (direction === 'reverse') {\n          this._updatePositionInState(range[0])\n        } else {\n          const isLastIterationEven = (iterationCount - 1) % 2 === 0\n          if (direction === 'alternate') {\n            if (isLastIterationEven) {\n              this._updatePositionInState(range[1])\n            } else {\n              this._updatePositionInState(range[0])\n            }\n          } else {\n            if (isLastIterationEven) {\n              this._updatePositionInState(range[0])\n            } else {\n              this._updatePositionInState(range[1])\n            }\n          }\n        }\n        this.playing = false\n        deferred.resolve(true)\n      }\n    }\n\n    this._stopPlayCallback = () => {\n      ticker.offThisOrNextTick(tick)\n      ticker.offNextTick(tick)\n\n      if (this.playing) deferred.resolve(false)\n    }\n    const requestNextTick = () => ticker.onNextTick(tick)\n    ticker.onThisOrNextTick(tick)\n    return deferred.promise\n  }\n\n  playDynamicRange(\n    rangeD: Prism<IPlaybackRange>,\n    ticker: Ticker,\n  ): Promise<unknown> {\n    if (this.playing) {\n      this.pause()\n    }\n\n    this.playing = true\n\n    const deferred = defer<boolean>()\n\n    // We're keeping the rangeD hot, so we can read from it on every tick without\n    // causing unnecessary recalculations\n    const untapFromRangeD = rangeD.keepHot()\n    // We'll release our subscription once this promise resolves/rejects, for whatever reason\n    void deferred.promise.then(untapFromRangeD, untapFromRangeD)\n\n    let lastTickerTime = ticker.time\n\n    const tick = (currentTickerTime: number) => {\n      const elapsedSinceLastTick = Math.max(\n        currentTickerTime - lastTickerTime,\n        0,\n      )\n      lastTickerTime = currentTickerTime\n      const elapsedSinceLastTickInSeconds = elapsedSinceLastTick / 1000\n\n      const lastPosition = this.getCurrentPosition()\n\n      const range = rangeD.getValue()\n\n      if (lastPosition < range[0] || lastPosition > range[1]) {\n        this.gotoPosition(range[0])\n      } else {\n        let newPosition = lastPosition + elapsedSinceLastTickInSeconds\n        if (newPosition > range[1]) {\n          newPosition = range[0] + (newPosition - range[1])\n        }\n        this.gotoPosition(newPosition)\n      }\n\n      requestNextTick()\n    }\n\n    this._stopPlayCallback = () => {\n      ticker.offThisOrNextTick(tick)\n      ticker.offNextTick(tick)\n\n      deferred.resolve(false)\n    }\n    const requestNextTick = () => ticker.onNextTick(tick)\n    ticker.onThisOrNextTick(tick)\n    return deferred.promise\n  }\n}\n"
  },
  {
    "path": "packages/core/src/sheetObjects/SheetObject.ts",
    "content": "import type {InterpolationTriple} from '@theatre/core/sequences/interpolationTripleAtPosition'\nimport interpolationTripleAtPosition from '@theatre/core/sequences/interpolationTripleAtPosition'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport type {SheetObjectAddress} from '@theatre/core/types/public'\nimport deepMergeWithCache from '@theatre/utils/deepMergeWithCache'\nimport type {SequenceTrackId} from '@theatre/core/types/public'\nimport pointerDeep from '@theatre/utils/pointerDeep'\nimport SimpleCache from '@theatre/utils/SimpleCache'\nimport type {$FixMe, $IntentionalAny} from '@theatre/core/types/public'\nimport {valToAtom} from '@theatre/utils/valToAtom'\nimport type {PointerToPrismProvider, Prism, Pointer} from '@theatre/dataverse'\nimport {Atom, getPointerParts, pointer, prism, val} from '@theatre/dataverse'\nimport type SheetObjectTemplate from './SheetObjectTemplate'\nimport TheatreSheetObject from './TheatreSheetObject'\nimport {getPropConfigByPath} from '@theatre/core/propTypes/utils'\nimport type {\n  Interpolator,\n  PropTypeConfig,\n  DeepPartialOfSerializableValue,\n  SerializableMap,\n  SerializableValue,\n} from '@theatre/core/types/public'\n\n/**\n * Internally, the sheet's actual configured value is not a specific type, since we\n * can change the prop config at will, as such this is an alias of {@link SerializableMap}.\n *\n * TODO: Incorporate this knowledge into SheetObject & TemplateSheetObject\n */\ntype SheetObjectPropsValue = SerializableMap\n\n/**\n * An object on a sheet consisting of zero or more properties which can\n * be overridden statically or overridden by being sequenced.\n *\n * Note that this cannot be generic over `Props`, since the user is\n * able to change prop configs for the sheet object's properties.\n */\nexport default class SheetObject implements PointerToPrismProvider {\n  get type(): 'Theatre_SheetObject' {\n    return 'Theatre_SheetObject'\n  }\n  readonly $$isPointerToPrismProvider: true = true\n  readonly address: SheetObjectAddress\n  readonly publicApi: TheatreSheetObject\n  private readonly _initialValue = new Atom<SheetObjectPropsValue>({})\n  private readonly _cache = new SimpleCache()\n\n  constructor(\n    readonly sheet: Sheet,\n    readonly template: SheetObjectTemplate,\n    readonly nativeObject: unknown,\n  ) {\n    this.address = {\n      ...template.address,\n      sheetInstanceId: sheet.address.sheetInstanceId,\n    }\n\n    this.publicApi = new TheatreSheetObject(this)\n  }\n\n  getValues(): Prism<Pointer<SheetObjectPropsValue>> {\n    // Cache the prism because only one is needed per SheetObject.\n    // Also, if `onValuesChange()` is unsubscribed from, this prism will go cold\n    // and free its resources. So it's no problem to still keep it on the cache.\n    return this._cache.get('getValues()', () =>\n      prism(() => {\n        /**\n         * The final value is a deep-merge of defaults + initial + static + sequenced values.\n         * We calculate each of those separately, and deep merge them one-by-one until\n         * we get the final value.\n         *\n         * Notes on performance: This prism _will_ recalculate every time any value of any prop changes,\n         * including nested props. In other words, if foo.bar.baz changes, this prism will recalculate. Even more,\n         * if boo.bar.baz is sequenced and the sequence is playing, this prism will recalculate on every frame.\n         * This might sound inefficient, but we have a few tricks to make it fast:\n         *\n         * First, on each recalculation, most of the prisms that this prism depends on will not have changed,\n         * and so reading them is cheap. For example, if foo.bar.baz changed due to being sequenced, but\n         * foo.bar2 hasn't because it is static, reading foo.bar2 will be cheap.\n         *\n         * Secondly, as we deep merge each layer, we use a cache to avoid recalculating the same merge over and over.\n         *\n         * Third, we have sorted our layers in the order of how likely they are to change. For example, sequenced\n         * values are likely to change on each frame, so they're layerd on last. Static values seldom change,\n         * and default values almost never do, so they're layered on first.\n         *\n         * All of this means that most the work of this prism is done on the very first calculation, and subsequent\n         * recalculations are cheap.\n         *\n         * Question: What about object.initialValue which _could_ change on every frame, but isn't layerd on last?\n         * Answer: initialValue is seldom used (it's only used in `@theatre/r3f` as far as we know). So this won't\n         * affect the majority of use cases. And in case it _is_ used, it's better for us to implement an alternative\n         * to `object.getValues()` that does not layer initialValue (and also skips defaultValue too). This is discussed\n         * in issue [P-208](https://linear.app/theatre/issue/P-208/use-overrides-rather-than-final-values-in-r3f).\n         */\n\n        /**\n         * The lowest layer is the default value of the root prop. Since an object's config\n         * _could_ change, we read it as a prism. Otherwise, we could have just `getDefaultsOfPropTypeConfig(this.template.staticConfig)`.\n         *\n         * Note: If studio is not present, there is no known use-case for the config of an object to change on the fly, so\n         * we could read this value statically.\n         */\n        const defaults = val(this.template.getDefaultValues())\n\n        /**\n         * The second layer is the initialValue, which is what the user sets with `sheetObject.initialValue = someValue`.\n         */\n        const initial = val(this._initialValue.pointer)\n\n        /**\n         * For each deep-merge, we need a separate WeakMap to cache the result of the merge. See {@link deepMergeWithCache}\n         * to learn how that works.\n         *\n         * Here we use a `prism.memo()` so we can re-use our cache.\n         */\n        const withInitialCache = prism.memo(\n          'withInitialCache',\n          () => new WeakMap(),\n          [],\n        )\n\n        // deep-merge the defaultValues with the initialValues.\n        const withInitial = deepMergeWithCache(\n          defaults,\n          initial,\n          withInitialCache,\n        )\n\n        /**\n         * The third layer are the static values. Since these are (currently) commnon to all instances\n         * of the same SheetObject, we can read it from the template.\n         */\n        const statics = val(this.template.getStaticValues())\n\n        // Similar to above, we need a separate but stable WeakMap to cache the result of merging the static values\n        const withStaticsCache = prism.memo(\n          'withStatics',\n          () => new WeakMap(),\n          [],\n        )\n\n        // deep-merge the static values with the previous layer\n        const withStatics = deepMergeWithCache(\n          withInitial,\n          statics,\n          withStaticsCache,\n        )\n\n        /**\n         * The final values (all layers merged together) will be put inside this variable\n         */\n        let final = withStatics\n        /**\n         * The sequenced values will be put in this variable\n         */\n        let sequenced\n\n        {\n          // NOTE: we're reading the sequenced values as a prism to a pointer. This should be refactored\n          // to a simple pointer.\n          const pointerToSequencedValuesD = prism.memo(\n            'seq',\n            () => this.getSequencedValues(),\n            [],\n          )\n\n          // like before, we need a separate but stable WeakMap to cache the result of merging the sequenced values\n          // on top of the last layer\n          const withSeqsCache = prism.memo(\n            'withSeqsCache',\n            () => new WeakMap(),\n            [],\n          )\n\n          // read the sequenced values\n          // (val(val(x))) unwraps the pointer and the prism\n          sequenced = val(val(pointerToSequencedValuesD))\n\n          // deep-merge the sequenced values with the previous layer\n          const withSeqs = deepMergeWithCache(final, sequenced, withSeqsCache)\n          final = withSeqs\n        }\n\n        // Finally, we wrap the final value in an atom, so we can return a pointer to it.\n        const a = valToAtom<SheetObjectPropsValue>('finalAtom', final)\n\n        // Since we only return a pointer, the value cannot be mutated from outside of this prism.\n        return a.pointer\n      }),\n    )\n  }\n\n  getValueByPointer<T extends SerializableValue>(pointer: Pointer<T>): T {\n    const allValuesP = val(this.getValues())\n    const {path} = getPointerParts(pointer)\n\n    return val(\n      pointerDeep(allValuesP as $FixMe, path),\n    ) as SerializableValue as T\n  }\n\n  pointerToPrism<P>(pointer: Pointer<P>): Prism<P> {\n    const {path} = getPointerParts(pointer)\n    /**\n     * @remarks\n     * TODO perf: Too much indirection here.\n     */\n    return prism(() => {\n      const allValuesP = val(this.getValues())\n      return val(pointerDeep(allValuesP as $FixMe, path)) as SerializableMap\n    }) as $IntentionalAny as Prism<P>\n  }\n\n  /**\n   * Returns values of props that are sequenced.\n   */\n  getSequencedValues(): Prism<Pointer<SheetObjectPropsValue>> {\n    return prism(() => {\n      const tracksToProcessD = prism.memo(\n        'tracksToProcess',\n        () => this.template.getArrayOfValidSequenceTracks(),\n        [],\n      )\n\n      const tracksToProcess = val(tracksToProcessD)\n      const valsAtom = new Atom<SheetObjectPropsValue>({})\n      const config = val(this.template.configPointer)\n\n      prism.effect(\n        'processTracks',\n        () => {\n          const untaps: Array<() => void> = []\n\n          for (const {trackId, pathToProp} of tracksToProcess) {\n            const pr = this._trackIdToPrism(trackId)\n            const propConfig = getPropConfigByPath(\n              config,\n              pathToProp,\n            )! as Extract<PropTypeConfig, {interpolate: $IntentionalAny}>\n\n            const deserializeAndSanitize = propConfig.deserializeAndSanitize\n            const interpolate =\n              propConfig.interpolate! as Interpolator<$IntentionalAny>\n\n            const updateSequenceValueFromItsPrism = () => {\n              const triple = pr.getValue()\n\n              if (!triple)\n                return valsAtom.setByPointer(\n                  (p) => pointerDeep(p, pathToProp),\n                  undefined,\n                )\n\n              const leftDeserialized = deserializeAndSanitize(triple.left)\n\n              const left =\n                leftDeserialized === undefined\n                  ? propConfig.default\n                  : leftDeserialized\n\n              if (triple.right === undefined)\n                return valsAtom.setByPointer(\n                  (p) => pointerDeep(p, pathToProp),\n                  left,\n                )\n\n              const rightDeserialized = deserializeAndSanitize(triple.right)\n              const right =\n                rightDeserialized === undefined\n                  ? propConfig.default\n                  : rightDeserialized\n\n              return valsAtom.setByPointer(\n                (p) => pointerDeep(p, pathToProp),\n                interpolate(left, right, triple.progression),\n              )\n            }\n            const untap = pr.onStale(updateSequenceValueFromItsPrism)\n\n            updateSequenceValueFromItsPrism()\n            untaps.push(untap)\n          }\n          return () => {\n            for (const untap of untaps) {\n              untap()\n            }\n          }\n        },\n        [config, ...tracksToProcess],\n      )\n\n      return valsAtom.pointer\n    })\n  }\n\n  protected _trackIdToPrism(\n    trackId: SequenceTrackId,\n  ): Prism<InterpolationTriple | undefined> {\n    const trackP =\n      this.template.project.pointers.historic.sheetsById[this.address.sheetId]\n        .sequence.tracksByObject[this.address.objectKey].trackData[trackId]\n\n    const timeD = this.sheet.getSequence().positionPrism\n\n    return interpolationTripleAtPosition(trackP, timeD)\n  }\n\n  get propsP(): Pointer<SheetObjectPropsValue> {\n    return this._cache.get('propsP', () =>\n      pointer<{props: {}}>({root: this, path: []}),\n    ) as $FixMe\n  }\n\n  validateValue(\n    pointer: Pointer<SheetObjectPropsValue>,\n    value: DeepPartialOfSerializableValue<SheetObjectPropsValue>,\n  ) {\n    // @todo\n  }\n\n  setInitialValue(val: DeepPartialOfSerializableValue<SheetObjectPropsValue>) {\n    this.validateValue(this.propsP, val)\n    this._initialValue.set(val)\n  }\n}\n"
  },
  {
    "path": "packages/core/src/sheetObjects/SheetObjectTemplate.ts",
    "content": "import type Project from '@theatre/core/projects/Project'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport type SheetTemplate from '@theatre/core/sheets/SheetTemplate'\nimport {emptyArray} from '@theatre/utils'\nimport type {\n  SheetObjectAddress,\n  WithoutSheetInstance,\n  SerializableMap,\n  SerializablePrimitive,\n  SerializableValue,\n} from '@theatre/core/types/public'\nimport type {PathToProp} from '@theatre/utils/pathToProp'\nimport getDeep from '@theatre/utils/getDeep'\nimport type {\n  ObjectAddressKey,\n  SequenceTrackId,\n} from '@theatre/core/types/public'\nimport SimpleCache from '@theatre/utils/SimpleCache'\nimport type {$FixMe, $IntentionalAny} from '@theatre/core/types/public'\nimport type {Prism, Pointer} from '@theatre/dataverse'\nimport {Atom, getPointerParts, prism, val} from '@theatre/dataverse'\nimport set from 'lodash-es/set'\nimport getPropDefaultsOfSheetObject from './getPropDefaultsOfSheetObject'\nimport SheetObject from './SheetObject'\nimport {\n  getPropConfigByPath,\n  isPropConfSequencable,\n} from '@theatre/core/propTypes/utils'\nimport getOrderingOfPropTypeConfig from './getOrderingOfPropTypeConfig'\nimport type {SheetState_Historic} from '@theatre/core/types/private/core'\nimport {cloneDeep, unset} from 'lodash-es'\nimport type {\n  SheetObjectActionsConfig,\n  SheetObjectPropTypeConfig,\n} from '@theatre/core/types/public'\n\nfunction isObjectEmpty(obj: unknown): boolean {\n  return (\n    typeof obj === 'object' && obj !== null && Object.keys(obj).length === 0\n  )\n}\n\n/**\n * Given an object like: `{transform: {type: 'absolute', position: {x: 0}}}`,\n * if both `transform.type` and `transform.position.x` are sequenced, this\n * type would look like:\n *\n * ```ts\n * {\n *   transform: {\n *     type: 'SDFJSDFJ', // track id of transform.type\n *     position: {\n *       x: 'NCXNS' // track id of transform.position.x\n *     }\n *   }\n * }\n * ```\n */\nexport type IPropPathToTrackIdTree = {\n  [propName in string]?: SequenceTrackId | IPropPathToTrackIdTree\n}\n\n/**\n * TODO: Add documentation, and share examples of sheet objects.\n *\n * See {@link SheetObject} for more information.\n */\nexport default class SheetObjectTemplate {\n  readonly address: WithoutSheetInstance<SheetObjectAddress>\n  readonly type: 'Theatre_SheetObjectTemplate' = 'Theatre_SheetObjectTemplate'\n  protected _config: Atom<SheetObjectPropTypeConfig>\n  readonly _temp_actions_atom: Atom<SheetObjectActionsConfig>\n  readonly _cache = new SimpleCache()\n  readonly project: Project\n  readonly pointerToSheetState: Pointer<SheetState_Historic | undefined>\n  readonly pointerToStaticOverrides: Pointer<\n    SerializableMap<SerializablePrimitive> | undefined\n  >\n\n  get staticConfig() {\n    return this._config.get()\n  }\n\n  get configPointer() {\n    return this._config.pointer\n  }\n\n  get _temp_actions() {\n    return this._temp_actions_atom.get()\n  }\n\n  get _temp_actionsPointer() {\n    return this._temp_actions_atom.pointer\n  }\n\n  constructor(\n    readonly sheetTemplate: SheetTemplate,\n    objectKey: ObjectAddressKey,\n    nativeObject: unknown,\n    config: SheetObjectPropTypeConfig,\n    _temp_actions: SheetObjectActionsConfig,\n  ) {\n    this.address = {...sheetTemplate.address, objectKey}\n    this._config = new Atom(config)\n    this._temp_actions_atom = new Atom(_temp_actions)\n    this.project = sheetTemplate.project\n\n    this.pointerToSheetState =\n      this.sheetTemplate.project.pointers.historic.sheetsById[\n        this.address.sheetId\n      ]\n\n    this.pointerToStaticOverrides =\n      this.pointerToSheetState.staticOverrides.byObject[this.address.objectKey]\n  }\n\n  createInstance(\n    sheet: Sheet,\n    nativeObject: unknown,\n    config: SheetObjectPropTypeConfig,\n  ): SheetObject {\n    this._config.set(config)\n    return new SheetObject(sheet, this, nativeObject)\n  }\n\n  reconfigure(config: SheetObjectPropTypeConfig) {\n    this._config.set(config)\n  }\n\n  /**\n   * The `actions` api is temporary until we implement events.\n   */\n  _temp_setActions(actions: SheetObjectActionsConfig) {\n    this._temp_actions_atom.set(actions)\n  }\n\n  /**\n   * Returns the default values (all defaults are read from the config)\n   */\n  getDefaultValues(): Prism<SerializableMap> {\n    return this._cache.get('getDefaultValues()', () =>\n      prism(() => {\n        const config = val(this.configPointer)\n        return getPropDefaultsOfSheetObject(config)\n      }),\n    )\n  }\n\n  /**\n   * Returns values that are set statically (ie, not sequenced, and not defaults)\n   */\n  getStaticValues(): Prism<SerializableMap> {\n    return this._cache.get('getStaticValues', () =>\n      prism(() => {\n        const json = val(this.pointerToStaticOverrides) ?? {}\n\n        const config = val(this.configPointer)\n        const deserialized = config.deserializeAndSanitize(json) || {}\n        return deserialized\n      }),\n    )\n  }\n\n  /**\n   * Filters through the sequenced tracks and returns those tracks who are valid\n   * according to the object's prop types, then sorted in the same order as the config\n   *\n   * Returns an array.\n   */\n  getArrayOfValidSequenceTracks(): Prism<\n    Array<{pathToProp: PathToProp; trackId: SequenceTrackId}>\n  > {\n    return this._cache.get('getArrayOfValidSequenceTracks', () =>\n      prism((): Array<{pathToProp: PathToProp; trackId: SequenceTrackId}> => {\n        const pointerToSheetState =\n          this.project.pointers.historic.sheetsById[this.address.sheetId]\n\n        const trackIdByPropPath = val(\n          pointerToSheetState.sequence.tracksByObject[this.address.objectKey]\n            .trackIdByPropPath,\n        )\n\n        if (!trackIdByPropPath) return emptyArray as $IntentionalAny\n\n        const arrayOfIds: Array<{\n          pathToProp: PathToProp\n          trackId: SequenceTrackId\n        }> = []\n\n        if (!trackIdByPropPath) return emptyArray as $IntentionalAny\n\n        const objectConfig = val(this.configPointer)\n\n        const _entries = Object.entries(trackIdByPropPath)\n        for (const [pathToPropInString, trackId] of _entries) {\n          const pathToProp = parsePathToProp(pathToPropInString)\n          if (!pathToProp) continue\n\n          const propConfig = getPropConfigByPath(objectConfig, pathToProp)\n\n          const isSequencable = propConfig && isPropConfSequencable(propConfig)\n\n          if (!isSequencable) continue\n\n          arrayOfIds.push({pathToProp, trackId: trackId!})\n        }\n\n        const mapping = getOrderingOfPropTypeConfig(objectConfig)\n\n        arrayOfIds.sort((a, b) => {\n          const pathToPropA = a.pathToProp\n          const pathToPropB = b.pathToProp\n\n          const indexA = mapping.get(JSON.stringify(pathToPropA))!\n          const indexB = mapping.get(JSON.stringify(pathToPropB))!\n\n          if (indexA > indexB) {\n            return 1\n          }\n\n          return -1\n        })\n\n        if (arrayOfIds.length === 0) {\n          return emptyArray as $IntentionalAny\n        } else {\n          return arrayOfIds\n        }\n      }),\n    )\n  }\n\n  /**\n   * Filters through the sequenced tracks those tracks that are valid\n   * according to the object's prop types.\n   *\n   * Returns a map.\n   *\n   * Not available in core.\n   */\n  getMapOfValidSequenceTracks_forStudio(): Prism<IPropPathToTrackIdTree> {\n    return this._cache.get('getMapOfValidSequenceTracks_forStudio', () =>\n      prism(() => {\n        const arr = val(this.getArrayOfValidSequenceTracks())\n        let map = {}\n\n        for (const {pathToProp, trackId} of arr) {\n          set(map, pathToProp, trackId)\n        }\n\n        return map\n      }),\n    )\n  }\n\n  /**\n   * @returns The static overrides that are not sequenced. Returns undefined if there are no static overrides,\n   * or if all those static overrides are sequenced.\n   */\n  getStaticButNotSequencedOverrides(): Prism<SerializableMap | undefined> {\n    return this._cache.get('getStaticButNotSequencedOverrides', () =>\n      prism(() => {\n        const staticOverrides = val(this.getStaticValues())\n        const arrayOfValidSequenceTracks = val(\n          this.getArrayOfValidSequenceTracks(),\n        )\n\n        const staticButNotSequencedOverrides = cloneDeep(staticOverrides)\n\n        for (const {pathToProp} of arrayOfValidSequenceTracks) {\n          unset(staticButNotSequencedOverrides, pathToProp)\n          // also unset the parent if it's empty, and so on\n          let parentPath = pathToProp.slice(0, -1)\n          while (parentPath.length > 0) {\n            const parentValue = getDeep(\n              staticButNotSequencedOverrides,\n              parentPath,\n            )\n            if (!isObjectEmpty(parentValue)) break\n            unset(staticButNotSequencedOverrides, parentPath)\n            parentPath = parentPath.slice(0, -1)\n          }\n        }\n\n        if (isObjectEmpty(staticButNotSequencedOverrides)) {\n          return undefined\n        } else {\n          return staticButNotSequencedOverrides\n        }\n      }),\n    )\n  }\n\n  getDefaultsAtPointer(\n    pointer: Pointer<unknown>,\n  ): SerializableValue | undefined {\n    const {path} = getPointerParts(pointer)\n    const defaults = this.getDefaultValues().getValue()\n\n    const defaultsAtPath = getDeep(defaults, path)\n    return defaultsAtPath as $FixMe\n  }\n}\n\nfunction parsePathToProp(\n  pathToPropInString: string,\n): undefined | Array<string | number> {\n  try {\n    const pathToProp = JSON.parse(pathToPropInString)\n    return pathToProp\n  } catch (e) {\n    console.warn(\n      `property ${JSON.stringify(\n        pathToPropInString,\n      )} cannot be parsed. Skipping.`,\n    )\n    return undefined\n  }\n}\n"
  },
  {
    "path": "packages/core/src/sheetObjects/TheatreSheetObject.ts",
    "content": "import {privateAPI, setPrivateAPI} from '@theatre/core/privateAPIs'\nimport type {SheetObjectAddress} from '@theatre/core/types/public'\nimport SimpleCache from '@theatre/utils/SimpleCache'\nimport type {$FixMe, VoidFn} from '@theatre/core/types/public'\nimport type {Prism, Pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport type SheetObject from './SheetObject'\nimport {debounce} from 'lodash-es'\nimport type {DebouncedFunc} from 'lodash-es'\nimport type {\n  IProject,\n  IRafDriver,\n  ISheet,\n  ISheetObject,\n  PropsValue,\n  UnknownShorthandCompoundProps,\n  DeepPartialOfSerializableValue,\n} from '@theatre/core/types/public'\nimport {onChange} from '@theatre/core/coreExports'\n\n// Enabled for https://linear.app/theatre/issue/P-217/if-objvalue-is-read-make-sure-its-derivation-remains-hot-for-a-while\n// Disable to test old behavior\nconst KEEP_HOT_FOR_MS: undefined | number = 5 * 1000\n\nexport default class TheatreSheetObject<\n  Props extends UnknownShorthandCompoundProps = UnknownShorthandCompoundProps,\n> implements ISheetObject<Props>\n{\n  get type(): 'Theatre_SheetObject_PublicAPI' {\n    return 'Theatre_SheetObject_PublicAPI'\n  }\n  private readonly _cache = new SimpleCache()\n  /** @internal See https://linear.app/theatre/issue/P-217/if-objvalue-is-read-make-sure-its-derivation-remains-hot-for-a-while */\n  private _keepHotUntapDebounce: undefined | DebouncedFunc<VoidFn> = undefined\n\n  /**\n   * @internal\n   */\n  constructor(internals: SheetObject) {\n    setPrivateAPI(this, internals)\n  }\n\n  get props(): Pointer<this['value']> {\n    return privateAPI(this).propsP as $FixMe\n  }\n\n  get sheet(): ISheet {\n    return privateAPI(this).sheet.publicApi\n  }\n\n  get project(): IProject {\n    return privateAPI(this).sheet.project.publicApi\n  }\n\n  get address(): SheetObjectAddress {\n    return {...privateAPI(this).address}\n  }\n\n  private _valuesPrism(): Prism<this['value']> {\n    return this._cache.get('_valuesPrism', () => {\n      const sheetObject = privateAPI(this)\n      const d: Prism<PropsValue<Props>> = prism(() => {\n        return val(sheetObject.getValues().getValue()) as $FixMe\n      })\n      return d\n    })\n  }\n\n  onValuesChange(\n    fn: (values: this['value']) => void,\n    rafDriver?: IRafDriver,\n  ): VoidFn {\n    return onChange(this._valuesPrism(), fn, rafDriver)\n  }\n\n  // internal: Make the deviration keepHot if directly read\n  get value(): PropsValue<Props> {\n    const der = this._valuesPrism()\n    if (KEEP_HOT_FOR_MS != null) {\n      if (!der.isHot) {\n        // prism not hot, so keep it hot and set up `_keepHotUntapDebounce`\n        if (this._keepHotUntapDebounce != null) {\n          // defensive checks\n          if (process.env.NODE_ENV === 'development') {\n            console.warn(\n              '`sheet.value` keepHot debouncer is set, even though the derivation is not actually hot.',\n            )\n          }\n          // \"flush\" calls the `untap()` for previous `.keepHot()`.\n          // This is defensive, as this code path is also already an invariant.\n          // We have to flush though to avoid calling keepHot a second time and introducing two or more debounce fns.\n          this._keepHotUntapDebounce.flush()\n        }\n\n        const untap = der.keepHot()\n        // add a debounced function, so we keep this hot for some period of time that this .value is being read\n        this._keepHotUntapDebounce = debounce(() => {\n          untap()\n          this._keepHotUntapDebounce = undefined\n        }, KEEP_HOT_FOR_MS)\n      }\n\n      if (this._keepHotUntapDebounce) {\n        // we enabled this \"keep hot\" and need to keep refreshing the timer on the debounce\n        // See https://linear.app/theatre/issue/P-217/if-objvalue-is-read-make-sure-its-derivation-remains-hot-for-a-while\n        this._keepHotUntapDebounce()\n      }\n    }\n    return der.getValue()\n  }\n\n  set initialValue(val: DeepPartialOfSerializableValue<this['value']>) {\n    privateAPI(this).setInitialValue(val)\n  }\n}\n"
  },
  {
    "path": "packages/core/src/sheetObjects/getOrderingOfPropTypeConfig.ts",
    "content": "import type {$IntentionalAny} from '@theatre/core/types/public'\nimport type {\n  PropTypeConfig,\n  PropTypeConfig_Compound,\n} from '@theatre/core/types/public'\nimport {isPropConfigComposite} from '@theatre/core/propTypes/utils'\n\ntype EncodedPropPath = string\ntype Order = number\n\ntype Mapping = Map<EncodedPropPath, Order>\n\nconst cache = new WeakMap<PropTypeConfig_Compound<$IntentionalAny>, Mapping>()\n\nexport default function getOrderingOfPropTypeConfig(\n  config: PropTypeConfig_Compound<$IntentionalAny>,\n): Mapping {\n  const existing = cache.get(config)\n  if (existing) return existing\n\n  const map: Mapping = new Map()\n  cache.set(config, map)\n\n  iterateOnCompound([], config, map)\n\n  return map\n}\n\nfunction iterateOnCompound(\n  path: string[],\n  config: PropTypeConfig_Compound<$IntentionalAny>,\n  map: Mapping,\n) {\n  for (const [key, subConf] of Object.entries(config.props)) {\n    if (!isPropConfigComposite(subConf)) {\n      const subPath = [...path, key]\n      map.set(JSON.stringify(subPath), map.size)\n      iterateOnAny(subPath, subConf, map)\n    }\n  }\n\n  for (const [key, subConf] of Object.entries(config.props)) {\n    if (isPropConfigComposite(subConf)) {\n      const subPath = [...path, key]\n      map.set(JSON.stringify(subPath), map.size)\n      iterateOnAny(subPath, subConf, map)\n    }\n  }\n}\n\n// function iterateOnEnum(\n//   path: string[],\n//   config: PropTypeConfig_Enum,\n//   map: Mapping,\n// ) {\n//   for (const [key, subConf] of Object.entries(config.cases)) {\n//     const subPath = [...path, key]\n//     map.set(JSON.stringify(subPath), map.size)\n//     iterateOnAny(subPath, subConf, map)\n//   }\n// }\n\nfunction iterateOnAny(path: string[], config: PropTypeConfig, map: Mapping) {\n  if (config.type === 'compound') {\n    iterateOnCompound(path, config, map)\n  } else if (config.type === 'enum') {\n    throw new Error(`Enums aren't supported yet`)\n  } else {\n    map.set(JSON.stringify(path), map.size)\n  }\n}\n"
  },
  {
    "path": "packages/core/src/sheetObjects/getPropDefaultsOfSheetObject.ts",
    "content": "import type {$FixMe} from '@theatre/core/types/public'\nimport type {\n  PropTypeConfig,\n  PropTypeConfig_Compound,\n  PropTypeConfig_Enum,\n  SerializableMap,\n  SerializableValue,\n} from '@theatre/core/types/public'\nimport type {SheetObjectPropTypeConfig} from '@theatre/core/types/public'\n\nconst cachedDefaults = new WeakMap<PropTypeConfig, SerializableValue>()\n\n/**\n * Generates and caches a default value for the config of a SheetObject.\n */\nexport default function getPropDefaultsOfSheetObject(\n  config: SheetObjectPropTypeConfig,\n): SerializableMap {\n  return getDefaultsOfPropTypeConfig(config) as SerializableMap // sheet objects result in non-primitive objects\n}\n\nfunction getDefaultsOfPropTypeConfig(\n  config: PropTypeConfig,\n): SerializableValue {\n  if (cachedDefaults.has(config)) {\n    return cachedDefaults.get(config)!\n  }\n\n  const generated =\n    config.type === 'compound'\n      ? generateDefaultsForCompound(config)\n      : config.type === 'enum'\n        ? generateDefaultsForEnum(config)\n        : config.default\n\n  cachedDefaults.set(config, generated)\n\n  return generated\n}\n\nfunction generateDefaultsForEnum(config: PropTypeConfig_Enum) {\n  const defaults: SerializableMap = {\n    $case: config.defaultCase,\n  }\n\n  for (const [case_, caseConf] of Object.entries(config.cases)) {\n    defaults[case_] = getDefaultsOfPropTypeConfig(caseConf)\n  }\n\n  return defaults\n}\n\nfunction generateDefaultsForCompound(config: PropTypeConfig_Compound<$FixMe>) {\n  const defaults: SerializableMap = {}\n  for (const [key, propConf] of Object.entries(config.props)) {\n    defaults[key] = getDefaultsOfPropTypeConfig(propConf)\n  }\n\n  return defaults\n}\n"
  },
  {
    "path": "packages/core/src/sheets/Sheet.ts",
    "content": "import type Project from '@theatre/core/projects/Project'\nimport Sequence from '@theatre/core/sequences/Sequence'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport TheatreSheet from '@theatre/core/sheets/TheatreSheet'\nimport type {SheetAddress} from '@theatre/core/types/public'\nimport {Atom, prism, val} from '@theatre/dataverse'\nimport type SheetTemplate from './SheetTemplate'\nimport type {\n  ObjectAddressKey,\n  SheetInstanceId,\n} from '@theatre/core/types/public'\nimport type {StrictRecord} from '@theatre/core/types/public'\nimport {isInteger} from 'lodash-es'\nimport type {\n  SheetObjectActionsConfig,\n  SheetObjectPropTypeConfig,\n} from '@theatre/core/types/public'\n\ntype SheetObjectMap = StrictRecord<ObjectAddressKey, SheetObject>\n\n/**\n * Future: `nativeObject` Idea is to potentially allow the user to provide their own\n * object in to the object call as a way to keep a handle to an underlying object via\n * the {@link ISheetObject}.\n *\n * For example, a THREEjs object or an HTMLElement is passed in.\n */\nexport type ObjectNativeObject = unknown\n\nexport default class Sheet {\n  private readonly _objects: Atom<SheetObjectMap> = new Atom<SheetObjectMap>({})\n  private _sequence: undefined | Sequence\n  readonly address: SheetAddress\n  readonly publicApi: TheatreSheet\n  readonly project: Project\n  readonly objectsP = this._objects.pointer\n  type: 'Theatre_Sheet' = 'Theatre_Sheet'\n\n  constructor(\n    readonly template: SheetTemplate,\n    public readonly instanceId: SheetInstanceId,\n  ) {\n    this.project = template.project\n    this.address = {\n      ...template.address,\n      sheetInstanceId: this.instanceId,\n    }\n\n    this.publicApi = new TheatreSheet(this)\n  }\n\n  /**\n   * @remarks At some point, we have to reconcile the concept of \"an object\"\n   * with that of \"an element.\"\n   */\n  createObject(\n    objectKey: ObjectAddressKey,\n    nativeObject: ObjectNativeObject,\n    config: SheetObjectPropTypeConfig,\n    actions: SheetObjectActionsConfig = {},\n  ): SheetObject {\n    const objTemplate = this.template.getObjectTemplate(\n      objectKey,\n      nativeObject,\n      config,\n      actions,\n    )\n\n    const object = objTemplate.createInstance(this, nativeObject, config)\n\n    this._objects.setByPointer((p) => p[objectKey], object)\n\n    return object\n  }\n\n  getObject(key: ObjectAddressKey): SheetObject | undefined {\n    return this._objects.get()[key]\n  }\n\n  deleteObject(objectKey: ObjectAddressKey) {\n    this._objects.reduce((state) => {\n      const newState = {...state}\n      delete newState[objectKey]\n      return newState\n    })\n  }\n\n  getSequence(): Sequence {\n    if (!this._sequence) {\n      const lengthD = prism(() => {\n        const unsanitized = val(\n          this.project.pointers.historic.sheetsById[this.address.sheetId]\n            .sequence.length,\n        )\n        return sanitizeSequenceLength(unsanitized)\n      })\n\n      const subUnitsPerUnitD = prism(() => {\n        const unsanitized = val(\n          this.project.pointers.historic.sheetsById[this.address.sheetId]\n            .sequence.subUnitsPerUnit,\n        )\n        return sanitizeSequenceSubUnitsPerUnit(unsanitized)\n      })\n\n      this._sequence = new Sequence(\n        this.template.project,\n        this,\n        lengthD,\n        subUnitsPerUnitD,\n      )\n    }\n    return this._sequence\n  }\n}\n\nconst sanitizeSequenceLength = (len: number | undefined): number =>\n  typeof len === 'number' && isFinite(len) && len > 0 ? len : 10\n\nconst sanitizeSequenceSubUnitsPerUnit = (subs: number | undefined): number =>\n  typeof subs === 'number' && isInteger(subs) && subs >= 1 && subs <= 1000\n    ? subs\n    : 30\n"
  },
  {
    "path": "packages/core/src/sheets/SheetTemplate.ts",
    "content": "import type Project from '@theatre/core/projects/Project'\nimport SheetObjectTemplate from '@theatre/core/sheetObjects/SheetObjectTemplate'\nimport type {\n  SheetAddress,\n  WithoutSheetInstance,\n} from '@theatre/core/types/public'\nimport {Atom} from '@theatre/dataverse'\nimport type {Pointer} from '@theatre/dataverse'\nimport Sheet from './Sheet'\nimport type {ObjectNativeObject} from './Sheet'\n\nimport type {\n  ObjectAddressKey,\n  SheetId,\n  SheetInstanceId,\n} from '@theatre/core/types/public'\nimport type {StrictRecord} from '@theatre/core/types/public'\nimport type {\n  SheetObjectActionsConfig,\n  SheetObjectPropTypeConfig,\n} from '@theatre/core/types/public'\n\ntype SheetTemplateObjectTemplateMap = StrictRecord<\n  ObjectAddressKey,\n  SheetObjectTemplate\n>\n\nexport default class SheetTemplate {\n  readonly type: 'Theatre_SheetTemplate' = 'Theatre_SheetTemplate'\n  readonly address: WithoutSheetInstance<SheetAddress>\n  private _instances = new Atom<Record<SheetInstanceId, Sheet>>({})\n  readonly instancesP: Pointer<Record<SheetInstanceId, Sheet>> =\n    this._instances.pointer\n\n  private _objectTemplates = new Atom<SheetTemplateObjectTemplateMap>({})\n  readonly objectTemplatesP = this._objectTemplates.pointer\n\n  constructor(\n    readonly project: Project,\n    sheetId: SheetId,\n  ) {\n    this.address = {...project.address, sheetId}\n  }\n\n  getInstance(instanceId: SheetInstanceId): Sheet {\n    let inst = this._instances.get()[instanceId]\n\n    if (!inst) {\n      inst = new Sheet(this, instanceId)\n      this._instances.setByPointer((p) => p[instanceId], inst)\n    }\n\n    return inst\n  }\n\n  getObjectTemplate(\n    objectKey: ObjectAddressKey,\n    nativeObject: ObjectNativeObject,\n    config: SheetObjectPropTypeConfig,\n    actions: SheetObjectActionsConfig,\n  ): SheetObjectTemplate {\n    let template = this._objectTemplates.get()[objectKey]\n\n    if (!template) {\n      template = new SheetObjectTemplate(\n        this,\n        objectKey,\n        nativeObject,\n        config,\n        actions,\n      )\n      this._objectTemplates.setByPointer((p) => p[objectKey], template)\n    }\n\n    return template\n  }\n}\n"
  },
  {
    "path": "packages/core/src/sheets/TheatreSheet.ts",
    "content": "import {privateAPI, setPrivateAPI} from '@theatre/core/privateAPIs'\nimport {compound} from '@theatre/core/propTypes'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport type {SheetAddress} from '@theatre/core/types/public'\nimport {InvalidArgumentError} from '@theatre/utils/errors'\nimport {validateAndSanitiseSlashedPathOrThrow} from '@theatre/utils/slashedPaths'\nimport type {$FixMe, $IntentionalAny} from '@theatre/core/types/public'\nimport userReadableTypeOfValue from '@theatre/utils/userReadableTypeOfValue'\nimport deepEqual from 'fast-deep-equal'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type {ObjectAddressKey} from '@theatre/core/types/public'\nimport {notify} from '@theatre/core/utils/notify'\nimport type {\n  IProject,\n  ISheet,\n  SheetObjectActionsConfig,\n  ISheetObject,\n  ISequence,\n  UnknownShorthandCompoundProps,\n} from '@theatre/core/types/public'\n\nconst weakMapOfUnsanitizedProps = new WeakMap<\n  SheetObject,\n  UnknownShorthandCompoundProps\n>()\n\nexport default class TheatreSheet implements ISheet {\n  get type(): 'Theatre_Sheet_PublicAPI' {\n    return 'Theatre_Sheet_PublicAPI'\n  }\n  /**\n   * @internal\n   */\n  constructor(sheet: Sheet) {\n    setPrivateAPI(this, sheet)\n  }\n\n  object<Props extends UnknownShorthandCompoundProps>(\n    key: string,\n    config: Props,\n    opts?: {\n      reconfigure?: boolean\n      __actions__THIS_API_IS_UNSTABLE_AND_WILL_CHANGE_IN_THE_NEXT_VERSION?: SheetObjectActionsConfig\n    },\n  ): ISheetObject<Props> {\n    const internal = privateAPI(this)\n    const sanitizedPath = validateAndSanitiseSlashedPathOrThrow(\n      key,\n      `sheet.object`,\n      notify.warning,\n    )\n\n    const existingObject = internal.getObject(sanitizedPath as ObjectAddressKey)\n\n    /**\n     * Future: `nativeObject` Idea is to potentially allow the user to provide their own\n     * object in to the object call as a way to keep a handle to an underlying object via\n     * the {@link ISheetObject}.\n     *\n     * For example, a THREEjs object or an HTMLElement is passed in.\n     */\n    const nativeObject = null\n\n    const actions =\n      opts?.__actions__THIS_API_IS_UNSTABLE_AND_WILL_CHANGE_IN_THE_NEXT_VERSION\n\n    if (existingObject) {\n      if (process.env.NODE_ENV !== 'production') {\n        const prevConfig = weakMapOfUnsanitizedProps.get(existingObject)\n        if (prevConfig) {\n          if (!deepEqual(config, prevConfig)) {\n            if (opts?.reconfigure === true) {\n              const sanitizedConfig = compound(config)\n              existingObject.template.reconfigure(sanitizedConfig)\n              weakMapOfUnsanitizedProps.set(existingObject, config)\n              return existingObject.publicApi as $IntentionalAny\n            } else {\n              throw new Error(\n                `You seem to have called sheet.object(\"${key}\", config) twice, with different values for \\`config\\`. ` +\n                  `This is disallowed because changing the config of an object on the fly would make it difficult to reason about.\\n\\n` +\n                  `You can fix this by either re-using the existing object, or calling sheet.object(\"${key}\", config) with the same config.\\n\\n` +\n                  `If you mean to reconfigure the object's config, set \\`{reconfigure: true}\\` in sheet.object(\"${key}\", config, {reconfigure: true})`,\n              )\n            }\n          }\n        }\n      }\n\n      if (actions) {\n        existingObject.template._temp_setActions(actions)\n      }\n\n      return existingObject.publicApi as $IntentionalAny\n    } else {\n      const sanitizedConfig = compound(config)\n      const object = internal.createObject(\n        sanitizedPath as ObjectAddressKey,\n        nativeObject,\n        sanitizedConfig,\n        actions,\n      )\n      if (process.env.NODE_ENV !== 'production') {\n        weakMapOfUnsanitizedProps.set(object as $FixMe, config)\n      }\n      return object.publicApi as $IntentionalAny\n    }\n  }\n\n  get sequence(): ISequence {\n    return privateAPI(this).getSequence().publicApi\n  }\n\n  get project(): IProject {\n    return privateAPI(this).project.publicApi\n  }\n\n  get address(): SheetAddress {\n    return {...privateAPI(this).address}\n  }\n\n  detachObject(key: string) {\n    const internal = privateAPI(this)\n    const sanitizedPath = validateAndSanitiseSlashedPathOrThrow(\n      key,\n      `sheet.deleteObject(\"${key}\")`,\n      notify.warning,\n    ) as ObjectAddressKey\n\n    const obj = internal.getObject(sanitizedPath)\n    if (!obj) {\n      notify.warning(\n        `Couldn\\'t delete object \"${sanitizedPath}\"`,\n        `There is no object with key \"${sanitizedPath}\".\n\nTo fix this, make sure you are calling \\`sheet.deleteObject(\"${sanitizedPath}\")\\` with the correct key.`,\n      )\n      console.warn(`Object key \"${sanitizedPath}\" does not exist.`)\n      return\n    }\n\n    internal.deleteObject(sanitizedPath as ObjectAddressKey)\n  }\n}\n\nconst validateSequenceNameOrThrow = (value: string) => {\n  if (typeof value !== 'string') {\n    throw new InvalidArgumentError(\n      `Argument 'name' in \\`sheet.getSequence(name)\\` must be a string. Instead, it was ${userReadableTypeOfValue(\n        value,\n      )}.`,\n    )\n  }\n\n  const idTrimmed = value.trim()\n  if (idTrimmed.length !== value.length) {\n    throw new InvalidArgumentError(\n      `Argument 'name' in \\`sheet.getSequence(\"${value}\")\\` should not have surrounding whitespace.`,\n    )\n  }\n\n  if (idTrimmed.length < 3) {\n    throw new InvalidArgumentError(\n      `Argument 'name' in \\`sheet.getSequence(\"${value}\")\\` should be at least 3 characters long.`,\n    )\n  }\n}\n"
  },
  {
    "path": "packages/core/src/types/private/core.ts",
    "content": "import type {PointableSet} from '@theatre/utils/PointableSet'\nimport type {PathToProp_Encoded} from '@theatre/utils/pathToProp'\n\nimport type {SerializableMap} from '@theatre/core/types/public'\nimport type {\n  BasicKeyframe,\n  KeyframeId,\n  ObjectAddressKey,\n  SequenceTrackId,\n  SheetId,\n} from '@theatre/core/types/public'\nimport type {StrictRecord} from '@theatre/core/types/public'\n\nexport interface SheetState_Historic {\n  /**\n   * @remarks\n   * Notes for when we implement FSMs:\n   *\n   * Each FSM state will have overrides of its own. Since a state could be a descendant\n   * of another state, it will be able to inherit the overrides from ancestor states.\n   */\n  staticOverrides: {\n    byObject: StrictRecord<ObjectAddressKey, SerializableMap>\n  }\n  sequence?: HistoricPositionalSequence\n}\n\n// Question: What is this? The timeline position of a sequence?\nexport type HistoricPositionalSequence = {\n  type: 'PositionalSequence'\n  /**\n   * This is the length of the sequence in unit position. If the sequence\n   * is interpreted in seconds, then a length=2 means the sequence is two\n   * seconds long.\n   *\n   * Note that if there are keyframes sitting after sequence.length, they don't\n   * get truncated, but calling sequence.play() will play until it reaches the\n   * length of the sequence.\n   */\n  length?: number\n  /**\n   * Given the most common case of tracking a sequence against time (where 1 second = position 1),\n   * If set to, say, 30, then the keyframe editor will try to snap all keyframes\n   * to a 30fps grid\n   */\n  subUnitsPerUnit?: number\n\n  tracksByObject: StrictRecord<\n    ObjectAddressKey,\n    {\n      // I think this prop path has to be to a basic keyframe track (simple prop)\n      // at least until we have other kinds of \"TrackData\".\n      // Explicitly, this does not include prop paths for compound props (those\n      // are sequenced by sequenecing their simple descendant props)\n      trackIdByPropPath: StrictRecord<PathToProp_Encoded, SequenceTrackId>\n\n      /**\n       * A flat record of SequenceTrackId to TrackData. It's better\n       * that only its sub-props are observed (say via val(pointer(...))),\n       * rather than the object as a whole.\n       */\n      trackData: StrictRecord<SequenceTrackId, TrackData>\n    }\n  >\n}\n\n/**\n * Currently just {@link BasicKeyframedTrack}.\n *\n * Future: Other types of tracks can be added in, such as `MixedTrack` which would\n * look like `[keyframes, expression, moreKeyframes, anotherExpression, …]`.\n */\nexport type TrackData = BasicKeyframedTrack\n\ntype TrackDataCommon<TypeName extends string> = {\n  type: TypeName\n  /**\n   * Initial name of the track for debugging purposes. In the future, let's\n   * strip this value from `studio.createContentOfSaveFile()` Could also be\n   * useful for users who manually edit the project state.\n   */\n  __debugName?: string\n}\n\nexport type BasicKeyframedTrack = TrackDataCommon<'BasicKeyframedTrack'> & {\n  /**\n   * {@link BasicKeyframe} is not provided an explicit generic value `T`, because\n   * a single track can technically have multiple different types for each keyframe.\n   */\n  keyframes: PointableSet<KeyframeId, BasicKeyframe>\n}\n\ntype ProjectLoadingState =\n  | {type: 'loading'}\n  | {type: 'loaded'}\n  | {\n      type: 'browserStateIsNotBasedOnDiskState'\n      onDiskState: OnDiskState\n    }\n\n/**\n * Ephemeral state is neither persisted nor undoable\n */\nexport interface ProjectEphemeralState {\n  loadingState: ProjectLoadingState\n  lastExportedObject: null | OnDiskState\n}\n\n/**\n * This is the state of each project that is consumable by `@theatre/core`.\n * If the studio is present, this part of the state joins the studio's historic state,\n * at {@link StudioHistoricState.coreByProject}\n */\nexport interface ProjectState_Historic {\n  sheetsById: StrictRecord<SheetId, SheetState_Historic>\n  /**\n   * The last 50 revision IDs this state is based on, starting with the most recent one.\n   * The most recent one is the revision ID of this state\n   */\n  revisionHistory: string[]\n  definitionVersion: string\n}\n\nexport interface ProjectState {\n  historic: ProjectState_Historic\n  // ephemeral: ProjectEphemeralState\n}\n\nexport interface OnDiskState extends ProjectState_Historic {}\n"
  },
  {
    "path": "packages/core/src/types/private/index.ts",
    "content": "export type * from './studio'\nexport type * from './core'\n"
  },
  {
    "path": "packages/core/src/types/private/studio/ahistoric.ts",
    "content": "import type {StrictRecord} from '@theatre/core/types/public'\nimport type {PointableSet} from '@theatre/utils/PointableSet'\nimport type {StudioSheetItemKey} from '@theatre/core/types/private/studio'\nimport type {\n  BasicKeyframe,\n  ProjectId,\n  SheetId,\n  IRange,\n} from '@theatre/core/types/public'\n\nexport type KeyframeWithPathToPropFromCommonRoot = {\n  pathToProp: (string | number)[]\n  keyframe: BasicKeyframe\n}\n\nexport type StudioAhistoricState = {\n  /**\n   * undefined means the outline menu is pinned\n   */\n  pinOutline?: boolean\n  /**\n   * undefined means the detail panel is pinned\n   */\n  pinDetails?: boolean\n  pinNotifications?: boolean\n  visibilityState?: 'everythingIsHidden' | 'everythingIsVisible'\n  clipboard?: {\n    keyframesWithRelativePaths?: KeyframeWithPathToPropFromCommonRoot[]\n    // future clipboard data goes here\n  }\n\n  projects: {\n    stateByProjectId: StrictRecord<\n      ProjectId,\n      {\n        collapsedItemsInOutline?: StrictRecord<string, boolean>\n        stateBySheetId: StrictRecord<\n          SheetId,\n          {\n            sequence?: {\n              /**\n               * Stores the zoom level and scroll position of the sequence editor panel\n               * for this particular sheet.\n               */\n              clippedSpaceRange?: IRange\n\n              /**\n               * @remarks\n               * We just added this in 0.4.8. Because of that, we defined this as an optional\n               * prop, so that a user upgrading from 0.4.7 where `focusRange` did not exist,\n               * would not be shown an error.\n               *\n               * Basically, as the store's state evolves, it should always be backwards-compatible.\n               * In other words, the state of `<0.4.8` should always be valid state for `>=0.4.8`.\n               *\n               * If that is not feasible, then we should write a migration script.\n               */\n              focusRange?: {\n                enabled: boolean\n                range: IRange\n              }\n\n              collapsableItems?: PointableSet<\n                StudioSheetItemKey,\n                {\n                  isCollapsed: boolean\n                }\n              >\n            }\n          }\n        >\n      }\n    >\n  }\n}\n"
  },
  {
    "path": "packages/core/src/types/private/studio/ephemeral.ts",
    "content": "import type {\n  ObjectAddressKey,\n  ProjectId,\n  SerializableMap,\n  SheetId,\n} from '@theatre/core/types/public'\nimport type {StrictRecord} from '@theatre/core/types/public'\n\n/**\n * Technically, all parts of the ephemeral state can be implemented\n * outside the store, using simple Box|Atom of dataverse.\n *\n * The only reason that _some_ of these cases reside in StudioEphemeralState,\n * is to bring them into attention, because these pieces of the state are useful\n * in several (3+) places in the application.\n *\n * Note: Should we just implement all of ephemeral state as boxes and atoms,\n * and remove ephemeral state from the store?\n * - We'd still have to namespace and organize these pieces of ephemeral state,\n *   so they're discoverable.\n *\n *  Disadvantage of that:\n *  - We may want to send over the wire pieces the ephemeral state that other users\n *    have interest in. For example, if Alice is dragging Planet.position, Bob would\n *    want to observe the drag, and not just its final state, which would be in the historic\n *    state. (still, ephemeral state would never be persisted, but parts of it could be sent\n *   over the wire).\n */\nexport type StudioEphemeralState = {\n  projects: {\n    stateByProjectId: StrictRecord<\n      ProjectId,\n      {\n        stateBySheetId: StrictRecord<\n          SheetId,\n          {\n            stateByObjectKey: StrictRecord<\n              ObjectAddressKey,\n              {\n                /** e.g. `{color: {r: true, g: true}, price: true}` */\n                valuesBeingScrubbed?: SerializableMap<boolean>\n              }\n            >\n          }\n        >\n      }\n    >\n  }\n}\n"
  },
  {
    "path": "packages/core/src/types/private/studio/historic.ts",
    "content": "import type {ProjectState_Historic} from '@theatre/core/types/private/core'\nimport type {\n  ProjectAddress,\n  SheetAddress,\n  SheetObjectAddress,\n  WithoutSheetInstance,\n  PaneInstanceId,\n  SequenceMarkerId,\n} from '@theatre/core/types/public'\nimport type {PathToProp_Encoded} from '@theatre/utils/pathToProp'\nimport type {StrictRecord} from '@theatre/core/types/public'\nimport type {PointableSet} from '@theatre/utils/PointableSet'\nimport type {\n  ObjectAddressKey,\n  ProjectId,\n  SheetId,\n  SheetInstanceId,\n} from '@theatre/core/types/public'\nimport type {\n  UIPanelId,\n  GraphEditorColors,\n} from '@theatre/core/types/private/studio'\n\nexport type PanelPosition = {\n  edges: {\n    left: {\n      from: 'screenLeft' | 'screenRight'\n      distance: number\n    }\n    right: {\n      from: 'screenLeft' | 'screenRight'\n      distance: number\n    }\n    top: {\n      from: 'screenTop' | 'screenBottom'\n      distance: number\n    }\n    bottom: {\n      from: 'screenTop' | 'screenBottom'\n      distance: number\n    }\n  }\n}\n\ntype Panels = {\n  sequenceEditor?: {\n    graphEditor?: {\n      isOpen?: boolean\n      height?: number\n    }\n  }\n  objectEditor?: {}\n  outlinePanel?: {\n    selection?: OutlineSelectionState[]\n  }\n}\n\nexport type PanelId = keyof Panels\n\nexport type OutlineSelectionState =\n  | ({type: 'Project'} & ProjectAddress)\n  | ({type: 'Sheet'} & WithoutSheetInstance<SheetAddress>)\n  | ({type: 'SheetObject'} & WithoutSheetInstance<SheetObjectAddress>)\n\nexport type PaneInstanceDescriptor = {\n  instanceId: PaneInstanceId\n  paneClass: string\n}\n\n/**\n * Marker allows you to mark notable positions in your sequence.\n *\n * See root {@link StudioHistoricState}\n */\nexport type StudioHistoricStateSequenceEditorMarker = {\n  id: SequenceMarkerId\n  label?: string\n  /**\n   * The position this marker takes in the sequence.\n   *\n   * Usually, this value is measured in seconds, but the unit could be varied based on the kind of\n   * unit you're using for mapping to the position (e.g. Position=1 = 10px of scrolling)\n   */\n  position: number\n}\n\n/**\n * See parent {@link StudioHistoricStateProject}.\n * See root {@link StudioHistoricState}\n */\nexport type StudioHistoricStateProjectSheet = {\n  selectedInstanceId?: undefined | SheetInstanceId\n  sequenceEditor: {\n    markerSet?: PointableSet<\n      SequenceMarkerId,\n      StudioHistoricStateSequenceEditorMarker\n    >\n    selectedPropsByObject: StrictRecord<\n      ObjectAddressKey,\n      StrictRecord<PathToProp_Encoded, keyof GraphEditorColors>\n    >\n  }\n}\n\n/** See {@link StudioHistoricState} */\nexport type StudioHistoricStateProject = {\n  stateBySheetId: StrictRecord<SheetId, StudioHistoricStateProjectSheet>\n}\n\nexport type StudioHistoricState = {\n  projects: {\n    stateByProjectId: StrictRecord<ProjectId, StudioHistoricStateProject>\n  }\n\n  /** Panels can contain panes */\n  panels?: Panels\n  /** Panels can contain panes */\n  panelPositions?: {[panelId in UIPanelId]?: PanelPosition}\n  // This is misspelled, but I think some users are dependent on the exact shape of this stored JSON\n  // So, we cannot easily change it without providing backwards compatibility.\n  panelInstanceDesceriptors: StrictRecord<\n    PaneInstanceId,\n    PaneInstanceDescriptor\n  >\n  coreByProject: Record<ProjectId, ProjectState_Historic>\n}\n"
  },
  {
    "path": "packages/core/src/types/private/studio/index.ts",
    "content": "import type {StudioAhistoricState} from './ahistoric'\nimport type {StudioEphemeralState} from './ephemeral'\nimport type {StudioHistoricState} from './historic'\nimport type {Nominal} from '@theatre/utils/Nominal'\nexport * from './ahistoric'\nexport * from './ephemeral'\nexport * from './historic'\n\n/**\n * Describes the type of the object inside our store (redux store).\n */\nexport type StudioState = {\n  $schemaVersion: number\n  /**\n   * This is the part of the state that is undo/redo-able\n   */\n  historic?: StudioHistoricState\n  /**\n   * This is the part of the state that can't be undone, but it's\n   * still persisted to localStorage\n   */\n  ahistoric?: StudioAhistoricState\n  /**\n   * This is entirely ephemeral, and gets lost if user refreshes the page\n   */\n  ephemeral?: StudioEphemeralState\n}\n\n/**\n * Studio consistent identifier for identifying any individual item on a sheet\n * including a SheetObject, a SheetObject's prop, etc.\n *\n * See {@link createStudioSheetItemKey}.\n *\n * @remarks\n * This is the kind of type which should not find itself in Project state,\n * due to how it is lossy in the case of additional model layers being introduced.\n * e.g. When we introduce an extra layer of multiple sequences per sheet,\n * all the {@link StudioSheetItemKey}s will have different generated values,\n * because they'll have additional information (the \"sequence id\"). This means\n * that all data attached to those item keys will become detached.\n *\n * This kind of constraint might be mitigated by a sort of migrations ability,\n * but for the most part it's just going to be easier to try not using\n * {@link StudioSheetItemKey} for any data that needs to stick around after\n * version updates to Theatre.\n *\n * Alternatively, if you did want some kind of universal identifier for any item\n * that can be persisted and survive project model changes, it's probably going\n * to be easier to simply generate a unique id for all items you want to use in\n * this way, and don't do any of this concatenating/JSON.stringify \"hashing\"\n * stuff.\n */\nexport type StudioSheetItemKey = Nominal<'StudioSheetItemKey'>\n/** UI panels can contain a {@link PaneInstanceId} or something else. */\nexport type UIPanelId = Nominal<'UIPanelId'>\n\nexport type GraphEditorColors = {\n  '1': {iconColor: '#b98b08'}\n  '2': {iconColor: '#70a904'}\n  '3': {iconColor: '#2e928a'}\n  '4': {iconColor: '#a943bb'}\n  '5': {iconColor: '#b90808'}\n  '6': {iconColor: '#b4bf0e'}\n}\n"
  },
  {
    "path": "packages/core/src/types/public.ts",
    "content": "import type {Pointer} from '@theatre/dataverse'\n\n/** For `any`s that aren't meant to stay `any`*/\nexport type $FixMe = any\n/** For `any`s that we don't care about */\nexport type $IntentionalAny = any\n\nexport type $____FixmeStudio = any\n\n/** temporary any type until we move all of studio's types to core */\n\nexport type PathToProp = Array<string | number>\n\n/**\n * This is equivalent to `Partial<Record<Key, V>>` being used to describe a sort of Map\n * where the keys might not have values.\n *\n * We do not use `Map`s or `Set`s, because they add complexity with converting to\n * `JSON.stringify` + pointer types.\n */\nexport type StrictRecord<Key extends string, V> = {[K in Key]?: V}\n\nexport type IRange = IPlaybackRange\n\n/**\n * Using a symbol, we can sort of add unique properties to arbitrary other types.\n * So, we use this to our advantage to add a \"marker\" of information to strings using\n * the {@link Nominal} type.\n *\n * Can be used with keys in pointers.\n * This identifier shows in the expanded {@link Nominal} as `string & {[nominal]:\"SequenceTrackId\"}`,\n * So, we're opting to keeping the identifier short.\n */\nconst nominal = Symbol()\n\n/**\n * This creates an \"opaque\"/\"nominal\" type.\n *\n * Our primary use case is to be able to use with keys in pointers.\n *\n * Numbers cannot be added together if they are \"nominal\"\n *\n * See {@link nominal} for more details.\n */\ntype Nominal<N extends string> = string & {[nominal]: N}\n\n/**\n * Represents the `x` or `y` value of getBoundingClientRect().\n * In other words, represents a distance from 0,0 in screen space.\n */\nexport type PositionInScreenSpace = number\n\nexport type VoidFn = () => void\n\nexport type Asset = {type: 'image'; id: string | undefined}\nexport type File = {type: 'file'; id: string | undefined}\n\n/**\n * A `SerializableMap` is a plain JS object that can be safely serialized to JSON.\n */\nexport type SerializableMap<\n  Primitives extends SerializablePrimitive = SerializablePrimitive,\n> = {[Key in string]?: SerializableValue<Primitives>}\n\n/*\n * TODO: For now the rgba primitive type is hard-coded. We should make it proper.\n * What instead we should do is somehow exclude objects where\n * object.type !== 'compound'. One way to do this would be\n *\n * type SerializablePrimitive<T> = T extends {type: 'compound'} ? never : T;\n *\n * const badStuff = {\n *   type: 'compound',\n *   foo: 3,\n * } as const\n *\n * const goodStuff = {\n *   type: 'literallyanythingelse',\n *   foo: 3,\n * } as const\n *\n * function serializeStuff<T>(giveMeStuff: SerializablePrimitive<T>) {\n *   // ...\n * }\n *\n * serializeStuff(badStuff)\n * serializeStuff(goodStuff)\n *\n * However this wouldn't protect against other unserializable stuff, or nested\n * unserializable stuff, since using mapped types seem to break it for some reason.\n *\n * TODO: Consider renaming to `SerializableSimple` if this should be aligned with \"simple props\".\n */\nexport type SerializablePrimitive =\n  | string\n  | number\n  | boolean\n  | {r: number; g: number; b: number; a: number}\n  | Asset\n\n/**\n * This type represents all values that can be safely serialized.\n * Also, it's notable that this type is compatible for dataverse pointer traversal (everything\n * is path accessible [e.g. `a.b.c`]).\n *\n * One example usage is for keyframe values or static overrides such as `Rgba`, `string`, `number`, and \"compound values\".\n */\nexport type SerializableValue<\n  Primitives extends SerializablePrimitive = SerializablePrimitive,\n> = Primitives | SerializableMap\n\nexport type DeepPartialOfSerializableValue<T extends SerializableValue> =\n  T extends SerializableMap\n    ? {\n        [K in keyof T]?: DeepPartialOfSerializableValue<\n          Exclude<T[K], undefined>\n        >\n      }\n    : T\n\nexport type KeyframeId = Nominal<'KeyframeId'>\nexport type SequenceTrackId = Nominal<'SequenceTrackId'>\nexport type ObjectAddressKey = Nominal<'ObjectAddressKey'>\nexport type ProjectId = Nominal<'ProjectId'>\nexport type SheetId = Nominal<'SheetId'>\nexport type SheetInstanceId = Nominal<'SheetInstanceId'>\nexport type PaneInstanceId = Nominal<'PaneInstanceId'>\nexport type SequenceMarkerId = Nominal<'SequenceMarkerId'>\n\n/**\n * NOTE: **INTERNAL and UNSTABLE** - This _WILL_ break between minor versions.\n *\n * This type represents the object returned by `studio.createContnentOfSaveFile()`. It's\n * meant for advanced users who want to interact with the state of projects. In the vast\n * majority of cases, you __should not__ use this type. Either an API for your use-case\n * already exists, or you should open an issue on GitHub: https://github.com/theatre-js/theatre/issues\n *\n */\nexport type __UNSTABLE_Project_OnDiskState = unknown\n\n/**\n * Addresses are used to identify projects, sheets, objects, and other things.\n *\n * For example, a project's address looks like `{projectId: 'my-project'}`, and a sheet's\n * address looks like `{projectId: 'my-project', sheetId: 'my-sheet'}`.\n *\n * As you see, a Sheet's address is a superset of a Project's address. This is so that we can\n * use the same address type for both. All addresses follow the same rule. An object's address\n * extends its sheet's address, which extends its project's address.\n *\n * For example, generating an object's address from a sheet's address is as simple as `{...sheetAddress, objectId: 'my-object'}`.\n *\n * Also, if you need the projectAddress of an object, you can just re-use the object's address:\n * `aFunctionThatRequiresProjectAddress(objectAddress)`.\n */\n\n/**\n * Represents the address to a project\n */\nexport interface ProjectAddress {\n  projectId: ProjectId\n}\n\n/**\n * Represents the address to a specific instance of a Sheet\n *\n * @example\n * ```ts\n * const sheet = project.sheet('a sheet', 'some instance id')\n * sheet.address.sheetId === 'a sheet'\n * sheet.address.sheetInstanceId === 'sheetInstanceId'\n * ```\n *\n * See {@link WithoutSheetInstance} for a type that doesn't include the sheet instance id.\n */\nexport interface SheetAddress extends ProjectAddress {\n  sheetId: SheetId\n  sheetInstanceId: SheetInstanceId\n}\n\n/**\n * Removes `sheetInstanceId` from an address, making it refer to\n * all instances of a certain `sheetId`.\n *\n * See {@link SheetAddress} for a type that includes the sheet instance id.\n */\nexport type WithoutSheetInstance<T extends SheetAddress> = Omit<\n  T,\n  'sheetInstanceId'\n>\n\nexport type SheetInstanceOptional<T extends SheetAddress> =\n  WithoutSheetInstance<T> & {sheetInstanceId?: SheetInstanceId | undefined}\n\n/**\n * Represents the address to a Sheet's Object.\n *\n * It includes the sheetInstance, so it's specific to a single instance of a sheet. If you\n * would like an address that doesn't include the sheetInstance, use `WithoutSheetInstance<SheetObjectAddress>`.\n */\nexport interface SheetObjectAddress extends SheetAddress {\n  /**\n   * The key of the object.\n   *\n   * @example\n   * ```ts\n   * const obj = sheet.object('foo', {})\n   * obj.address.objectKey === 'foo'\n   * ```\n   */\n  objectKey: ObjectAddressKey\n}\n\n/**\n * Represents the path to a certain prop of an object\n */\nexport interface PropAddress extends SheetObjectAddress {\n  pathToProp: PathToProp\n}\n\n/**\n * Represents the address of a certain sequence of a sheet.\n *\n * Since currently sheets are single-sequence only, `sequenceName` is always `'default'` for now.\n */\nexport interface SequenceAddress extends SheetAddress {\n  sequenceName: string\n}\n\n/**\n * A project's config object (currently the only point of configuration is the project's state)\n */\n\nexport type IProjectConfig = {\n  /**\n   * The state of the project, as [exported](https://www.theatrejs.com/docs/latest/manual/projects#state) by the studio.\n   */\n  state?: any // intentional\n  assets?: {\n    baseUrl?: string\n  }\n}\n/**\n * A Theatre.js project\n */\n\nexport interface IProject {\n  readonly type: 'Theatre_Project_PublicAPI'\n  /**\n   * If `@theatre/studio` is used, this promise would resolve when studio has loaded\n   * the state of the project into memory.\n   *\n   * If `@theatre/studio` is not used, this promise is already resolved.\n   */\n  readonly ready: Promise<void>\n  /**\n   * Shows whether the project is ready to be used.\n   * Better to use {@link IProject.ready}, which is a promise that would\n   * resolve when the project is ready.\n   */\n  readonly isReady: boolean\n  /**\n   * The project's address\n   */\n  readonly address: ProjectAddress\n\n  /**\n   * Creates a Sheet under the project\n   * @param sheetId - Sheets are identified by their `sheetId`, which must be a string longer than 3 characters\n   * @param instanceId - Optionally provide an `instanceId` if you want to create multiple instances of the same Sheet\n   * @returns The newly created Sheet\n   *\n   * **Docs: https://www.theatrejs.com/docs/latest/manual/sheets**\n   */\n  sheet(sheetId: string, instanceId?: string): ISheet\n\n  /**\n   * Returns the URL for an asset.\n   *\n   * @param asset - The asset to get the URL for\n   * @returns The URL for the asset, or `undefined` if the asset is not found\n   */\n  getAssetUrl(asset: Asset | File): string | undefined\n}\n\nexport interface ISheet {\n  /**\n   * All sheets have `sheet.type === 'Theatre_Sheet_PublicAPI'`\n   */\n  readonly type: 'Theatre_Sheet_PublicAPI'\n\n  /**\n   * The Project this Sheet belongs to\n   */\n  readonly project: IProject\n\n  /**\n   * The address of the Sheet\n   */\n  readonly address: SheetAddress\n\n  /**\n   * Creates a child object for the sheet\n   *\n   * **Docs: https://www.theatrejs.com/docs/latest/manual/objects**\n   *\n   * @param key - Each object is identified by a key, which is a non-empty string\n   * @param props - The props of the object. See examples\n   * @param options - (Optional) Provide `{reconfigure: true}` to reconfigure an existing object, or `{actions: { ... }}` to add custom buttons to the UI. Read the example below for details.\n   *\n   * @returns An Object\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * // Create an object named \"a unique key\" with no props\n   * const obj = sheet.object(\"a unique key\", {})\n   * obj.address.objectKey // \"a unique key\"\n   *\n   *\n   * // Create an object with {x: 0}\n   * const obj = sheet.object(\"obj\", {x: 0})\n   * obj.value.x // returns 0 or the current number that the user has set\n   *\n   * // Create an object with nested props\n   * const obj = sheet.object(\"obj\", {position: {x: 0, y: 0}})\n   * obj.value.position // {x: 0, y: 0}\n   *\n   * // you can also reconfigure an existing object:\n   * const obj = sheet.object(\"obj\", {foo: 0})\n   * console.log(object.value.foo) // prints 0\n   *\n   * const obj2 = sheet.object(\"obj\", {bar: 0}, {reconfigure: true})\n   * console.log(object.value.foo) // prints undefined, since we've removed this prop via reconfiguring the object\n   * console.log(object.value.bar) // prints 0, since we've introduced this prop by reconfiguring the object\n   *\n   * assert(obj === obj2) // passes, because reconfiguring the object returns the same object\n   *\n   * // you can add custom actions to an object:\n   * const obj = sheet.object(\"obj\", {foo: 0}, {\n   *   actions: {\n   *     // This will display a button in the UI that will reset the value of `foo` to 0\n   *     Reset: () => {\n   *       studio.transaction((api) => {\n   *         api.set(obj.props.foo, 0)\n   *       })\n   *     }\n   *   }\n   * })\n   * ```\n   */\n  object<Props extends UnknownShorthandCompoundProps>(\n    key: string,\n    props: Props,\n    options?: {\n      reconfigure?: boolean\n      __actions__THIS_API_IS_UNSTABLE_AND_WILL_CHANGE_IN_THE_NEXT_VERSION?: SheetObjectActionsConfig\n    },\n  ): ISheetObject<Props>\n\n  /**\n   * Detaches a previously created child object from the sheet.\n   *\n   * If you call `sheet.object(key)` again with the same `key`, the object's values of the object's\n   * props WILL NOT be reset to their initial values.\n   *\n   * @param key - The `key` of the object previously given to `sheet.object(key, ...)`.\n   */\n  detachObject(key: string): void\n\n  /**\n   * The Sequence of this Sheet\n   */\n  readonly sequence: ISequence\n}\n\nexport type SheetObjectPropTypeConfig =\n  PropTypeConfig_Compound<UnknownValidCompoundProps>\n\nexport type SheetObjectAction = (object: ISheetObject) => void\n\nexport type SheetObjectActionsConfig = Record<string, SheetObjectAction>\n\nexport interface ISheetObject<\n  Props extends UnknownShorthandCompoundProps = UnknownShorthandCompoundProps,\n> {\n  /**\n   * All Objects will have `object.type === 'Theatre_SheetObject_PublicAPI'`\n   */\n  readonly type: 'Theatre_SheetObject_PublicAPI'\n\n  /**\n   * The current values of the props.\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * const obj = sheet.object(\"obj\", {x: 0})\n   * console.log(obj.value.x) // prints 0 or the current numeric value\n   * ```\n   *\n   * Future: Notice that if the user actually changes the Props config for one of the\n   * properties, then this type can't be guaranteed accurrate.\n   *  * Right now the user can't change prop configs, but we'll probably enable that\n   *    functionality later via (`object.overrideConfig()`). We need to educate the\n   *    user that they can't rely on static types to know the type of object.value.\n   */\n  readonly value: PropsValue<Props>\n\n  /**\n   * A Pointer to the props of the object.\n   *\n   * More documentation soon.\n   */\n  readonly props: Pointer<this['value']>\n\n  /**\n   * The instance of Sheet the Object belongs to\n   */\n  readonly sheet: ISheet\n\n  /**\n   * The Project the project belongs to\n   */\n  readonly project: IProject\n\n  /**\n   * An object representing the address of the Object\n   */\n  readonly address: SheetObjectAddress\n\n  /**\n   * Calls `fn` every time the value of the props change.\n   *\n   * @param fn - The callback is called every time the value of the props change, plus once at the beginning.\n   * @param rafDriver - (optional) The `rafDriver` to use. Learn how to use `rafDriver`s [from the docs](https://www.theatrejs.com/docs/latest/manual/advanced#rafdrivers).\n   * @returns an Unsubscribe function\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * const obj = sheet.object(\"Box\", {position: {x: 0, y: 0}})\n   * const div = document.getElementById(\"box\")\n   *\n   * const unsubscribe = obj.onValuesChange((newValues) => {\n   *   div.style.left = newValues.position.x + 'px'\n   *   div.style.top = newValues.position.y + 'px'\n   * })\n   *\n   * // you can call unsubscribe() to stop listening to changes\n   * ```\n   */\n  onValuesChange(\n    fn: (values: this['value']) => void,\n    rafDriver?: IRafDriver,\n  ): VoidFn\n\n  /**\n   * Sets the initial value of the object. This value overrides the default\n   * values defined in the prop types, but would itself be overridden if the user\n   * overrides it in the UI with a static or animated value.\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * const obj = sheet.object(\"obj\", {position: {x: 0, y: 0}})\n   *\n   * obj.value // {position: {x: 0, y: 0}}\n   *\n   * // here, we only override position.x\n   * obj.initialValue = {position: {x: 2}}\n   *\n   * obj.value // {position: {x: 2, y: 0}}\n   * ```\n   */\n  set initialValue(value: DeepPartialOfSerializableValue<this['value']>)\n}\n\nexport interface IAttachAudioArgs {\n  /**\n   * Either a URL to the audio file (eg \"http://localhost:3000/audio.mp3\") or an instance of AudioBuffer\n   */\n  source: string | AudioBuffer\n  /**\n   * An optional AudioContext. If not provided, one will be created.\n   */\n  audioContext?: AudioContext\n  /**\n   * An AudioNode to feed the audio into. Will use audioContext.destination if not provided.\n   */\n  destinationNode?: AudioNode\n}\n\nexport type KeyframeType = 'bezier' | 'hold'\n\nexport type BasicKeyframe = {\n  id: KeyframeId\n  /** The `value` is the raw value type such as `Rgba` or `number`. See {@link SerializableValue} */\n  // Future: is there another layer that we may need to be able to store older values on the\n  // case of a prop config change? As keyframes can technically have their propConfig changed.\n  value: SerializableValue\n  position: number\n  handles: [leftX: number, leftY: number, rightX: number, rightY: number]\n  connectedRight: boolean\n  // defaults to 'bezier' to support project states made with theatre0.5.1 or earlier\n  type?: KeyframeType\n}\n\nexport interface ISequence {\n  readonly type: 'Theatre_Sequence_PublicAPI'\n\n  /**\n   * Starts playback of a sequence.\n   * Returns a promise that either resolves to true when the playback completes,\n   * or resolves to false if playback gets interrupted (for example by calling sequence.pause())\n   *\n   * @returns A promise that resolves when the playback is finished, or rejects if interruped\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * // plays the sequence from the current position to sequence.length\n   * sheet.sequence.play()\n   *\n   * // plays the sequence at 2.4x speed\n   * sheet.sequence.play({rate: 2.4})\n   *\n   * // plays the sequence from second 1 to 4\n   * sheet.sequence.play({range: [1, 4]})\n   *\n   * // plays the sequence 4 times\n   * sheet.sequence.play({iterationCount: 4})\n   *\n   * // plays the sequence in reverse\n   * sheet.sequence.play({direction: 'reverse'})\n   *\n   * // plays the sequence back and forth forever (until interrupted)\n   * sheet.sequence.play({iterationCount: Infinity, direction: 'alternateReverse})\n   *\n   * // plays the sequence and logs \"done\" once playback is finished\n   * sheet.sequence.play().then(() => console.log('done'))\n   * ```\n   */\n  play(conf?: {\n    /**\n     * The number of times the animation must run. Must be an integer larger\n     * than 0. Defaults to 1. Pick Infinity to run forever\n     */\n    iterationCount?: number\n    /**\n     * Limits the range to be played. Default is [0, sequence.length]\n     */\n    range?: IPlaybackRange\n    /**\n     * The playback rate. Defaults to 1. Choosing 2 would play the animation\n     * at twice the speed.\n     */\n    rate?: number\n    /**\n     * The direction of the playback. Similar to CSS's animation-direction\n     */\n    direction?: IPlaybackDirection\n\n    /**\n     * Optionally provide a rafDriver to use for the playback. It'll default to\n     * the core driver if not provided, which is a `requestAnimationFrame()` driver.\n     * Learn how to use `rafDriver`s [from the docs](https://www.theatrejs.com/docs/latest/manual/advanced#rafdrivers).\n     */\n    rafDriver?: IRafDriver\n  }): Promise<boolean>\n\n  /**\n   * Pauses the currently playing animation\n   */\n  pause(): void\n\n  /**\n   * The current position of the playhead.\n   * In a time-based sequence, this represents the current time in seconds.\n   */\n  position: number\n\n  /**\n   * A Pointer to the sequence's inner state.\n   *\n   * @remarks\n   * As with any Pointer, you can use this with {@link onChange | onChange()} to listen to its value changes\n   * or with {@link val | val()} to read its current value.\n   *\n   * @example Usage\n   * ```ts\n   * import {onChange, val} from '@theatre/core'\n   *\n   * // let's assume `sheet` is a sheet\n   * const sequence = sheet.sequence\n   *\n   * onChange(sequence.pointer.length, (len) => {\n   *   console.log(\"Length of the sequence changed to:\", len)\n   * })\n   *\n   * onChange(sequence.pointer.position, (position) => {\n   *   console.log(\"Position of the sequence changed to:\", position)\n   * })\n   *\n   * onChange(sequence.pointer.playing, (playing) => {\n   *   console.log(playing ? 'playing' : 'paused')\n   * })\n   *\n   * // we can also read the current value of the pointer\n   * console.log('current length is', val(sequence.pointer.length))\n   * ```\n   */\n  pointer: Pointer<{\n    playing: boolean\n    length: number\n    position: number\n  }>\n\n  /**\n   * Given a property, returns a list of keyframes that affect that property.\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * // let's assume `sheet` is a sheet and obj is one of its objects\n   * const keyframes = sheet.sequence.__experimental_getKeyframes(obj.pointer.x)\n   * console.log(keyframes) // an array of keyframes\n   * ```\n   */\n  __experimental_getKeyframes(prop: Pointer<{}>): BasicKeyframe[]\n\n  /**\n   * Attaches an audio source to the sequence. Playing the sequence automatically\n   * plays the audio source and their times are kept in sync.\n   *\n   * @returns A promise that resolves once the audio source is loaded and decoded\n   *\n   * Learn more [here](https://www.theatrejs.com/docs/latest/manual/audio).\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * // Loads and decodes audio from the URL and then attaches it to the sequence\n   * await sheet.sequence.attachAudio({source: \"http://localhost:3000/audio.mp3\"})\n   * sheet.sequence.play()\n   *\n   * // Providing your own AudioAPI Context, destination, etc\n   * const audioContext: AudioContext = {...} // create an AudioContext using the Audio API\n   * const audioBuffer: AudioBuffer = {...} // create an AudioBuffer\n   * const destinationNode = audioContext.destination\n   *\n   * await sheet.sequence.attachAudio({source: audioBuffer, audioContext, destinationNode})\n   * ```\n   *\n   * Note: It's better to provide the `audioContext` rather than allow Theatre.js to create it.\n   * That's because some browsers [suspend the audioContext](https://developer.chrome.com/blog/autoplay/#webaudio)\n   * unless it's initiated by a user gesture, like a click. If that happens, Theatre.js will\n   * wait for a user gesture to resume the audioContext. But that's probably not an\n   * optimal user experience. It is better to provide a button or some other UI element\n   * to communicate to the user that they have to initiate the animation.\n   *\n   * @example\n   * Example:\n   * ```ts\n   * // html: <button id=\"#start\">start</button>\n   * const button = document.getElementById('start')\n   *\n   * button.addEventListener('click', async () => {\n   *   const audioContext = ...\n   *   await sheet.sequence.attachAudio({audioContext, source: '...'})\n   *   sheet.sequence.play()\n   * })\n   * ```\n   */\n  attachAudio(args: IAttachAudioArgs): Promise<{\n    /**\n     * An {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer | AudioBuffer}.\n     * If `args.source` is a URL, then `decodedBuffer` would be the result\n     * of {@link https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/decodeAudioData | audioContext.decodeAudioData()}\n     * on the audio file at that URL.\n     *\n     * If `args.source` is an `AudioBuffer`, then `decodedBuffer` would be equal to `args.source`\n     */\n    decodedBuffer: AudioBuffer\n    /**\n     * The `AudioContext`. It is either equal to `source.audioContext` if it is provided, or\n     * one that's created on the fly.\n     */\n    audioContext: AudioContext\n    /**\n     * Equals to either `args.destinationNode`, or if none is provided, it equals `audioContext.destinationNode`.\n     *\n     * See `gainNode` for more info.\n     */\n    destinationNode: AudioNode\n\n    /**\n     * This is an intermediate GainNode that Theatre.js feeds its audio to. It is by default\n     * connected to destinationNode, but you can disconnect the gainNode and feed it to your own graph.\n     *\n     * @example\n     * For example:\n     * ```ts\n     * const {gainNode, audioContext} = await sequence.attachAudio({source: '/audio.mp3'})\n     * // disconnect the gainNode (at this point, the sequence's audio track won't be audible)\n     * gainNode.disconnect()\n     * // create our own gain node\n     * const lowerGain = audioContext.createGain()\n     * // lower its volume to 10%\n     * lowerGain.gain.setValueAtTime(0.1, audioContext.currentTime)\n     * // feed the sequence's audio to our lowered gainNode\n     * gainNode.connect(lowerGain)\n     * // feed the lowered gainNode to the audioContext's destination\n     * lowerGain.connect(audioContext.destination)\n     * // now audio will be audible, with 10% the volume\n     * ```\n     */\n    gainNode: GainNode\n  }>\n}\n\nexport type IPlaybackRange = [from: number, to: number]\n\nexport type IPlaybackDirection =\n  | 'normal'\n  | 'reverse'\n  | 'alternate'\n  | 'alternateReverse'\n\nexport interface IRafDriver {\n  /**\n   * All raf derivers have have `driver.type === 'Theatre_RafDriver_PublicAPI'`\n   */\n  readonly type: 'Theatre_RafDriver_PublicAPI'\n  /**\n   * The name of the driver. This is used for debugging purposes.\n   */\n  name: string\n  /**\n   * The id of the driver. This is used for debugging purposes.\n   * It's guaranteed to be unique.\n   */\n  id: number\n  /**\n   * This is called by the driver when it's time to tick forward.\n   * The time param is of the same type returned by `performance.now()`.\n   */\n  tick: (time: number) => void\n}\n\n/**\n * A linear interpolator for a certain value type.\n *\n * @param left - the value to interpolate from (beginning)\n * @param right - the value to interpolate to (end)\n * @param progression - the amount of progression. Starts at 0 and ends at 1. But could overshoot in either direction\n *\n * @example\n * ```ts\n * const numberInterpolator: Interpolator<number> = (left, right, progression) => left + progression * (right - left)\n *\n * numberInterpolator(-50, 50, 0.5) === 0\n * numberInterpolator(-50, 50, 0) === -50\n * numberInterpolator(-50, 50, 1) === 50\n * numberInterpolator(-50, 50, 2) === 150 // overshoot\n * ```\n */\nexport type Interpolator<T> = (left: T, right: T, progression: number) => T\n\nexport interface IBasePropType<\n  LiteralIdentifier extends string,\n  ValueType,\n  DeserializeType = ValueType,\n> {\n  /**\n   * Each prop config has a string literal identifying it. For example,\n   * `assert.equal(t.number(10).type, 'number')`\n   */\n  type: LiteralIdentifier\n  /**\n   * the `valueType` is only used by typescript. It won't be present in runtime.\n   */\n  valueType: ValueType\n  [propTypeSymbol]: 'TheatrePropType'\n  /**\n   * Each prop type may be given a custom label instead of the name of the sub-prop\n   * it is in.\n   *\n   * @example\n   * ```ts\n   * const position = {\n   *   x: t.number(0), // label would be 'x'\n   *   y: t.number(0, {label: 'top'}) // label would be 'top'\n   * }\n   * ```\n   */\n  label: string | undefined\n  default: ValueType\n  /**\n   * Each prop config has a `deserializeAndSanitize()` function that deserializes and sanitizes\n   * any js value into one that is acceptable by this prop config, or `undefined`.\n   *\n   * As a rule, the value returned by this function should not hold any reference to `json` or any\n   * other value referenced by the descendent props of `json`. This is to ensure that json values\n   * controlled by the user can never change the values in the store. See `deserializeAndSanitize()` in\n   * `t.compound()` or `t.rgba()` as examples.\n   *\n   * The `DeserializeType` is usually equal to `ValueType`. That is the case with\n   * all simple prop configs, such as `number`, `string`, or `rgba`. However, composite\n   * configs such as `compound` or `enum` may deserialize+sanitize into a partial value. For example,\n   * a prop config of `t.compound({x: t.number(0), y: t.number(0)})` may deserialize+sanitize into `{x: 10}`.\n   * This behavior is used by {@link SheetObject.getValues} to replace the missing sub-props\n   * with their default value.\n   *\n   * Admittedly, this partial deserialization behavior is not what the word \"deserialize\"\n   * typically implies in most codebases, so feel free to change this name into a more\n   * appropriate one.\n   *\n   * Additionally, returning an `undefined` allows {@link SheetObject.getValues} to\n   * replace the `undefined` with the default value of that prop.\n   */\n  deserializeAndSanitize: (json: unknown) => undefined | DeserializeType\n}\n\ninterface ISimplePropType<LiteralIdentifier extends string, ValueType>\n  extends IBasePropType<LiteralIdentifier, ValueType, ValueType> {\n  interpolate: Interpolator<ValueType>\n}\n\nexport interface PropTypeConfig_Number\n  extends ISimplePropType<'number', number> {\n  range?: [min: number, max: number]\n  nudgeFn: NumberNudgeFn\n  /**\n   * See {@link defaultNumberNudgeFn} to see how `nudgeMultiplier` is treated.\n   */\n  nudgeMultiplier: number | undefined\n}\n\nexport type NumberNudgeFn = (p: {\n  deltaX: number\n  deltaFraction: number\n  magnitude: number\n  config: PropTypeConfig_Number\n}) => number\n\nexport interface PropTypeConfig_Boolean\n  extends ISimplePropType<'boolean', boolean> {}\n\nexport interface PropTypeConfig_String\n  extends ISimplePropType<'string', string> {}\n\nexport interface PropTypeConfig_StringLiteral<T extends string>\n  extends ISimplePropType<'stringLiteral', T> {\n  valuesAndLabels: Record<T, string>\n  as: 'menu' | 'switch'\n}\n\nexport interface PropTypeConfig_Rgba extends ISimplePropType<'rgba', Rgba> {}\n\nexport interface PropTypeConfig_Image extends ISimplePropType<'image', Asset> {}\nexport interface PropTypeConfig_File extends ISimplePropType<'file', File> {}\n\ntype DeepPartialCompound<Props extends UnknownValidCompoundProps> = {\n  [K in keyof Props]?: DeepPartial<Props[K]>\n}\n\ntype DeepPartial<Conf extends PropTypeConfig> =\n  Conf extends PropTypeConfig_AllSimples\n    ? Conf['valueType']\n    : Conf extends PropTypeConfig_Compound<infer T>\n      ? DeepPartialCompound<T>\n      : never\n\nexport interface PropTypeConfig_Compound<\n  Props extends UnknownValidCompoundProps,\n> extends IBasePropType<\n    'compound',\n    {[K in keyof Props]: Props[K]['valueType']},\n    DeepPartialCompound<Props>\n  > {\n  props: Record<keyof Props, PropTypeConfig>\n}\n\nexport interface PropTypeConfig_Enum extends IBasePropType<'enum', {}> {\n  cases: Record<string, PropTypeConfig>\n  defaultCase: string\n}\n\nexport type PropTypeConfig_AllSimples =\n  | PropTypeConfig_Number\n  | PropTypeConfig_Boolean\n  | PropTypeConfig_String\n  | PropTypeConfig_StringLiteral<$IntentionalAny>\n  | PropTypeConfig_Rgba\n  | PropTypeConfig_Image\n  | PropTypeConfig_File\n\nexport type PropTypeConfig =\n  | PropTypeConfig_AllSimples\n  | PropTypeConfig_Compound<$IntentionalAny>\n  | PropTypeConfig_Enum\n\nexport type UnknownValidCompoundProps = {\n  [K in string]: PropTypeConfig\n}\n\n/**\n *\n * This does not include Rgba since Rgba does not have a predictable\n * object shape. We prefer to infer that compound props are described as\n * `Record<string, IShorthandProp>` for now.\n *\n * In the future, it might be reasonable to wrap these types up into something\n * which would allow us to differentiate between values at runtime\n * (e.g. `val.type = \"Rgba\"` vs `val.type = \"Compound\"` etc)\n */\ntype UnknownShorthandProp =\n  | string\n  | number\n  | boolean\n  | PropTypeConfig\n  | UnknownShorthandCompoundProps\n\n/** Given an object like this, we have enough info to predict the compound prop */\nexport type UnknownShorthandCompoundProps = {\n  [K in string]: UnknownShorthandProp\n}\n\nexport type ShorthandPropToLonghandProp<P extends UnknownShorthandProp> =\n  P extends string\n    ? PropTypeConfig_String\n    : P extends number\n      ? PropTypeConfig_Number\n      : P extends boolean\n        ? PropTypeConfig_Boolean\n        : P extends PropTypeConfig\n          ? P\n          : P extends UnknownShorthandCompoundProps\n            ? PropTypeConfig_Compound<\n                ShorthandCompoundPropsToLonghandCompoundProps<P>\n              >\n            : never\n\nexport type ShorthandCompoundPropsToInitialValue<\n  P extends UnknownShorthandCompoundProps,\n> = LonghandCompoundPropsToInitialValue<\n  ShorthandCompoundPropsToLonghandCompoundProps<P>\n>\n\ntype LonghandCompoundPropsToInitialValue<P extends UnknownValidCompoundProps> =\n  {\n    [K in keyof P]: P[K]['valueType']\n  }\n\nexport type PropsValue<P> = P extends UnknownValidCompoundProps\n  ? LonghandCompoundPropsToInitialValue<P>\n  : P extends UnknownShorthandCompoundProps\n    ? LonghandCompoundPropsToInitialValue<\n        ShorthandCompoundPropsToLonghandCompoundProps<P>\n      >\n    : never\n\nexport type ShorthandCompoundPropsToLonghandCompoundProps<\n  P extends UnknownShorthandCompoundProps,\n> = {\n  [K in keyof P]: ShorthandPropToLonghandProp<P[K]>\n}\n\nexport const propTypeSymbol = Symbol('TheatrePropType_Basic')\n\nexport type Rgba = {\n  r: number\n  g: number\n  b: number\n  a: number\n}\n\nexport type Laba = {\n  L: number\n  a: number\n  b: number\n  alpha: number\n}\n\nexport interface ITransactionAPI {\n  /**\n   * Set the value of a prop by its pointer. If the prop is sequenced, the value\n   * will be a keyframe at the current sequence position.\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * const obj = sheet.object(\"box\", {x: 0, y: 0})\n   * studio.transaction(({set}) => {\n   *   // set a specific prop's value\n   *   set(obj.props.x, 10) // New value is {x: 10, y: 0}\n   *   // values are set partially\n   *   set(obj.props, {y: 11}) // New value is {x: 10, y: 11}\n   *\n   *   // this will error, as there is no such prop as 'z'\n   *   set(obj.props.z, 10)\n   * })\n   * ```\n   * @param pointer - A Pointer, like object.props\n   * @param value - The value to override the existing value. This is treated as a deep partial value.\n   */\n  set<V>(pointer: Pointer<V>, value: V): void\n  /**\n   * Unsets the value of a prop by its pointer.\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * const obj = sheet.object(\"box\", {x: 0, y: 0})\n   * studio.transaction(({set}) => {\n   *   // set props.x to its default value\n   *   unset(obj.props.x)\n   *   // set all props to their default value\n   *   set(obj.props)\n   * })\n   * ```\n   * @param pointer - A pointer, like object.props\n   */\n  unset<V>(pointer: Pointer<V>): void\n\n  /**\n   * EXPERIMENTAL API - this api may be removed without notice.\n   *\n   * Makes Theatre forget about this object. This means all the prop overrides and sequenced props\n   * will be reset, and the object won't show up in the exported state.\n   */\n  __experimental_forgetObject(object: ISheetObject): void\n\n  /**\n   * EXPERIMENTAL API - this api may be removed without notice.\n   *\n   * Makes Theatre forget about this sheet.\n   */\n  __experimental_forgetSheet(sheet: ISheet): void\n\n  /**\n   * EXPERIMENTAL API - this api may be removed without notice.\n   *\n   * Sequences a track for the\n   */\n  __experimental_sequenceProp<V>(pointer: Pointer<V>): void\n}\n/**\n *\n */\nexport interface PaneClassDefinition {\n  /**\n   * Each pane has a `class`, which is a string.\n   */\n  class: string\n  // /**\n  //  * A react component that renders the content of the pane. It is given\n  //  * a single prop, `paneId`, which is a unique identifier for the pane.\n  //  *\n  //  * If you wish to store and persist the state of the pane,\n  //  * simply use a sheet and an object.\n  //  */\n  // component: React.ComponentType<{\n  //   /**\n  //    * The unique identifier of the pane\n  //    */\n  //   paneId: string\n  // }>\n\n  mount: (opts: {paneId: string; node: HTMLElement}) => () => void\n}\n\nexport type ToolConfigIcon = {\n  type: 'Icon'\n  svgSource: string\n  title: string\n  onClick: () => void\n}\n\nexport type ToolConfigOption = {\n  value: string\n  label: string\n  svgSource: string\n}\n\nexport type ToolConfigSwitch = {\n  type: 'Switch'\n  value: string\n  onChange: (value: string) => void\n  options: ToolConfigOption[]\n}\n\nexport type ToolconfigFlyoutMenuItem = {\n  label: string\n  onClick?: () => void\n}\n\nexport type ToolConfigFlyoutMenu = {\n  /**\n   * A flyout menu\n   */\n  type: 'Flyout'\n  /**\n   * The label of the trigger button\n   */\n  label: string\n  items: ToolconfigFlyoutMenuItem[]\n}\n\nexport type ToolConfig =\n  | ToolConfigIcon\n  | ToolConfigSwitch\n  | ToolConfigFlyoutMenu\n\nexport type ToolsetConfig = Array<ToolConfig>\n\n/**\n * A Theatre.js Studio extension. You can define one either\n * in a separate package, or within your project.\n */\nexport interface IExtension {\n  /**\n   * Pick a unique ID for your extension. Ideally the name would be unique if\n   * the extension was to be published to the npm repository.\n   */\n  id: string\n  /**\n   * Set this if you'd like to add a component to the global toolbar (on the top)\n   *\n   * @example\n   * TODO\n   */\n  toolbars?: {\n    [key in 'global' | string]: (\n      set: (config: ToolsetConfig) => void,\n      studio: IStudio,\n    ) => () => void\n  }\n\n  /**\n   * Introduces new pane types.\n   * @example\n   * TODO\n   */\n  panes?: Array<PaneClassDefinition>\n}\n\nexport type PaneInstance<ClassName extends string> = {\n  extensionId: string\n  instanceId: PaneInstanceId\n  definition: PaneClassDefinition\n}\n\nexport interface IStudioUI {\n  /**\n   * Temporarily hides the studio\n   */\n  hide(): void\n  /**\n   * Whether the studio is currently visible or hidden\n   */\n  readonly isHidden: boolean\n  /**\n   * Makes the studio visible again.\n   */\n  restore(): void\n\n  renderToolset(toolsetId: string, htmlNode: HTMLElement): () => void\n}\n\nexport interface InitOpts {\n  studio?: boolean\n  /**\n   * The local storage key to use to persist the state.\n   *\n   * Default: \"theatrejs:0.4\"\n   */\n  persistenceKey?: string\n  /**\n   * Whether to persist the changes in the browser's temporary storage.\n   * It is useful to set this to false in the test environment or when debugging things.\n   *\n   * Default: true\n   */\n  usePersistentStorage?: boolean\n\n  __experimental_rafDriver?: IRafDriver | undefined\n\n  serverUrl?: string | undefined\n}\n\n/**\n * This is the public api of Theatre's studio. It is exposed through:\n *\n * @example\n * Basic usage:\n * ```ts\n * import theatre from '@theatre/core'\n *\n * theatre.init({studio: true})\n * ```\n *\n * @example\n * Usage with **tree-shaking**:\n * ```ts\n * import theatre from '@theatre/core'\n *\n * if (process.env.NODE_ENV !== 'production') {\n *   theatre.init({studio: true})\n * }\n * ```\n */\nexport interface IStudio {\n  readonly ui: IStudioUI\n\n  /**\n   * Runs an undo-able transaction. Creates a single undo level for all\n   * the operations inside the transaction.\n   *\n   * Will roll back if an error is thrown.\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * studio.transaction(({set, unset}) => {\n   *   set(obj.props.x, 10) // set the value of obj.props.x to 10\n   *   unset(obj.props.y) // unset the override at obj.props.y\n   * })\n   * ```\n   */\n  transaction(fn: (api: ITransactionAPI) => void): void\n\n  /**\n   * Creates a scrub, which is just like a transaction, except you\n   * can run it multiple times without creating extra undo levels.\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * const scrub = studio.scrub()\n   * scrub.capture(({set}) => {\n   *   set(obj.props.x, 10) // set the value of obj.props.x to 10\n   * })\n   *\n   * // half a second later...\n   * scrub.capture(({set}) => {\n   *   set(obj.props.y, 11) // set the value of obj.props.y to 11\n   *   // note that since we're not setting obj.props.x, its value reverts back to its old value (ie. not 10)\n   * })\n   *\n   * // then either:\n   * scrub.commit() // commits the scrub and creates a single undo level\n   * // or:\n   * scrub.reset() // clear all the ops in the scrub so we can run scrub.capture() again\n   * // or:\n   * scrub.discard() // clears the ops and destroys it (ie. can't call scrub.capture() anymore)\n   * ```\n   */\n  scrub(): IScrub\n\n  /**\n   * Creates a debounced scrub, which is just like a normal scrub, but\n   * automatically runs scrub.commit() after `threshhold` milliseconds have\n   * passed after the last `scrub.capture`.\n   *\n   * @param threshhold - How long to wait before committing the scrub\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * // Will create a new undo-level after 2 seconds have passed\n   * // since the last scrub.capture()\n   * const scrub = studio.debouncedScrub(2000)\n   *\n   * // capture some ops\n   * scrub.capture(...)\n   * // wait one second\n   * await delay(1000)\n   * // capture more ops but no new undo level is made,\n   * // because the last scrub.capture() was called less than 2 seconds ago\n   * scrub.capture(...)\n   *\n   * // wait another seonc and half\n   * await delay(1500)\n   * // still no new undo level, because less than 2 seconds have passed\n   * // since the last capture\n   * scrub.capture(...)\n   *\n   * // wait 3 seconds\n   * await delay(3000) // at this point, one undo level is created.\n   *\n   * // this call to capture will start a new undo level\n   * scrub.capture(...)\n   * ```\n   */\n  debouncedScrub(threshhold: number): Pick<IScrub, 'capture'>\n\n  /**\n   * Sets the current selection.\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * const sheet1: ISheet = ...\n   * const obj1: ISheetObject<any> = ...\n   *\n   * studio.setSelection([sheet1, obj1])\n   * ```\n   *\n   * You can read the current selection from studio.selection\n   */\n  setSelection(selection: Array<ISheetObject<any> | ISheet>): void\n\n  /**\n   * Calls fn every time the current selection changes.\n   */\n  onSelectionChange(\n    fn: (s: Array<ISheetObject<{}> | ISheet>) => void,\n  ): VoidFunction\n\n  /**\n   * The current selection, consisting of Sheets and Sheet Objects\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * console.log(studio.selection) // => [ISheetObject, ISheet]\n   * ```\n   */\n  readonly selection: Array<ISheetObject<{}> | ISheet>\n\n  /**\n   * Registers an extension\n   */\n  extend(\n    /**\n     * The extension's definition\n     */\n    extension: IExtension,\n    opts?: {\n      /**\n       * Whether to reconfigure the extension. This is useful if you're\n       * hot-reloading the extension.\n       *\n       * Mind you, that if the old version of the extension defines a pane,\n       * and the new version doesn't, all instances of that pane will disappear, as expected.\n       * _However_, if you again reconfigure the extension with the old version, the instances\n       * of the pane that pane will re-appear.\n       *\n       * We're not sure about whether this behavior makes sense or not. If not, let us know\n       * in the discord server or open an issue on github.\n       */\n      __experimental_reconfigure?: boolean\n    },\n  ): void\n\n  /**\n   * Creates a new pane\n   *\n   * @param paneClass - The class name of the pane (provided by an extension)\n   */\n  createPane<PaneClass extends string>(\n    paneClass: PaneClass,\n  ): PaneInstance<PaneClass>\n\n  /**\n   * Destroys a previously created pane instance\n   *\n   * @param paneId - The unique identifier for the pane instance, provided in the 'mount' callback\n   */\n  destroyPane(paneId: string): void\n\n  /**\n   * Returns the Theatre.js project that contains the studio's sheets and objects.\n   *\n   * It is useful if you'd like to have sheets/objects that are present only when\n   * studio is present.\n   */\n  getStudioProject(): IProject\n\n  /**\n   * Creates a JSON object that contains the state of the project. You can use this\n   * to programmatically save the state of your projects to the storage system of your\n   * choice, rather than manually clicking on the \"Export\" button in the UI.\n   *\n   * @param projectId - same projectId as in `core.getProject(projectId)`\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * const projectId = \"project\"\n   * const json = studio.createContentOfSaveFile(projectId)\n   * const string = JSON.stringify(json)\n   * fetch(`/projects/${projectId}/state`, {method: 'POST', body: string}).then(() => {\n   *   console.log(\"Saved\")\n   * })\n   * ```\n   */\n  createContentOfSaveFile(projectId: string): Record<string, unknown>\n\n  __experimental: {\n    /**\n     * Warning: This is an experimental API and will change in the future.\n     *\n     * Disables the play/pause keyboard shortcut (spacebar)\n     * Also see `__experimental_enablePlayPauseKeyboardShortcut()` to re-enable it.\n     */\n    __experimental_disablePlayPauseKeyboardShortcut(): void\n    /**\n     * Warning: This is an experimental API and will change in the future.\n     *\n     * Disables the play/pause keyboard shortcut (spacebar)\n     */\n    __experimental_enablePlayPauseKeyboardShortcut(): void\n    /**\n     * Clears persistent storage and ensures that the current state will not be\n     * saved on window unload. Further changes to state will continue writing to\n     * persistent storage, if enabled during initialization.\n     *\n     * @param persistenceKey - same persistencyKey as in `studio.initialize(opts)`, if any\n     */\n    __experimental_clearPersistentStorage(persistenceKey?: string): void\n\n    /**\n     * Warning: This is an experimental API and will change in the future.\n     *\n     * This is functionally the same as `studio.createContentOfSaveFile()`, but\n     * returns a typed object instead of a JSON object.\n     *\n     * See {@link __UNSTABLE_Project_OnDiskState} for more information.\n     */\n    __experimental_createContentOfSaveFileTyped(\n      projectId: string,\n    ): __UNSTABLE_Project_OnDiskState\n  }\n}\n\n/**\n * The scrub API is a simple construct for changing values in Theatre.js in a history-compatible way.\n * Primarily, it can be used to create a series of value changes using a temp transaction without\n * creating multiple transactions.\n *\n * The name is inspired by the activity of \"scrubbing\" the value of an input through clicking and\n * dragging left and right. But, the API is not limited to chaning a single prop's value.\n *\n * For now, using the {@link IScrubApi.set} will result in changing the values where the\n * playhead is (the `sequence.position`).\n */\nexport interface IScrubApi {\n  /**\n   * Set the value of a prop by its pointer. If the prop is sequenced, the value\n   * will be a keyframe at the current playhead position (`sequence.position`).\n   *\n   * @param pointer - A Pointer, like object.props\n   * @param value - The value to override the existing value. This is treated as a deep partial value.\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * const obj = sheet.object(\"box\", {x: 0, y: 0})\n   * const scrub = studio.scrub()\n   * scrub.capture(({set}) => {\n   *   // set a specific prop's value\n   *   set(obj.props.x, 10) // New value is {x: 10, y: 0}\n   *   // values are set partially\n   *   set(obj.props, {y: 11}) // New value is {x: 10, y: 11}\n   *\n   *   // this will error, as there is no such prop as 'z'\n   *   set(obj.props.z, 10)\n   * })\n   * ```\n   */\n  set<T>(pointer: Pointer<T>, value: T): void\n}\n\nexport interface IScrub {\n  /**\n   * Clears all the ops in the scrub, but keeps the scrub open so you can call\n   * `scrub.capture()` again.\n   */\n  reset(): void\n  /**\n   * Commits the scrub and creates a single undo level.\n   */\n  commit(): void\n  /**\n   * Captures operations for the scrub.\n   *\n   * Note that running `scrub.capture()` multiple times means all the older\n   * calls of `scrub.capture()` will be reset.\n   *\n   * @example\n   * Usage:\n   * ```ts\n   * scrub.capture(({set}) => {\n   *   set(obj.props.x, 10) // set the value of obj.props.x to 10\n   * })\n   * ```\n   */\n  capture(fn: (api: IScrubApi) => void): void\n\n  /**\n   * Clears the ops of the scrub and destroys it. After calling this,\n   * you won't be able to call `scrub.capture()` anymore.\n   */\n  discard(): void\n}\n"
  },
  {
    "path": "packages/core/src/utils/ids.ts",
    "content": "import type {KeyframeId, SequenceTrackId} from '@theatre/core/types/public'\n\nexport function asKeyframeId(s: string): KeyframeId {\n  return s as KeyframeId\n}\n\nexport function asSequenceTrackId(s: string): SequenceTrackId {\n  return s as SequenceTrackId\n}\n"
  },
  {
    "path": "packages/core/src/utils/instanceTypes.ts",
    "content": "// eslint-disable-next-line import/no-extraneous-dependencies\nimport type {IProject, ISheet, ISheetObject} from '@theatre/core/types/public'\nimport type Project from '@theatre/core/projects/Project'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type SheetObjectTemplate from '@theatre/core/sheetObjects/SheetObjectTemplate'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport type SheetTemplate from '@theatre/core/sheets/SheetTemplate'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\n\n/**\n * Since \\@theatre/core and \\@theatre/studio are separate bundles,\n * they cannot use `x instanceof Y` to detect object types.\n *\n * The functions in this module are supposed to be a replacement for that.\n */\n\nexport const isProject = typeAsserter<Project>('Theatre_Project')\n\nexport const isSheet = typeAsserter<Sheet>('Theatre_Sheet')\nexport const isSheetTemplate = typeAsserter<SheetTemplate>(\n  'Theatre_SheetTemplate',\n)\n\nexport const isSheetObject = typeAsserter<SheetObject>('Theatre_SheetObject')\n\nexport const isSheetObjectTemplate = typeAsserter<SheetObjectTemplate>(\n  'Theatre_SheetObjectTemplate',\n)\n\nexport const isProjectPublicAPI = typeAsserter<IProject>(\n  'Theatre_Project_PublicAPI',\n)\n\nexport const isSheetPublicAPI = typeAsserter<ISheet>('Theatre_Sheet_PublicAPI')\n\nexport const isSheetObjectPublicAPI = typeAsserter<ISheetObject>(\n  'Theatre_SheetObject_PublicAPI',\n)\n\nfunction typeAsserter<T extends {type: string}>(\n  t: T['type'],\n): (v: unknown) => v is T {\n  return (v: unknown): v is T =>\n    typeof v === 'object' && !!v && (v as $IntentionalAny).type === t\n}\n"
  },
  {
    "path": "packages/core/src/utils/keyframeUtils.ts",
    "content": "import type {$IntentionalAny} from '@theatre/core/types/public'\nimport type {BasicKeyframedTrack} from '@theatre/core/types/private/core'\nimport memoizeFn from '@theatre/utils/memoizeFn'\nimport {cloneDeep} from 'lodash-es'\nimport type {BasicKeyframe} from '@theatre/core/types/public'\n\nexport const getSortedKeyframes = (\n  keyframes: BasicKeyframedTrack['keyframes'],\n): BasicKeyframe[] => {\n  const sorted = Object.values(\n    keyframes.byId,\n  ) as $IntentionalAny as BasicKeyframe[]\n  sorted.sort((a, b) => a.position! - b.position!)\n\n  return cloneDeep(sorted)\n}\n\nexport const getSortedKeyframesCached = memoizeFn(getSortedKeyframes)\n\nexport const fromArray = (\n  keyframes: BasicKeyframe[],\n): BasicKeyframedTrack['keyframes'] => {\n  const byId: BasicKeyframedTrack['keyframes']['byId'] = {}\n  const allIds: BasicKeyframedTrack['keyframes']['allIds'] = {}\n\n  for (const keyframe of keyframes) {\n    byId[keyframe.id] = keyframe\n    allIds[keyframe.id] = true\n  }\n\n  return cloneDeep({byId, allIds})\n}\n\nexport const fromSortedKeyframesCached = memoizeFn(fromArray)\n"
  },
  {
    "path": "packages/core/src/utils/notify.ts",
    "content": "import {globalVariableNames} from '@theatre/core/globals'\n\nexport type Notification = {title: string; message: string}\nexport type NotificationType = 'info' | 'success' | 'warning' | 'error'\nexport type Notify = (\n  /**\n   * The title of the notification.\n   */\n  title: string,\n  /**\n   * The message of the notification.\n   */\n  message: string,\n  /**\n   * An array of doc pages to link to.\n   */\n  docs?: {url: string; title: string}[],\n  /**\n   * Whether duplicate notifications should be allowed.\n   */\n  allowDuplicates?: boolean,\n) => void\n\nexport type Notifiers = {\n  /**\n   * Show a success notification.\n   */\n  success: Notify\n  /**\n   * Show a warning notification.\n   *\n   * Say what happened in the title.\n   * In the message, start with 1) a reassurance, then 2) explain why it happened, and 3) what the user can do about it.\n   */\n  warning: Notify\n  /**\n   * Show an info notification.\n   */\n  info: Notify\n  /**\n   * Show an error notification.\n   */\n  error: Notify\n}\n\nconst createHandler =\n  (type: NotificationType): Notify =>\n  (...args) => {\n    switch (type) {\n      case 'success': {\n        break\n      }\n      case 'info': {\n        console.info(args.slice(0, 2).join('\\n'))\n        break\n      }\n      case 'warning': {\n        console.warn(args.slice(0, 2).join('\\n'))\n        break\n      }\n      case 'error': {\n        // don't log errors, they're already logged by the browser\n      }\n    }\n\n    return typeof window !== 'undefined'\n      ? // @ts-ignore\n        window[globalVariableNames.notifications]?.notify[type](...args)\n      : undefined\n  }\n\nexport const notify: Notifiers = {\n  warning: createHandler('warning'),\n  success: createHandler('success'),\n  info: createHandler('info'),\n  error: createHandler('error'),\n}\n\nif (typeof window !== 'undefined') {\n  window.addEventListener('error', (e) => {\n    notify.error(\n      `An error occurred`,\n      `<pre>${e.message}</pre>\\n\\nSee **console** for details.`,\n    )\n  })\n\n  window.addEventListener('unhandledrejection', (e) => {\n    notify.error(\n      `An error occurred`,\n      `<pre>${e.reason}</pre>\\n\\nSee **console** for details.`,\n    )\n  })\n}\n"
  },
  {
    "path": "packages/core/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \".temp/declarations\",\n    \"lib\": [\"es2017\", \"dom\", \"ESNext\"],\n    \"rootDir\": \".\",\n    \"composite\": true,\n    \"types\": [\"jest\", \"node\"],\n    \"emitDeclarationOnly\": true\n  },\n  \"references\": [{\"path\": \"../utils\"}, {\"path\": \"../dataverse\"}],\n  \"include\": [\"./globals.d.ts\", \"./src/**/*\", \"./devEnv/**/*\"],\n  \"exclude\": [\"**/node_modules\", \"**/.*\", \"**/xeno\", \"**/dist\", \"**/.temp\"]\n}\n"
  },
  {
    "path": "packages/dataverse/.gitignore",
    "content": "/dist"
  },
  {
    "path": "packages/dataverse/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "packages/dataverse/README.md",
    "content": "# @theatre/dataverse\n\nDataverse is the reactive dataflow library\n[Theatre.js](https://www.theatrejs.com) is built on. It is inspired by ideas in\n[functional reactive programming](https://en.wikipedia.org/wiki/Functional_reactive_programming)\nand it is optimised for interactivity and animation.\n\n## Installation\n\n```sh\n$ npm install @theatre/dataverse\n# and the react bindings\n$ npm install @theatre/react\n```\n\n## Usage with React\n\n```tsx\nimport {Atom} from '@theatre/dataverse'\nimport {useVal} from '@theatre/react'\nimport {useEffect} from 'react'\n\n// Atoms hold state\nconst atom = new Atom({count: 0, ready: false})\n\nconst increaseCount = () =>\n  atom.setByPointer(atom.pointer.count, (count) => count + 1)\n\nfunction Component() {\n  // useVal is a hook that subscribes to changes in a specific path inside the atom\n  const ready = useVal(\n    // atom.pointer is a type-safe way to refer to a path inside the atom\n    atom.pointer.ready,\n  )\n\n  if (!ready) {\n    return <div>Loading...</div>\n  } else {\n    return <button onClick={increaseCount}>Increase count</button>\n  }\n}\n```\n\nAlternatively, we could have defined our atom inside the component, making its\nstate local to that component instance:\n\n```tsx\nimport {useAtom} form '@theatre/react'\n\nfunction Component() {\n  const atom = useAtom({count: 0, ready: false})\n  const ready = useVal(atom.pointer.ready)\n\n  // ...\n}\n```\n\n## Quick tour\n\nThere 4 main concepts in dataverse:\n\n- [Atoms](#atoms), hold the state of your application.\n- [Pointers](#pointers) are a type-safe way to refer to specific properties of\n  atoms.\n- [Prisms](#prisms) are functions that derive a value from an atom or from\n  another prism.\n- [Tickers](#tickers) are a way to schedule and synchronise computations.\n\n### Atoms\n\nAtoms are state holders. They can be used to manage either component state or\nthe global state of your application.\n\n```ts\nimport {Atom} from '@theatre/dataverse'\n\nconst atom = new Atom({intensity: 1, position: {x: 0, y: 0}})\n```\n\n#### Changing the state of an atom\n\n```ts\n// replace the whole stae\natom.set({intensity: 1, position: {x: 0, y: 0}})\n\n// or using an update function\natom.reduce((state) => ({...state, intensity: state.intensity + 1}))\n\n// or much easier, using a pointer\natom.setByPointer(atom.pointer.intensity, 3)\n\natom.reduceByPointer(atom.pointer.intensity, (intensity) => intensity + 1)\n```\n\n#### Reading the state of an atom _None-reactively_\n\n```ts\n// get the whole state\natom.get() // {intensity: 4, position: {x: 0, y: 0}}\n\n// or get a specific property using a pointer\natom.getByPointer(atom.pointer.intensity) // 4\n```\n\n#### Reading the state of an atom _reactively, in React_\n\n```ts\nimport {useVal} from '@theatre/react'\n\nfunction Component() {\n  const intensity = useVal(atom.pointer.intensity) // 4\n  // ...\n}\n```\n\nAtoms can also be subscribed to outside of React. We'll cover that in a bit when\nwe talk about [prisms](#prisms).\n\n### Pointers\n\nPointers are a type-safe way to refer to specific properties of atoms.\n\n```ts\nimport {Atom} from '@theatre/dataverse'\n\nconst atom = new Atom({intensity: 1, position: {x: 0, y: 0}})\n\natom.setByPointer(atom.pointer.intensity, 3) // will set the intensity to 3\n\n// referring to a non-existing property is a typescript error, but it'll work at runtime\natom.setByPointer(atom.pointer.nonExistingProperty, 3)\n\natom.get() // {intensity: 3, position: {x: 0, y: 0}, nonExistingProperty: 3}\n```\n\nPointers are referrentially stable\n\n```ts\nassert.equal(atom.pointer.intensity, atom.pointer.intensity)\n```\n\n#### Pointers and React\n\nPointers are a great way to pass data down the component tree while keeping\nre-renders only to the components that actually need to re-render.\n\n```tsx\nimport {useVal, useAtom} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\n\nfunction ParentComponent() {\n  const atom = useAtom({\n    light: {intensity: 1, position: {x: 0, y: 0}},\n    ready: true,\n  })\n\n  const ready = useVal(atom.pointer.ready)\n\n  if (!ready) return <div>loading...</div>\n\n  return (\n    <>\n      {/* <Group> will only re-render when the position of the light changes */}\n      <Group positionP={atom.pointer.light.position}>\n        {/* <Light> will only re-render when the intensity of the light changes */}\n        <Light intensityP={atom.pointer.intensity} />\n      </Group>\n    </>\n  )\n}\n\nfunction Group({positionP, children}) {\n  const {x, y} = useVal(positionP)\n  return <div style={{position: `${x}px ${y}px`}}>{children}</div>\n}\n\nfunction Light({intensityP}) {\n  const intensity = useVal(intensityP)\n  return <div style={{opacity: intensity}} className=\"light\" />\n}\n```\n\n### Prisms\n\nPrisms are functions that derive a value from an atom or from another prism.\n\n```ts\nimport {Atom, prism, val} from '@theatre/dataverse'\n\nconst atom = new Atom({a: 1, b: 2, foo: 10})\n\n// the value of this prism will always be equal to the sum of `a` and `b`\nconst sum = prism(() => {\n  const a = val(atom.pointer.a)\n  const b = val(atom.pointer.b)\n  return a + b\n})\n```\n\nPrisms can also refer to other prisms.\n\n```ts\nconst double = prism(() => {\n  return 2 * val(sum)\n})\n\nconsole.log(val(double)) // 6\n```\n\n#### Reading the value of a prism, _None-reactively_\n\n```ts\nconsole.log(val(prism)) // 3\n\natom.setByPointer(atom.pointer.a, 2)\nconsole.log(val(prism)) // 4\n```\n\n#### Reading the value of a prism, _reactively, in React_\n\nJust like atoms, prisms can be subscribed to via `useVal()`\n\n```tsx\nfunction Component() {\n  return (\n    <div>\n      {useVal(atom.pointer.a)} + {useVal(atom.pointer.b)} = {useVal(prism)}\n    </div>\n  )\n}\n```\n\n#### Reading the value of a prism, _reactively, outside of React_\n\nPrisms can also be subscribed to, outside of React's renderloop. This requires\nthe use of a Ticker, which we'll cover in the next section.\n\n### Tickers\n\nTickers are a way to schedule and synchronise computations. They're useful when\nreacting to changes in atoms or prisms _outside of React's renderloop_.\n\n```ts\nimport {Ticker, onChange} from '@theatre/dataverse'\n\nconst ticker = new Ticker()\n\n// advance the ticker roughly 60 times per second (note that it's better to use requestAnimationFrame)\nsetInterval(ticker.tick, 1000 / 60)\n\nonChange(atom.pointer.intensity, (newIntensity) => {\n  console.log('intensity changed to', newIntensity)\n})\n\natom.setByPointer(atom.pointer.intensity, 3)\n\n// After a few milliseconds, logs 'intensity changed to 3'\n\nsetTimeout(() => {\n  atom.setByPointer(atom.pointer.intensity, 4)\n  atom.setByPointer(atom.pointer.intensity, 5)\n  // updates are batched because our ticker advances every 16ms, so we\n  // will only get one log for 'intensity changed to 5', even though we changed the intensity twice\n}, 1000)\n```\n\nTickers should normally be advanced using `requestAnimationFrame` to make sure\nall the computations are done in sync with the browser's refresh rate.\n\n```ts\nconst frame = () => {\n  ticker.tick()\n  requestAnimationFrame(frame)\n}\n\nrequestAnimationFrame(frame)\n```\n\n#### Benefits of using Tickers\n\nTickers make sure that our computations are batched and only advance atomically.\nThey also make sure that we don't recompute the same value twice in the same\nframe.\n\nMost importantly, Tickers allow us to align our computations to the browser's\n(or the XR-device's) refresh rate.\n\n### Prism hooks\n\nPrism hooks are inspired by\n[React hooks](https://reactjs.org/docs/hooks-intro.html). They are a convenient\nway to cache, memoize, batch, and run effects inside prisms, while ensuring that\nthe prism can be used in a declarative, encapsulated way.\n\n#### `prism.source()`\n\nThe `prism.source()` hook allows a prism to read to and react to changes in\nvalues that reside outside of an atom or another prism, for example, the value\nof an `<input type=\"text\" />` element.\n\n```ts\nfunction prismFromInputElement(input: HTMLInputElement): Prism<string> {\n  function subscribe(cb: (value: string) => void) {\n    const listener = () => {\n      cb(input.value)\n    }\n    input.addEventListener('input', listener)\n    return () => {\n      input.removeEventListener('input', listener)\n    }\n  }\n\n  function get() {\n    return input.value\n  }\n  return prism(() => prism.source(subscribe, get))\n}\n\nconst p = prismFromInputElement(document.querySelector('input'))\n\np.onChange(ticker, (value) => {\n  console.log('input value changed to', value)\n})\n```\n\n#### `prism.ref()`\n\nJust like React's `useRef()`, `prism.ref()` allows us to create a prism that\nholds a reference to some value. The only difference is that `prism.ref()`\nrequires a key to be passed into it, whlie `useRef()` doesn't. This means that\nwe can call `prism.ref()` in any order, and we can call it multiple times with\nthe same key.\n\n```ts\nconst p = prism(() => {\n  const inputRef = prism.ref('some-unique-key')\n  if (!inputRef.current) {\n    inputRef.current = document.$('input.username')\n  }\n\n  // this prism will always reflect the value of <input class=\"username\">\n  return val(prismFromInputElement(inputRef.current))\n})\n\np.onChange(ticker, (value) => {\n  console.log('username changed to', value)\n})\n```\n\n#### `prism.memo()`\n\n`prism.memo()` works just like React's `useMemo()` hook. It's a way to cache the\nresult of a function call. The only difference is that `prism.memo()` requires a\nkey to be passed into it, whlie `useMemo()` doesn't. This means that we can call\n`prism.memo()` in any order, and we can call it multiple times with the same\nkey.\n\n```ts\nimport {Atom, prism, val} from '@theatre/dataverse'\n\nconst atom = new Atom(0)\n\nfunction factorial(n: number): number {\n  if (n === 0) return 1\n  return n * factorial(n - 1)\n}\n\nconst p = prism(() => {\n  // num will be between 0 and 9. This is so we can test what happens when the atom's value changes, but\n  // the memoized value doesn't change.\n  const num = val(atom.pointer)\n  const numMod10 = num % 10\n  const value = prism.memo(\n    // we need a string key to identify the hook. This allows us to call `prism.memo()` in any order, or even conditionally.\n    'factorial',\n    // the function to memoize\n    () => {\n      console.log('Calculating factorial')\n      factorial(numMod10)\n    },\n    // the dependencies of the function. If any of the dependencies change, the function will be called again.\n    [numMod10],\n  )\n\n  return `number is ${num}, num % 10 is ${numMod10} and its factorial is ${value}`\n})\n\np.onChange(ticker, (value) => {\n  console.log('=>', value)\n})\n\natom.set(1)\n// Calculating factorial\n// => number is 1, num % 10 is 1 and its factorial is 1\n\natom.set(2)\n// Calculating factorial\n// => number is 2, num % 10 is 2 and its factorial is 2\n\natom.set(12) // won't recalculate the factorial\n// => number is 12, num % 10 is 2 and its factorial is 2\n```\n\n#### `prism.effect()` and `prism.state()`\n\nThese are two more hooks that are similar to React's `useEffect()` and\n`useState()` hooks.\n\n`prism.effect()` is similar to React's `useEffect()` hook. It allows us to run\nside-effects when the prism is calculated. Note that prisms are supposed to be\n\"virtually\" pure functions. That means they either should not have side-effects\n(and thus, no calls for `prism.effect()`), or their side-effects should clean\nthemselves up when the prism goes cold.\n\n`prism.state()` is similar to React's `useState()` hook. It allows us to create\na stateful value that is scoped to the prism.\n\nWe'll defer to React's documentation for\n[a more detailed explanation of how `useEffect()`](https://reactjs.org/docs/hooks-effect.html)\nand how [`useState()`](https://reactjs.org/docs/hooks-state.html) work. But\nhere's a quick example:\n\n```tsx\nimport {prism} from '@theatre/dataverse'\nimport {useVal} from '@theatre/react'\n\n// This prism holds the current mouse position and updates when the mouse moves\nconst mousePositionPr = prism(() => {\n  const [pos, setPos] = prism.state<[x: number, y: number]>('pos', [0, 0])\n\n  prism.effect(\n    'setupListeners',\n    () => {\n      const handleMouseMove = (e: MouseEvent) => {\n        setPos([e.screenX, e.screenY])\n      }\n      document.addEventListener('mousemove', handleMouseMove)\n\n      return () => {\n        document.removeEventListener('mousemove', handleMouseMove)\n      }\n    },\n    [],\n  )\n\n  return pos\n})\n\nfunction Component() {\n  const [x, y] = useVal(mousePositionPr)\n  return (\n    <div>\n      Mouse position: {x}, {y}\n    </div>\n  )\n}\n```\n\n#### `prism.sub()`\n\n`prism.sub()` is a shortcut for creating a prism inside another prism. It's\nequivalent to calling `prism.memo(key, () => prism(fn), deps).getValue()`.\n`prism.sub()` is useful when you want to divide your prism into smaller prisms,\neach of which would _only_ recalculate when _certain_ dependencies change. In\nother words, it's an optimization tool.\n\n```ts\nfunction factorial(num: number): number {\n  if (num === 0) return 1\n  return num * factorial(num - 1)\n}\n\nconst events: Array<'foo-calculated' | 'bar-calculated'> = []\n\n// example:\nconst state = new Atom({foo: 0, bar: 0})\nconst pr = prism(() => {\n  const resultOfFoo = prism.sub(\n    'foo',\n    () => {\n      events.push('foo-calculated')\n      const foo = val(state.pointer.foo) % 10\n      // Note how `prism.sub()` is more powerful than `prism.memo()` because it allows us to use `prism.memo()` and other hooks inside of it:\n      return prism.memo('factorial', () => factorial(foo), [foo])\n    },\n    [],\n  )\n  const resultOfBar = prism.sub(\n    'bar',\n    () => {\n      events.push('bar-calculated')\n      const bar = val(state.pointer.bar) % 10\n\n      return prism.memo('factorial', () => factorial(bar), [bar])\n    },\n    [],\n  )\n\n  return `result of foo is ${resultOfFoo}, result of bar is ${resultOfBar}`\n})\n\nconst unsub = pr.onChange(ticker, () => {})\n// on the first run, both subs should be calculated:\nconsole.log(events) // ['foo-calculated', 'bar-calculated']\nevents.length = 0 // clear the events array\n\n// now if we change the value of `bar`, only `bar` should be recalculated:\nstate.setByPointer(state.pointer.bar, 2)\npr.getValue()\nconsole.log(events) // ['bar-calculated']\n\nunsub()\n```\n\nsince prism hooks are keyed (as opposed to React hooks where they're identified\nby their order), it's possible to have multiple hooks with the same key in the\nsame prism. To avoid this, we can use `prism.scope()` to create a \"scope\" for\nour hooks. Example:\n\n```ts\nconst pr = prism(() => {\n  prism.scope('a', () => {\n    prism.memo('foo', () => 1, [])\n  })\n\n  prism.scope('b', () => {\n    prism.memo('foo', () => 1, [])\n  })\n})\n```\n\n### `usePrism()`\n\n`usePrism()` is a _React_ hook that allows us to create a prism inside a React\ncomponent. This way, we can optimize our React components in a fine-grained way\nby moving their computations outside of React's render loop.\n\n```tsx\nimport {usePrism} from '@theatre/react'\n\nfunction Component() {\n  const value = usePrism(() => {\n    // [insert heavy calculation here]\n  }, [])\n}\n```\n\n### Hot and cold prisms\n\nPrisms can have three states:\n\n- 🧊 Cold: The prism was just created. It does not have dependents, or its\n  dependents are also 🧊 cold.\n- 🔥 Hot: The prism is either being subscribed to (via `useVal()`,\n  `prism.onChange()`, `prism.onStale()`, etc). Or, one of its dependents is 🔥\n  hot.\n  - A 🔥 Hot prism itself has two states:\n    - 🪵 Stale: The prism is hot, but its value is stale. This happens when one\n      or more of its dependencies have changed, but the value of the prism\n      hasn't been read since that change. Reading the value of a 🪵 Stale prism\n      will cause it to recalculate, and make it 🌲 Fresh.\n    - 🌲 Fresh: The prism is hot, and its value is fresh. This happens when the\n      prism's value has been read since the last change in its dependencies.\n      Re-reading the value of a 🌲 Fresh prism will _not_ cause it to\n      recalculate.\n\nOr, as a typescript annotation:\n\n```ts\ntype PrismState =\n  | {isHot: false} // 🧊\n  | {isHot: true; isFresh: false} // 🔥🪵\n  | {isHot: true; isFresh: true} // 🔥🌲\n```\n\nLet's demonstrate this with an example of a prism, and its `onStale()` method.\n\n```ts\nconst atom = new Atom(0)\nconst a = prism(() => val(atom.pointer)) // 🧊\n\n// onStale(cb) calls `cb` when the prism goes from 🌲 to 🪵\na.onStale(() => {\n  console.log('a is stale')\n})\n// a from 🧊 to 🔥\n// console: a is stale\n\n// reading the value of `a` will cause it to recalculate, and make it 🌲 fresh.\nconsole.log(val(a)) // 1\n// a from 🔥🪵 to 🔥🌲\n\natom.set(1)\n// a from 🔥🌲 to 🔥🪵\n// console: a is stale\n\n// reading the value of `a` will cause it to recalculate, and make it 🌲 fresh.\nconsole.log(val(a)) // 2\n```\n\nPrism states propogate through the prism dependency graph. Let's look at an\nexample:\n\n```ts\nconst atom = new Atom({a: 0, b: 0})\nconst a = prism(() => val(atom.pointer.a))\nconst b = prism(() => val(atom.pointer.b))\nconst sum = prism(() => val(a) + val(b))\n\n//    a    |    b    |   sum    |\n//    🧊   |    🧊    |    🧊    |\n\nlet unsub = a.onStale(() => {})\n\n// there is now a subscription to `a`, so it's 🔥 hot\n//    a    |    b    |   sum    |\n//    🔥🪵  |    🧊   |    🧊    |\n\nunsub()\n// there are no subscriptions to `a`, so it's 🧊 cold again\n//    a    |    b    |   sum    |\n//    🧊   |    🧊    |    🧊    |\n\nunsub = sum.onStale(() => {})\n// there is now a subscription to `sum`, so it goes 🔥 hot, and so do its dependencies\n//    a    |    b    |   sum    |\n//    🔥🪵  |    🔥🪵  |    🔥🪵  |\n\nval(sum)\n// reading the value of `sum` will cause it to recalculate, and make it 🌲 fresh.\n//    a    |    b    |   sum    |\n//    🔥🌲  |    🔥🌲  |    🔥🌲  |\n\natom.setByPointer(atom.pointer.a, 1)\n// `a` is now stale, which will cause `sum` to become stale as well\n//    a    |    b    |   sum    |\n//    🔥🪵  |    🔥🌲  |    🔥🪵  |\n\nval(a)\n// reading the value of `a` will cause it to recalculate, and make it 🌲 fresh. But notice that `sum` is still 🪵 stale.\n//    a    |    b    |   sum    |\n//    🔥🌲  |    🔥🌲  |    🔥🪵  |\n\natom.setByPointer(atom.pointer.b, 1)\n// `b` now goes stale. Since sum was already stale, it will remain so\n//    a    |    b    |   sum    |\n//    🔥🌲  |    🔥🪵  |    🔥🪵  |\n\nval(sum)\n// reading the value of `sum` will cause it to recalculate and go 🌲 fresh.\n//    a    |    b    |   sum    |\n//    🔥🌲  |    🔥🌲  |    🔥🌲  |\n\nunsub()\n// there are no subscriptions to `sum`, so it goes 🧊 cold again, and so do its dependencies, since they don't have any other hot dependents\n//    a    |    b    |   sum    |\n//    🧊   |    🧊    |    🧊    |\n```\n\nThe state transitions propogate in topological order. Let's demonstrate this by\nadding one more prism to our dependency graph:\n\n```ts\n// continued from the previous example\n\nconst double = prism(() => val(sum) * 2)\n\n// Initially, all prisms are 🧊 cold\n//    a    |    b    |   sum    |  double  |\n//    🧊   |    🧊    |    🧊    |    🧊    |\n\nlet unsub = double.onStale(() => {})\n// here is how the state transitions will happen, step by step:\n// (step)   |   a    |    b    |   sum    |  double  |\n//    1     |   🧊   |    🧊    |    🧊    |    🔥🪵   |\n//    2     |   🧊   |    🧊    |   🔥🪵   |    🔥🪵   |\n//    3     |   🔥🪵  |   🔥🪵   |   🔥🪵   |    🔥🪵   |\n\nval(double)\n// freshening happens in the reverse order\n// (step)   |   a    |    b    |   sum    |  double  |\n//    0     |   🔥🪵  |   🔥🪵  |   🔥🪵    |    🔥🪵   |\n// --------------------------------------------------|\n//    1                              ▲         ▼     | double reads the value of sum\n//                                   └────◄────┘     |\n// --------------------------------------------------|\n//    2          ▲        ▲          ▼               | sum reads the value of a and b\n//               │        │          │               |\n//               └────◄───┴────◄─────┘               |\n// --------------------------------------------------|\n//    3     |   🔥🌲  |   🔥🌲  |   🔥🪵    |    🔥🪵   | a and b go fresh\n// --------------------------------------------------|\n//    4     |   🔥🌲  |   🔥🌲  |   🔥🌲    |    🔥🪵   | sum goes fresh\n// --------------------------------------------------|\n//    5     |   🔥🌲  |   🔥🌲  |   🔥🌲    |    🔥🌲   | double goes fresh\n// --------------------------------------------------|\n```\n\n## Links\n\n- [API Reference](./api/README.md)\n- [The exhaustive guide to dataverse](./src/dataverse.test.ts)\n- It's also fun to\n  [open the monorepo](https://github1s.com/theatre-js/theatre/blob/main/packages/dataverse/src/index.ts)\n  in VSCode and look up references to `Atom`, `prism()` and other dataverse\n  methods. Since dataverse is used internally in Theatre.js, there are a lot of\n  examples of how to use it.\n- Also see [`@theatre/react`](../react/README.md) to learn more about the React\n  bindings.\n"
  },
  {
    "path": "packages/dataverse/api/.nojekyll",
    "content": "TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false."
  },
  {
    "path": "packages/dataverse/api/README.md",
    "content": "@theatre/dataverse\n\n# @theatre/dataverse\n\nThe animation-optimized FRP library powering the internals of Theatre.js.\n\n## Table of contents\n\n### Namespaces\n\n- [prism](modules/prism.md)\n\n### Classes\n\n- [Atom](classes/Atom.md)\n- [PointerProxy](classes/PointerProxy.md)\n- [Ticker](classes/Ticker.md)\n\n### Interfaces\n\n- [PointerToPrismProvider](interfaces/PointerToPrismProvider.md)\n- [Prism](interfaces/Prism-1.md)\n\n### Type Aliases\n\n- [Pointer](README.md#pointer)\n- [PointerMeta](README.md#pointermeta)\n- [PointerType](README.md#pointertype)\n\n### Functions\n\n- [getPointerParts](README.md#getpointerparts)\n- [isPointer](README.md#ispointer)\n- [isPrism](README.md#isprism)\n- [iterateAndCountTicks](README.md#iterateandcountticks)\n- [iterateOver](README.md#iterateover)\n- [pointer](README.md#pointer-1)\n- [pointerToPrism](README.md#pointertoprism)\n- [prism](README.md#prism)\n- [val](README.md#val)\n\n## Type Aliases\n\n### Pointer\n\nƬ **Pointer**<`O`\\>: [`PointerType`](README.md#pointertype)<`O`\\> & `PointerInner`<`Exclude`<`O`, `undefined`\\>, `undefined` extends `O` ? `undefined` : `never`\\>\n\nThe type of [Atom](classes/Atom.md) pointers. See [pointer()](README.md#pointer-1) for an\nexplanation of pointers.\n\n**`See`**\n\nAtom\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `O` |\n\n#### Defined in\n\n[pointer.ts:64](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/pointer.ts#L64)\n\n___\n\n### PointerMeta\n\nƬ **PointerMeta**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `path` | (`string` \\| `number`)[] |\n| `root` | {} |\n\n#### Defined in\n\n[pointer.ts:5](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/pointer.ts#L5)\n\n___\n\n### PointerType\n\nƬ **PointerType**<`O`\\>: `Object`\n\nA wrapper type for the type a `Pointer` points to.\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `O` |\n\n#### Type declaration\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `$$__pointer_type` | `O` | Only accessible via the type system. This is a helper for getting the underlying pointer type via the type space. |\n\n#### Defined in\n\n[pointer.ts:35](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/pointer.ts#L35)\n\n## Functions\n\n### getPointerParts\n\n▸ **getPointerParts**<`_`\\>(`p`): `Object`\n\nReturns the root object and the path of the pointer.\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `_` |\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `p` | [`Pointer`](README.md#pointer)<`_`\\> | The pointer. |\n\n#### Returns\n\n`Object`\n\nAn object with two properties: `root`-the root object or the pointer, and `path`-the path of the pointer. `path` is an array of the property-chain.\n\n| Name | Type |\n| :------ | :------ |\n| `path` | `PathToProp` |\n| `root` | {} |\n\n**`Example`**\n\n```ts\nconst {root, path} = getPointerParts(pointer)\n```\n\n#### Defined in\n\n[pointer.ts:136](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/pointer.ts#L136)\n\n___\n\n### isPointer\n\n▸ **isPointer**(`p`): p is Pointer<unknown\\>\n\nReturns whether `p` is a pointer.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `p` | `any` |\n\n#### Returns\n\np is Pointer<unknown\\>\n\n#### Defined in\n\n[pointer.ts:187](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/pointer.ts#L187)\n\n___\n\n### isPrism\n\n▸ **isPrism**(`d`): d is Prism<unknown\\>\n\nReturns whether `d` is a prism.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `d` | `any` |\n\n#### Returns\n\nd is Prism<unknown\\>\n\n#### Defined in\n\n[prism/Interface.ts:66](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/Interface.ts#L66)\n\n___\n\n### iterateAndCountTicks\n\n▸ **iterateAndCountTicks**<`V`\\>(`pointerOrPrism`): `Generator`<{ `ticks`: `number` ; `value`: `V`  }, `void`, `void`\\>\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `V` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `pointerOrPrism` | [`Prism`](interfaces/Prism-1.md)<`V`\\> \\| [`Pointer`](README.md#pointer)<`V`\\> |\n\n#### Returns\n\n`Generator`<{ `ticks`: `number` ; `value`: `V`  }, `void`, `void`\\>\n\n#### Defined in\n\n[prism/iterateAndCountTicks.ts:7](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/iterateAndCountTicks.ts#L7)\n\n___\n\n### iterateOver\n\n▸ **iterateOver**<`V`\\>(`pointerOrPrism`): `Generator`<`V`, `void`, `void`\\>\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `V` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `pointerOrPrism` | [`Prism`](interfaces/Prism-1.md)<`V`\\> \\| [`Pointer`](README.md#pointer)<`V`\\> |\n\n#### Returns\n\n`Generator`<`V`, `void`, `void`\\>\n\n#### Defined in\n\n[prism/iterateOver.ts:8](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/iterateOver.ts#L8)\n\n___\n\n### pointer\n\n▸ **pointer**<`O`\\>(`args`): [`Pointer`](README.md#pointer)<`O`\\>\n\nCreates a pointer to a (nested) property of an [Atom](classes/Atom.md).\n\n#### Type parameters\n\n| Name | Description |\n| :------ | :------ |\n| `O` | The type of the value being pointed to. |\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `args` | `Object` | The pointer parameters. |\n| `args.path?` | (`string` \\| `number`)[] | - |\n| `args.root` | `Object` | - |\n\n#### Returns\n\n[`Pointer`](README.md#pointer)<`O`\\>\n\n**`Example`**\n\n```ts\n// Here, sum is a prism that updates whenever the a or b prop of someAtom does.\nconst sum = prism(() => {\n  return val(pointer({root: someAtom, path: ['a']})) + val(pointer({root: someAtom, path: ['b']}));\n});\n\n// Note, atoms have a convenience Atom.pointer property that points to the root,\n// which you would normally use in this situation.\nconst sum = prism(() => {\n  return val(someAtom.pointer.a) + val(someAtom.pointer.b);\n});\n```\n\n#### Defined in\n\n[pointer.ts:172](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/pointer.ts#L172)\n\n___\n\n### pointerToPrism\n\n▸ **pointerToPrism**<`P`\\>(`pointer`): [`Prism`](interfaces/Prism-1.md)<`P` extends [`PointerType`](README.md#pointertype)<`T`\\> ? `T` : `void`\\>\n\nReturns a prism of the value at the provided pointer. Prisms are\ncached per pointer.\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `P` | extends [`PointerType`](README.md#pointertype)<`any`\\> |\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `pointer` | `P` | The pointer to return the prism at. |\n\n#### Returns\n\n[`Prism`](interfaces/Prism-1.md)<`P` extends [`PointerType`](README.md#pointertype)<`T`\\> ? `T` : `void`\\>\n\n#### Defined in\n\n[pointerToPrism.ts:41](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/pointerToPrism.ts#L41)\n\n___\n\n### prism\n\n▸ **prism**<`T`\\>(`fn`): [`Prism`](interfaces/Prism-1.md)<`T`\\>\n\nCreates a prism from the passed function that adds all prisms referenced\nin it as dependencies, and reruns the function when these change.\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `fn` | () => `T` | The function to rerun when the prisms referenced in it change. |\n\n#### Returns\n\n[`Prism`](interfaces/Prism-1.md)<`T`\\>\n\n#### Defined in\n\n[prism/prism.ts:817](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/prism.ts#L817)\n\n___\n\n### val\n\n▸ **val**<`P`\\>(`input`): `P` extends [`PointerType`](README.md#pointertype)<`T`\\> ? `T` : `P` extends [`Prism`](interfaces/Prism-1.md)<`T`\\> ? `T` : `P` extends `undefined` \\| ``null`` ? `P` : `unknown`\n\nConvenience function that returns a plain value from its argument, whether it\nis a pointer, a prism or a plain value itself.\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `P` | extends `undefined` \\| ``null`` \\| [`Prism`](interfaces/Prism-1.md)<`any`\\> \\| [`PointerType`](README.md#pointertype)<`any`\\> |\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `input` | `P` | The argument to return a value from. |\n\n#### Returns\n\n`P` extends [`PointerType`](README.md#pointertype)<`T`\\> ? `T` : `P` extends [`Prism`](interfaces/Prism-1.md)<`T`\\> ? `T` : `P` extends `undefined` \\| ``null`` ? `P` : `unknown`\n\n#### Defined in\n\n[val.ts:19](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/val.ts#L19)\n"
  },
  {
    "path": "packages/dataverse/api/classes/Atom.md",
    "content": "[@theatre/dataverse](../README.md) / Atom\n\n# Class: Atom<State\\>\n\nWraps an object whose (sub)properties can be individually tracked.\n\n## Type parameters\n\n| Name |\n| :------ |\n| `State` |\n\n## Implements\n\n- [`PointerToPrismProvider`](../interfaces/PointerToPrismProvider.md)\n\n## Table of contents\n\n### Constructors\n\n- [constructor](Atom.md#constructor)\n\n### Properties\n\n- [pointer](Atom.md#pointer)\n- [prism](Atom.md#prism)\n\n### Methods\n\n- [get](Atom.md#get)\n- [getByPointer](Atom.md#getbypointer)\n- [onChange](Atom.md#onchange)\n- [onChangeByPointer](Atom.md#onchangebypointer)\n- [pointerToPrism](Atom.md#pointertoprism)\n- [reduce](Atom.md#reduce)\n- [reduceByPointer](Atom.md#reducebypointer)\n- [set](Atom.md#set)\n- [setByPointer](Atom.md#setbypointer)\n\n## Constructors\n\n### constructor\n\n• **new Atom**<`State`\\>(`initialState`)\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `State` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `initialState` | `State` |\n\n#### Defined in\n\n[Atom.ts:119](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Atom.ts#L119)\n\n## Properties\n\n### pointer\n\n• `Readonly` **pointer**: [`Pointer`](../README.md#pointer)<`State`\\>\n\nConvenience property that gives you a pointer to the root of the atom.\n\n#### Defined in\n\n[Atom.ts:113](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Atom.ts#L113)\n\n___\n\n### prism\n\n• `Readonly` **prism**: [`Prism`](../interfaces/Prism-1.md)<`State`\\>\n\n#### Defined in\n\n[Atom.ts:115](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Atom.ts#L115)\n\n## Methods\n\n### get\n\n▸ **get**(): `State`\n\nReturns the current state of the atom.\n\n#### Returns\n\n`State`\n\n#### Defined in\n\n[Atom.ts:139](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Atom.ts#L139)\n\n___\n\n### getByPointer\n\n▸ **getByPointer**<`S`\\>(`pointerOrFn`): `S`\n\nReturns the value at the given pointer\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `S` |\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `pointerOrFn` | [`Pointer`](../README.md#pointer)<`S`\\> \\| (`p`: [`Pointer`](../README.md#pointer)<`State`\\>) => [`Pointer`](../README.md#pointer)<`S`\\> | A pointer to the desired path. Could also be a function returning a pointer Example ```ts const atom = atom({ a: { b: 1 } }) atom.getByPointer(atom.pointer.a.b) // 1 atom.getByPointer((p) => p.a.b) // 1 ``` |\n\n#### Returns\n\n`S`\n\n#### Defined in\n\n[Atom.ts:155](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Atom.ts#L155)\n\n___\n\n### onChange\n\n▸ **onChange**(`cb`): () => `void`\n\nAdds a listener that will be called whenever the state of the atom changes.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `cb` | (`v`: `State`) => `void` | The callback to call when the value changes |\n\n#### Returns\n\n`fn`\n\nA function that can be called to unsubscribe from the listener\n\n**NOTE** Unlike [prism](../README.md#prism)s, `onChangeByPointer` and `onChange()` are traditional event listeners. They don't\nprovide any of the benefits of prisms. They don't compose, they can't be coordinated via a Ticker, their derivations\naren't cached, etc. You're almost always better off using a prism (which will internally use `onChangeByPointer`).\n\n```ts\nconst a = atom({foo: 1})\nconst unsubscribe = a.onChange((v) => {\nconsole.log('a changed to', v)\n})\na.set({foo: 3}) // logs 'a changed to {foo: 3}'\nunsubscribe()\n```\n\n▸ (): `void`\n\nAdds a listener that will be called whenever the state of the atom changes.\n\n##### Returns\n\n`void`\n\nA function that can be called to unsubscribe from the listener\n\n**NOTE** Unlike [prism](../README.md#prism)s, `onChangeByPointer` and `onChange()` are traditional event listeners. They don't\nprovide any of the benefits of prisms. They don't compose, they can't be coordinated via a Ticker, their derivations\naren't cached, etc. You're almost always better off using a prism (which will internally use `onChangeByPointer`).\n\n```ts\nconst a = atom({foo: 1})\nconst unsubscribe = a.onChange((v) => {\nconsole.log('a changed to', v)\n})\na.set({foo: 3}) // logs 'a changed to {foo: 3}'\nunsubscribe()\n```\n\n#### Defined in\n\n[Atom.ts:305](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Atom.ts#L305)\n\n___\n\n### onChangeByPointer\n\n▸ **onChangeByPointer**<`S`\\>(`pointerOrFn`, `cb`): () => `void`\n\nAdds a listener that will be called whenever the value at the given pointer changes.\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `S` |\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `pointerOrFn` | [`Pointer`](../README.md#pointer)<`S`\\> \\| (`p`: [`Pointer`](../README.md#pointer)<`State`\\>) => [`Pointer`](../README.md#pointer)<`S`\\> | - |\n| `cb` | (`v`: `S`) => `void` | The callback to call when the value changes |\n\n#### Returns\n\n`fn`\n\nA function that can be called to unsubscribe from the listener\n\n**NOTE** Unlike [prism](../README.md#prism)s, `onChangeByPointer` and `onChange()` are traditional event listeners. They don't\nprovide any of the benefits of prisms. They don't compose, they can't be coordinated via a Ticker, their derivations\naren't cached, etc. You're almost always better off using a prism (which will internally use `onChangeByPointer`).\n\n```ts\nconst a = atom({foo: 1})\nconst unsubscribe = a.onChangeByPointer(a.pointer.foo, (v) => {\n console.log('foo changed to', v)\n})\na.setByPointer(a.pointer.foo, 2) // logs 'foo changed to 2'\na.set({foo: 3}) // logs 'foo changed to 3'\nunsubscribe()\n```\n\n▸ (): `void`\n\n##### Returns\n\n`void`\n\n#### Defined in\n\n[Atom.ts:271](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Atom.ts#L271)\n\n___\n\n### pointerToPrism\n\n▸ **pointerToPrism**<`P`\\>(`pointer`): [`Prism`](../interfaces/Prism-1.md)<`P`\\>\n\nReturns a new prism of the value at the provided path.\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `P` |\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `pointer` | [`Pointer`](../README.md#pointer)<`P`\\> | The path to create the prism at. ```ts const pr = atom({ a: { b: 1 } }).pointerToPrism(atom.pointer.a.b) pr.getValue() // 1 ``` |\n\n#### Returns\n\n[`Prism`](../interfaces/Prism-1.md)<`P`\\>\n\n#### Implementation of\n\n[PointerToPrismProvider](../interfaces/PointerToPrismProvider.md).[pointerToPrism](../interfaces/PointerToPrismProvider.md#pointertoprism)\n\n#### Defined in\n\n[Atom.ts:319](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Atom.ts#L319)\n\n___\n\n### reduce\n\n▸ **reduce**(`fn`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `fn` | (`state`: `State`) => `State` |\n\n#### Returns\n\n`void`\n\n#### Defined in\n\n[Atom.ts:173](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Atom.ts#L173)\n\n___\n\n### reduceByPointer\n\n▸ **reduceByPointer**<`S`\\>(`pointerOrFn`, `reducer`): `void`\n\nReduces the value at the given pointer\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `S` |\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `pointerOrFn` | [`Pointer`](../README.md#pointer)<`S`\\> \\| (`p`: [`Pointer`](../README.md#pointer)<`State`\\>) => [`Pointer`](../README.md#pointer)<`S`\\> | A pointer to the desired path. Could also be a function returning a pointer Example ```ts const atom = atom({ a: { b: 1 } }) atom.reduceByPointer(atom.pointer.a.b, (b) => b + 1) // atom.get().a.b === 2 atom.reduceByPointer((p) => p.a.b, (b) => b + 1) // atom.get().a.b === 2 ``` |\n| `reducer` | (`s`: `S`) => `S` | - |\n\n#### Returns\n\n`void`\n\n#### Defined in\n\n[Atom.ts:189](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Atom.ts#L189)\n\n___\n\n### set\n\n▸ **set**(`newState`): `void`\n\nSets the state of the atom.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `newState` | `State` | The new state of the atom. |\n\n#### Returns\n\n`void`\n\n#### Defined in\n\n[Atom.ts:129](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Atom.ts#L129)\n\n___\n\n### setByPointer\n\n▸ **setByPointer**<`S`\\>(`pointerOrFn`, `val`): `void`\n\nSets the value at the given pointer\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `S` |\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `pointerOrFn` | [`Pointer`](../README.md#pointer)<`S`\\> \\| (`p`: [`Pointer`](../README.md#pointer)<`State`\\>) => [`Pointer`](../README.md#pointer)<`S`\\> | A pointer to the desired path. Could also be a function returning a pointer Example ```ts const atom = atom({ a: { b: 1 } }) atom.setByPointer(atom.pointer.a.b, 2) // atom.get().a.b === 2 atom.setByPointer((p) => p.a.b, 2) // atom.get().a.b === 2 ``` |\n| `val` | `S` | - |\n\n#### Returns\n\n`void`\n\n#### Defined in\n\n[Atom.ts:214](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Atom.ts#L214)\n"
  },
  {
    "path": "packages/dataverse/api/classes/PointerProxy.md",
    "content": "[@theatre/dataverse](../README.md) / PointerProxy\n\n# Class: PointerProxy<O\\>\n\nAllows creating pointer-prisms where the pointer can be switched out.\n\n## Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `O` | extends `Object` |\n\n## Implements\n\n- [`PointerToPrismProvider`](../interfaces/PointerToPrismProvider.md)\n\n## Table of contents\n\n### Constructors\n\n- [constructor](PointerProxy.md#constructor)\n\n### Properties\n\n- [pointer](PointerProxy.md#pointer)\n\n### Methods\n\n- [pointerToPrism](PointerProxy.md#pointertoprism)\n- [setPointer](PointerProxy.md#setpointer)\n\n## Constructors\n\n### constructor\n\n• **new PointerProxy**<`O`\\>(`currentPointer`)\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `O` | extends `Object` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `currentPointer` | [`Pointer`](../README.md#pointer)<`O`\\> |\n\n#### Defined in\n\n[PointerProxy.ts:34](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/PointerProxy.ts#L34)\n\n## Properties\n\n### pointer\n\n• `Readonly` **pointer**: [`Pointer`](../README.md#pointer)<`O`\\>\n\nConvenience pointer pointing to the root of this PointerProxy.\n\n#### Defined in\n\n[PointerProxy.ts:32](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/PointerProxy.ts#L32)\n\n## Methods\n\n### pointerToPrism\n\n▸ **pointerToPrism**<`P`\\>(`pointer`): [`Prism`](../interfaces/Prism-1.md)<`P`\\>\n\nReturns a prism of the value at the provided sub-path of the proxied pointer.\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `P` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `pointer` | [`Pointer`](../README.md#pointer)<`P`\\> |\n\n#### Returns\n\n[`Prism`](../interfaces/Prism-1.md)<`P`\\>\n\n#### Implementation of\n\n[PointerToPrismProvider](../interfaces/PointerToPrismProvider.md).[pointerToPrism](../interfaces/PointerToPrismProvider.md#pointertoprism)\n\n#### Defined in\n\n[PointerProxy.ts:52](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/PointerProxy.ts#L52)\n\n___\n\n### setPointer\n\n▸ **setPointer**(`p`): `void`\n\nSets the underlying pointer.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `p` | [`Pointer`](../README.md#pointer)<`O`\\> | The pointer to be proxied. |\n\n#### Returns\n\n`void`\n\n#### Defined in\n\n[PointerProxy.ts:43](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/PointerProxy.ts#L43)\n"
  },
  {
    "path": "packages/dataverse/api/classes/Ticker.md",
    "content": "[@theatre/dataverse](../README.md) / Ticker\n\n# Class: Ticker\n\nThe Ticker class helps schedule callbacks. Scheduled callbacks are executed per tick. Ticks can be triggered by an\nexternal scheduling strategy, e.g. a raf.\n\n## Table of contents\n\n### Constructors\n\n- [constructor](Ticker.md#constructor)\n\n### Properties\n\n- [\\_\\_ticks](Ticker.md#__ticks)\n\n### Accessors\n\n- [dormant](Ticker.md#dormant)\n- [time](Ticker.md#time)\n\n### Methods\n\n- [offNextTick](Ticker.md#offnexttick)\n- [offThisOrNextTick](Ticker.md#offthisornexttick)\n- [onNextTick](Ticker.md#onnexttick)\n- [onThisOrNextTick](Ticker.md#onthisornexttick)\n- [tick](Ticker.md#tick)\n\n## Constructors\n\n### constructor\n\n• **new Ticker**(`_conf?`)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `_conf?` | `Object` |\n| `_conf.onActive?` | () => `void` |\n| `_conf.onDormant?` | () => `void` |\n\n#### Defined in\n\n[Ticker.ts:43](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Ticker.ts#L43)\n\n## Properties\n\n### \\_\\_ticks\n\n• **\\_\\_ticks**: `number` = `0`\n\nCounts up for every tick executed.\nInternally, this is used to measure ticks per second.\n\nThis is \"public\" to TypeScript, because it's a tool for performance measurements.\nConsider this as experimental, and do not rely on it always being here in future releases.\n\n#### Defined in\n\n[Ticker.ts:41](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Ticker.ts#L41)\n\n## Accessors\n\n### dormant\n\n• `get` **dormant**(): `boolean`\n\nWhether the Ticker is dormant\n\n#### Returns\n\n`boolean`\n\n#### Defined in\n\n[Ticker.ts:31](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Ticker.ts#L31)\n\n___\n\n### time\n\n• `get` **time**(): `number`\n\nThe time at the start of the current tick if there is a tick in progress, otherwise defaults to\n`performance.now()`.\n\n#### Returns\n\n`number`\n\n#### Defined in\n\n[Ticker.ts:122](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Ticker.ts#L122)\n\n## Methods\n\n### offNextTick\n\n▸ **offNextTick**(`fn`): `void`\n\nDe-registers a fn to be called on the next tick.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `fn` | `ICallback` | The function to be de-registered. |\n\n#### Returns\n\n`void`\n\n**`See`**\n\nonNextTick\n\n#### Defined in\n\n[Ticker.ts:114](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Ticker.ts#L114)\n\n___\n\n### offThisOrNextTick\n\n▸ **offThisOrNextTick**(`fn`): `void`\n\nDe-registers a fn to be called either on this tick or the next tick.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `fn` | `ICallback` | The function to be de-registered. |\n\n#### Returns\n\n`void`\n\n**`See`**\n\nonThisOrNextTick\n\n#### Defined in\n\n[Ticker.ts:103](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Ticker.ts#L103)\n\n___\n\n### onNextTick\n\n▸ **onNextTick**(`fn`): `void`\n\nRegisters a side effect to be called on the next tick.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `fn` | `ICallback` | The function to be registered. |\n\n#### Returns\n\n`void`\n\n**`See`**\n\n - onThisOrNextTick\n - offNextTick\n\n#### Defined in\n\n[Ticker.ts:89](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Ticker.ts#L89)\n\n___\n\n### onThisOrNextTick\n\n▸ **onThisOrNextTick**(`fn`): `void`\n\nRegisters for fn to be called either on this tick or the next tick.\n\nIf `onThisOrNextTick()` is called while `Ticker.tick()` is running, the\nside effect _will_ be called within the running tick. If you don't want this\nbehavior, you can use `onNextTick()`.\n\nNote that `fn` will be added to a `Set()`. Which means, if you call `onThisOrNextTick(fn)`\nwith the same fn twice in a single tick, it'll only run once.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `fn` | `ICallback` | The function to be registered. |\n\n#### Returns\n\n`void`\n\n**`See`**\n\noffThisOrNextTick\n\n#### Defined in\n\n[Ticker.ts:74](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Ticker.ts#L74)\n\n___\n\n### tick\n\n▸ **tick**(`t?`): `void`\n\nTriggers a tick which starts executing the callbacks scheduled for this tick.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `t` | `number` | The time at the tick. |\n\n#### Returns\n\n`void`\n\n**`See`**\n\n - onThisOrNextTick\n - onNextTick\n\n#### Defined in\n\n[Ticker.ts:149](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/Ticker.ts#L149)\n"
  },
  {
    "path": "packages/dataverse/api/interfaces/PointerToPrismProvider.md",
    "content": "[@theatre/dataverse](../README.md) / PointerToPrismProvider\n\n# Interface: PointerToPrismProvider\n\nInterface for objects that can provide a prism at a certain path.\n\n## Implemented by\n\n- [`Atom`](../classes/Atom.md)\n- [`PointerProxy`](../classes/PointerProxy.md)\n\n## Table of contents\n\n### Methods\n\n- [pointerToPrism](PointerToPrismProvider.md#pointertoprism)\n\n## Methods\n\n### pointerToPrism\n\n▸ **pointerToPrism**<`P`\\>(`pointer`): [`Prism`](Prism-1.md)<`P`\\>\n\nReturns a prism of the value at the provided pointer.\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `P` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `pointer` | [`Pointer`](../README.md#pointer)<`P`\\> |\n\n#### Returns\n\n[`Prism`](Prism-1.md)<`P`\\>\n\n#### Defined in\n\n[pointerToPrism.ts:21](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/pointerToPrism.ts#L21)\n"
  },
  {
    "path": "packages/dataverse/api/interfaces/Prism-1.md",
    "content": "[@theatre/dataverse](../README.md) / Prism\n\n# Interface: Prism<V\\>\n\nCommon interface for prisms.\n\n## Type parameters\n\n| Name |\n| :------ |\n| `V` |\n\n## Table of contents\n\n### Properties\n\n- [isHot](Prism-1.md#ishot)\n- [isPrism](Prism-1.md#isprism)\n\n### Methods\n\n- [getValue](Prism-1.md#getvalue)\n- [keepHot](Prism-1.md#keephot)\n- [onChange](Prism-1.md#onchange)\n- [onStale](Prism-1.md#onstale)\n\n## Properties\n\n### isHot\n\n• **isHot**: `boolean`\n\nWhether the prism is hot.\n\n#### Defined in\n\n[prism/Interface.ts:18](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/Interface.ts#L18)\n\n___\n\n### isPrism\n\n• **isPrism**: ``true``\n\nWhether the object is a prism.\n\n#### Defined in\n\n[prism/Interface.ts:13](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/Interface.ts#L13)\n\n## Methods\n\n### getValue\n\n▸ **getValue**(): `V`\n\nGets the current value of the prism. If the value is stale, it causes the prism to freshen.\n\n#### Returns\n\n`V`\n\n#### Defined in\n\n[prism/Interface.ts:60](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/Interface.ts#L60)\n\n___\n\n### keepHot\n\n▸ **keepHot**(): `VoidFn`\n\nKeep the prism hot, even if there are no tappers (subscribers).\n\n#### Returns\n\n`VoidFn`\n\n#### Defined in\n\n[prism/Interface.ts:34](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/Interface.ts#L34)\n\n___\n\n### onChange\n\n▸ **onChange**(`ticker`, `listener`, `immediate?`): `VoidFn`\n\nCalls `listener` with a fresh value every time the prism _has_ a new value, throttled by Ticker.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `ticker` | [`Ticker`](../classes/Ticker.md) |\n| `listener` | (`v`: `V`) => `void` |\n| `immediate?` | `boolean` |\n\n#### Returns\n\n`VoidFn`\n\n#### Defined in\n\n[prism/Interface.ts:23](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/Interface.ts#L23)\n\n___\n\n### onStale\n\n▸ **onStale**(`cb`): `VoidFn`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `cb` | () => `void` |\n\n#### Returns\n\n`VoidFn`\n\n#### Defined in\n\n[prism/Interface.ts:29](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/Interface.ts#L29)\n"
  },
  {
    "path": "packages/dataverse/api/modules/prism.md",
    "content": "[@theatre/dataverse](../README.md) / prism\n\n# Namespace: prism\n\nCreates a prism from the passed function that adds all prisms referenced\nin it as dependencies, and reruns the function when these change.\n\n**`Param`**\n\nThe function to rerun when the prisms referenced in it change.\n\n## Table of contents\n\n### Variables\n\n- [effect](prism.md#effect)\n- [ensurePrism](prism.md#ensureprism)\n- [inPrism](prism.md#inprism)\n- [memo](prism.md#memo)\n- [ref](prism.md#ref)\n- [scope](prism.md#scope)\n- [source](prism.md#source)\n- [state](prism.md#state)\n- [sub](prism.md#sub)\n\n## Variables\n\n### effect\n\n• **effect**: (`key`: `string`, `cb`: () => () => `void`, `deps?`: `unknown`[]) => `void`\n\n#### Type declaration\n\n▸ (`key`, `cb`, `deps?`): `void`\n\nAn effect hook, similar to React's `useEffect()`, but is not sensitive to call order by using `key`.\n\n##### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `key` | `string` | the key for the effect. Should be uniqe inside of the prism. |\n| `cb` | () => () => `void` | the callback function. Requires returning a cleanup function. |\n| `deps?` | `unknown`[] | the dependency array |\n\n##### Returns\n\n`void`\n\n#### Defined in\n\n[prism/prism.ts:885](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/prism.ts#L885)\n\n___\n\n### ensurePrism\n\n• **ensurePrism**: () => `void`\n\n#### Type declaration\n\n▸ (): `void`\n\nThis is useful to make sure your code is running inside a `prism()` call.\n\n##### Returns\n\n`void`\n\n**`Example`**\n\n```ts\nimport {prism} from '@theatre/dataverse'\n\nfunction onlyUsefulInAPrism() {\n  prism.ensurePrism()\n}\n\nprism(() => {\n  onlyUsefulInAPrism() // will run fine\n})\n\nsetTimeout(() => {\n  onlyUsefulInAPrism() // throws an error\n  console.log('This will never get logged')\n}, 0)\n```\n\n#### Defined in\n\n[prism/prism.ts:887](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/prism.ts#L887)\n\n___\n\n### inPrism\n\n• **inPrism**: () => `boolean`\n\n#### Type declaration\n\n▸ (): `boolean`\n\n##### Returns\n\n`boolean`\n\ntrue if the current function is running inside a `prism()` call.\n\n#### Defined in\n\n[prism/prism.ts:891](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/prism.ts#L891)\n\n___\n\n### memo\n\n• **memo**: <T\\>(`key`: `string`, `fn`: () => `T`, `deps`: `undefined` \\| `any`[] \\| readonly `any`[]) => `T`\n\n#### Type declaration\n\n▸ <`T`\\>(`key`, `fn`, `deps`): `T`\n\n`prism.memo()` works just like React's `useMemo()` hook. It's a way to cache the result of a function call.\nThe only difference is that `prism.memo()` requires a key to be passed into it, whlie `useMemo()` doesn't.\nThis means that we can call `prism.memo()` in any order, and we can call it multiple times with the same key.\n\n##### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n##### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `key` | `string` | The key for the memo. Should be unique inside of the prism |\n| `fn` | () => `T` | The function to memoize |\n| `deps` | `undefined` \\| `any`[] \\| readonly `any`[] | The dependency array. Provide `[]` if you want to the value to be memoized only once and never re-calculated. |\n\n##### Returns\n\n`T`\n\nThe result of the function call\n\n**`Example`**\n\n```ts\nconst pr = prism(() => {\n const memoizedReturnValueOfExpensiveFn = prism.memo(\"memo1\", expensiveFn, [])\n})\n```\n\n#### Defined in\n\n[prism/prism.ts:886](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/prism.ts#L886)\n\n___\n\n### ref\n\n• **ref**: <T\\>(`key`: `string`, `initialValue`: `T`) => `IRef`<`T`\\>\n\n#### Type declaration\n\n▸ <`T`\\>(`key`, `initialValue`): `IRef`<`T`\\>\n\nJust like React's `useRef()`, `prism.ref()` allows us to create a prism that holds a reference to some value.\nThe only difference is that `prism.ref()` requires a key to be passed into it, whlie `useRef()` doesn't.\nThis means that we can call `prism.ref()` in any order, and we can call it multiple times with the same key.\n\n##### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n##### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `key` | `string` | The key for the ref. Should be unique inside of the prism. |\n| `initialValue` | `T` | The initial value for the ref. |\n\n##### Returns\n\n`IRef`<`T`\\>\n\n`{current: V}` - The ref object.\n\nNote that the ref object will always return its initial value if the prism is cold. It'll only record\nits current value if the prism is hot (and will forget again if the prism goes cold again).\n\n**`Example`**\n\n```ts\nconst pr = prism(() => {\n  const ref1 = prism.ref(\"ref1\", 0)\n  console.log(ref1.current) // will print 0, and if the prism is hot, it'll print the current value\n  ref1.current++ // changing the current value of the ref\n})\n```\n\n#### Defined in\n\n[prism/prism.ts:884](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/prism.ts#L884)\n\n___\n\n### scope\n\n• **scope**: <T\\>(`key`: `string`, `fn`: () => `T`) => `T`\n\n#### Type declaration\n\n▸ <`T`\\>(`key`, `fn`): `T`\n\n##### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `key` | `string` |\n| `fn` | () => `T` |\n\n##### Returns\n\n`T`\n\n#### Defined in\n\n[prism/prism.ts:889](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/prism.ts#L889)\n\n___\n\n### source\n\n• **source**: <V\\>(`subscribe`: (`fn`: (`val`: `V`) => `void`) => `VoidFn`, `getValue`: () => `V`) => `V`\n\n#### Type declaration\n\n▸ <`V`\\>(`subscribe`, `getValue`): `V`\n\n`prism.source()`  allow a prism to react to changes in some external source (other than other prisms).\nFor example, `Atom.pointerToPrism()` uses `prism.source()` to create a prism that reacts to changes in the atom's value.\n\n##### Type parameters\n\n| Name |\n| :------ |\n| `V` |\n\n##### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `subscribe` | (`fn`: (`val`: `V`) => `void`) => `VoidFn` | The prism will call this function as soon as the prism goes hot. This function should return an unsubscribe function function which the prism will call when it goes cold. |\n| `getValue` | () => `V` | A function that returns the current value of the external source. |\n\n##### Returns\n\n`V`\n\nThe current value of the source\n\nExample:\n```ts\nfunction prismFromInputElement(input: HTMLInputElement): Prism<string> {\n  function listen(cb: (value: string) => void) {\n    const listener = () => {\n      cb(input.value)\n    }\n    input.addEventListener('input', listener)\n    return () => {\n      input.removeEventListener('input', listener)\n    }\n  }\n  \n  function get() {\n    return input.value\n  }\n  return prism(() => prism.source(listen, get))\n}\n```\n\n#### Defined in\n\n[prism/prism.ts:892](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/prism.ts#L892)\n\n___\n\n### state\n\n• **state**: <T\\>(`key`: `string`, `initialValue`: `T`) => [`T`, (`val`: `T`) => `void`]\n\n#### Type declaration\n\n▸ <`T`\\>(`key`, `initialValue`): [`T`, (`val`: `T`) => `void`]\n\nA state hook, similar to react's `useState()`.\n\n##### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n##### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `key` | `string` | the key for the state |\n| `initialValue` | `T` | the initial value |\n\n##### Returns\n\n[`T`, (`val`: `T`) => `void`]\n\n[currentState, setState]\n\n**`Example`**\n\n```ts\nimport {prism} from 'dataverse'\n\n// This prism holds the current mouse position and updates when the mouse moves\nconst mousePositionD = prism(() => {\n  const [pos, setPos] = prism.state<[x: number, y: number]>('pos', [0, 0])\n\n  prism.effect(\n    'setupListeners',\n    () => {\n      const handleMouseMove = (e: MouseEvent) => {\n        setPos([e.screenX, e.screenY])\n      }\n      document.addEventListener('mousemove', handleMouseMove)\n\n      return () => {\n        document.removeEventListener('mousemove', handleMouseMove)\n      }\n    },\n    [],\n  )\n\n  return pos\n})\n```\n\n#### Defined in\n\n[prism/prism.ts:888](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/prism.ts#L888)\n\n___\n\n### sub\n\n• **sub**: <T\\>(`key`: `string`, `fn`: () => `T`, `deps`: `undefined` \\| `any`[]) => `T`\n\n#### Type declaration\n\n▸ <`T`\\>(`key`, `fn`, `deps`): `T`\n\nJust an alias for `prism.memo(key, () => prism(fn), deps).getValue()`. It creates a new prism, memoizes it, and returns the value.\n`prism.sub()` is useful when you want to divide your prism into smaller prisms, each of which\nwould _only_ recalculate when _certain_ dependencies change. In other words, it's an optimization tool.\n\n##### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n##### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `key` | `string` | The key for the memo. Should be unique inside of the prism |\n| `fn` | () => `T` | The function to run inside the prism |\n| `deps` | `undefined` \\| `any`[] | The dependency array. Provide `[]` if you want to the value to be memoized only once and never re-calculated. |\n\n##### Returns\n\n`T`\n\nThe value of the inner prism\n\n#### Defined in\n\n[prism/prism.ts:890](https://github.com/theatre-js/theatre/blob/main/packages/dataverse/src/prism/prism.ts#L890)\n"
  },
  {
    "path": "packages/dataverse/devEnv/api-extractor.json",
    "content": "/**\r\n * Config file for API Extractor.  For more info, please visit: https://api-extractor.com\r\n */\r\n{\r\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json\",\r\n\r\n  /**\r\n   * Optionally specifies another JSON config file that this file extends from.  This provides a way for\r\n   * standard settings to be shared across multiple projects.\r\n   *\r\n   * If the path starts with \"./\" or \"../\", the path is resolved relative to the folder of the file that contains\r\n   * the \"extends\" field.  Otherwise, the first path segment is interpreted as an NPM package name, and will be\r\n   * resolved using NodeJS require().\r\n   *\r\n   * SUPPORTED TOKENS: none\r\n   * DEFAULT VALUE: \"\"\r\n   */\r\n  \"extends\": \"../../../devEnv/api-extractor-base.json\",\r\n  // \"extends\": \"my-package/include/api-extractor-base.json\"\r\n\r\n  /**\r\n   * Determines the \"<projectFolder>\" token that can be used with other config file settings.  The project folder\r\n   * typically contains the tsconfig.json and package.json config files, but the path is user-defined.\r\n   *\r\n   * The path is resolved relative to the folder of the config file that contains the setting.\r\n   *\r\n   * The default value for \"projectFolder\" is the token \"<lookup>\", which means the folder is determined by traversing\r\n   * parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder\r\n   * that contains a tsconfig.json file.  If a tsconfig.json file cannot be found in this way, then an error\r\n   * will be reported.\r\n   *\r\n   * SUPPORTED TOKENS: <lookup>\r\n   * DEFAULT VALUE: \"<lookup>\"\r\n   */\r\n  \"projectFolder\": \"..\"\r\n}\r\n"
  },
  {
    "path": "packages/dataverse/devEnv/api-extractor.tsconfig.json",
    "content": "{\n  \"$schema\": \"https://json.schemastore.org/tsconfig\",\n  \"extends\": \"../tsconfig.json\"\n}\n"
  },
  {
    "path": "packages/dataverse/devEnv/build.ts",
    "content": "import * as path from 'path'\nimport {build} from 'esbuild'\n\nconst definedGlobals = {}\n\nfunction createBundles(watch: boolean) {\n  const pathToPackage = path.join(__dirname, '../')\n  const esbuildConfig: Parameters<typeof build>[0] = {\n    entryPoints: [path.join(pathToPackage, 'src/index.ts')],\n    bundle: true,\n    sourcemap: true,\n    define: definedGlobals,\n    watch,\n    platform: 'neutral',\n    mainFields: ['browser', 'module', 'main'],\n    target: ['es2020'],\n    conditions: ['browser', 'node'],\n  }\n\n  void build({\n    ...esbuildConfig,\n    outfile: path.join(pathToPackage, 'dist/index.js'),\n    format: 'cjs',\n  })\n\n  // build({\n  //   ...esbuildConfig,\n  //   outfile: path.join(pathToPackage, 'dist/index.mjs'),\n  //   format: 'esm',\n  // })\n}\n\ncreateBundles(false)\n"
  },
  {
    "path": "packages/dataverse/devEnv/tsconfig.json",
    "content": "{\n  \n}"
  },
  {
    "path": "packages/dataverse/package.json",
    "content": "{\n  \"name\": \"@theatre/dataverse\",\n  \"version\": \"0.7.0\",\n  \"license\": \"Apache-2.0\",\n  \"author\": {\n    \"name\": \"Aria Minaei\",\n    \"email\": \"aria@theatrejs.com\",\n    \"url\": \"https://github.com/AriaMinaei\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/AriaMinaei/theatre\",\n    \"directory\": \"packages/dataverse\"\n  },\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"files\": [\n    \"dist/**/*\"\n  ],\n  \"scripts\": {\n    \"prepack\": \"node ../../devEnv/ensurePublishing.js\",\n    \"typecheck\": \"yarn run build:ts\",\n    \"build\": \"run-s build:ts build:js build:api-json\",\n    \"build:ts\": \"tsc --build ./tsconfig.json\",\n    \"build:js\": \"tsx ./devEnv/build.ts\",\n    \"build:api-json\": \"api-extractor run --local --config devEnv/api-extractor.json\",\n    \"prepublish\": \"node ../../devEnv/ensurePublishing.js\",\n    \"clean\": \"rm -rf ./dist && rm -f tsconfig.tsbuildinfo\",\n    \"docs\": \"typedoc src/index.ts --out api --plugin typedoc-plugin-markdown --readme none\",\n    \"precommit\": \"yarn run docs\"\n  },\n  \"devDependencies\": {\n    \"@microsoft/api-extractor\": \"^7.36.4\",\n    \"@types/jest\": \"^26.0.23\",\n    \"@types/lodash-es\": \"^4.17.4\",\n    \"@types/node\": \"^15.6.2\",\n    \"esbuild\": \"^0.12.15\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"tsx\": \"4.7.0\",\n    \"typedoc\": \"^0.24.8\",\n    \"typedoc-plugin-markdown\": \"^3.15.4\",\n    \"typescript\": \"5.1.6\"\n  },\n  \"dependencies\": {\n    \"lodash-es\": \"^4.17.21\"\n  }\n}\n"
  },
  {
    "path": "packages/dataverse/src/Atom.test.ts",
    "content": "// eslint-disable-next-line import/no-extraneous-dependencies\nimport {Atom} from '@theatre/dataverse'\n\ndescribe(`Atom`, () => {\n  test(`Usage of Atom and pointer, without prism`, async () => {\n    const data = {foo: 'foo', bar: 0}\n    const atom = new Atom(data)\n\n    // atom.get() returns an exact reference to the data\n    expect(atom.get()).toBe(data)\n\n    atom.set({foo: 'foo', bar: 1})\n\n    expect(atom.get()).not.toBe(data)\n    expect(atom.get()).toEqual({foo: 'foo', bar: 1})\n\n    atom.reduce(({foo, bar}) => ({foo, bar: bar + 1}))\n    expect(atom.get()).toEqual({foo: 'foo', bar: 2})\n\n    atom.setByPointer((p) => p.bar, 3)\n    expect(atom.get()).toEqual({foo: 'foo', bar: 3})\n\n    atom.setByPointer((p) => p.foo, 'foo2')\n    expect(atom.get()).toEqual({foo: 'foo2', bar: 3})\n\n    // this would work in runtime, but typescript will complain because `baz` is not a property of the state\n    // let's silence the error for the sake of the test\n    // @ts-ignore\n    atom.setByPointer((p) => p.baz, 'baz')\n    expect(atom.get()).toEqual({foo: 'foo2', bar: 3, baz: 'baz'})\n\n    atom.setByPointer((p) => p, {foo: 'newfoo', bar: -1})\n    expect(atom.get()).toEqual({foo: 'newfoo', bar: -1})\n\n    // `getByPointer()` is to `get()` what `setByPointer()` is to `set()`\n    expect(atom.getByPointer((p) => p.bar)).toBe(-1)\n\n    // `reduceByPointer()` is to `setByPointer()` what `reduce()` is to `set()`\n    atom.reduceByPointer(\n      (p) => p.bar,\n      (bar) => bar + 1,\n    )\n\n    expect(atom.get()).toEqual({foo: 'newfoo', bar: 0})\n\n    // we can use external pointers too\n    const externalPointer = atom.pointer.bar\n    atom.setByPointer(() => externalPointer, 1)\n    expect(atom.get()).toEqual({foo: 'newfoo', bar: 1})\n\n    let internalPointer\n    // the pointer passed to `setByPointer()` is the same as the one returned by `atom.pointer`\n    atom.setByPointer((p) => {\n      internalPointer = p\n      return p.bar\n    }, 2)\n\n    expect(internalPointer).toBe(atom.pointer)\n\n    expect(atom.pointer).toBe(atom.pointer)\n    expect(atom.pointer.bar).toBe(atom.pointer.bar)\n\n    // pointers don't change when the atom's state changes\n    const oldPointer = atom.pointer.bar\n    atom.set({foo: 'foo', bar: 10})\n    expect(atom.pointer.bar).toBe(oldPointer)\n  })\n})\n"
  },
  {
    "path": "packages/dataverse/src/Atom.ts",
    "content": "import get from 'lodash-es/get'\nimport isPlainObject from 'lodash-es/isPlainObject'\nimport last from 'lodash-es/last'\nimport type {Prism} from './prism/Interface'\nimport type {Pointer} from './pointer'\nimport {getPointerParts} from './pointer'\nimport {isPointer} from './pointer'\nimport pointer from './pointer'\nimport type {$FixMe, $IntentionalAny} from './types'\nimport updateDeep from './utils/updateDeep'\nimport prism from './prism/prism'\nimport type {PointerToPrismProvider} from './pointerToPrism'\n\ntype Listener = (newVal: unknown) => void\n\nenum ValueTypes {\n  Dict,\n  Array,\n  Other,\n}\n\nconst getTypeOfValue = (v: unknown): ValueTypes => {\n  if (Array.isArray(v)) return ValueTypes.Array\n  if (isPlainObject(v)) return ValueTypes.Dict\n  return ValueTypes.Other\n}\n\nconst getKeyOfValue = (\n  v: unknown,\n  key: string | number,\n  vType: ValueTypes = getTypeOfValue(v),\n): unknown => {\n  if (vType === ValueTypes.Dict && typeof key === 'string') {\n    return (v as $IntentionalAny)[key]\n  } else if (vType === ValueTypes.Array && isValidArrayIndex(key)) {\n    return (v as $IntentionalAny)[key]\n  } else {\n    return undefined\n  }\n}\n\nconst isValidArrayIndex = (key: string | number): boolean => {\n  const inNumber = typeof key === 'number' ? key : parseInt(key, 10)\n  return (\n    !isNaN(inNumber) &&\n    inNumber >= 0 &&\n    inNumber < Infinity &&\n    (inNumber | 0) === inNumber\n  )\n}\n\nclass Scope {\n  children: Map<string | number, Scope> = new Map()\n  identityChangeListeners: Set<Listener> = new Set()\n  constructor(\n    readonly _parent: undefined | Scope,\n    readonly _path: (string | number)[],\n  ) {}\n\n  addIdentityChangeListener(cb: Listener) {\n    this.identityChangeListeners.add(cb)\n  }\n\n  removeIdentityChangeListener(cb: Listener) {\n    this.identityChangeListeners.delete(cb)\n    this._checkForGC()\n  }\n\n  removeChild(key: string | number) {\n    this.children.delete(key)\n    this._checkForGC()\n  }\n\n  getChild(key: string | number) {\n    return this.children.get(key)\n  }\n\n  getOrCreateChild(key: string | number) {\n    let child = this.children.get(key)\n    if (!child) {\n      child = child = new Scope(this, this._path.concat([key]))\n      this.children.set(key, child)\n    }\n    return child\n  }\n\n  _checkForGC() {\n    if (this.identityChangeListeners.size > 0) return\n    if (this.children.size > 0) return\n\n    if (this._parent) {\n      this._parent.removeChild(last(this._path) as string | number)\n    }\n  }\n}\n\n/**\n * Wraps an object whose (sub)properties can be individually tracked.\n */\nexport default class Atom<State> implements PointerToPrismProvider {\n  private _currentState: State\n  /**\n   * @internal\n   */\n  readonly $$isPointerToPrismProvider = true\n  private readonly _rootScope: Scope\n  /**\n   * Convenience property that gives you a pointer to the root of the atom.\n   *\n   * @remarks\n   * Equivalent to `pointer({ root: thisAtom, path: [] })`.\n   */\n  readonly pointer: Pointer<State> = pointer({root: this as $FixMe, path: []})\n\n  readonly prism: Prism<State> = this.pointerToPrism(\n    this.pointer,\n  ) as $IntentionalAny\n\n  constructor(initialState: State) {\n    this._currentState = initialState\n    this._rootScope = new Scope(undefined, [])\n  }\n\n  /**\n   * Sets the state of the atom.\n   *\n   * @param newState - The new state of the atom.\n   */\n  set(newState: State) {\n    const oldState = this._currentState\n    this._currentState = newState\n\n    this._checkUpdates(this._rootScope, oldState, newState)\n  }\n\n  /**\n   * Returns the current state of the atom.\n   */\n  get(): State {\n    return this._currentState\n  }\n\n  /**\n   * Returns the value at the given pointer\n   *\n   * @param pointerOrFn - A pointer to the desired path. Could also be a function returning a pointer\n   *\n   * Example\n   * ```ts\n   * const atom = atom({ a: { b: 1 } })\n   * atom.getByPointer(atom.pointer.a.b) // 1\n   * atom.getByPointer((p) => p.a.b) // 1\n   * ```\n   */\n  getByPointer<S>(\n    pointerOrFn: Pointer<S> | ((p: Pointer<State>) => Pointer<S>),\n  ): S {\n    const pointer = isPointer(pointerOrFn)\n      ? pointerOrFn\n      : (pointerOrFn as $IntentionalAny)(this.pointer)\n\n    const path = getPointerParts(pointer).path\n    return this._getIn(path) as S\n  }\n\n  /**\n   * Gets the state of the atom at `path`.\n   */\n  private _getIn(path: (string | number)[]): unknown {\n    return path.length === 0 ? this.get() : get(this.get(), path)\n  }\n\n  reduce(fn: (state: State) => State) {\n    this.set(fn(this.get()))\n  }\n\n  /**\n   * Reduces the value at the given pointer\n   *\n   * @param pointerOrFn - A pointer to the desired path. Could also be a function returning a pointer\n   *\n   * Example\n   * ```ts\n   * const atom = atom({ a: { b: 1 } })\n   * atom.reduceByPointer(atom.pointer.a.b, (b) => b + 1) // atom.get().a.b === 2\n   * atom.reduceByPointer((p) => p.a.b, (b) => b + 1) // atom.get().a.b === 2\n   * ```\n   */\n  reduceByPointer<S>(\n    pointerOrFn: Pointer<S> | ((p: Pointer<State>) => Pointer<S>),\n    reducer: (s: S) => S,\n  ) {\n    const pointer = isPointer(pointerOrFn)\n      ? pointerOrFn\n      : (pointerOrFn as $IntentionalAny)(this.pointer)\n\n    const path = getPointerParts(pointer).path\n    const newState = updateDeep(this.get(), path, reducer)\n    this.set(newState)\n  }\n\n  /**\n   * Sets the value at the given pointer\n   *\n   * @param pointerOrFn - A pointer to the desired path. Could also be a function returning a pointer\n   *\n   * Example\n   * ```ts\n   * const atom = atom({ a: { b: 1 } })\n   * atom.setByPointer(atom.pointer.a.b, 2) // atom.get().a.b === 2\n   * atom.setByPointer((p) => p.a.b, 2) // atom.get().a.b === 2\n   * ```\n   */\n  setByPointer<S>(\n    pointerOrFn: Pointer<S> | ((p: Pointer<State>) => Pointer<S>),\n    val: S,\n  ) {\n    this.reduceByPointer(pointerOrFn, () => val)\n  }\n\n  private _checkUpdates(scope: Scope, oldState: unknown, newState: unknown) {\n    if (oldState === newState) return\n    for (const cb of scope.identityChangeListeners) {\n      cb(newState)\n    }\n\n    if (scope.children.size === 0) return\n\n    // @todo we can probably skip checking value types\n    const oldValueType = getTypeOfValue(oldState)\n    const newValueType = getTypeOfValue(newState)\n\n    if (oldValueType === ValueTypes.Other && oldValueType === newValueType)\n      return\n\n    for (const [childKey, childScope] of scope.children) {\n      const oldChildVal = getKeyOfValue(oldState, childKey, oldValueType)\n      const newChildVal = getKeyOfValue(newState, childKey, newValueType)\n      this._checkUpdates(childScope, oldChildVal, newChildVal)\n    }\n  }\n\n  private _getOrCreateScopeForPath(path: (string | number)[]): Scope {\n    let curScope = this._rootScope\n    for (const pathEl of path) {\n      curScope = curScope.getOrCreateChild(pathEl)\n    }\n    return curScope\n  }\n\n  /**\n   * Adds a listener that will be called whenever the value at the given pointer changes.\n   * @param pointer - The pointer to listen to\n   * @param cb - The callback to call when the value changes\n   * @returns A function that can be called to unsubscribe from the listener\n   *\n   * **NOTE** Unlike {@link prism}s, `onChangeByPointer` and `onChange()` are traditional event listeners. They don't\n   * provide any of the benefits of prisms. They don't compose, they can't be coordinated via a Ticker, their derivations\n   * aren't cached, etc. You're almost always better off using a prism (which will internally use `onChangeByPointer`).\n   *\n   * ```ts\n   * const a = atom({foo: 1})\n   * const unsubscribe = a.onChangeByPointer(a.pointer.foo, (v) => {\n   *  console.log('foo changed to', v)\n   * })\n   * a.setByPointer(a.pointer.foo, 2) // logs 'foo changed to 2'\n   * a.set({foo: 3}) // logs 'foo changed to 3'\n   * unsubscribe()\n   * ```\n   */\n  onChangeByPointer = <S>(\n    pointerOrFn: Pointer<S> | ((p: Pointer<State>) => Pointer<S>),\n    cb: (v: S) => void,\n  ): (() => void) => {\n    const pointer = isPointer(pointerOrFn)\n      ? pointerOrFn\n      : (pointerOrFn as $IntentionalAny)(this.pointer)\n    const {path} = getPointerParts(pointer)\n    const scope = this._getOrCreateScopeForPath(path)\n    scope.identityChangeListeners.add(cb as $IntentionalAny)\n    const unsubscribe = () => {\n      scope.identityChangeListeners.delete(cb as $IntentionalAny)\n    }\n    return unsubscribe\n  }\n\n  /**\n   * Adds a listener that will be called whenever the state of the atom changes.\n   * @param cb - The callback to call when the value changes\n   * @returns A function that can be called to unsubscribe from the listener\n   *\n   * **NOTE** Unlike {@link prism}s, `onChangeByPointer` and `onChange()` are traditional event listeners. They don't\n   * provide any of the benefits of prisms. They don't compose, they can't be coordinated via a Ticker, their derivations\n   * aren't cached, etc. You're almost always better off using a prism (which will internally use `onChangeByPointer`).\n   *\n   * ```ts\n   * const a = atom({foo: 1})\n   * const unsubscribe = a.onChange((v) => {\n   * console.log('a changed to', v)\n   * })\n   * a.set({foo: 3}) // logs 'a changed to {foo: 3}'\n   * unsubscribe()\n   * ```\n   */\n  onChange(cb: (v: State) => void): () => void {\n    return this.onChangeByPointer(this.pointer, cb)\n  }\n\n  /**\n   * Returns a new prism of the value at the provided path.\n   *\n   * @param pointer - The path to create the prism at.\n   *\n   * ```ts\n   * const pr = atom({ a: { b: 1 } }).pointerToPrism(atom.pointer.a.b)\n   * pr.getValue() // 1\n   * ```\n   */\n  pointerToPrism<P>(pointer: Pointer<P>): Prism<P> {\n    const {path} = getPointerParts(pointer)\n    const subscribe = (listener: (val: unknown) => void) =>\n      this.onChangeByPointer(pointer, listener)\n\n    const getValue = () => this._getIn(path)\n\n    return prism(() => {\n      return prism.source(subscribe, getValue)\n    }) as Prism<P>\n  }\n}\n"
  },
  {
    "path": "packages/dataverse/src/PointerProxy.ts",
    "content": "import Atom from './Atom'\nimport {val} from './val'\nimport type {Pointer} from './pointer'\nimport {getPointerMeta} from './pointer'\nimport pointer from './pointer'\nimport type {$FixMe, $IntentionalAny} from './types'\nimport prism from './prism/prism'\nimport type {Prism} from './prism/Interface'\nimport type {PointerToPrismProvider} from './pointerToPrism'\n\n/**\n * Allows creating pointer-prisms where the pointer can be switched out.\n *\n * @remarks\n * This allows reacting not just to value changes at a certain pointer, but changes\n * to the proxied pointer too.\n */\nexport default class PointerProxy<O extends {}>\n  implements PointerToPrismProvider\n{\n  /**\n   * @internal\n   */\n  readonly $$isPointerToPrismProvider = true\n  private readonly _currentPointerBox: Atom<Pointer<O>>\n  /**\n   * Convenience pointer pointing to the root of this PointerProxy.\n   *\n   * @remarks\n   * Allows convenient use of {@link pointerToPrism} and {@link val}.\n   */\n  readonly pointer: Pointer<O>\n\n  constructor(currentPointer: Pointer<O>) {\n    this._currentPointerBox = new Atom(currentPointer)\n    this.pointer = pointer({root: this as $FixMe, path: []})\n  }\n\n  /**\n   * Sets the underlying pointer.\n   * @param p - The pointer to be proxied.\n   */\n  setPointer(p: Pointer<O>) {\n    this._currentPointerBox.set(p)\n  }\n\n  /**\n   * Returns a prism of the value at the provided sub-path of the proxied pointer.\n   *\n   * @param path - The path to create the prism at.\n   */\n  pointerToPrism<P>(pointer: Pointer<P>): Prism<P> {\n    const {path} = getPointerMeta(pointer)\n    return prism(() => {\n      const currentPointer = this._currentPointerBox.prism.getValue()\n      const subPointer = path.reduce(\n        (pointerSoFar, pathItem) => (pointerSoFar as $IntentionalAny)[pathItem],\n        currentPointer,\n      )\n      return val(subPointer) as P\n    })\n  }\n}\n"
  },
  {
    "path": "packages/dataverse/src/Ticker.test.ts",
    "content": "// eslint-disable-next-line import/no-extraneous-dependencies\nimport {Ticker} from '@theatre/dataverse'\nimport {EMPTY_TICKS_BEFORE_GOING_DORMANT} from './Ticker'\n\ndescribe(`Ticker`, () => {\n  test(`Usage of Ticker`, async () => {\n    const ticker = new Ticker()\n    const listener = jest.fn()\n\n    ticker.onNextTick(listener)\n\n    ticker.tick()\n    expect(listener).toHaveBeenCalledTimes(1)\n\n    ticker.tick()\n    expect(listener).toHaveBeenCalledTimes(1)\n  })\n\n  test(`Tickers go dormant`, () => {\n    const onDormant = jest.fn()\n    const onActive = jest.fn()\n    const ticker = new Ticker({onDormant, onActive})\n    expect(ticker.dormant).toBe(true)\n\n    const listener = jest.fn()\n    ticker.onNextTick(listener)\n    expect(ticker.dormant).toBe(false)\n    expect(onActive).toHaveBeenCalledTimes(1)\n\n    ticker.tick()\n    expect(listener).toHaveBeenCalledTimes(1)\n\n    // at this point, the ticker is active, but after a few ticks, it should go dormant\n    for (let i = 0; i < EMPTY_TICKS_BEFORE_GOING_DORMANT; i++) {\n      ticker.tick()\n      if (i < EMPTY_TICKS_BEFORE_GOING_DORMANT - 1) {\n        expect(ticker.dormant).toBe(false)\n        expect(onDormant).toHaveBeenCalledTimes(0)\n      }\n    }\n\n    expect(ticker.dormant).toBe(true)\n    expect(onDormant).toHaveBeenCalledTimes(1)\n\n    // after going dormant, it should stay dormant\n    ticker.tick()\n    expect(ticker.dormant).toBe(true)\n    expect(onDormant).toHaveBeenCalledTimes(1)\n\n    // but if we schedule a callback, it should go active again\n    ticker.onNextTick(listener)\n    expect(ticker.dormant).toBe(false)\n    expect(onActive).toHaveBeenCalledTimes(2)\n  })\n\n  test(`Ticker.onThisOrNextTick()`, () => {\n    const ticker = new Ticker()\n    const mainListener = jest.fn(() => {\n      ticker.onNextTick(thisWillBeCalledOnTheNextTick)\n      ticker.onThisOrNextTick(thisWillBeCalledOnTheSameTick)\n    })\n    const thisWillBeCalledOnTheSameTick = jest.fn()\n    const thisWillBeCalledOnTheNextTick = jest.fn()\n\n    ticker.onThisOrNextTick(mainListener)\n    expect(mainListener).toHaveBeenCalledTimes(0)\n    expect(thisWillBeCalledOnTheSameTick).toHaveBeenCalledTimes(0)\n    expect(thisWillBeCalledOnTheNextTick).toHaveBeenCalledTimes(0)\n\n    ticker.tick()\n    expect(mainListener).toHaveBeenCalledTimes(1)\n    expect(thisWillBeCalledOnTheSameTick).toHaveBeenCalledTimes(1)\n    expect(thisWillBeCalledOnTheNextTick).toHaveBeenCalledTimes(0)\n\n    ticker.tick()\n    expect(mainListener).toHaveBeenCalledTimes(1)\n    expect(thisWillBeCalledOnTheSameTick).toHaveBeenCalledTimes(1)\n    expect(thisWillBeCalledOnTheNextTick).toHaveBeenCalledTimes(1)\n  })\n})\n"
  },
  {
    "path": "packages/dataverse/src/Ticker.ts",
    "content": "type ICallback = (t: number) => void\n\n/**\n * The number of ticks that can pass without any scheduled callbacks before the Ticker goes dormant. This is to prevent\n * the Ticker from staying active forever, even if there are no scheduled callbacks.\n *\n * Perhaps counting ticks vs. time is not the best way to do this. But it's a start.\n */\nexport const EMPTY_TICKS_BEFORE_GOING_DORMANT = 60 /*fps*/ * 3 /*seconds*/ // on a 60fps screen, 3 seconds should pass before the ticker goes dormant\n\n/**\n * The Ticker class helps schedule callbacks. Scheduled callbacks are executed per tick. Ticks can be triggered by an\n * external scheduling strategy, e.g. a raf.\n */\nexport default class Ticker {\n  private _scheduledForThisOrNextTick: Set<ICallback>\n  private _scheduledForNextTick: Set<ICallback>\n  private _timeAtCurrentTick: number\n  private _ticking: boolean = false\n\n  /**\n   * Whether the Ticker is dormant\n   */\n  private _dormant: boolean = true\n\n  private _numberOfDormantTicks = 0\n\n  /**\n   * Whether the Ticker is dormant\n   */\n  get dormant(): boolean {\n    return this._dormant\n  }\n  /**\n   * Counts up for every tick executed.\n   * Internally, this is used to measure ticks per second.\n   *\n   * This is \"public\" to TypeScript, because it's a tool for performance measurements.\n   * Consider this as experimental, and do not rely on it always being here in future releases.\n   */\n  public __ticks = 0\n\n  constructor(\n    private _conf?: {\n      /**\n       * This is called when the Ticker goes dormant.\n       */\n      onDormant?: () => void\n      /**\n       * This is called when the Ticker goes active.\n       */\n      onActive?: () => void\n    },\n  ) {\n    this._scheduledForThisOrNextTick = new Set()\n    this._scheduledForNextTick = new Set()\n    this._timeAtCurrentTick = 0\n  }\n\n  /**\n   * Registers for fn to be called either on this tick or the next tick.\n   *\n   * If `onThisOrNextTick()` is called while `Ticker.tick()` is running, the\n   * side effect _will_ be called within the running tick. If you don't want this\n   * behavior, you can use `onNextTick()`.\n   *\n   * Note that `fn` will be added to a `Set()`. Which means, if you call `onThisOrNextTick(fn)`\n   * with the same fn twice in a single tick, it'll only run once.\n   *\n   * @param fn - The function to be registered.\n   *\n   * @see offThisOrNextTick\n   */\n  onThisOrNextTick(fn: ICallback) {\n    this._scheduledForThisOrNextTick.add(fn)\n    if (this._dormant) {\n      this._goActive()\n    }\n  }\n\n  /**\n   * Registers a side effect to be called on the next tick.\n   *\n   * @param fn - The function to be registered.\n   *\n   * @see onThisOrNextTick\n   * @see offNextTick\n   */\n  onNextTick(fn: ICallback) {\n    this._scheduledForNextTick.add(fn)\n    if (this._dormant) {\n      this._goActive()\n    }\n  }\n\n  /**\n   * De-registers a fn to be called either on this tick or the next tick.\n   *\n   * @param fn - The function to be de-registered.\n   *\n   * @see onThisOrNextTick\n   */\n  offThisOrNextTick(fn: ICallback) {\n    this._scheduledForThisOrNextTick.delete(fn)\n  }\n\n  /**\n   * De-registers a fn to be called on the next tick.\n   *\n   * @param fn - The function to be de-registered.\n   *\n   * @see onNextTick\n   */\n  offNextTick(fn: ICallback) {\n    this._scheduledForNextTick.delete(fn)\n  }\n\n  /**\n   * The time at the start of the current tick if there is a tick in progress, otherwise defaults to\n   * `performance.now()`.\n   */\n  get time() {\n    if (this._ticking) {\n      return this._timeAtCurrentTick\n    } else return performance.now()\n  }\n\n  private _goActive() {\n    if (!this._dormant) return\n    this._dormant = false\n    this._conf?.onActive?.()\n  }\n\n  private _goDormant() {\n    if (this._dormant) return\n    this._dormant = true\n    this._numberOfDormantTicks = 0\n    this._conf?.onDormant?.()\n  }\n\n  /**\n   * Triggers a tick which starts executing the callbacks scheduled for this tick.\n   *\n   * @param t - The time at the tick.\n   *\n   * @see onThisOrNextTick\n   * @see onNextTick\n   */\n  tick(t: number = performance.now()) {\n    if (process.env.NODE_ENV === 'development') {\n      if (!(this instanceof Ticker)) {\n        throw new Error(\n          'ticker.tick must be called while bound to the ticker. As in, \"ticker.tick(time)\" or \"requestAnimationFrame((t) => ticker.tick(t))\" for performance.',\n        )\n      }\n    }\n\n    this.__ticks++\n\n    if (!this._dormant) {\n      if (\n        this._scheduledForNextTick.size === 0 &&\n        this._scheduledForThisOrNextTick.size === 0\n      ) {\n        this._numberOfDormantTicks++\n        if (this._numberOfDormantTicks >= EMPTY_TICKS_BEFORE_GOING_DORMANT) {\n          this._goDormant()\n          return\n        }\n      }\n    }\n\n    this._ticking = true\n    this._timeAtCurrentTick = t\n    for (const v of this._scheduledForNextTick) {\n      this._scheduledForThisOrNextTick.add(v)\n    }\n\n    this._scheduledForNextTick.clear()\n    this._tick(0)\n    this._ticking = false\n  }\n\n  private _tick(iterationNumber: number): void {\n    const time = this.time\n\n    if (iterationNumber > 10) {\n      console.warn('_tick() recursing for 10 times')\n    }\n\n    if (iterationNumber > 100) {\n      throw new Error(`Maximum recursion limit for _tick()`)\n    }\n\n    const oldSet = this._scheduledForThisOrNextTick\n    this._scheduledForThisOrNextTick = new Set()\n    for (const fn of oldSet) {\n      fn(time)\n    }\n\n    if (this._scheduledForThisOrNextTick.size > 0) {\n      return this._tick(iterationNumber + 1)\n    }\n  }\n}\n"
  },
  {
    "path": "packages/dataverse/src/atom.typeTest.ts",
    "content": "import Atom from './Atom'\nimport {val} from './val'\nimport {expectType, _any} from './utils/typeTestUtils'\n;() => {\n  const p = new Atom<{foo: string; bar: number; optional?: boolean}>(_any)\n    .pointer\n  expectType<string>(val(p.foo))\n  // @ts-expect-error TypeTest\n  expectType<number>(val(p.foo))\n\n  expectType<number>(val(p.bar))\n  // @ts-expect-error TypeTest\n  expectType<string>(val(p.bar))\n\n  // @ts-expect-error TypeTest\n  expectType<{}>(val(p.nonExistent))\n\n  expectType<undefined | boolean>(val(p.optional))\n  // @ts-expect-error TypeTest\n  expectType<boolean>(val(p.optional))\n  // @ts-expect-error TypeTest\n  expectType<undefined>(val(p.optional))\n  // @ts-expect-error TypeTest\n  expectType<undefined | string>(val(p.optional))\n}\n"
  },
  {
    "path": "packages/dataverse/src/dataverse.test.ts",
    "content": "// eslint-disable-next-line import/no-extraneous-dependencies\nimport type {Pointer, Prism} from '@theatre/dataverse'\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n  isPointer,\n  isPrism,\n  pointerToPrism,\n  Atom,\n  getPointerParts,\n  pointer,\n  prism,\n  Ticker,\n  val,\n} from '@theatre/dataverse'\nimport {set as lodashSet} from 'lodash-es'\nimport {isPointerToPrismProvider} from './pointerToPrism'\n\ndescribe(`The exhaustive guide to dataverse`, () => {\n  // Hi there! I'm writing this test suite as an ever-green and thorough guide to dataverse. You should be able\n  // to read it from top to bottom and learn pretty much all there is to know about dataverse.\n  //\n  // This is not a quick-start guide, so feel free to skip around.\n  //\n  // Since this is a test suite, you should be able to run it in [debug mode](https://jestjs.io/docs/en/troubleshooting)\n  // and inspect the value of variables at any point in the test.\n  // We recommend you follow this guide using VSCode's [Jest extension](https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest),\n  // which allows you to run/debug tests from within the editor and see the values of variables in the editor itself.\n\n  describe(`0 - Concepts`, () => {\n    // There 4 main concepts in dataverse:\n    // - Atoms, hold the state of your application.\n    // - Pointers are a type-safe way to refer to specific properties of atoms.\n    // - Prisms are functions that derive values from atoms or from other prisms.\n    // - Tickers are a way to schedule and synchronise computations.\n\n    // before we dive into the concepts, let me show you how a simple dataverse setup looks like.\n    test('0.1 - A simple dataverse setup', () => {\n      // In this setup, we're gonna write a program that renders an image of a sunset,\n      // like this:\n      //                         |\n      //                     \\       /\n      //                       .-\"-.\n      //                  --  /     \\  --\n      // `~~^~^~^~^~^~^~^~^~^-=======-~^~^~^~~^~^~^~^~^~^~^~`\n      // `~^_~^~^~-~^_~^~^_~-=========- -~^~^~^-~^~^_~^~^~^~`\n      // `~^~-~~^~^~-^~^_~^~~ -=====- ~^~^~-~^~_~^~^~~^~-~^~`\n      // `~^~^~-~^~~^~-~^~~-~^~^~-~^~~^-~^~^~^-~^~^~^~^~~^~-`\n      // (Art by Joan G. Stark) https://www.asciiart.eu/nature/sunset\n\n      // our program is going to have one parameter, which is `timeOfDay`, which is a number between 0 and 24.\n      // the idea is that as `timeOfDay` changes, our program would render the sun in a different position.\n\n      // Let's express the state of our program as a dataverse `Atom`. An `Atom` basically holds\n      // a piece of state, and it can be read from and written to. It also provides a way to listen\n      // to changes in the state.\n      const state = new Atom({timeOfDay: 0, imageSize: 100})\n\n      // we should be able to advance the time of day by calling `timeOfDay.set()`\n      state.set({...state.get(), timeOfDay: 12})\n\n      // now, we're going to write a function that renders the image of the sunset.\n      // this function is going to be a \"reactive function\", which means that it's going to\n      // re-run whenever any of its dependencies change.\n      // in this case, the only dependency is `timeOfDay`, so we're going to use `prism()` to create\n      // a reactive function out of it.\n      const renderSunset = prism(() => {\n        const timeOfDay = val(state.pointer.timeOfDay)\n        // we're gonna cover what `val()` and `pointer` mean, later. For now, just know that\n        // `val()` is a function that returns the value of a pointer,\n        // and `state.pointer.timeOfDay` helps `val()` find only get the value of `timeOfDay` and\n        // not the value of the whole state.\n\n        // Okay, we're not _actually_ going to render a piece of ascii art here, although that would have been cool.\n        // For now, just a simple string will do.\n        return `The time of day is ${timeOfDay}`\n      })\n\n      // now, if we call `renderSunset.getValue()`, we'll get the string that we returned from the function.\n      expect(renderSunset.getValue()).toBe(`The time of day is 12`)\n\n      // now, to make our program reactive, we can simply listen to changes to the value of our prism:\n\n      // in order to listen to changes, we need to create a `Ticker`. We're gonna cover what a `Ticker` is later.\n      // But for now, just know that it's a way to schedule and batch computations, for performance reasons.\n      const ticker = new Ticker()\n\n      // Now let's define our listener. This one will be a jest mock function.\n      const listener = jest.fn()\n      const unsubscribe = renderSunset.onChange(ticker, listener)\n\n      // now, if we change the time of day, our listener should be called.\n      state.set({...state.get(), timeOfDay: 13})\n      ticker.tick()\n      expect(listener).toBeCalledTimes(1)\n      expect(listener).toBeCalledWith(`The time of day is 13`)\n\n      // and if we change the time of day again,\n      state.set({...state.get(), timeOfDay: 14})\n      // our listener would _not_ be called, because we haven't ticked the ticker yet.\n      expect(listener).toBeCalledTimes(1)\n      // but if we tick the ticker,\n      ticker.tick()\n      // our listener would be called again.\n      expect(listener).toBeCalledTimes(2)\n\n      // And that would be it for our simple program. But let's take stock of the concepts we've encountered so far.\n      // 1. We've created an `Atom` to hold the state of our program.\n      // 2. We've created a `prism` to create a reactive function out of `timeOfDay`.\n      // 3. We've used a pointer to get the value of `timeOfDay` from the state.\n      // 4. We've used a `Ticker` to schedule and batch computations.\n\n      // In the rest of this guide, we're gonna cover each of these concepts in detail.\n      // But let's wrap this test case up by cleaning up our resources.\n      unsubscribe()\n    })\n  })\n\n  describe(`1 - What is a prism?`, () => {\n    // A Prism is a way to create a value that depends on other values.\n\n    // let's start with a simple example:\n    test(`1.1 - A pretty useless prism`, async () => {\n      // Each prism has a calculate function that it runs to calculate its value. let's make a simple function that just returns 1\n      const calculate = jest.fn(() => 1)\n\n      // Now we can make a prism out of it\n      const pr = prism(calculate)\n\n      // Now, this prism is pretty useless. It doesn't depend on anything, and it doesn't have any dependents.\n      // But we can already illustrate some of the concepts that are important to understand prisms.\n\n      // Our `calculate` function will never be called until it's actually needed - prisms are lazy.\n      expect(calculate).not.toHaveBeenCalled()\n\n      // We can get the value of the prism, which will be what the `calculate` function returned,\n      expect(pr.getValue()).toBe(1)\n\n      // and of course our calculate function will have been called.\n      expect(calculate).toHaveBeenCalledTimes(1)\n\n      // Now, you might expect that if we call `getValue()` again, the calculate function won't be called again.\n      // But that's _not_ the case. the calculate function will be called again, because our prism is cold.\n      // We'll talk about cold/hot in a bit, but let's just say that cold prisms are calculated every time they're read.\n\n      pr.getValue()\n      expect(calculate).toHaveBeenCalledTimes(2)\n\n      // We can even check whether a prism is hot or cold. Ours is cold.\n      expect(pr.isHot).toBe(false)\n\n      // We'll get to hot prisms soon, but let's talk about dependencies and dependents first.\n    })\n\n    // prisms can depend on other prisms. let's make a prism that depends on another prism.\n    test(`1.2 - prisms can depend on other prisms`, async () => {\n      const calculateA = jest.fn(() => 1)\n      const a = prism(calculateA)\n\n      const calculateATimesTwo = jest.fn(() => a.getValue() * 2)\n      const aTimesTwo = prism(calculateATimesTwo)\n\n      // let's define a function that clears the count of mocks, as we're gonna do that quite a few times.\n      function clearMocks() {\n        calculateA.mockClear()\n        calculateATimesTwo.mockClear()\n      }\n\n      // So, `aTimesTwo` depends on `a`.\n      // In our parlance, `aTimesTwo` is a dependent of `a`, and `a` is a dependency of `aTimesTwo`.\n\n      // Now if we read the value of `aTimesTwo`, it will call `calculateATimesTwo`, which will call `calculateA`:\n      expect(aTimesTwo.getValue()).toBe(2)\n      expect(calculateA).toHaveBeenCalledTimes(1)\n      expect(calculateATimesTwo).toHaveBeenCalledTimes(1)\n\n      clearMocks()\n\n      // And like we saw in the previous test, if we read the value of `aTimesTwo` again, it will call both of our calculate functions again:\n      aTimesTwo.getValue()\n      expect(calculateATimesTwo).toHaveBeenCalledTimes(1)\n      expect(calculateA).toHaveBeenCalledTimes(1)\n\n      clearMocks()\n\n      // But if we read the value of `a`, it won't call `calculateATimesTwo`:\n      a.getValue()\n      expect(calculateATimesTwo).toHaveBeenCalledTimes(0)\n      expect(calculateA).toHaveBeenCalledTimes(1)\n\n      clearMocks()\n\n      // Now let's see what happens if we make our prism hot.\n\n      // One way to make a prism hot, is to add an `onStale` listener to it.\n      const onStale = jest.fn()\n      const unsubscribe = aTimesTwo.onStale(onStale)\n\n      // As soon as a prism has an `onStale` listener, it becomes hot...\n      expect(aTimesTwo.isHot).toBe(true)\n\n      // ... and so will its dependencies, and _their_ dependencies, and so on.\n      expect(a.isHot).toBe(true)\n\n      // So, let's see what happens when we read the value of `aTimesTwo` again:\n      aTimesTwo.getValue()\n      // Since this is the first time we're calculating `aTimesTwo` after it went hot, `calculateATimesTwo` will be called again,\n      expect(calculateATimesTwo).toHaveBeenCalledTimes(1)\n      // and so will `calculateA`,\n      expect(calculateA).toHaveBeenCalledTimes(1)\n\n      clearMocks()\n\n      // But if we read `aTimesTwo` again, none of the calculate functions will be called again.\n      aTimesTwo.getValue()\n      expect(calculateATimesTwo).toHaveBeenCalledTimes(0)\n      expect(calculateA).toHaveBeenCalledTimes(0)\n\n      clearMocks()\n\n      // This behavior propogates up the dependency chain, so if we read `a` again, `calculateA` won't be called again,\n      // because its value is already fresh.\n      a.getValue()\n      expect(calculateA).toHaveBeenCalledTimes(0)\n\n      clearMocks()\n\n      // At this point, since none of our prisms depend on a prism whose value will change, they'll remain\n      // fresh forever.\n      a.getValue()\n      aTimesTwo.getValue()\n      a.getValue()\n      aTimesTwo.getValue()\n\n      expect(calculateATimesTwo).toHaveBeenCalledTimes(0)\n      expect(calculateA).toHaveBeenCalledTimes(0)\n\n      clearMocks()\n\n      // But as soon as we unsubscribe from our `onStale()` listener, the prisms will become cold again,\n      unsubscribe()\n      expect(aTimesTwo.isHot).toBe(false)\n      expect(a.isHot).toBe(false)\n\n      // and they'll return back to their cold behavior.\n      aTimesTwo.getValue()\n      expect(calculateATimesTwo).toHaveBeenCalledTimes(1)\n      expect(calculateA).toHaveBeenCalledTimes(1)\n\n      clearMocks()\n\n      aTimesTwo.getValue()\n      expect(calculateATimesTwo).toHaveBeenCalledTimes(1)\n      expect(calculateA).toHaveBeenCalledTimes(1)\n\n      clearMocks()\n\n      // Now, one more thing before we move on. What will happen if we make `a` hot, but not `aTimesTwo`?\n      // Let's try it out.\n      const unsubcribeFromAOnStale = a.onStale(() => {})\n      // `a` will go hot:\n      expect(a.isHot).toBe(true)\n      // but `aTimesTwo` stays cold:\n      expect(aTimesTwo.isHot).toBe(false)\n\n      // Now let's read the value of `a`\n      a.getValue()\n\n      // `calculateA` will be called\n      expect(calculateA).toHaveBeenCalledTimes(1)\n      // And `calculateATimesTwo` won't.\n      expect(calculateATimesTwo).toHaveBeenCalledTimes(0)\n\n      clearMocks()\n\n      // And if we re-read the value of `a`, `calculateA` won't be called again, becuase `a` is hot and its value is fresh.\n      a.getValue()\n      expect(calculateA).toHaveBeenCalledTimes(0)\n\n      clearMocks()\n\n      // But if we read the value of `aTimesTwo`, `calculateATimesTwo` will be called, because `aTimesTwo` is cold.\n      aTimesTwo.getValue()\n      expect(calculateATimesTwo).toHaveBeenCalledTimes(1)\n      // yet `calculateA` won't be called, because `a` is hot and its value is fresh.\n      expect(calculateA).toHaveBeenCalledTimes(0)\n\n      clearMocks()\n\n      // in conclusion, if we make a prism hot, it'll make its dependencies hot too.\n      // if we read the value of a cold prism, it'll call its calculate function, which will\n      // call the calculate functions of its dependencies, and so on.\n      // but if we read the value of a hot prism, it'll only call its calculate function if its value is stale.\n\n      // le'ts wrap up this part by unsubscribing from `a`'s `onStale` listener to not have any lingering listeners.\n      unsubcribeFromAOnStale()\n    })\n\n    describe('1.3 - What about state?', () => {\n      // so far, our prisms have not depended on any changing values, so in turn, _their_ values have never changed either.\n      // but what if we want to create a prism that depends on a changing value?\n      // we call those values \"sources\", and we can create them using the `prism.source()` hook:\n\n      test('1.3.1 - The wrong way to depend on state', () => {\n        // let's say we want to create a prism that depends on this value:\n        let value = 0\n\n        // the _wrong_ way to do this, is to create a prism that directly reads this value\n        const p = prism(() => value)\n\n        // this will actually work if the prism is cold:\n        expect(p.getValue()).toBe(0)\n        value = 1\n        expect(p.getValue()).toBe(1)\n\n        // but if we make the prism hot, it'll never update its value, because it's not subscribed to any sources.\n        const unsubscribe = p.onStale(() => {})\n        expect(p.isHot).toBe(true)\n        // on first read, it'll give us the current value of `value`, which is 1.\n        expect(p.getValue()).toBe(1)\n        // but if we change `value` again, the prism won't know\n        value = 2\n        expect(p.getValue()).toBe(1)\n        // and so it'll keep returning the old value.\n        expect(p.getValue()).toBe(1)\n\n        unsubscribe()\n      })\n\n      test('1.3.2 - The _less_ wrong way to depend on state', () => {\n        let value = 0\n        // the source hook requires a `listen` function, and a `get` function.\n        // let's skip the `listen` function for now, and just focus on the `getValue` function.\n        const listen = jest.fn(() => () => {})\n        // the `getValue` function should return the current value of the source.\n        const get = jest.fn(() => value)\n\n        const p = prism(() => {\n          return prism.source(listen, get) * 2\n        })\n\n        value = 1\n\n        // our prism is cold right now. let's see what happens when we read its value.\n        expect(p.getValue()).toBe(2)\n        // `get` will be called once, because we're reading the value of the source for the first time.\n        expect(get).toHaveBeenCalledTimes(1)\n        // and `listen` won't be called at all\n        expect(listen).toHaveBeenCalledTimes(0)\n\n        get.mockClear()\n\n        // now let's make the prism hot\n        const unsubscribe = p.onStale(() => {})\n        expect(p.isHot).toBe(true)\n        expect(p.getValue()).toBe(2)\n        // `get` will be called again, because we're reading the value of the source for the second time.\n        expect(get).toHaveBeenCalledTimes(1)\n        // and `listen` will be called once, because our prism wants to be notified when the source changes.\n        expect(listen).toHaveBeenCalledTimes(1)\n\n        get.mockClear()\n        listen.mockClear()\n\n        // now, since our `listen` function is a mock, it won't actually do anything,\n        // so the prism still won't know when the source changes.\n        value = 2\n        expect(p.getValue()).toBe(2)\n        // `get` won't be called again, because the source hasn't changed.\n        expect(get).toHaveBeenCalledTimes(0)\n\n        unsubscribe()\n      })\n\n      test('1.3.3 - The right way to depend on state', () => {\n        let value = 0\n        // now let's implement an actual `listen` function.\n\n        // first, we need to keep track of all the listeners that our source wil have\n        const listeners = new Set<(val: number) => void>()\n\n        // the `listen` function should return an stop function.\n        // the stop function should stop listening to the source.\n        const listen = jest.fn((fn) => {\n          listeners.add(fn)\n\n          return function stop() {\n            listeners.delete(fn)\n          }\n        })\n\n        const get = jest.fn(() => value)\n\n        // and now we need to define a function that will notify all the listeners that the source has changed.\n        const set = (newValue: number) => {\n          if (newValue !== value) {\n            value = newValue\n            listeners.forEach((fn) => fn(value))\n          }\n        }\n\n        // don't worry, there are helpers for this in dataverse. but for now, we'll implement\n        // it manually to understand how it works.\n\n        // now let's create a prism that depends on our source.\n        const p = prism(() => {\n          return prism.source(listen, get) * 2\n        })\n\n        // let's make the prism hot\n        const staleListener = jest.fn()\n        const unsubscribe = p.onStale(staleListener)\n        expect(p.isHot).toBe(true)\n\n        // and let's read its value\n        expect(p.getValue()).toBe(0)\n        // `get` will be called once, because we're reading the value of the source for the first time.\n        expect(get).toHaveBeenCalledTimes(1)\n        // and `listen` will be called once, because our prism wants to be notified when the source changes.\n        expect(listen).toHaveBeenCalledTimes(1)\n\n        get.mockClear()\n        listen.mockClear()\n\n        // now let's change the value of the source\n        set(1)\n\n        // this time, our prism will know that the source has changed, and it'll update its value.\n        expect(p.getValue()).toBe(2)\n\n        // and that's how we create a prism that depends on a changing value.\n\n        unsubscribe()\n      })\n    })\n\n    // in practice, we'll almost never need to use the `source` hook directly,\n    // and we'll never need to provide our own `listen` and `get` functions.\n    // instead, we'll use `Atom`s, which are sources that are already implemented for us.\n  })\n\n  describe(`2 - Atoms`, () => {\n    // In the final test of the previous chapter, we learned how to create our own sources of state,\n    // and make a prism depend on them, using the `prism.source()` hook. In this chapter, we'll learn\n    // how to use the `Atom` class, which is a source of state that's already implemented for us and comes\n    // with a lot of useful features.\n    test(`2.1 - Using Atoms without prisms`, () => {\n      const initialState = {foo: 'foo', bar: 0}\n\n      // Let's create an atom with an initial state.\n      const atom = new Atom(initialState)\n\n      // We can read our atom's state via `atom.get()` which returns an exact reference to its state\n      expect(atom.get()).toBe(initialState)\n\n      // `atom.set()` will replace the state with a new object.\n      atom.set({foo: 'foo', bar: 1})\n\n      expect(atom.get()).not.toBe(initialState)\n      expect(atom.get()).toEqual({foo: 'foo', bar: 1})\n\n      // Another way to change the state, with the reducer pattern.\n      atom.reduce(({foo, bar}) => ({foo, bar: bar + 1}))\n      expect(atom.get()).toEqual({foo: 'foo', bar: 2})\n\n      // Having to write `({foo, bar}) => ({foo, bar: bar + 1})` every time we want to change the state\n      // is a bit annoying. This is one place where pointers come in handy. We'll have a whole chapter\n      // about pointers later, but for now, let's just say that they're a type-safe way to refer to a sub-prop of our atom's state.\n      //\n      // In this example, we're using the `setByPointer()` method to change the `bar` property of the state.\n      atom.setByPointer((p) => p.bar, 3)\n      expect(atom.get()).toEqual({foo: 'foo', bar: 3})\n\n      // Also, note that there is nothing magical about pointers. They're just a type-safe encoding of `['path', 'to', 'property']`.\n      // Pointers can even point to non-existent properties, and they'll be created when we use them. Typescript will complain if we\n      // try to use a pointer to a non-existent property, but in the runtime, there will be no errors.\n      // Let's silence the typescript error for the sake of the test\n      // @ts-ignore and refer to `baz`, which doesn't actually exist in our state.\n      atom.setByPointer((p) => p.baz, 'baz')\n      // Atom will create the `baz` property for us:\n      expect(atom.get()).toEqual({foo: 'foo', bar: 3, baz: 'baz'})\n\n      // The pointer can also refer to the whole state, and we can use it to replace the whole state.\n      atom.setByPointer((p) => p, {foo: 'newfoo', bar: -1})\n      expect(atom.get()).toEqual({foo: 'newfoo', bar: -1})\n\n      // `getByPointer()` is to `get()` what `setByPointer()` is to `set()`\n      expect(atom.getByPointer((p) => p.bar)).toBe(-1)\n\n      // `reduceByPointer()` is to `setByPointer()` what `reduce()` is to `set()`\n      atom.reduceByPointer(\n        (p) => p.bar,\n        (bar) => bar + 1,\n      )\n\n      expect(atom.get()).toEqual({foo: 'newfoo', bar: 0})\n\n      // we can use external pointers too (which we'll learn how to create in the next Pointers chapter)\n      const externalPointer = atom.pointer.bar\n      atom.setByPointer(() => externalPointer, 1)\n      expect(atom.get()).toEqual({foo: 'newfoo', bar: 1})\n\n      let internalPointer\n      // the pointer passed to `setByPointer()` is the same as the one returned by `atom.pointer`\n      atom.setByPointer((p) => {\n        internalPointer = p\n        return p.bar\n      }, 2)\n\n      expect(internalPointer).toBe(atom.pointer)\n\n      expect(atom.pointer).toBe(atom.pointer)\n      expect(atom.pointer.bar).toBe(atom.pointer.bar)\n\n      // pointers don't change when the atom's state changes\n      const oldPointer = atom.pointer.bar\n      atom.set({foo: 'foo', bar: 10})\n      expect(atom.pointer.bar).toBe(oldPointer)\n    })\n\n    // Now that we know how to set/get the state of Atoms, let's learn how to use them with prisms.\n    test(`2.2 - The hard way to use Atoms with prisms`, () => {\n      // In Chapter 1.3.3, we learned how to create a prism that depends on a changing value,\n      // but we had to provide our own `listen` and `get` functions. Now let's see how to do the same\n      // thing with an Atom.\n\n      // Just to learn how things work under the hood, we're still going to use the `prism.source()` hook.\n      // In the next chapter, we'll learn how to skip that step too.\n\n      // Let's create an atom with an initial state.\n      const atom = new Atom({foo: 'foo', bar: 0})\n\n      // The same prism from chapter 1.3.3:\n      const pr = prism(() => {\n        return prism.source(listen, get) * 2\n      })\n\n      // now let's define the `listen` and `get` functions that we'll pass to `prism.source()`\n      function listen(cb: (value: number) => void) {\n        // `atom.onChangeByPointer()` is a method that we can use to listen to changes in a specific path of the atom's state.\n        // onChangeByPointer() returns an unsubscribe function, so we'll just return that as is.\n        return atom.onChangeByPointer(\n          // the path to listen to is just the pointer to the `bar` property of the atom's state.\n          atom.pointer.bar,\n          cb,\n        )\n      }\n\n      // The `get` function will just return the value of the `bar` property of the atom's state.\n      function get() {\n        return atom.get().bar\n      }\n\n      // And that's it! We can now use the prism with the atom's state.\n\n      // let's make the prism hot\n      const staleListener = jest.fn()\n      const unsubscribe = pr.onStale(staleListener)\n      expect(pr.isHot).toBe(true)\n\n      // and let's read its value\n      expect(pr.getValue()).toBe(0)\n\n      // now let's change the value of the source\n      atom.setByPointer((p) => p.bar, 1)\n\n      // our prism will know that the source has changed, and it'll update its value.\n      expect(pr.getValue()).toBe(2)\n\n      unsubscribe()\n\n      // and that's how we create a prism that depends on an atom, but that's still\n      // pretty verbose. Let's see how to do the same thing in a more convenient way.\n    })\n\n    test(`2.3 - The easy way to use Atoms with prisms`, () => {\n      // In the previous chapter, we learned how to create a prism that depends on an atom,\n      // but we had to provide our own `listen` and `get` functions. Now let's see how to do the same\n      // thing with an Atom, but in the idiomatic way. We'll use pointers and `val()`.\n\n      // Let's create an atom with an initial state.\n      const atom = new Atom({foo: 'foo', bar: 0})\n\n      // Now instead of using `prism.source()`, we'll use val(atom.pointer):\n      const pr = prism(() => {\n        // We'll cover pointers and `val()` soon, but for now, just know that `val(atom.pointer.bar)`\n        // will return the value of the `bar` property of the atom's state.\n        return val(atom.pointer.bar) * 2\n      })\n\n      // and that's it!\n\n      // let's test that it works as expected\n      const staleListener = jest.fn()\n      const unsubscribe = pr.onStale(staleListener)\n      expect(pr.isHot).toBe(true)\n\n      // and let's read its value\n      expect(pr.getValue()).toBe(0)\n\n      // now let's change the value of the source\n      atom.setByPointer((p) => p.bar, 1)\n\n      // this time, our prism will know that the source has changed, and it'll update its value.\n      expect(pr.getValue()).toBe(2)\n\n      unsubscribe()\n    })\n  })\n\n  describe(`3 - Pointers`, () => {\n    test('3.0 - Why pointers?', () => {\n      // We've come across pointers a few times already.\n      {\n        // For example, we saw that Atoms provide `set|get|reduceByPointer()` methods:\n        const atom = new Atom({foo: 'foo', bar: 0})\n        atom.setByPointer((p) => p.bar, 1)\n        // or equivalently:\n        atom.setByPointer(atom.pointer.bar, 1)\n      }\n\n      // You might be wondering why not just use dot-delimited paths like in lodash's `set(val, 'path.to.prop', 1)`?\n      // The answer is that pointers are much easier to type, and they work well with typescript's autocomplete.\n      // Another benefit is that pointers are always cached, in so that `pointer.bar === pointer.bar` will always be true,\n      // which means we can use them to attach metadata to a pointer. We'll see how to do that in a bit.\n\n      // Another alternative to pointers is array paths, like in lodash's `set(val, ['path', 'to', 'prop'], 1)`.\n      // Similar to dot-delimited paths, array paths are also not easy to type, and they don't work well with typescript's autocomplete.\n      // Another problem is that creating an array path every time we want to access a property is not very efficient.\n      // The JS engine will have to allocate a new array every time, and then it'll have to iterate over it to find the property.\n      // Pointers on the other hand, are always cached, so they're allocated only once.\n\n      // We'll learn how to take advantage of these benefits in the next sub-chapters.\n    })\n    test(`3.1 - Pointers in the runtime`, () => {\n      // Let's have a look at how pointers work in the runtime.\n      // Pointers refer to a specific nested property of an object. The object is called the \"root\" of the pointer,\n      // and the property is called the \"path\" of the pointer.\n\n      // So for example, if this is our root object:\n      const root = {foo: 'foo', bar: 0}\n      // This pointer will refer to the whole object:\n      const p = pointer({root: root, path: []})\n\n      // We can inspect the pointer's root and path using `getPointerParts()`:\n      const parts = getPointerParts(p)\n      expect(parts.root).toBe(root)\n      expect(parts.path).toEqual([])\n\n      // This pointer will refer to the `foo` property of the root object:\n      const pointerToFoo = p.foo\n      // p.foo is a pointer to the `foo` property of the root object. its only difference to p is that its path is `['foo']`\n      expect(getPointerParts(pointerToFoo).path).toEqual(['foo'])\n      expect(getPointerParts(pointerToFoo).root).toBe(root)\n\n      // subPointers are cached. Calling `p.foo` twice will return the same pointer:\n      expect(pointerToFoo).toBe(p.foo)\n\n      // we can also manually construct the pointer to foo:\n      const pointerToFoo2 = pointer({root: root, path: ['foo']})\n      expect(getPointerParts(pointerToFoo2).path).toEqual(['foo'])\n    })\n\n    test(`3.2 - Pointers in typescript`, () => {\n      // Pointers become more useful when we properly type them. Let's do that now:\n\n      type Data = {str: string; foo?: {bar?: {baz: number}}}\n      const root: Data = {str: 'some string'}\n\n      const p = pointer<Data>({\n        root,\n        path: [],\n      })\n\n      // now typescript will error if we try to access a property that doesn't exist\n      // @ts-expect-error\n      p.baz\n\n      // but accessing known properties and nested properties is fine\n      p.foo\n      p.foo.bar.baz\n\n      // we don't need to manually type the pointer since pointers are usually provided by Atoms, and those are already typed\n      const atom = new Atom(root)\n\n      // so this  will be fine by typescript:\n      atom.pointer.foo.bar.baz\n\n      // while this will error\n      // @ts-ignore\n      atom.pointer.foo.bar.baz.nonExistentProperty\n    })\n\n    test(`3.3 - Creating type-safe utility functions with pointers`, () => {\n      // Now that we know how to create pointers, let's see how to use them to create utility functions.\n\n      // Let's create a function that will set a property of an object by a pointer, similar to `lodash.set()`.\n      // The function will take the root object, the pointer, and the new value.\n      function setByPointer<Root extends {}, Value>(\n        root: Root,\n        getPointer: (ptr: Pointer<Root>) => Pointer<Value>,\n        newValue: Value,\n      ): Root {\n        // we'll create a pointer to the root object, which would not be efficient\n        // if `setByPointer` was called many times. We'll see how to improve this in the next sub-chapters.\n        const rootPointer = pointer({\n          root: root,\n          path: [],\n        }) as Pointer<Root>\n        // We'll use `getPointerParts()` to get the root and path of the pointer.\n        const {path} = getPointerParts(getPointer(rootPointer))\n\n        // @ts-ignore we'll ignore the typescript error because `lodash.set()` is not typed\n        return lodashSet(root, path, newValue)\n      }\n\n      // now let's test our utility function\n      const data = {foo: {bar: 0}}\n      const newData = setByPointer(data, (p) => p.foo.bar, 1)\n      expect(newData).toEqual({foo: {bar: 1}})\n\n      // Compared to `lodash.set()`, our function is type-safe and plays nicely with intellisense and autocomplete.\n    })\n\n    test('3.4 - Converting pointers to prisms', () => {\n      // So, how does the `val()` function work?\n      // Let's look at its implementation:\n      const val = (input: any) => {\n        // if the input is a pointer, we'll convert it to a prism and `getValue()` on it\n        if (isPointer(input)) {\n          return pointerToPrism(input).getValue()\n          // otherwise if it's already a prism, we `getValue()` on it\n        } else if (isPrism(input)) {\n          return input.getValue()\n        } else {\n          // or otherwise we return the input as is.\n          return input\n        }\n      }\n\n      // So, the interesting part is the `pointerToPrism()` function. How does it\n      // convert a pointer to a prism?\n\n      // Let's implement it:\n      function pointerToPrismV1<V>(ptr: Pointer<V>): Prism<V> {\n        // we'll use `getPointerParts()` to get the root and path of the pointer\n        const {root} = getPointerParts(ptr)\n        // Then we check whether the root is an atom\n        if (!(root instanceof Atom)) {\n          throw new Error(\n            `pointerToPrismV1() only supports pointers whose root is an Atom`,\n          )\n        }\n\n        // We'll need to define the listen/get functions as well\n\n        // the listen function will listen to changes on the pointer\n        const listen = (cb: (newValue: V) => void): (() => void) => {\n          return atom.onChangeByPointer(ptr, cb)\n        }\n\n        const get = (): V => {\n          return root.getByPointer(ptr)\n        }\n\n        // then we'll create a prism that sources from the atom\n        return prism(() => {\n          return prism.source(listen, get)\n        })\n      }\n\n      // Now let's test it:\n      const atom = new Atom({foo: {bar: 0}})\n      const ptr = atom.pointer.foo.bar\n\n      const p = pointerToPrismV1(ptr)\n      expect(p.getValue()).toBe(0)\n\n      // It works!\n\n      // Now let's see how we can improve it.\n\n      // First, we can cache the prism so that we don't create a new prism every time we call `pointerToPrism()`.\n      // This will improve performance and reduce memory usage.\n      const cache = new WeakMap<Pointer<any>, Prism<unknown>>()\n      function pointerToPrismV2<V>(ptr: Pointer<V>): Prism<V> {\n        // we'll check whether the pointer is already in the cache\n        const cached = cache.get(ptr as any)\n        if (cached) {\n          return cached as any\n        }\n\n        // if not, we'll create a new prism and cache it\n        const p = pointerToPrismV1(ptr)\n        cache.set(ptr as any, p)\n        return p\n      }\n\n      // Now let's test it:\n      expect(pointerToPrismV2(ptr)).toBe(pointerToPrismV2(ptr)) // the cache works\n      expect(pointerToPrismV2(ptr).getValue()).toBe(0) // the prism works\n\n      // The second improvement would be to decouple `pointerToPrism()` from the implementation of `Atom`.\n      // Namely, `pointerToPrism()` only calls `Atom.onChangeByPointer()` and `Atom.getByPointer()`, which\n      // are methods that can be implemented on other objects as well. Instead, we can just define an interface\n      // that requires these methods to be implemented.\n      // We call this interface `PointerToPrismProvider`:\n      // For example, Atom implements this interface:\n      expect(isPointerToPrismProvider(atom)).toBe(true)\n\n      // So our implementation can be updated to:\n      function pointerToPrismV3<V>(ptr: Pointer<V>): Prism<V> {\n        const cached = cache.get(ptr as any)\n        if (cached) {\n          return cached as any\n        }\n\n        const {root} = getPointerParts(ptr)\n        if (!isPointerToPrismProvider(root)) {\n          throw new Error(\n            `pointerToPrismV3() only supports pointers whose root implements PointerToPrismProvider`,\n          )\n        }\n        // one final improvement is to allow the implementation of `PointerToPrismProvider` to create\n        // the prism, rather than us calling `prism()`, and `prism.source` directly. This will allow\n        // the implementation to custmoize and possibly optimise how the prism sources its value.\n        const pr = root.pointerToPrism(ptr)\n        cache.set(ptr as any, pr)\n        return pr\n      }\n\n      // Now let's test it:\n      expect(pointerToPrismV3(ptr)).toBe(pointerToPrismV3(ptr)) // the cache works\n      expect(pointerToPrismV3(ptr).getValue()).toBe(0) // the prism works\n\n      // To summarize:\n      // * we've learned how to implement a `val()` function that works with pointers and prisms.\n      // * we've learned how to implement a `pointerToPrism()` function that converts a pointer to a prism.\n      // * we've learned how to improve the performance of `pointerToPrism()` by caching the prisms.\n      // * we've learned how to decouple `pointerToPrism()` from the implementation of `Atom` by using an interface.\n    })\n  })\n\n  describe('5 - Tickers', () => {\n    // A ticker is how dataverse allows you to coordinate the timing of your computations.\n    // For example, let's say we have a prism whose value changes every 5 milliseconds. And we want to\n    // render the value of that prism every ~16 milliseconds (60fps). A ticker allows us to do that.\n\n    test('5.1 - Our prism has gone stale...', () => {\n      // In order to see how tickers fit into the picture, we should first understand how prisms\n      // go stale.\n      const atom = new Atom('1')\n\n      const aParsed = prism(() => parseInt(val(atom.pointer)))\n\n      // To illustrate how prisms go stale, we'll create a prism that computes the factorial of the atom's value.\n      // Since factorial is a computationally expensive operation, we'll only want to compute it when we actually\n      // need it.\n      function factorial(n: number): number {\n        if (n === 0) return 1\n        return n * factorial(n - 1)\n      }\n\n      // we'll want to track how many times our prism actually recalculates its value, so we'll use a jest spy\n      const recalculateSpy = jest.fn()\n      const aFactoriel = prism(() => {\n        recalculateSpy()\n        return factorial(val(aParsed))\n      })\n\n      // To make it easy to inspect the state of a prism, we'll create a helper function:\n      const prismState = (\n        p: Prism<any>,\n      ): 'cold' | 'hot:stale' | 'hot:fresh' => {\n        // @ts-ignore this is a hack to access the internal state of the prism\n        const internalState = p._state as any\n        return internalState.hot === false\n          ? 'cold'\n          : internalState.handle._isFresh\n            ? 'hot:fresh'\n            : 'hot:stale'\n      }\n\n      // Every prism starts out as 'cold'\n      expect(prismState(aFactoriel)).toBe('cold')\n      expect(prismState(aParsed)).toBe('cold')\n\n      {\n        // as soon as we subscribe to its `onStale` event, it becomes 'hot:fresh'\n        const unsubscribe = aFactoriel.onStale(jest.fn())\n        expect(prismState(aFactoriel)).toBe('hot:fresh')\n        // since its value is fresh, it should have already called our spy\n        expect(recalculateSpy).toHaveBeenCalledTimes(1)\n        recalculateSpy.mockClear()\n\n        // and if we try to get its value, it won't recalculate it\n        expect(aFactoriel.getValue()).toBe(1)\n        expect(recalculateSpy).toHaveBeenCalledTimes(0)\n\n        // and if we change the state of our atom,\n        atom.set('2')\n        // our prism will go stale:\n        expect(prismState(aFactoriel)).toBe('hot:stale')\n        // And so will its dependency:\n        expect(prismState(aParsed)).toBe('hot:stale')\n\n        // Has the recalculate spy been called?\n        expect(recalculateSpy).toHaveBeenCalledTimes(0)\n        // it hasn't. It'll only recalculate when we actually need its value:\n        expect(aFactoriel.getValue()).toBe(2)\n        expect(recalculateSpy).toHaveBeenCalledTimes(1)\n        unsubscribe()\n      }\n\n      // So far we have established that instead of recalculating their values, prisms simply go stale when their dependencies change.\n      // and they'll go fresh again when we call `getValue()` on them.\n\n      // tickers are a way to make sure `getValue()` is called at the rate/frequency we want.\n      const ticker = new Ticker()\n      const onChange = jest.fn()\n      // notice how we're using `onChange` only on the prism that we care about, and not on its dependencies.\n      const unsubscribe = aFactoriel.onChange(ticker, onChange)\n      // now our prism will go stale every time our atom changes, but it won't recalculate its value until we call `tick()`\n      atom.set('3')\n      expect(onChange).toHaveBeenCalledTimes(0)\n      ticker.tick()\n      expect(onChange).toHaveBeenCalledTimes(1)\n      expect(onChange).toHaveBeenCalledWith(6)\n\n      // We'd usually create a single ticker for an entire page, and call `tick()` on it every frame.\n      // For example, on a regular web page, we'd use `requestAnimationFrame()` to `tick()` our ticker.\n      // On an XR session, we'd use `XRSession.requestAnimationFrame()`.\n      function tickEveryFrame() {\n        ticker.tick()\n        requestAnimationFrame(tickEveryFrame)\n      }\n      // now we're not gonna call `tickEveryFrame()` because our tests are running on node, but you get the idea.\n      unsubscribe()\n\n      // Also note that we can have multiple tickers for the same prism:\n      // `pr.onChange(ticker1, ...); pr.onChange(ticker2, ...);` is perfectly valid.\n      // And it would be useful if we're using the value of the same prism in multiple places.\n    })\n\n    // That's pretty much it for tickers. If you're curious how they work, have a look at `./Ticker.test.ts`\n  })\n\n  describe('6 - Prism hooks', () => {\n    // Prism hooks are inspired by [React hooks](https://reactjs.org/docs/hooks-intro.html) ) and work in a similar way.\n    describe(`6.1 - prism.source()`, () => {\n      // We've already come across `prism.source()` in chapter 3. `prism.source()` allow a prism to react to changes in\n      // some external source (other than other prisms). For example, `Atom.pointerToPrism()` uses `prism.source()` to\n      // create a prism that reacts to changes in the atom's value.\n\n      // Here is another example. Let's say we want to create a prism that reacts to changes in the value of an HTML input element:\n      test(`6.1.1 - Example: listening to changes in an input element`, () => {\n        function prismFromInputElement(input: HTMLInputElement): Prism<string> {\n          function subscribe(cb: (value: string) => void) {\n            const listener = () => {\n              cb(input.value)\n            }\n            input.addEventListener('input', listener)\n            return () => {\n              input.removeEventListener('input', listener)\n            }\n          }\n\n          function get() {\n            return input.value\n          }\n          return prism(() => prism.source(subscribe, get))\n        }\n\n        // And this is how we'd use it:\n        // const el = document.querySelector('input.our-input')\n        // const prism = prismFromInputElement(el)\n        // our prism will start listening to changes in the input element as soon as it goes hot,\n        // and it will stop listening when it goes cold.\n      })\n\n      test('6.2.2 - Behavior of `prism.source()`', () => {\n        // Let's use a few spies to see what's going on under the hood:\n        const events: Array<'get' | 'subscribe' | 'unsubscribe'> = []\n\n        const subscribe = () => {\n          events.push('subscribe')\n          return () => {\n            events.push('unsubscribe')\n          }\n        }\n        const get = () => {\n          events.push('get')\n        }\n\n        const pr = prism(() => prism.source(subscribe, get))\n        expect(events).toEqual([])\n        pr.getValue()\n        // since our prism is cold, it won't subscribe to the source and will only call `get()`\n        expect(events).toEqual(['get'])\n        events.length = 0 // reset the events array\n\n        // as we know, cold prisms do not cache their values, so calling `getValue()` again will call `get()` again:\n        pr.getValue()\n        expect(events).toEqual(['get'])\n\n        events.length = 0 // reset the events array\n\n        // now let's make our prism hot:\n        const unsub = pr.onStale(() => {})\n        // as soon as the prism goes hot, it will subscribe to the source, and it'll also call `get()` for the first time:\n        expect(events).toEqual(['subscribe', 'get'])\n        events.length = 0 // reset the events array\n        pr.getValue()\n        expect(events).toEqual([])\n\n        // now let's make our prism cold again:\n        unsub()\n        // as soon as the prism goes cold, it will unsubscribe from the source:\n        expect(events).toEqual(['unsubscribe'])\n      })\n    })\n    test(`6.2 - prism.ref()`, () => {\n      // Just like React's `useRef()`, `prism.ref()` allows us to create a prism that holds a reference to some value.\n      // The only difference is that `prism.ref()` requires a key to be passed into it, whlie `useRef()` doesn't.\n      // This means that we can call `prism.ref()` in any order, and we can call it multiple times with the same key.\n      const spy = jest.fn()\n      const atom = new Atom(0)\n      const pr = prism(() => {\n        val(atom.pointer) // just to make our prism depend on the atom. we don't care about the value of the atom.\n\n        const elRef = prism.ref<undefined | HTMLElement>('my-key', undefined)\n        spy(elRef.current)\n        if (elRef.current === undefined) {\n          // @ts-ignore - we're just testing the behavior here, we won't create a real dom node\n          elRef.current = {}\n        }\n      })\n      // now, what happens if we get the value of our prism?\n      pr.getValue()\n      expect(spy).toHaveBeenCalledWith(undefined)\n      spy.mockClear()\n\n      // and if we get its value again?\n      pr.getValue()\n      expect(spy).toHaveBeenCalledWith(undefined) // the ref is still undefined\n      spy.mockClear()\n\n      // this is because `prism.ref()` only works when the prism is hot, otherwise it'll always return the initial value of the ref.\n      // So let's make our prism hot:\n      const unsub = pr.onStale(() => {})\n      expect(spy).toHaveBeenCalledWith(undefined)\n      spy.mockClear()\n      // now let's make the prism go stale\n      atom.set(1)\n      // of course the atom won't recalculate as long as we don't call `getValue()` on it:\n      expect(spy).not.toHaveBeenCalled()\n      // so let's call `getValue()` on it:\n      pr.getValue()\n      expect(spy).toHaveBeenCalledWith({})\n      // and that's how `prism.ref()` works!\n      unsub()\n    })\n    describe(`6.3 - prism.memo()`, () => {\n      // `prism.memo()` works just like React's `useMemo()` hook. It's a way to cache the result of a function call.\n      // The only difference is that `prism.memo()` requires a key to be passed into it, whlie `useMemo()` doesn't.\n      // This means that we can call `prism.memo()` in any order, and we can call it multiple times with the same key.\n\n      test(`6.3.1 - Example: using prism.memo()`, () => {\n        const atom = new Atom(1)\n        function factorial(n: number): number {\n          if (n === 0) return 1\n          return n * factorial(n - 1)\n        }\n\n        const spy = jest.fn()\n\n        const pr = prism(() => {\n          // num will be between 0 and 9. This is so we can test what happens when the atom's value changes, but\n          // the memoized value doesn't change.\n          const num = val(atom.pointer)\n          const numMod10 = num % 10\n          const value = prism.memo(\n            // we need a string key to identify the hook. This allows us to call `prism.memo()` in any order, or even conditionally.\n            'factorial',\n            // the function to memoize\n            () => {\n              spy()\n              return factorial(numMod10)\n            },\n            // the dependencies of the function. If any of the dependencies change, the function will be called again.\n            [numMod10],\n          )\n\n          return `number is ${num}, num % 10 is ${numMod10} and its factorial is ${value}`\n        })\n\n        // firts let's test our prism when it's cold:\n        expect(pr.getValue()).toBe(\n          'number is 1, num % 10 is 1 and its factorial is 1',\n        )\n        expect(spy).toHaveBeenCalledTimes(1)\n\n        // since cold prisms don't cache their values, calling `getValue()` again will call the factorial function again:\n        expect(pr.getValue()).toBe(\n          'number is 1, num % 10 is 1 and its factorial is 1',\n        )\n        expect(spy).toHaveBeenCalledTimes(2)\n\n        spy.mockClear()\n        // now let's make our prism hot:\n        const unsub = pr.onStale(() => {})\n        pr.getValue()\n        expect(spy).toHaveBeenCalledTimes(1)\n        spy.mockClear()\n\n        // if the memo's dependencies don't change, the memoized function won't be called again:\n        pr.getValue()\n        expect(spy).toHaveBeenCalledTimes(0)\n\n        // now let's change the atom's value, but not the factorial value:\n        atom.set(11)\n        // our prism _will_ recalculate, but the memoized function won't be called again:\n        expect(pr.getValue()).toBe(\n          'number is 11, num % 10 is 1 and its factorial is 1',\n        )\n        expect(spy).toHaveBeenCalledTimes(0)\n\n        unsub()\n        // and that's how `prism.memo()` works!\n      })\n    })\n    describe(`6.4 - prism.effect() and prism.state()`, () => {\n      // These are two more hooks that are similar to React's `useEffect()` and `useState()` hooks.\n\n      // `prism.effect()` is similar to React's `useEffect()` hook. It allows us to run side-effects when the prism is calculated.\n      // Note that prisms are supposed to be \"virtually\" pure functions. That means they either should not have side-effects (and thus, no calls for `prism.effect()`),\n      // or their side-effects should clean themselves up when the prism goes cold.\n\n      // `prism.state()` is similar to React's `useState()` hook. It allows us to create a stateful value that is scoped to the prism.\n\n      // We'll defer to React's documentation for [a more detailed explanation of how `useEffect()`](https://reactjs.org/docs/hooks-effect.html)\n      // and how [`useState()`](https://reactjs.org/docs/hooks-state.html) work.\n      // But here's a quick example:\n      test(`6.4.1 - Example: using prism.effect() and prism.state()`, () => {\n        jest.useFakeTimers()\n        const events: Array<\n          'effectInstalled' | 'intervalCalled' | 'effectCleanedUp'\n        > = []\n        const pr = prism(() => {\n          const [randomValue, setRandomValue] = prism.state('randomValue', 0)\n\n          // This is only allowed for prisms that are supposed to be hot before their first calculation.\n          // Otherwise it will log a warning and no effect will run.\n          prism.effect(\n            'update-random-value',\n            () => {\n              events.push('effectInstalled')\n              const interval = setInterval(() => {\n                events.push('intervalCalled')\n                setRandomValue(Math.random())\n              }, 1000)\n              return () => {\n                events.push('effectCleanedUp')\n                clearInterval(interval)\n              }\n            },\n            [],\n          )\n          return randomValue\n        })\n\n        // let's make our prism hot:\n        const unsub = pr.onStale(() => {})\n        // which should already have called the effect:\n        expect(events).toEqual(['effectInstalled'])\n        pr.getValue()\n        events.length = 0 // clear the events array\n        // now let's fast-forward the time by 2500ms:\n        jest.advanceTimersByTime(2500)\n        // and we should have seen the interval called twice:\n        expect(events).toEqual(['intervalCalled', 'intervalCalled'])\n        expect(pr.getValue()).toEqual(expect.any(Number))\n        events.length = 0 // clear the events array\n\n        // now let's unsubscribe from the prism:\n        unsub()\n        expect(events).toEqual(['effectCleanedUp'])\n      })\n\n      test('6.4.2 - A more useful example', () => {\n        // This prism holds the current mouse position and updates when the mouse moves\n        const mousePositionPr = prism(() => {\n          const [pos, setPos] = prism.state<[x: number, y: number]>(\n            'pos',\n            [0, 0],\n          )\n\n          prism.effect(\n            'setupListeners',\n            () => {\n              const handleMouseMove = (e: MouseEvent) => {\n                setPos([e.screenX, e.screenY])\n              }\n              document.addEventListener('mousemove', handleMouseMove)\n\n              return () => {\n                document.removeEventListener('mousemove', handleMouseMove)\n              }\n            },\n            [],\n          )\n\n          return pos\n        })\n        // We can't test this since our test environment doesn't have a mouse, but you get the idea :)\n      })\n    })\n\n    test(`6.5 - prism.sub()`, () => {\n      // `prism.sub()` is a shortcut for creating a prism inside another prism.\n      // It's equivalent to calling `prism.memo(key, () => prism(fn), deps).getValue()`.\n      // `prism.sub()` is useful when you want to divide your prism into smaller prisms, each of which\n      // would _only_ recalculate when _certain_ dependencies change. In other words, it's an optimization tool.\n\n      function factorial(num: number): number {\n        if (num === 0) return 1\n        return num * factorial(num - 1)\n      }\n\n      const events: Array<'foo-calculated' | 'bar-calculated'> = []\n\n      // example:\n      const state = new Atom({foo: 0, bar: 0})\n      const pr = prism(() => {\n        const resultOfFoo = prism.sub(\n          'foo',\n          () => {\n            events.push('foo-calculated')\n            const foo = val(state.pointer.foo) % 10\n            // Note how `prism.sub()` is more powerful than `prism.memo()` because it allows us to use `prism.memo()` and other hooks inside of it:\n            return prism.memo('factorial', () => factorial(foo), [foo])\n          },\n          [],\n        )\n        const resultOfBar = prism.sub(\n          'bar',\n          () => {\n            events.push('bar-calculated')\n            const bar = val(state.pointer.bar) % 10\n\n            return prism.memo('factorial', () => factorial(bar), [bar])\n          },\n          [],\n        )\n\n        return `result of foo is ${resultOfFoo}, result of bar is ${resultOfBar}`\n      })\n\n      const unsub = pr.onStale(() => {})\n      // on the first run, both subs should be calculated:\n      expect(events).toEqual(['foo-calculated', 'bar-calculated'])\n      events.length = 0 // clear the events array\n\n      // now if we change the value of `bar`, only `bar` should be recalculated:\n      state.setByPointer(state.pointer.bar, 2)\n      pr.getValue()\n      expect(events).toEqual(['bar-calculated'])\n\n      unsub()\n    })\n\n    test(`6.6 - prism.scope()`, () => {\n      // since prism hooks are keyed (as opposed to React hooks where they're identified by their order),\n      // it's possible to have multiple hooks with the same key in the same prism.\n      // To avoid this, we can use `prism.scope()` to create a \"scope\" for our hooks.\n      // Example:\n      const pr = prism(() => {\n        prism.scope('a', () => {\n          prism.memo('foo', () => 1, [])\n        })\n\n        prism.scope('b', () => {\n          prism.memo('foo', () => 1, [])\n        })\n      })\n    })\n  })\n\n  // What's next?\n  // At this point we have covered all of `@theatre/dataverse`.\n  // If you're planning to use Dataverse with React, have a look at [`@theatre/react`](https://github.com/theatre-js/theatre/tree/main/packages/react)\n  // which provides a React integration for Dataverse as well.\n})\n"
  },
  {
    "path": "packages/dataverse/src/index.ts",
    "content": "/**\n * The animation-optimized FRP library powering the internals of Theatre.js.\n *\n * @packageDocumentation\n */\n\nexport type {PointerToPrismProvider} from './pointerToPrism'\nexport {default as Atom} from './Atom'\nexport {val} from './val'\nexport {pointerToPrism} from './pointerToPrism'\nexport {isPrism} from './prism/Interface'\nexport type {Prism} from './prism/Interface'\nexport {default as iterateAndCountTicks} from './prism/iterateAndCountTicks'\nexport {default as iterateOver} from './prism/iterateOver'\nexport {default as prism} from './prism/prism'\nexport {default as pointer, getPointerParts, isPointer} from './pointer'\nexport type {Pointer, PointerType, PointerMeta} from './pointer'\nexport {default as Ticker} from './Ticker'\nexport {default as PointerProxy} from './PointerProxy'\n// export {default as asyncIterateOver} from './prism/asyncIterateOver'\n"
  },
  {
    "path": "packages/dataverse/src/integration.test.ts",
    "content": "/*\n * @jest-environment jsdom\n */\nimport Atom from './Atom'\nimport {val} from './val'\nimport prism from './prism/prism'\nimport Ticker from './Ticker'\n\ndescribe(`integration`, () => {\n  describe(`identity pointers`, () => {\n    it(`should work`, () => {\n      const data = {foo: 'hi', bar: 0}\n      const a = new Atom(data)\n      const dataP = a.pointer\n      const bar = dataP.bar\n      expect(val(bar)).toEqual(0)\n\n      const d = prism(() => {\n        return val(bar)\n      })\n      expect(d.getValue()).toEqual(0)\n      const ticker = new Ticker()\n      const changes: number[] = []\n      d.onChange(ticker, (c) => {\n        changes.push(c)\n      })\n      a.set({...data, bar: 1})\n      ticker.tick()\n      expect(changes).toHaveLength(1)\n      expect(changes[0]).toEqual(1)\n      a.set({...data, bar: 1})\n      ticker.tick()\n      expect(changes).toHaveLength(1)\n    })\n  })\n})\n"
  },
  {
    "path": "packages/dataverse/src/pointer.test.ts",
    "content": "// eslint-disable-next-line import/no-extraneous-dependencies\nimport {pointer, getPointerParts, Atom} from '@theatre/dataverse'\n\ndescribe(`pointer`, () => {\n  test(`Basic useage of pointer`, async () => {\n    const root = {foo: 'foo', bar: 0}\n    const p = pointer({root: root, path: []})\n\n    const parts = getPointerParts(p)\n    expect(parts.root).toBe(root)\n    expect(parts.path).toEqual([])\n\n    const pointerToFoo = p.foo\n    // p.foo is a pointer to the `foo` property of the root object. its only difference to p is that its path is `['foo']`\n    expect(getPointerParts(pointerToFoo).path).toEqual(['foo'])\n    expect(getPointerParts(pointerToFoo).root).toBe(root)\n\n    // subPointers are cached\n    expect(pointerToFoo).toBe(p.foo)\n\n    // we can also manually construct the pointer to foo:\n    const pointerToFoo2 = pointer({root: root, path: ['foo']})\n    expect(getPointerParts(pointerToFoo2).path).toEqual(['foo'])\n  })\n\n  test(`Well-typed pointers`, () => {\n    type Data = {str: string; foo?: {bar?: {baz: number}}}\n    const root: Data = {str: 'some string'}\n\n    // pointers bocome useful when we properly type them. Let's do that now:\n    const p = pointer<Data>({\n      root,\n      path: [],\n    })\n\n    // or alternatively: `pointer(...) as Pointer<Data>`\n\n    // now typescript will error if we try to access a property that doesn't exist\n    // @ts-expect-error\n    p.baz\n\n    // but it will not error if we access a property that does exist\n    p.foo\n\n    // won't get an error when accessing foo.bar.baz\n    p.foo.bar.baz\n\n    // but will get an error when accessing foo.bar.baz.nonExistentProperty\n    // @ts-ignore\n    p.foo.bar.baz.nonExistentProperty\n\n    // we don't need to manually type the pointer since pointers are usually provided by Atoms, and those are already typed\n    const atom = new Atom(root)\n\n    // so this  will be fine by typescript:\n    atom.pointer.foo.bar.baz\n\n    // while this will error\n    // @ts-ignore\n    atom.pointer.foo.bar.baz.nonExistentProperty\n  })\n})\n"
  },
  {
    "path": "packages/dataverse/src/pointer.ts",
    "content": "import type {$IntentionalAny} from './types'\n\ntype PathToProp = Array<string | number>\n\nexport type PointerMeta = {\n  root: {}\n  path: (string | number)[]\n}\n\n/** We are using an empty object as a WeakMap key for storing pointer meta data */\ntype WeakPointerKey = {}\n\nexport type UnindexableTypesForPointer =\n  | number\n  | string\n  | boolean\n  | null\n  | void\n  | undefined\n  | Function // eslint-disable-line @typescript-eslint/ban-types\n\nexport type UnindexablePointer = {\n  [K in $IntentionalAny]: Pointer<undefined>\n}\n\nconst pointerMetaWeakMap = new WeakMap<WeakPointerKey, PointerMeta>()\nconst cachedSubPathPointersWeakMap = new WeakMap<\n  WeakPointerKey,\n  Map<string | number, Pointer<unknown>>\n>()\n\n/**\n * A wrapper type for the type a `Pointer` points to.\n */\nexport type PointerType<O> = {\n  /**\n   * Only accessible via the type system.\n   * This is a helper for getting the underlying pointer type\n   * via the type space.\n   */\n  $$__pointer_type: O\n}\n\n/**\n * The type of {@link Atom} pointers. See {@link pointer|pointer()} for an\n * explanation of pointers.\n *\n * @see Atom\n *\n * @remarks\n * The Pointer type is quite tricky because it doesn't play well with `any` and other inexact types.\n * Here is an example that one would expect to work, but currently doesn't:\n * ```ts\n * declare function expectAnyPointer(pointer: Pointer<any>): void\n *\n * expectAnyPointer(null as Pointer<{}>) // this shows as a type error because Pointer<{}> is not assignable to Pointer<any>, even though it should\n * ```\n *\n * The current solution is to just avoid using `any` with pointer-related code (or type-test it well).\n * But if you enjoy solving typescript puzzles, consider fixing this :)\n * Potentially, [TypeScript variance annotations in 4.7+](https://devblogs.microsoft.com/typescript/announcing-typescript-4-7-beta/#optional-variance-annotations-for-type-parameters)\n * might be able to help us.\n */\nexport type Pointer<O> = PointerType<O> &\n  // `Exclude<O, undefined>` will remove `undefined` from the first type\n  // `undefined extends O ? undefined : never` will give us `undefined` if `O` is `... | undefined`\n  PointerInner<Exclude<O, undefined>, undefined extends O ? undefined : never>\n\n// By separating the `O` (non-undefined) from the `undefined` or `never`, we\n// can properly use `O extends ...` to determine the kind of potential value\n// without actually discarding optionality information.\ntype PointerInner<O, Optional> = O extends UnindexableTypesForPointer\n  ? UnindexablePointer\n  : unknown extends O\n  ? UnindexablePointer\n  : O extends (infer T)[]\n  ? Pointer<T>[]\n  : O extends {}\n  ? {\n      [K in keyof O]-?: Pointer<O[K] | Optional>\n    }\n  : UnindexablePointer\n\nconst pointerMetaSymbol = Symbol('pointerMeta')\n\nconst proxyHandler = {\n  get(\n    pointerKey: WeakPointerKey,\n    prop: string | typeof pointerMetaSymbol,\n  ): $IntentionalAny {\n    if (prop === pointerMetaSymbol) return pointerMetaWeakMap.get(pointerKey)!\n\n    let subPathPointers = cachedSubPathPointersWeakMap.get(pointerKey)\n    if (!subPathPointers) {\n      subPathPointers = new Map()\n      cachedSubPathPointersWeakMap.set(pointerKey, subPathPointers)\n    }\n\n    const existing = subPathPointers.get(prop)\n    if (existing !== undefined) return existing\n\n    const meta = pointerMetaWeakMap.get(pointerKey)!\n\n    const subPointer = pointer({root: meta.root, path: [...meta.path, prop]})\n    subPathPointers.set(prop, subPointer)\n    return subPointer\n  },\n}\n\n/**\n * Returns the metadata associated with the pointer. Usually the root object and\n * the path.\n *\n * @param p - The pointer.\n */\nexport const getPointerMeta = <_>(p: PointerType<_>): PointerMeta => {\n  // @ts-ignore @todo\n  const meta: PointerMeta = p[\n    pointerMetaSymbol as unknown as $IntentionalAny\n  ] as $IntentionalAny\n  return meta\n}\n\n/**\n * Returns the root object and the path of the pointer.\n *\n * @example\n * ```ts\n * const {root, path} = getPointerParts(pointer)\n * ```\n *\n * @param p - The pointer.\n *\n * @returns An object with two properties: `root`-the root object or the pointer, and `path`-the path of the pointer. `path` is an array of the property-chain.\n */\nexport const getPointerParts = <_>(\n  p: Pointer<_>,\n): {root: {}; path: PathToProp} => {\n  const {root, path} = getPointerMeta(p)\n  return {root, path}\n}\n\n/**\n * Creates a pointer to a (nested) property of an {@link Atom}.\n *\n * @remarks\n * Pointers are used to make prisms of properties or nested properties of\n * {@link Atom|Atoms}.\n *\n * Pointers also allow easy construction of new pointers pointing to nested members\n * of the root object, by simply using property chaining. E.g. `somePointer.a.b` will\n * create a new pointer that has `'a'` and `'b'` added to the path of `somePointer`.\n *\n * @example\n * ```ts\n * // Here, sum is a prism that updates whenever the a or b prop of someAtom does.\n * const sum = prism(() => {\n *   return val(pointer({root: someAtom, path: ['a']})) + val(pointer({root: someAtom, path: ['b']}));\n * });\n *\n * // Note, atoms have a convenience Atom.pointer property that points to the root,\n * // which you would normally use in this situation.\n * const sum = prism(() => {\n *   return val(someAtom.pointer.a) + val(someAtom.pointer.b);\n * });\n * ```\n *\n * @param args - The pointer parameters.\n *\n * @typeParam O - The type of the value being pointed to.\n */\nfunction pointer<O>(args: {root: {}; path?: Array<string | number>}) {\n  const meta: PointerMeta = {\n    root: args.root as $IntentionalAny,\n    path: args.path ?? [],\n  }\n  const pointerKey: WeakPointerKey = {}\n  pointerMetaWeakMap.set(pointerKey, meta)\n  return new Proxy(pointerKey, proxyHandler) as Pointer<O>\n}\n\nexport default pointer\n\n/**\n * Returns whether `p` is a pointer.\n */\nexport const isPointer = (p: $IntentionalAny): p is Pointer<unknown> => {\n  return p && !!getPointerMeta(p)\n}\n"
  },
  {
    "path": "packages/dataverse/src/pointer.typeTest.ts",
    "content": "import type {Pointer, UnindexablePointer} from './pointer'\nimport type {$IntentionalAny} from './types'\n\nconst nominal = Symbol()\ntype Nominal<Name> = string & {[nominal]: Name}\n\ntype Key = Nominal<'key'>\ntype Id = Nominal<'id'>\n\ntype IdObject = {\n  inner: true\n}\n\ntype KeyObject = {\n  inner: {\n    byIds: Partial<Record<Id, IdObject>>\n  }\n}\n\ntype NestedNominalThing = {\n  optional?: true\n  byKeys: Partial<Record<Key, KeyObject>>\n}\n\ninterface TypeError<M> {}\n\ntype Debug<T extends 0> = T\ntype IsTrue<T extends true> = T\ntype IsFalse<F extends false> = F\ntype IsExtends<F, R extends F> = F\ntype IsExactly<F, R extends F> = F extends R\n  ? true\n  : TypeError<[F, 'does not extend', R]>\n\nfunction test() {\n  const p = todo<Pointer<NestedNominalThing>>()\n  const key1 = todo<Key>()\n  const id1 = todo<Id>()\n\n  type A = UnindexablePointer[typeof key1]\n  type BaseChecks = [\n    IsExtends<any, any>,\n    IsExtends<undefined | 1, undefined>,\n    IsExtends<string, Key>,\n    IsTrue<IsExactly<UnindexablePointer[typeof key1], Pointer<undefined>>>,\n    IsTrue<\n      IsExactly<Pointer<undefined | true>['...']['...'], Pointer<undefined>>\n    >,\n    IsTrue<\n      IsExactly<\n        Pointer<Record<Key, true | undefined>>[Key],\n        Pointer<true | undefined>\n      >\n    >,\n    IsTrue<IsExactly<Pointer<undefined>[Key], Pointer<undefined>>>,\n    // Debug<Pointer<undefined | Record<string, true>>[Key]>,\n    IsTrue<IsExactly<Pointer<Record<string, true>>[string], Pointer<true>>>,\n    IsTrue<\n      IsExactly<\n        Pointer<undefined | Record<string, true>>[string],\n        Pointer<true | undefined>\n      >\n    >,\n    IsTrue<\n      IsExactly<\n        Pointer<undefined | Record<Key, true>>[Key],\n        Pointer<true | undefined>\n      >\n    >,\n    // Debug<Pointer<undefined | true>['...']['...']>,\n    // IsFalse<any extends Pointer<undefined | true> ? true : false>,\n    // what extends what\n    IsTrue<1 & undefined extends undefined ? true : false>,\n    IsFalse<1 | undefined extends undefined ? true : false>,\n  ]\n\n  t<Pointer<undefined | true>>() //\n    .isExactly(p.optional).ok\n\n  t<Pointer<undefined | KeyObject>>() //\n    .isExactly(p.byKeys[key1]).ok\n\n  t<Pointer<undefined | KeyObject['inner']>>() //\n    .isExactly(p.byKeys[key1].inner).ok\n\n  t<Pointer<undefined | IdObject>>() //\n    .isExactly(p.byKeys[key1].inner.byIds[id1]).ok\n\n  p.byKeys[key1]\n}\n\nfunction todo<T>(hmm?: TemplateStringsArray): T {\n  return null as $IntentionalAny\n}\nfunction t<T>(): {\n  isExactly<R extends T>(\n    hmm: R,\n  ): T extends R\n    ? // any extends R\n      //   ? TypeError<[R, 'is any']>\n      //   :\n      {ok: true}\n    : TypeError<[T, 'does not extend', R]>\n} {\n  return {isExactly: (hmm) => hmm as $IntentionalAny}\n}\n"
  },
  {
    "path": "packages/dataverse/src/pointerToPrism.ts",
    "content": "import type {Prism} from './prism/Interface'\nimport type {Pointer, PointerType} from './pointer'\nimport {getPointerMeta} from './pointer'\nimport type {$IntentionalAny} from './types'\n\nconst identifyPrismWeakMap = new WeakMap<{}, Prism<unknown>>()\n\n/**\n * Interface for objects that can provide a prism at a certain path.\n */\nexport interface PointerToPrismProvider {\n  /**\n   * @internal\n   * Future: We could consider using a `Symbol.for(\"dataverse/PointerToPrismProvider\")` as a key here, similar to\n   * how {@link Iterable} works for `of`.\n   */\n  readonly $$isPointerToPrismProvider: true\n  /**\n   * Returns a prism of the value at the provided pointer.\n   */\n  pointerToPrism<P>(pointer: Pointer<P>): Prism<P>\n}\n\nexport function isPointerToPrismProvider(\n  val: unknown,\n): val is PointerToPrismProvider {\n  return (\n    typeof val === 'object' &&\n    val !== null &&\n    (val as $IntentionalAny)['$$isPointerToPrismProvider'] === true\n  )\n}\n\n/**\n * Returns a prism of the value at the provided pointer. Prisms are\n * cached per pointer.\n *\n * @param pointer - The pointer to return the prism at.\n */\n\nexport const pointerToPrism = <P extends PointerType<$IntentionalAny>>(\n  pointer: P,\n): Prism<P extends PointerType<infer T> ? T : void> => {\n  const meta = getPointerMeta(pointer)\n\n  let prismInstance = identifyPrismWeakMap.get(meta)\n  if (!prismInstance) {\n    const root = meta.root\n    if (!isPointerToPrismProvider(root)) {\n      throw new Error(\n        `Cannot run pointerToPrism() on a pointer whose root is not an PointerToPrismProvider`,\n      )\n    }\n    prismInstance = root.pointerToPrism(pointer as $IntentionalAny)\n    identifyPrismWeakMap.set(meta, prismInstance)\n  }\n  return prismInstance as $IntentionalAny\n}\n"
  },
  {
    "path": "packages/dataverse/src/prism/Interface.ts",
    "content": "import type Ticker from '../Ticker'\nimport type {$IntentionalAny, VoidFn} from '../types'\n\ntype IDependent = (msgComingFrom: Prism<$IntentionalAny>) => void\n\n/**\n * Common interface for prisms.\n */\nexport interface Prism<V> {\n  /**\n   * Whether the object is a prism.\n   */\n  isPrism: true\n\n  /**\n   * Whether the prism is hot.\n   */\n  isHot: boolean\n\n  /**\n   * Calls `listener` with a fresh value every time the prism _has_ a new value, throttled by Ticker.\n   */\n  onChange(\n    ticker: Ticker,\n    listener: (v: V) => void,\n    immediate?: boolean,\n  ): VoidFn\n\n  onStale(cb: () => void): VoidFn\n\n  /**\n   * Keep the prism hot, even if there are no tappers (subscribers).\n   */\n  keepHot(): VoidFn\n\n  /**\n   * Add a prism as a dependent of this prism.\n   *\n   * @param d - The prism to be made a dependent of this prism.\n   *\n   * @see _removeDependent\n   *\n   * @internal\n   */\n  _addDependent(d: IDependent): void\n\n  /**\n   * Remove a prism as a dependent of this prism.\n   *\n   * @param d - The prism to be removed from as a dependent of this prism.\n   *\n   * @see _addDependent\n   * @internal\n   */\n  _removeDependent(d: IDependent): void\n\n  /**\n   * Gets the current value of the prism. If the value is stale, it causes the prism to freshen.\n   */\n  getValue(): V\n}\n\n/**\n * Returns whether `d` is a prism.\n */\nexport function isPrism(d: any): d is Prism<unknown> {\n  return !!(d && d.isPrism && d.isPrism === true)\n}\n"
  },
  {
    "path": "packages/dataverse/src/prism/asyncIterateOver.ts",
    "content": "// import {pointerToPrism} from '../pointerToPrism'\n// import type {Pointer} from '../pointer'\n// import {isPointer} from '../pointer'\n// import type {Prism} from './Interface'\n// import {isPrism} from './Interface'\n\n// export default async function* asyncIterateOver<V>(\n//   pointerOrPrism: Prism<V> | Pointer<V>,\n// ): AsyncGenerator<V, void, void> {\n//   let d: Prism<V>\n//   if (isPointer(pointerOrPrism)) {\n//     d = pointerToPrism(pointerOrPrism) as Prism<V>\n//   } else if (isPrism(pointerOrPrism)) {\n//     d = pointerOrPrism\n//   } else {\n//     throw new Error(`Only pointers and prisms are supported`)\n//   }\n\n//   const unsub = d.keepHot()\n\n//   let lastValue = d.getValue()\n\n//   yield lastValue\n\n//   try {\n//     while (true) {\n//       const newValue = d.getValue()\n//       if (newValue !== lastValue) {\n//         lastValue = newValue\n//         yield lastValue\n//       } else {\n//         const deferred = defer<V>()\n\n//         const stop = d.onStale(() => {\n//           const newValue = d.getValue()\n//           if (newValue !== lastValue) {\n//             lastValue = newValue\n//             stop()\n//             deferred.resolve(lastValue)\n//           }\n//         })\n\n//         yield deferred.promise\n//       }\n//     }\n//   } finally {\n//     unsub()\n//   }\n// }\n\n// interface Deferred<PromiseType> {\n//   resolve: (d: PromiseType) => void\n//   reject: (d: unknown) => void\n//   promise: Promise<PromiseType>\n//   status: 'pending' | 'resolved' | 'rejected'\n// }\n\n// /**\n//  * A simple imperative API for resolving/rejecting a promise.\n//  *\n//  * Example:\n//  * ```ts\n//  * function doSomethingAsync() {\n//  *  const deferred = defer()\n//  *\n//  *  setTimeout(() => {\n//  *    if (Math.random() > 0.5) {\n//  *      deferred.resolve('success')\n//  *    } else {\n//  *      deferred.reject('Something went wrong')\n//  *    }\n//  *  }, 1000)\n//  *\n//  *  // we're just returning the promise, so that the caller cannot resolve/reject it\n//  *  return deferred.promise\n//  * }\n//  *\n//  * ```\n//  */\n// function defer<PromiseType>(): Deferred<PromiseType> {\n//   let resolve: (d: PromiseType) => void\n//   let reject: (d: unknown) => void\n//   const promise = new Promise<PromiseType>((rs, rj) => {\n//     resolve = (v) => {\n//       rs(v)\n//       deferred.status = 'resolved'\n//     }\n//     reject = (v) => {\n//       rj(v)\n//       deferred.status = 'rejected'\n//     }\n//   })\n\n//   const deferred: Deferred<PromiseType> = {\n//     resolve: resolve!,\n//     reject: reject!,\n//     promise,\n//     status: 'pending',\n//   }\n//   return deferred\n// }\n"
  },
  {
    "path": "packages/dataverse/src/prism/discoveryMechanism.ts",
    "content": "import type {$IntentionalAny} from '../types'\nimport Stack from '../utils/Stack'\nimport type {Prism} from './Interface'\n\nfunction createMechanism() {\n  const noop = () => {}\n\n  const stack = new Stack<Collector>()\n  const noopCollector: Collector = noop\n\n  type Collector = (d: Prism<$IntentionalAny>) => void\n\n  const pushCollector = (collector: Collector): void => {\n    stack.push(collector)\n  }\n\n  const popCollector = (collector: Collector): void => {\n    const existing = stack.peek()\n    if (existing !== collector) {\n      throw new Error(`Popped collector is not on top of the stack`)\n    }\n    stack.pop()\n  }\n\n  const startIgnoringDependencies = () => {\n    stack.push(noopCollector)\n  }\n\n  const stopIgnoringDependencies = () => {\n    if (stack.peek() !== noopCollector) {\n      if (process.env.NODE_ENV === 'development') {\n        console.warn('This should never happen')\n      }\n    } else {\n      stack.pop()\n    }\n  }\n\n  const reportResolutionStart = (d: Prism<$IntentionalAny>) => {\n    const possibleCollector = stack.peek()\n    if (possibleCollector) {\n      possibleCollector(d)\n    }\n\n    stack.push(noopCollector)\n  }\n\n  const reportResolutionEnd = (_d: Prism<$IntentionalAny>) => {\n    stack.pop()\n  }\n\n  return {\n    type: 'Dataverse_discoveryMechanism' as 'Dataverse_discoveryMechanism',\n    startIgnoringDependencies,\n    stopIgnoringDependencies,\n    reportResolutionStart,\n    reportResolutionEnd,\n    pushCollector,\n    popCollector,\n  }\n}\n\nfunction getSharedMechanism(): ReturnType<typeof createMechanism> {\n  const varName = '__dataverse_discoveryMechanism_sharedStack'\n  const root =\n    typeof window !== 'undefined'\n      ? window\n      : typeof global !== 'undefined'\n      ? global\n      : {}\n  if (root) {\n    const existingMechanism: ReturnType<typeof createMechanism> | undefined =\n      // @ts-ignore ignore\n      root[varName]\n    if (\n      existingMechanism &&\n      typeof existingMechanism === 'object' &&\n      existingMechanism.type === 'Dataverse_discoveryMechanism'\n    ) {\n      return existingMechanism\n    } else {\n      const mechanism = createMechanism()\n      // @ts-ignore ignore\n      root[varName] = mechanism\n      return mechanism\n    }\n  } else {\n    return createMechanism()\n  }\n}\n\nexport const {\n  startIgnoringDependencies,\n  stopIgnoringDependencies,\n  reportResolutionEnd,\n  reportResolutionStart,\n  pushCollector,\n  popCollector,\n} = getSharedMechanism()\n"
  },
  {
    "path": "packages/dataverse/src/prism/iterateAndCountTicks.ts",
    "content": "import {pointerToPrism} from '../pointerToPrism'\nimport type {Pointer} from '../pointer'\nimport {isPointer} from '../pointer'\nimport type {Prism} from './Interface'\nimport {isPrism} from './Interface'\n\nexport default function* iterateAndCountTicks<V>(\n  pointerOrPrism: Prism<V> | Pointer<V>,\n): Generator<{value: V; ticks: number}, void, void> {\n  let d\n  if (isPointer(pointerOrPrism)) {\n    d = pointerToPrism(pointerOrPrism) as Prism<V>\n  } else if (isPrism(pointerOrPrism)) {\n    d = pointerOrPrism\n  } else {\n    throw new Error(`Only pointers and prisms are supported`)\n  }\n\n  let ticksCountedSinceLastYield = 0\n  const untap = d.onStale(() => {\n    ticksCountedSinceLastYield++\n  })\n\n  try {\n    while (true) {\n      const ticks = ticksCountedSinceLastYield\n      ticksCountedSinceLastYield = 0\n      yield {value: d.getValue(), ticks}\n    }\n  } finally {\n    untap()\n  }\n}\n"
  },
  {
    "path": "packages/dataverse/src/prism/iterateOver.test.ts",
    "content": "/*\n * @jest-environment jsdom\n */\nimport Atom from '../Atom'\nimport iterateOver from './iterateOver'\n\ndescribe(`iterateOver()`, () => {\n  test('it should work', () => {\n    const a = new Atom(0)\n    let iter = iterateOver(a.pointer)\n    expect(iter.next().value).toEqual(0)\n    a.set(1)\n    a.set(2)\n    expect(iter.next()).toMatchObject({value: 2, done: false})\n    iter.return()\n    iter = iterateOver(a.pointer)\n    expect(iter.next().value).toEqual(2)\n    a.set(3)\n    expect(iter.next()).toMatchObject({done: false, value: 3})\n    iter.return()\n  })\n})\n"
  },
  {
    "path": "packages/dataverse/src/prism/iterateOver.ts",
    "content": "import {pointerToPrism} from '../pointerToPrism'\nimport type {Pointer} from '../pointer'\nimport {isPointer} from '../pointer'\nimport Ticker from '../Ticker'\nimport type {Prism} from './Interface'\nimport {isPrism} from './Interface'\n\nexport default function* iterateOver<V>(\n  pointerOrPrism: Prism<V> | Pointer<V>,\n): Generator<V, void, void> {\n  let d\n  if (isPointer(pointerOrPrism)) {\n    d = pointerToPrism(pointerOrPrism) as Prism<V>\n  } else if (isPrism(pointerOrPrism)) {\n    d = pointerOrPrism\n  } else {\n    throw new Error(`Only pointers and prisms are supported`)\n  }\n\n  const ticker = new Ticker()\n\n  const untap = d.onChange(ticker, (v) => {})\n\n  try {\n    while (true) {\n      ticker.tick()\n\n      yield d.getValue()\n    }\n  } finally {\n    untap()\n  }\n}\n"
  },
  {
    "path": "packages/dataverse/src/prism/prism.test.ts",
    "content": "/*\n * @jest-environment jsdom\n */\nimport Atom from '../Atom'\nimport {val} from '../val'\nimport Ticker from '../Ticker'\nimport type {$FixMe, $IntentionalAny} from '../types'\nimport iterateAndCountTicks from './iterateAndCountTicks'\nimport prism from './prism'\n\ndescribe('prism', () => {\n  let ticker: Ticker\n  beforeEach(() => {\n    ticker = new Ticker()\n  })\n\n  it('should work', () => {\n    const o = new Atom({foo: 'foo'})\n    const d = prism(() => {\n      return val(o.pointer.foo) + 'boo'\n    })\n    expect(d.getValue()).toEqual('fooboo')\n\n    const changes: Array<$FixMe> = []\n    d.onChange(ticker, (c) => {\n      changes.push(c)\n    })\n\n    o.reduce(({foo}) => ({foo: 'foo2'}))\n    ticker.tick()\n    expect(changes).toMatchObject(['foo2boo'])\n  })\n  it('should only collect immediate dependencies', () => {\n    const aD = prism(() => 1)\n    const bD = prism(() => aD.getValue() * 2)\n    const cD = prism(() => {\n      return bD.getValue()\n    })\n    expect(cD.getValue()).toEqual(2)\n    const unsubscribe = cD.keepHot()\n    expect((cD as $IntentionalAny)._state.handle._dependencies.size).toEqual(1)\n    unsubscribe()\n  })\n\n  describe('prism.ref()', () => {\n    it('should work', () => {\n      const theAtom: Atom<number> = new Atom(2)\n\n      const isEvenD = prism((): {isEven: boolean} => {\n        const ref = prism.ref<{isEven: boolean} | undefined>('cache', undefined)\n        const currentN = val(theAtom.pointer)\n\n        const isEven = currentN % 2 === 0\n        if (ref.current && ref.current.isEven === isEven) {\n          return ref.current\n        } else {\n          ref.current = {isEven}\n          return ref.current\n        }\n      })\n\n      const iterator = iterateAndCountTicks(isEvenD)\n\n      theAtom.reduce(() => 3)\n\n      expect(iterator.next().value).toMatchObject({\n        value: {isEven: false},\n        ticks: 0,\n      })\n      theAtom.reduce(() => 5)\n      theAtom.reduce(() => 7)\n      expect(iterator.next().value).toMatchObject({\n        value: {isEven: false},\n        ticks: 1,\n      })\n      theAtom.reduce(() => 2)\n      theAtom.reduce(() => 4)\n      expect(iterator.next().value).toMatchObject({\n        value: {isEven: true},\n        ticks: 1,\n      })\n      expect(iterator.next().value).toMatchObject({\n        value: {isEven: true},\n        ticks: 0,\n      })\n    })\n  })\n\n  describe('prism.effect()', () => {\n    it('should work', async () => {\n      let iteration = 0\n      const sequence: unknown[] = []\n      let deps: unknown[] = []\n\n      const a = new Atom('a')\n\n      const prsm = prism(() => {\n        const n = val(a.pointer)\n        const iterationAtTimeOfCall = iteration\n        sequence.push({prismCall: iterationAtTimeOfCall})\n\n        prism.effect(\n          'f',\n          () => {\n            sequence.push({effectCall: iterationAtTimeOfCall})\n            return () => {\n              sequence.push({cleanupCall: iterationAtTimeOfCall})\n            }\n          },\n          [...deps],\n        )\n\n        return n\n      })\n\n      const untap = prsm.onChange(ticker, (change) => {\n        sequence.push({change})\n      })\n\n      expect(sequence).toMatchObject([{prismCall: 0}, {effectCall: 0}])\n      sequence.length = 0\n\n      iteration++\n      a.set('b')\n      ticker.tick()\n      expect(sequence).toMatchObject([{prismCall: 1}, {change: 'b'}])\n      sequence.length = 0\n\n      deps = [1]\n      iteration++\n      a.set('c')\n      ticker.tick()\n      expect(sequence).toMatchObject([\n        {prismCall: 2},\n        {cleanupCall: 0},\n        {effectCall: 2},\n        {change: 'c'},\n      ])\n      sequence.length = 0\n\n      untap()\n\n      // takes a tick before untap takes effect\n      await new Promise((resolve) => setTimeout(resolve, 1))\n      expect(sequence).toMatchObject([{cleanupCall: 2}])\n    })\n  })\n\n  describe('prism.memo()', () => {\n    it('should work', async () => {\n      let iteration = 0\n      const sequence: unknown[] = []\n      let deps: unknown[] = []\n\n      const a = new Atom('a')\n\n      const prsm = prism(() => {\n        const n = val(a.pointer)\n        const iterationAtTimeOfCall = iteration\n        sequence.push({prismCall: iterationAtTimeOfCall})\n\n        const resultOfMemo = prism.memo(\n          'memo',\n          () => {\n            sequence.push({memoCall: iterationAtTimeOfCall})\n            return iterationAtTimeOfCall\n          },\n          [...deps],\n        )\n\n        sequence.push({resultOfMemo})\n\n        return n\n      })\n\n      const untap = prsm.onChange(ticker, (change) => {\n        sequence.push({change})\n      })\n\n      expect(sequence).toMatchObject([\n        {prismCall: 0},\n        {memoCall: 0},\n        {resultOfMemo: 0},\n      ])\n      sequence.length = 0\n\n      iteration++\n      a.set('b')\n      ticker.tick()\n      expect(sequence).toMatchObject([\n        {prismCall: 1},\n        {resultOfMemo: 0},\n        {change: 'b'},\n      ])\n      sequence.length = 0\n\n      deps = [1]\n      iteration++\n      a.set('c')\n      ticker.tick()\n      expect(sequence).toMatchObject([\n        {prismCall: 2},\n        {memoCall: 2},\n        {resultOfMemo: 2},\n        {change: 'c'},\n      ])\n      sequence.length = 0\n\n      untap()\n    })\n  })\n\n  describe(`prism.scope()`, () => {\n    it('should prevent name conflicts', () => {\n      const d = prism(() => {\n        const thisNameWillBeUsedForBothMemos = 'blah'\n        const a = prism.scope('a', () => {\n          return prism.memo(thisNameWillBeUsedForBothMemos, () => 'a', [])\n        })\n\n        const b = prism.scope('b', () => {\n          return prism.memo(thisNameWillBeUsedForBothMemos, () => 'b', [])\n        })\n\n        return {a, b}\n      })\n      expect(d.getValue()).toMatchObject({a: 'a', b: 'b'})\n    })\n  })\n})\n"
  },
  {
    "path": "packages/dataverse/src/prism/prism.ts",
    "content": "import type Ticker from '../Ticker'\nimport type {$IntentionalAny, VoidFn} from '../types'\nimport Stack from '../utils/Stack'\nimport type {Prism} from './Interface'\nimport {isPrism} from './Interface'\nimport {\n  startIgnoringDependencies,\n  stopIgnoringDependencies,\n  pushCollector,\n  popCollector,\n  reportResolutionStart,\n  reportResolutionEnd,\n} from './discoveryMechanism'\n\ntype IDependent = (msgComingFrom: Prism<$IntentionalAny>) => void\n\nconst voidFn = () => {}\n\nclass HotHandle<V> {\n  private _didMarkDependentsAsStale: boolean = false\n  private _isFresh: boolean = false\n  protected _cacheOfDendencyValues: Map<Prism<unknown>, unknown> = new Map()\n\n  /**\n   * @internal\n   */\n  protected _dependents: Set<IDependent> = new Set()\n\n  /**\n   * @internal\n   */\n  protected _dependencies: Set<Prism<$IntentionalAny>> = new Set()\n\n  protected _possiblyStaleDeps = new Set<Prism<unknown>>()\n\n  private _scope: HotScope = new HotScope(\n    this as $IntentionalAny as HotHandle<unknown>,\n  )\n\n  /**\n   * @internal\n   */\n  protected _lastValue: undefined | V = undefined\n\n  /**\n   * If true, the prism is stale even though its dependencies aren't\n   * marked as such. This is used by `prism.source()` and `prism.state()`\n   * to mark the prism as stale.\n   */\n  private _forciblySetToStale: boolean = false\n\n  constructor(\n    private readonly _fn: () => V,\n    private readonly _prismInstance: PrismInstance<V>,\n  ) {\n    for (const d of this._dependencies) {\n      d._addDependent(this._reactToDependencyGoingStale)\n    }\n\n    startIgnoringDependencies()\n    this.getValue()\n    stopIgnoringDependencies()\n  }\n\n  get hasDependents(): boolean {\n    return this._dependents.size > 0\n  }\n  removeDependent(d: IDependent) {\n    this._dependents.delete(d)\n  }\n  addDependent(d: IDependent) {\n    this._dependents.add(d)\n  }\n\n  destroy() {\n    for (const d of this._dependencies) {\n      d._removeDependent(this._reactToDependencyGoingStale)\n    }\n    cleanupScopeStack(this._scope)\n  }\n\n  getValue(): V {\n    if (!this._isFresh) {\n      const newValue = this._recalculate()\n      this._lastValue = newValue\n      this._isFresh = true\n      this._didMarkDependentsAsStale = false\n      this._forciblySetToStale = false\n    }\n    return this._lastValue!\n  }\n\n  _recalculate() {\n    let value: V\n\n    if (!this._forciblySetToStale) {\n      if (this._possiblyStaleDeps.size > 0) {\n        let anActuallyStaleDepWasFound = false\n        startIgnoringDependencies()\n        for (const dep of this._possiblyStaleDeps) {\n          if (this._cacheOfDendencyValues.get(dep) !== dep.getValue()) {\n            anActuallyStaleDepWasFound = true\n            break\n          }\n        }\n        stopIgnoringDependencies()\n        this._possiblyStaleDeps.clear()\n        if (!anActuallyStaleDepWasFound) {\n          return this._lastValue!\n        }\n      }\n    }\n\n    const newDeps: Set<Prism<unknown>> = new Set()\n    this._cacheOfDendencyValues.clear()\n\n    const collector = (observedDep: Prism<unknown>): void => {\n      newDeps.add(observedDep)\n      this._addDependency(observedDep)\n    }\n\n    pushCollector(collector)\n\n    hookScopeStack.push(this._scope)\n    try {\n      value = this._fn()\n    } catch (error) {\n      console.error(error)\n    } finally {\n      const topOfTheStack = hookScopeStack.pop()\n      if (topOfTheStack !== this._scope) {\n        console.warn(\n          // @todo guide the user to report the bug in an issue\n          `The Prism hook stack has slipped. This is a bug.`,\n        )\n      }\n    }\n\n    popCollector(collector)\n\n    for (const dep of this._dependencies) {\n      if (!newDeps.has(dep)) {\n        this._removeDependency(dep)\n      }\n    }\n\n    this._dependencies = newDeps\n\n    startIgnoringDependencies()\n    for (const dep of newDeps) {\n      this._cacheOfDendencyValues.set(dep, dep.getValue())\n    }\n    stopIgnoringDependencies()\n\n    return value!\n  }\n\n  forceStale() {\n    this._forciblySetToStale = true\n    this._markAsStale()\n  }\n\n  protected _reactToDependencyGoingStale = (which: Prism<$IntentionalAny>) => {\n    this._possiblyStaleDeps.add(which)\n\n    this._markAsStale()\n  }\n\n  private _markAsStale() {\n    if (this._didMarkDependentsAsStale) return\n\n    this._didMarkDependentsAsStale = true\n    this._isFresh = false\n\n    for (const dependent of this._dependents) {\n      dependent(this._prismInstance)\n    }\n  }\n\n  /**\n   * @internal\n   */\n  protected _addDependency(d: Prism<$IntentionalAny>) {\n    if (this._dependencies.has(d)) return\n    this._dependencies.add(d)\n    d._addDependent(this._reactToDependencyGoingStale)\n  }\n\n  /**\n   * @internal\n   */\n  protected _removeDependency(d: Prism<$IntentionalAny>) {\n    if (!this._dependencies.has(d)) return\n    this._dependencies.delete(d)\n    d._removeDependent(this._reactToDependencyGoingStale)\n  }\n}\n\nconst emptyObject = {}\n\nclass PrismInstance<V> implements Prism<V> {\n  /**\n   * Whether the object is a prism.\n   */\n  readonly isPrism: true = true\n\n  private _state:\n    | {hot: false; handle: undefined}\n    | {hot: true; handle: HotHandle<V>} = {\n    hot: false,\n    handle: undefined,\n  }\n\n  constructor(private readonly _fn: () => V) {}\n\n  /**\n   * Whether the prism is hot.\n   */\n  get isHot(): boolean {\n    return this._state.hot\n  }\n\n  onChange(\n    ticker: Ticker,\n    listener: (v: V) => void,\n    immediate: boolean = false,\n  ): VoidFn {\n    // the prism will call this function every time it goes from fresh to stale\n    const dependent = () => {\n      // schedule the listener to be called on the next tick, unless\n      // we're already on a tick, in which case it'll be called on the current tick.\n      ticker.onThisOrNextTick(refresh)\n    }\n\n    // let's cache the last value so we don't call the listener if the value hasn't changed\n    let lastValue: V | typeof emptyObject =\n      // use an empty object as the initial value so that the listener is called on the first tick.\n      // if we were to use, say, undefined, and this.getValue() also returned undefined, the listener\n      // would never be called.\n      emptyObject\n\n    // this function will be _scheduled_ to be called on the currently running, or next tick,\n    // after the prism has gone from fresh to stale.\n    const refresh = () => {\n      const newValue = this.getValue()\n      // if the value hasn't changed, don't call the listener\n      if (newValue === lastValue) return\n\n      // the value has changed - cache it\n      lastValue = newValue\n\n      // and let the listener know\n      listener(newValue)\n    }\n\n    // add the dependent to the prism's list of dependents (which will make it go hot)\n    this._addDependent(dependent)\n\n    // if the caller wants the listener to be called immediately, call it now\n    if (immediate) {\n      lastValue = this.getValue()\n      listener(lastValue as $IntentionalAny as V)\n    }\n\n    // the unsubscribe function\n    const unsubscribe = () => {\n      // remove the dependent from the prism's list of dependents (and if it was the last dependent, the prism will go cold)\n      this._removeDependent(dependent)\n      // in case we're scheduled for a tick, cancel that\n      ticker.offThisOrNextTick(refresh)\n      ticker.offNextTick(refresh)\n    }\n\n    return unsubscribe\n  }\n\n  /**\n   * Calls `callback` every time the prism's state goes from `fresh-\\>stale.` Returns an `unsubscribe()` function.\n   */\n  onStale(callback: () => void): VoidFn {\n    const untap = () => {\n      this._removeDependent(onStaleCallback)\n    }\n    const onStaleCallback = () => callback()\n    this._addDependent(onStaleCallback)\n    return untap\n  }\n\n  /**\n   * Keep the prism hot, even if there are no tappers (subscribers).\n   */\n  keepHot() {\n    return this.onStale(() => {})\n  }\n\n  /**\n   * Add a prism as a dependent of this prism.\n   *\n   * @param d - The prism to be made a dependent of this prism.\n   *\n   * @see _removeDependent\n   */\n  _addDependent(d: IDependent) {\n    if (!this._state.hot) {\n      this._goHot()\n    }\n    this._state.handle!.addDependent(d)\n  }\n\n  private _goHot() {\n    const hotHandle = new HotHandle(this._fn, this)\n    this._state = {\n      hot: true,\n      handle: hotHandle,\n    }\n  }\n\n  /**\n   * Remove a prism as a dependent of this prism.\n   *\n   * @param d - The prism to be removed from as a dependent of this prism.\n   *\n   * @see _addDependent\n   */\n  _removeDependent(d: IDependent) {\n    const state = this._state\n    if (!state.hot) {\n      return\n    }\n    const handle = state.handle\n    handle.removeDependent(d)\n    if (!handle.hasDependents) {\n      this._state = {hot: false, handle: undefined}\n      handle.destroy()\n    }\n  }\n\n  /**\n   * Gets the current value of the prism. If the value is stale, it causes the prism to freshen.\n   */\n  getValue(): V {\n    /**\n     * TODO We should prevent (or warn about) a common mistake users make, which is reading the value of\n     * a prism in the body of a react component (e.g. `der.getValue()` (often via `val()`) instead of `useVal()`\n     * or `uesPrism()`).\n     *\n     * Although that's the most common example of this mistake, you can also find it outside of react components.\n     * Basically the user runs `der.getValue()` assuming the read is detected by a wrapping prism when it's not.\n     *\n     * Sometiems the prism isn't even hot when the user assumes it is.\n     *\n     * We can fix this type of mistake by:\n     * 1. Warning the user when they call `getValue()` on a cold prism.\n     * 2. Warning the user about calling `getValue()` on a hot-but-stale prism\n     *    if `getValue()` isn't called by a known mechanism like a `PrismEmitter`.\n     *\n     * Design constraints:\n     * - This fix should not have a perf-penalty in production. Perhaps use a global flag + `process.env.NODE_ENV !== 'production'`\n     *   to enable it.\n     * - In the case of `onStale()`, we don't control when the user calls\n     *   `getValue()` (as opposed to `onChange()` which calls `getValue()` directly).\n     *   Perhaps we can disable the check in that case.\n     * - Probably the best place to add this check is right here in this method plus some changes to `reportResulutionStart()`,\n     *   which would have to be changed to let the caller know if there is an actual collector (a prism)\n     *   present in its stack.\n     */\n    reportResolutionStart(this)\n\n    const state = this._state\n\n    let val: V\n    if (state.hot) {\n      val = state.handle.getValue()\n    } else {\n      val = calculateColdPrism(this._fn)\n    }\n\n    reportResolutionEnd(this)\n    return val\n  }\n}\n\ninterface PrismScope {\n  effect(key: string, cb: () => () => void, deps?: unknown[]): void\n  memo<T>(\n    key: string,\n    fn: () => T,\n    deps: undefined | $IntentionalAny[] | ReadonlyArray<$IntentionalAny>,\n  ): T\n  state<T>(key: string, initialValue: T): [T, (val: T) => void]\n  ref<T>(key: string, initialValue: T): IRef<T>\n  sub(key: string): PrismScope\n  source<V>(subscribe: (fn: (val: V) => void) => VoidFn, getValue: () => V): V\n}\n\nclass HotScope implements PrismScope {\n  constructor(private readonly _hotHandle: HotHandle<unknown>) {}\n\n  protected readonly _refs: Map<string, IRef<unknown>> = new Map()\n  ref<T>(key: string, initialValue: T): IRef<T> {\n    let ref = this._refs.get(key)\n    if (ref !== undefined) {\n      return ref as $IntentionalAny as IRef<T>\n    } else {\n      const ref = {\n        current: initialValue,\n      }\n      this._refs.set(key, ref)\n      return ref\n    }\n  }\n  isPrismScope = true\n\n  // NOTE probably not a great idea to eager-allocate all of these objects/maps for every scope,\n  // especially because most wouldn't get used in the majority of cases. However, back when these\n  // were stored on weakmaps, they were uncomfortable to inspect in the debugger.\n  readonly subs: Record<string, HotScope> = {}\n  readonly effects: Map<string, IEffect> = new Map()\n\n  effect(key: string, cb: () => () => void, deps?: unknown[]): void {\n    let effect = this.effects.get(key)\n    if (effect === undefined) {\n      effect = {\n        cleanup: voidFn,\n        deps: undefined,\n      }\n      this.effects.set(key, effect)\n    }\n\n    if (depsHaveChanged(effect.deps, deps)) {\n      effect.cleanup()\n\n      startIgnoringDependencies()\n      effect.cleanup = safelyRun(cb, voidFn).value\n      stopIgnoringDependencies()\n      effect.deps = deps\n    }\n    /**\n     * TODO: we should cleanup dangling effects too.\n     * Example:\n     * ```ts\n     * let i = 0\n     * prism(() => {\n     *   if (i === 0) prism.effect(\"this effect will only run once\", () => {}, [])\n     *   i++\n     * })\n     * ```\n     */\n  }\n\n  readonly memos: Map<string, IMemo> = new Map()\n\n  memo<T>(\n    key: string,\n    fn: () => T,\n    deps: undefined | $IntentionalAny[] | ReadonlyArray<$IntentionalAny>,\n  ): T {\n    let memo = this.memos.get(key)\n    if (memo === undefined) {\n      memo = {\n        cachedValue: null,\n        // undefined will always indicate \"deps have changed\", so we set its initial value as such\n        deps: undefined,\n      }\n      this.memos.set(key, memo)\n    }\n\n    if (depsHaveChanged(memo.deps, deps)) {\n      startIgnoringDependencies()\n\n      memo.cachedValue = safelyRun(fn, undefined).value\n      stopIgnoringDependencies()\n      memo.deps = deps\n    }\n\n    return memo.cachedValue as $IntentionalAny as T\n  }\n\n  state<T>(key: string, initialValue: T): [T, (val: T) => void] {\n    const {value, setValue} = this.memo(\n      'state/' + key,\n      () => {\n        const value = {current: initialValue}\n        const setValue = (newValue: T) => {\n          value.current = newValue\n          this._hotHandle.forceStale()\n        }\n        return {value, setValue}\n      },\n      [],\n    )\n\n    return [value.current, setValue]\n  }\n\n  sub(key: string): HotScope {\n    if (!this.subs[key]) {\n      this.subs[key] = new HotScope(this._hotHandle)\n    }\n    return this.subs[key]\n  }\n\n  cleanupEffects() {\n    for (const effect of this.effects.values()) {\n      safelyRun(effect.cleanup, undefined)\n    }\n    this.effects.clear()\n  }\n\n  source<V>(subscribe: (fn: (val: V) => void) => VoidFn, getValue: () => V): V {\n    const sourceKey = '$$source/blah'\n    this.effect(\n      sourceKey,\n      () => {\n        const unsub = subscribe(() => {\n          this._hotHandle.forceStale()\n        })\n        return unsub\n      },\n      [subscribe],\n    )\n    return getValue()\n  }\n}\n\nfunction cleanupScopeStack(scope: HotScope) {\n  for (const sub of Object.values(scope.subs)) {\n    cleanupScopeStack(sub)\n  }\n  scope.cleanupEffects()\n}\n\nfunction safelyRun<T, U>(\n  fn: () => T,\n  returnValueInCaseOfError: U,\n): {ok: true; value: T} | {ok: false; value: U} {\n  try {\n    return {value: fn(), ok: true}\n  } catch (error) {\n    // Naming this function can allow the error reporter additional context to the user on where this error came from\n    setTimeout(function PrismReportThrow() {\n      // ensure that the error gets reported, but does not crash the current execution scope\n      throw error\n    })\n    return {value: returnValueInCaseOfError, ok: false}\n  }\n}\n\nconst hookScopeStack = new Stack<PrismScope>()\n\ntype IRef<T> = {\n  current: T\n}\n\ntype IEffect = {\n  deps: undefined | unknown[]\n  cleanup: VoidFn\n}\n\ntype IMemo = {\n  deps: undefined | unknown[] | ReadonlyArray<unknown>\n  cachedValue: unknown\n}\n\n/**\n * Just like React's `useRef()`, `prism.ref()` allows us to create a prism that holds a reference to some value.\n * The only difference is that `prism.ref()` requires a key to be passed into it, whlie `useRef()` doesn't.\n * This means that we can call `prism.ref()` in any order, and we can call it multiple times with the same key.\n * @param key - The key for the ref. Should be unique inside of the prism.\n * @param initialValue - The initial value for the ref.\n * @returns `{current: V}` - The ref object.\n *\n * Note that the ref object will always return its initial value if the prism is cold. It'll only record\n * its current value if the prism is hot (and will forget again if the prism goes cold again).\n *\n * @example\n * ```ts\n * const pr = prism(() => {\n *   const ref1 = prism.ref(\"ref1\", 0)\n *   console.log(ref1.current) // will print 0, and if the prism is hot, it'll print the current value\n *   ref1.current++ // changing the current value of the ref\n * })\n * ```\n */\nfunction ref<T>(key: string, initialValue: T): IRef<T> {\n  const scope = hookScopeStack.peek()\n  if (!scope) {\n    throw new Error(`prism.ref() is called outside of a prism() call.`)\n  }\n\n  return scope.ref(key, initialValue)\n}\n\n/**\n * An effect hook, similar to React's `useEffect()`, but is not sensitive to call order by using `key`.\n *\n * @param key - the key for the effect. Should be uniqe inside of the prism.\n * @param cb - the callback function. Requires returning a cleanup function.\n * @param deps - the dependency array\n */\nfunction effect(key: string, cb: () => () => void, deps?: unknown[]): void {\n  const scope = hookScopeStack.peek()\n  if (!scope) {\n    throw new Error(`prism.effect() is called outside of a prism() call.`)\n  }\n\n  return scope.effect(key, cb, deps)\n}\n\nfunction depsHaveChanged(\n  oldDeps: undefined | unknown[] | ReadonlyArray<unknown>,\n  newDeps: undefined | unknown[] | ReadonlyArray<unknown>,\n): boolean {\n  if (oldDeps === undefined || newDeps === undefined) {\n    return true\n  }\n\n  const len = oldDeps.length\n  if (len !== newDeps.length) return true\n\n  for (let i = 0; i < len; i++) {\n    if (oldDeps[i] !== newDeps[i]) return true\n  }\n\n  return false\n}\n\n/**\n * `prism.memo()` works just like React's `useMemo()` hook. It's a way to cache the result of a function call.\n * The only difference is that `prism.memo()` requires a key to be passed into it, whlie `useMemo()` doesn't.\n * This means that we can call `prism.memo()` in any order, and we can call it multiple times with the same key.\n *\n * @param key - The key for the memo. Should be unique inside of the prism\n * @param fn - The function to memoize\n * @param deps - The dependency array. Provide `[]` if you want to the value to be memoized only once and never re-calculated.\n * @returns The result of the function call\n *\n * @example\n * ```ts\n * const pr = prism(() => {\n *  const memoizedReturnValueOfExpensiveFn = prism.memo(\"memo1\", expensiveFn, [])\n * })\n * ```\n */\nfunction memo<T>(\n  key: string,\n  fn: () => T,\n  deps: undefined | $IntentionalAny[] | ReadonlyArray<$IntentionalAny>,\n): T {\n  const scope = hookScopeStack.peek()\n  if (!scope) {\n    throw new Error(`prism.memo() is called outside of a prism() call.`)\n  }\n\n  return scope.memo(key, fn, deps)\n}\n\n/**\n * A state hook, similar to react's `useState()`.\n *\n * @param key - the key for the state\n * @param initialValue - the initial value\n * @returns [currentState, setState]\n *\n * @example\n * ```ts\n * import {prism} from 'dataverse'\n *\n * // This prism holds the current mouse position and updates when the mouse moves\n * const mousePositionD = prism(() => {\n *   const [pos, setPos] = prism.state<[x: number, y: number]>('pos', [0, 0])\n *\n *   prism.effect(\n *     'setupListeners',\n *     () => {\n *       const handleMouseMove = (e: MouseEvent) => {\n *         setPos([e.screenX, e.screenY])\n *       }\n *       document.addEventListener('mousemove', handleMouseMove)\n *\n *       return () => {\n *         document.removeEventListener('mousemove', handleMouseMove)\n *       }\n *     },\n *     [],\n *   )\n *\n *   return pos\n * })\n * ```\n */\nfunction state<T>(key: string, initialValue: T): [T, (val: T) => void] {\n  const scope = hookScopeStack.peek()\n  if (!scope) {\n    throw new Error(`prism.state() is called outside of a prism() call.`)\n  }\n\n  return scope.state(key, initialValue)\n}\n\n/**\n * This is useful to make sure your code is running inside a `prism()` call.\n *\n * @example\n * ```ts\n * import {prism} from '@theatre/dataverse'\n *\n * function onlyUsefulInAPrism() {\n *   prism.ensurePrism()\n * }\n *\n * prism(() => {\n *   onlyUsefulInAPrism() // will run fine\n * })\n *\n * setTimeout(() => {\n *   onlyUsefulInAPrism() // throws an error\n *   console.log('This will never get logged')\n * }, 0)\n * ```\n */\nfunction ensurePrism(): void {\n  const scope = hookScopeStack.peek()\n  if (!scope) {\n    throw new Error(`The parent function is called outside of a prism() call.`)\n  }\n}\n\nfunction scope<T>(key: string, fn: () => T): T {\n  const parentScope = hookScopeStack.peek()\n  if (!parentScope) {\n    throw new Error(`prism.scope() is called outside of a prism() call.`)\n  }\n  const subScope = parentScope.sub(key)\n  hookScopeStack.push(subScope)\n  const ret = safelyRun(fn, undefined).value\n  hookScopeStack.pop()\n  return ret as $IntentionalAny as T\n}\n\n/**\n * Just an alias for `prism.memo(key, () => prism(fn), deps).getValue()`. It creates a new prism, memoizes it, and returns the value.\n * `prism.sub()` is useful when you want to divide your prism into smaller prisms, each of which\n * would _only_ recalculate when _certain_ dependencies change. In other words, it's an optimization tool.\n *\n * @param key - The key for the memo. Should be unique inside of the prism\n * @param fn - The function to run inside the prism\n * @param deps - The dependency array. Provide `[]` if you want to the value to be memoized only once and never re-calculated.\n * @returns The value of the inner prism\n */\nfunction sub<T>(\n  key: string,\n  fn: () => T,\n  deps: undefined | $IntentionalAny[],\n): T {\n  return memo(key, () => prism(fn), deps).getValue()\n}\n\n/**\n * @returns true if the current function is running inside a `prism()` call.\n */\nfunction inPrism(): boolean {\n  return !!hookScopeStack.peek()\n}\n\nconst possiblePrismToValue = <P extends Prism<$IntentionalAny> | unknown>(\n  input: P,\n): P extends Prism<infer T> ? T : P => {\n  if (isPrism(input)) {\n    return input.getValue() as $IntentionalAny\n  } else {\n    return input as $IntentionalAny\n  }\n}\n\n/**\n * `prism.source()`  allow a prism to react to changes in some external source (other than other prisms).\n * For example, `Atom.pointerToPrism()` uses `prism.source()` to create a prism that reacts to changes in the atom's value.\n \n * @param subscribe - The prism will call this function as soon as the prism goes hot. This function should return an unsubscribe function function which the prism will call when it goes cold.\n * @param getValue - A function that returns the current value of the external source.\n * @returns The current value of the source\n * \n * Example:\n * ```ts\n * function prismFromInputElement(input: HTMLInputElement): Prism<string> {\n *   function listen(cb: (value: string) => void) {\n *     const listener = () => {\n *       cb(input.value)\n *     }\n *     input.addEventListener('input', listener)\n *     return () => {\n *       input.removeEventListener('input', listener)\n *     }\n *   }\n *   \n *   function get() {\n *     return input.value\n *   }\n *   return prism(() => prism.source(listen, get))\n * }\n * ```\n */\nfunction source<V>(\n  subscribe: (fn: (val: V) => void) => VoidFn,\n  getValue: () => V,\n): V {\n  const scope = hookScopeStack.peek()\n  if (!scope) {\n    throw new Error(`prism.source() is called outside of a prism() call.`)\n  }\n\n  return scope.source(subscribe, getValue)\n}\n\ntype IPrismFn = {\n  <T>(fn: () => T): Prism<T>\n  ref: typeof ref\n  effect: typeof effect\n  memo: typeof memo\n  ensurePrism: typeof ensurePrism\n  state: typeof state\n  scope: typeof scope\n  sub: typeof sub\n  inPrism: typeof inPrism\n  source: typeof source\n}\n\n/**\n * Creates a prism from the passed function that adds all prisms referenced\n * in it as dependencies, and reruns the function when these change.\n *\n * @param fn - The function to rerun when the prisms referenced in it change.\n */\nconst prism: IPrismFn = (fn) => {\n  return new PrismInstance(fn)\n}\n\nclass ColdScope implements PrismScope {\n  effect(key: string, cb: () => () => void, deps?: unknown[]): void {\n    console.warn(`prism.effect() does not run in cold prisms`)\n  }\n  memo<T>(\n    key: string,\n    fn: () => T,\n    deps: any[] | readonly any[] | undefined,\n  ): T {\n    return fn()\n  }\n  state<T>(key: string, initialValue: T): [T, (val: T) => void] {\n    return [initialValue, () => {}]\n  }\n  ref<T>(key: string, initialValue: T): IRef<T> {\n    return {current: initialValue}\n  }\n  sub(key: string): ColdScope {\n    return new ColdScope()\n  }\n  source<V>(subscribe: (fn: (val: V) => void) => VoidFn, getValue: () => V): V {\n    return getValue()\n  }\n}\n\nfunction calculateColdPrism<V>(fn: () => V): V {\n  const scope = new ColdScope()\n  hookScopeStack.push(scope)\n  let value: V\n  try {\n    value = fn()\n  } catch (error) {\n    console.error(error)\n  } finally {\n    const topOfTheStack = hookScopeStack.pop()\n    if (topOfTheStack !== scope) {\n      console.warn(\n        // @todo guide the user to report the bug in an issue\n        `The Prism hook stack has slipped. This is a bug.`,\n      )\n    }\n  }\n  return value!\n}\n\nprism.ref = ref\nprism.effect = effect\nprism.memo = memo\nprism.ensurePrism = ensurePrism\nprism.state = state\nprism.scope = scope\nprism.sub = sub\nprism.inPrism = inPrism\nprism.source = source\n\nexport default prism\n"
  },
  {
    "path": "packages/dataverse/src/setupTestEnv.ts",
    "content": "export {}\n"
  },
  {
    "path": "packages/dataverse/src/types.ts",
    "content": "/** For `any`s that aren't meant to stay `any`*/\nexport type $FixMe = any\n/** For `any`s that we don't care about */\nexport type $IntentionalAny = any\n\nexport type VoidFn = () => void\n"
  },
  {
    "path": "packages/dataverse/src/utils/Stack.ts",
    "content": "interface Node<Data> {\n  next: undefined | Node<Data>\n  data: Data\n}\n\n/**\n * Just a simple LinkedList\n */\nexport default class Stack<Data> {\n  _head: undefined | Node<Data>\n\n  constructor() {\n    this._head = undefined\n  }\n\n  peek() {\n    return this._head && this._head.data\n  }\n\n  pop() {\n    const head = this._head\n    if (!head) {\n      return undefined\n    }\n    this._head = head.next\n    return head.data\n  }\n\n  push(data: Data) {\n    const node = {next: this._head, data}\n    this._head = node\n  }\n}\n"
  },
  {
    "path": "packages/dataverse/src/utils/typeTestUtils.ts",
    "content": "import type {$IntentionalAny} from '../types'\n\n/**\n * Useful in type tests, such as: const a: SomeType = _any\n */\nexport const _any: $IntentionalAny = null\n\n/**\n * Useful in typeTests. If you want to ensure that value v follows type V,\n * just write `expectType<V>(v)`\n */\nexport const expectType = <T extends unknown>(v: T): T => v\n"
  },
  {
    "path": "packages/dataverse/src/utils/updateDeep.ts",
    "content": "import type {$FixMe, $IntentionalAny} from '../types'\n\nexport default function updateDeep<S>(\n  state: S,\n  path: (string | number | undefined)[],\n  reducer: (...args: $IntentionalAny[]) => $IntentionalAny,\n): S {\n  if (path.length === 0) return reducer(state)\n  return hoop(state, path as $IntentionalAny, reducer)\n}\n\nconst hoop = (\n  s: $FixMe,\n  path: (string | number)[],\n  reducer: $FixMe,\n): $FixMe => {\n  if (path.length === 0) {\n    return reducer(s)\n  }\n  if (Array.isArray(s)) {\n    let [index, ...restOfPath] = path\n    index = parseInt(String(index), 10)\n    if (isNaN(index)) index = 0\n    const oldVal = s[index]\n    const newVal = hoop(oldVal, restOfPath, reducer)\n    if (oldVal === newVal) return s\n    const newS = [...s]\n    newS.splice(index, 1, newVal)\n    return newS\n  } else if (typeof s === 'object' && s !== null) {\n    const [key, ...restOfPath] = path\n    const oldVal = s[key]\n    const newVal = hoop(oldVal, restOfPath, reducer)\n    if (oldVal === newVal) return s\n    const newS = {...s, [key]: newVal}\n    return newS\n  } else {\n    const [key, ...restOfPath] = path\n\n    return {[key]: hoop(undefined, restOfPath, reducer)}\n  }\n}\n"
  },
  {
    "path": "packages/dataverse/src/val.ts",
    "content": "import type {Prism} from './prism/Interface'\nimport {isPrism} from './prism/Interface'\nimport type {PointerType} from './pointer'\nimport {isPointer} from './pointer'\nimport type {$IntentionalAny} from './types'\nimport {pointerToPrism} from './pointerToPrism'\n\n/**\n * Convenience function that returns a plain value from its argument, whether it\n * is a pointer, a prism or a plain value itself.\n *\n * @remarks\n * For pointers, the value is returned by first creating a prism, so it is\n * reactive e.g. when used in a `prism`.\n *\n * @param input - The argument to return a value from.\n */\n\nexport const val = <\n  P extends\n    | PointerType<$IntentionalAny>\n    | Prism<$IntentionalAny>\n    | undefined\n    | null,\n>(\n  input: P,\n): P extends PointerType<infer T>\n  ? T\n  : P extends Prism<infer T>\n  ? T\n  : P extends undefined | null\n  ? P\n  : unknown => {\n  if (isPointer(input)) {\n    return pointerToPrism(input).getValue() as $IntentionalAny\n  } else if (isPrism(input)) {\n    return input.getValue() as $IntentionalAny\n  } else {\n    return input as $IntentionalAny\n  }\n}\n"
  },
  {
    "path": "packages/dataverse/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \"src\",\n    \"types\": [\"jest\", \"node\"],\n    \"emitDeclarationOnly\": true,\n    \"target\": \"es6\",\n    \"composite\": true\n  },\n  \"include\": [\"./src/**/*\"]\n}\n"
  },
  {
    "path": "packages/dataverse/typedoc.json",
    "content": "{\n  \"visibilityFilters\": {\n    \"protected\": false,\n    \"private\": false,\n    \"inherited\": true,\n    \"external\": false,\n    \"@alpha\": false,\n    \"@beta\": false\n  },\n  \"excludeTags\": [\n    \"@override\",\n    \"@virtual\",\n    \"@privateRemarks\",\n    \"@satisfies\",\n    \"@overload\",\n    \"@remarks\"\n  ],\n  \"categorizeByGroup\": false,\n  \"excludeInternal\": true,\n  \"excludeProtected\": true,\n  \"excludePrivate\": true,\n  \"sourceLinkTemplate\": \"https://github.com/theatre-js/theatre/blob/main/{path}#L{line}\"\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/.babelrc.js",
    "content": "module.exports = {}\n"
  },
  {
    "path": "packages/dataverse-experiments/.gitignore",
    "content": "/dist"
  },
  {
    "path": "packages/dataverse-experiments/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "packages/dataverse-experiments/README.md",
    "content": "# Dataverse experiments\n\nThis package contains some experiments in [@theatre/dataverse](../dataverse). We are keeping these experiments in the main branch so they don't bitrot.\n\nThe experimental `AbstractDerivation` in this package uses some ideas from [incremental](https://github.com/janestreet/incremental/blob/master/src/incremental_intf.ml)."
  },
  {
    "path": "packages/dataverse-experiments/package.json",
    "content": "{\n  \"name\": \"@theatre/dataverse-experiments\",\n  \"version\": \"1.0.0-dev\",\n  \"license\": \"Apache-2.0\",\n  \"author\": {\n    \"name\": \"Aria Minaei\",\n    \"email\": \"aria@theatrejs.com\",\n    \"url\": \"https://github.com/AriaMinaei\"\n  },\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"scripts\": {\n    \"typecheck\": \"yarn run _declarations:emit\",\n    \"_declarations:emit\": \"tsc --build ./tsconfig.json\"\n  },\n  \"devDependencies\": {\n    \"@types/jest\": \"^26.0.23\",\n    \"@types/lodash-es\": \"^4.17.4\",\n    \"@types/node\": \"^15.6.2\",\n    \"@types/react\": \"^17.0.9\",\n    \"typescript\": \"5.1.6\"\n  },\n  \"dependencies\": {\n    \"lodash-es\": \"^4.17.21\"\n  }\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/Atom.ts",
    "content": "import get from 'lodash-es/get'\nimport isPlainObject from 'lodash-es/isPlainObject'\nimport last from 'lodash-es/last'\nimport DerivationFromSource from './derivations/DerivationFromSource'\nimport type {IDerivation} from './derivations/IDerivation'\nimport {isDerivation} from './derivations/IDerivation'\nimport type {Pointer, PointerType} from './pointer'\nimport pointer, {getPointerMeta} from './pointer'\nimport type {$FixMe, $IntentionalAny} from './types'\nimport type {PathBasedReducer} from './utils/PathBasedReducer'\nimport updateDeep from './utils/updateDeep'\n\ntype Listener = (newVal: unknown) => void\n\nenum ValueTypes {\n  Dict,\n  Array,\n  Other,\n}\n\nconst getTypeOfValue = (v: unknown): ValueTypes => {\n  if (Array.isArray(v)) return ValueTypes.Array\n  if (isPlainObject(v)) return ValueTypes.Dict\n  return ValueTypes.Other\n}\n\nconst getKeyOfValue = (\n  v: unknown,\n  key: string | number,\n  vType: ValueTypes = getTypeOfValue(v),\n): unknown => {\n  if (vType === ValueTypes.Dict && typeof key === 'string') {\n    return (v as $IntentionalAny)[key]\n  } else if (vType === ValueTypes.Array && isValidArrayIndex(key)) {\n    return (v as $IntentionalAny)[key]\n  } else {\n    return undefined\n  }\n}\n\nconst isValidArrayIndex = (key: string | number): boolean => {\n  const inNumber = typeof key === 'number' ? key : parseInt(key, 10)\n  return (\n    !isNaN(inNumber) &&\n    inNumber >= 0 &&\n    inNumber < Infinity &&\n    (inNumber | 0) === inNumber\n  )\n}\n\nclass Scope {\n  children: Map<string | number, Scope> = new Map()\n  identityChangeListeners: Set<Listener> = new Set()\n  constructor(\n    readonly _parent: undefined | Scope,\n    readonly _path: (string | number)[],\n  ) {}\n\n  addIdentityChangeListener(cb: Listener) {\n    this.identityChangeListeners.add(cb)\n  }\n\n  removeIdentityChangeListener(cb: Listener) {\n    this.identityChangeListeners.delete(cb)\n    this._checkForGC()\n  }\n\n  removeChild(key: string | number) {\n    this.children.delete(key)\n    this._checkForGC()\n  }\n\n  getChild(key: string | number) {\n    return this.children.get(key)\n  }\n\n  getOrCreateChild(key: string | number) {\n    let child = this.children.get(key)\n    if (!child) {\n      child = child = new Scope(this, this._path.concat([key]))\n      this.children.set(key, child)\n    }\n    return child\n  }\n\n  _checkForGC() {\n    if (this.identityChangeListeners.size > 0) return\n    if (this.children.size > 0) return\n\n    if (this._parent) {\n      this._parent.removeChild(last(this._path) as string | number)\n    }\n  }\n}\n\nexport default class Atom<State extends {}> {\n  private _currentState: State\n  private readonly _rootScope: Scope\n  readonly pointer: Pointer<State>\n\n  constructor(initialState: State) {\n    this._currentState = initialState\n    this._rootScope = new Scope(undefined, [])\n    this.pointer = pointer({root: this as $FixMe, path: []})\n  }\n\n  setState(newState: State) {\n    const oldState = this._currentState\n    this._currentState = newState\n\n    this._checkUpdates(this._rootScope, oldState, newState)\n  }\n\n  getState() {\n    return this._currentState\n  }\n\n  getIn(path: (string | number)[]): unknown {\n    return path.length === 0 ? this.getState() : get(this.getState(), path)\n  }\n\n  reduceState: PathBasedReducer<State, State> = (\n    path: $IntentionalAny[],\n    reducer: $IntentionalAny,\n  ) => {\n    const newState = updateDeep(this.getState(), path, reducer)\n    this.setState(newState)\n    return newState\n  }\n\n  setIn(path: $FixMe[], val: $FixMe) {\n    return this.reduceState(path, () => val)\n  }\n\n  private _checkUpdates(scope: Scope, oldState: unknown, newState: unknown) {\n    if (oldState === newState) return\n    scope.identityChangeListeners.forEach((cb) => cb(newState))\n\n    if (scope.children.size === 0) return\n    const oldValueType = getTypeOfValue(oldState)\n    const newValueType = getTypeOfValue(newState)\n\n    if (oldValueType === ValueTypes.Other && oldValueType === newValueType)\n      return\n\n    scope.children.forEach((childScope, childKey) => {\n      const oldChildVal = getKeyOfValue(oldState, childKey, oldValueType)\n      const newChildVal = getKeyOfValue(newState, childKey, newValueType)\n      this._checkUpdates(childScope, oldChildVal, newChildVal)\n    })\n  }\n\n  private _getOrCreateScopeForPath(path: (string | number)[]): Scope {\n    let curScope = this._rootScope\n    for (const pathEl of path) {\n      curScope = curScope.getOrCreateChild(pathEl)\n    }\n    return curScope\n  }\n\n  onPathValueChange(path: (string | number)[], cb: (v: unknown) => void) {\n    const scope = this._getOrCreateScopeForPath(path)\n    scope.identityChangeListeners.add(cb)\n    const untap = () => {\n      scope.identityChangeListeners.delete(cb)\n    }\n    return untap\n  }\n}\n\nconst identityDerivationWeakMap = new WeakMap<{}, IDerivation<unknown>>()\n\nexport const valueDerivation = <P extends PointerType<$IntentionalAny>>(\n  pointer: P,\n): IDerivation<P extends PointerType<infer T> ? T : void> => {\n  const meta = getPointerMeta(pointer)\n\n  let pr = identityDerivationWeakMap.get(meta)\n  if (!pr) {\n    const root = meta.root\n    if (!(root instanceof Atom)) {\n      throw new Error(\n        `Cannot run valueDerivation on a pointer whose root is not an Atom`,\n      )\n    }\n    const {path} = meta\n    pr = new DerivationFromSource<$IntentionalAny>(\n      (listener) => root.onPathValueChange(path, listener),\n      () => root.getIn(path),\n    )\n    identityDerivationWeakMap.set(meta, pr)\n  }\n  return pr as $IntentionalAny\n}\n\nexport const val = <P>(\n  pointerOrDerivationOrPlainValue: P,\n): P extends PointerType<infer T>\n  ? T\n  : P extends IDerivation<infer T>\n  ? T\n  : unknown => {\n  if (isPointer(pointerOrDerivationOrPlainValue)) {\n    return valueDerivation(\n      pointerOrDerivationOrPlainValue,\n    ).getValue() as $IntentionalAny\n  } else if (isDerivation(pointerOrDerivationOrPlainValue)) {\n    return pointerOrDerivationOrPlainValue.getValue() as $IntentionalAny\n  } else {\n    return pointerOrDerivationOrPlainValue as $IntentionalAny\n  }\n}\n\nexport const isPointer = (p: $IntentionalAny): p is Pointer<unknown> => {\n  return p && p.$pointerMeta ? true : false\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/Box.ts",
    "content": "import DerivationFromSource from './derivations/DerivationFromSource'\nimport type {IDerivation} from './derivations/IDerivation'\nimport Emitter from './utils/Emitter'\nexport interface IBox<V> {\n  set(v: V): void\n  get(): V\n  derivation: IDerivation<V>\n}\n\nexport default class Box<V> implements IBox<V> {\n  private _publicDerivation: IDerivation<V>\n  private _emitter = new Emitter<V>()\n\n  constructor(protected _value: V) {\n    this._publicDerivation = new DerivationFromSource(\n      (listener) => this._emitter.tappable.tap(listener),\n      this.get.bind(this),\n    )\n  }\n\n  set(v: V) {\n    this._value = v\n    this._emitter.emit(v)\n  }\n\n  get() {\n    return this._value\n  }\n\n  get derivation() {\n    return this._publicDerivation\n  }\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/Ticker.ts",
    "content": "type ICallback = (t: number) => void\n\nexport default class Ticker {\n  private _scheduledForThisOrNextTick: Set<ICallback>\n  private _scheduledForNextTick: Set<ICallback>\n  private _timeAtCurrentTick: number\n  private _ticking: boolean = false\n\n  constructor() {\n    this._scheduledForThisOrNextTick = new Set()\n    this._scheduledForNextTick = new Set()\n    this._timeAtCurrentTick = 0\n  }\n\n  /**\n   * Registers for fn to be called either on this tick or the next tick.\n   *\n   * If registerSideEffect() is called while Ticker.tick() is running, the\n   * side effect _will_ be called within the running tick. If you don't want this\n   * behavior, you can use registerSideEffectForNextTick().\n   *\n   * Note that fn will be added to a Set(). Which means, if you call registerSideEffect(fn)\n   * with the same fn twice in a single tick, it'll only run once.\n   */\n  onThisOrNextTick(fn: ICallback) {\n    this._scheduledForThisOrNextTick.add(fn)\n  }\n\n  /**\n   * Registers a side effect to be called on the next tick.\n   *\n   * @see Ticker:onThisOrNextTick()\n   */\n  onNextTick(fn: ICallback) {\n    this._scheduledForNextTick.add(fn)\n  }\n\n  offThisOrNextTick(fn: ICallback) {\n    this._scheduledForThisOrNextTick.delete(fn)\n  }\n\n  offNextTick(fn: ICallback) {\n    this._scheduledForNextTick.delete(fn)\n  }\n\n  get time() {\n    if (this._ticking) {\n      return this._timeAtCurrentTick\n    } else return performance.now()\n  }\n\n  tick(t: number = performance.now()) {\n    this._ticking = true\n    this._timeAtCurrentTick = t\n    this._scheduledForNextTick.forEach((v) =>\n      this._scheduledForThisOrNextTick.add(v),\n    )\n    this._scheduledForNextTick.clear()\n    this._tick(0)\n    this._ticking = false\n  }\n\n  private _tick(iterationNumber: number): void {\n    const time = this.time\n\n    if (iterationNumber > 10) {\n      console.warn('_tick() recursing for 10 times')\n    }\n\n    if (iterationNumber > 100) {\n      throw new Error(`Maximum recursion limit for _tick()`)\n    }\n\n    const oldSet = this._scheduledForThisOrNextTick\n    this._scheduledForThisOrNextTick = new Set()\n    oldSet.forEach((fn) => {\n      fn(time)\n    })\n\n    if (this._scheduledForThisOrNextTick.size > 0) {\n      return this._tick(iterationNumber + 1)\n    }\n  }\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/atom.typeTest.ts",
    "content": "import Atom, {val} from './Atom'\nimport {expectType, _any} from './utils/typeTestUtils'\n;() => {\n  const p = new Atom<{foo: string; bar: number; optional?: boolean}>(_any)\n    .pointer\n  expectType<string>(val(p.foo))\n  // @ts-expect-error TypeTest\n  expectType<number>(val(p.foo))\n\n  expectType<number>(val(p.bar))\n  // @ts-expect-error TypeTest\n  expectType<string>(val(p.bar))\n\n  // @ts-expect-error TypeTest\n  expectType<{}>(val(p.nonExistent))\n\n  expectType<undefined | boolean>(val(p.optional))\n  // @ts-expect-error TypeTest\n  expectType<boolean>(val(p.optional))\n  // @ts-expect-error TypeTest\n  expectType<undefined>(val(p.optional))\n  // @ts-expect-error TypeTest\n  expectType<undefined | string>(val(p.optional))\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/AbstractDerivation.ts",
    "content": "import type {$IntentionalAny} from '../types'\nimport type Tappable from '../utils/Tappable'\nimport DerivationEmitter from './DerivationEmitter'\nimport flatMap from './flatMap'\nimport type {GraphNode, IDerivation} from './IDerivation'\nimport map from './map'\nimport {\n  reportResolutionEnd,\n  reportResolutionStart,\n} from './prism/discoveryMechanism'\n\nexport default abstract class AbstractDerivation<V> implements IDerivation<V> {\n  readonly isDerivation: true = true\n  private _didMarkDependentsAsStale: boolean = false\n  private _isHot: boolean = false\n\n  private _isFresh: boolean = false\n  protected _lastValue: undefined | V = undefined\n\n  protected _dependents: Set<GraphNode> = new Set()\n  protected _dependencies: Set<IDerivation<$IntentionalAny>> = new Set()\n  /**\n   * _height is the maximum height of all dependents, plus one.\n   *\n   * -1 means it's not yet calculated\n   * 0 is reserved only for listeners\n   */\n  private _height: number = -1\n\n  private _graphNode: GraphNode\n\n  protected abstract _recalculate(): V\n  protected abstract _reactToDependencyBecomingStale(\n    which: IDerivation<unknown>,\n  ): void\n\n  constructor() {\n    const self = this\n    this._graphNode = {\n      get height() {\n        return self._height\n      },\n      recalculate() {\n        // @todo\n      },\n    }\n  }\n\n  get isHot(): boolean {\n    return this._isHot\n  }\n\n  get height() {\n    return this._height\n  }\n\n  protected _addDependency(d: IDerivation<$IntentionalAny>) {\n    if (this._dependencies.has(d)) return\n    this._dependencies.add(d)\n    if (this._isHot) d.addDependent(this._graphNode)\n  }\n\n  protected _removeDependency(d: IDerivation<$IntentionalAny>) {\n    if (!this._dependencies.has(d)) return\n    this._dependencies.delete(d)\n    if (this._isHot) d.removeDependent(this._graphNode)\n  }\n\n  changes(): Tappable<V> {\n    return new DerivationEmitter(this).tappable()\n  }\n\n  addDependent(d: GraphNode) {\n    const hadDepsBefore = this._dependents.size > 0\n    this._dependents.add(d)\n\n    if (d.height > this._height - 1) {\n      this._setHeight(d.height + 1)\n    }\n\n    if (!hadDepsBefore) {\n      this._reactToNumberOfDependentsChange()\n    }\n  }\n\n  /**\n   * @sealed\n   */\n  removeDependent(d: GraphNode) {\n    const hadDepsBefore = this._dependents.size > 0\n    this._dependents.delete(d)\n    const hasDepsNow = this._dependents.size > 0\n    if (hadDepsBefore !== hasDepsNow) {\n      this._reactToNumberOfDependentsChange()\n    }\n  }\n\n  reportDependentHeightChange(d: GraphNode) {\n    if (process.env.NODE_ENV === 'development') {\n      if (!this._dependents.has(d)) {\n        throw new Error(\n          `Got a reportDependentHeightChange from a non-dependent.`,\n        )\n      }\n    }\n    this._recalculateHeight()\n  }\n\n  private _recalculateHeight() {\n    let maxHeightOfDependents = -1\n    this._dependents.forEach((d) => {\n      maxHeightOfDependents = Math.max(maxHeightOfDependents, d.height)\n    })\n    const newHeight = maxHeightOfDependents + 1\n    if (this._height !== newHeight) {\n      this._setHeight(newHeight)\n    }\n  }\n\n  private _setHeight(h: number) {\n    this._height = h\n    this._dependencies.forEach((d) => {\n      d.reportDependentHeightChange(this._graphNode)\n    })\n  }\n\n  /**\n   * This is meant to be called by subclasses\n   *\n   * @sealed\n   */\n  protected _markAsStale(which: IDerivation<$IntentionalAny>) {\n    this._internal_markAsStale(which)\n  }\n\n  private _internal_markAsStale = (which: IDerivation<$IntentionalAny>) => {\n    this._reactToDependencyBecomingStale(which)\n\n    if (this._didMarkDependentsAsStale) return\n\n    this._didMarkDependentsAsStale = true\n    this._isFresh = false\n\n    this._dependents.forEach((dependent) => {\n      dependent.recalculate()\n    })\n  }\n\n  getValue(): V {\n    reportResolutionStart(this)\n\n    if (!this._isFresh) {\n      const newValue = this._recalculate()\n      this._lastValue = newValue\n      if (this.isHot) {\n        this._isFresh = true\n        this._didMarkDependentsAsStale = false\n      }\n    }\n\n    reportResolutionEnd(this)\n    return this._lastValue!\n  }\n\n  private _reactToNumberOfDependentsChange() {\n    const shouldBecomeHot = this._dependents.size > 0\n\n    if (shouldBecomeHot === this._isHot) return\n\n    this._isHot = shouldBecomeHot\n    this._didMarkDependentsAsStale = false\n    this._isFresh = false\n    if (shouldBecomeHot) {\n      this._dependencies.forEach((d) => {\n        d.addDependent(this._graphNode)\n      })\n      this._keepHot()\n    } else {\n      this._dependencies.forEach((d) => {\n        d.removeDependent(this._graphNode)\n      })\n      this._becomeCold()\n    }\n  }\n\n  protected _keepHot() {}\n\n  protected _becomeCold() {}\n\n  map<T>(fn: (v: V) => T): IDerivation<T> {\n    return map(this, fn)\n  }\n\n  flatMap<R>(\n    fn: (v: V) => R,\n  ): IDerivation<R extends IDerivation<infer T> ? T : R> {\n    return flatMap(this, fn)\n  }\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/AbstractDerivation.typeTest.ts",
    "content": "import type {$IntentionalAny} from '../types'\nimport type {IDerivation} from './IDerivation'\n\nconst _any: $IntentionalAny = null\n\n// map\n;() => {\n  const a: IDerivation<string> = _any\n\n  // $ExpectType IDerivation<number>\n  // eslint-disable-next-line unused-imports/no-unused-vars-ts\n  a.map((s: string) => 10)\n\n  // @ts-expect-error\n  // eslint-disable-next-line unused-imports/no-unused-vars-ts\n  a.map((s: number) => 10)\n}\n\n// flatMap()\n/* eslint-disable unused-imports/no-unused-vars-ts */\n;() => {\n  const a: IDerivation<string> = _any\n\n  // okay\n  a.flatMap((s: string) => {})\n\n  // @ts-expect-error TypeTest\n  a.flatMap((s: number) => {})\n\n  // $ExpectType IDerivation<number>\n  a.flatMap((s): IDerivation<number> => _any)\n\n  // $ExpectType IDerivation<number>\n  a.flatMap((s): number => _any)\n}\n/* eslint-enable unused-imports/no-unused-vars-ts */\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/ConstantDerivation.ts",
    "content": "import AbstractDerivation from './AbstractDerivation'\n\nexport default class ConstantDerivation<V> extends AbstractDerivation<V> {\n  _v: V\n\n  constructor(v: V) {\n    super()\n    this._v = v\n    return this\n  }\n\n  _recalculate() {\n    return this._v\n  }\n\n  _reactToDependencyBecomingStale() {}\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/DerivationEmitter.ts",
    "content": "import Emitter from '../utils/Emitter'\nimport type {default as Tappable} from '../utils/Tappable'\nimport type {GraphNode, IDerivation} from './IDerivation'\n\nexport default class DerivationEmitter<V> {\n  private _emitter: Emitter<V>\n  private _lastValue: undefined | V\n  private _lastValueRecorded: boolean\n  private _hadTappers: boolean\n  private _graphNode: GraphNode\n\n  constructor(private readonly _derivation: IDerivation<V>) {\n    this._emitter = new Emitter()\n    this._graphNode = {\n      height: 0,\n      recalculate: () => {\n        this._emit()\n      },\n    }\n    this._emitter.onNumberOfTappersChange(() => {\n      this._reactToNumberOfTappersChange()\n    })\n    this._hadTappers = false\n    this._lastValueRecorded = false\n    this._lastValue = undefined\n    return this\n  }\n\n  private _reactToNumberOfTappersChange() {\n    const hasTappers = this._emitter.hasTappers()\n    if (hasTappers !== this._hadTappers) {\n      this._hadTappers = hasTappers\n      if (hasTappers) {\n        this._derivation.addDependent(this._graphNode)\n      } else {\n        this._derivation.removeDependent(this._graphNode)\n      }\n    }\n  }\n\n  tappable(): Tappable<V> {\n    return this._emitter.tappable\n  }\n\n  private _emit = () => {\n    const newValue = this._derivation.getValue()\n    if (newValue === this._lastValue && this._lastValueRecorded === true) return\n    this._lastValue = newValue\n    this._lastValueRecorded = true\n    this._emitter.emit(newValue)\n  }\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/DerivationFromSource.ts",
    "content": "import type {VoidFn} from '../types'\nimport AbstractDerivation from './AbstractDerivation'\n\nconst noop = () => {}\n\nexport default class DerivationFromSource<V> extends AbstractDerivation<V> {\n  private _untapFromChanges: () => void\n  private _cachedValue: undefined | V\n  private _hasCachedValue: boolean\n\n  constructor(\n    private readonly _tapToSource: (listener: (newValue: V) => void) => VoidFn,\n    private readonly _getValueFromSource: () => V,\n  ) {\n    super()\n    this._untapFromChanges = noop\n    this._cachedValue = undefined\n    this._hasCachedValue = false\n  }\n\n  _recalculate() {\n    if (this.isHot) {\n      if (!this._hasCachedValue) {\n        this._cachedValue = this._getValueFromSource()\n        this._hasCachedValue = true\n      }\n      return this._cachedValue as V\n    } else {\n      return this._getValueFromSource()\n    }\n  }\n\n  _keepHot() {\n    this._hasCachedValue = false\n    this._cachedValue = undefined\n\n    this._untapFromChanges = this._tapToSource((newValue) => {\n      this._hasCachedValue = true\n      this._cachedValue = newValue\n      this._markAsStale(this)\n    })\n  }\n\n  _becomeCold() {\n    this._untapFromChanges()\n    this._untapFromChanges = noop\n\n    this._hasCachedValue = false\n    this._cachedValue = undefined\n  }\n\n  _reactToDependencyBecomingStale() {}\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/Freshener.ts",
    "content": "import type {GraphNode} from './IDerivation'\n\nexport default class Freshener {\n  schedulePeak(d: GraphNode) {}\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/IDerivation.ts",
    "content": "import type Tappable from '../utils/Tappable'\n\nexport type GraphNode = {\n  height: number\n  recalculate(): void\n}\n\nexport interface IDerivation<V> {\n  isDerivation: true\n  isHot: boolean\n  changes(): Tappable<V>\n\n  addDependent(d: GraphNode): void\n  removeDependent(d: GraphNode): void\n\n  reportDependentHeightChange(d: GraphNode): void\n\n  getValue(): V\n\n  map<T>(fn: (v: V) => T): IDerivation<T>\n\n  flatMap<R>(\n    fn: (v: V) => R,\n  ): IDerivation<R extends IDerivation<infer T> ? T : R>\n}\n\nexport function isDerivation(d: any): d is IDerivation<unknown> {\n  return d && d.isDerivation && d.isDerivation === true\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/flatMap.ts",
    "content": "import type {$FixMe} from '../types'\nimport AbstractDerivation from './AbstractDerivation'\nimport type {IDerivation} from './IDerivation'\n\nenum UPDATE_NEEDED_FROM {\n  none = 0,\n  dep = 1,\n  inner = 2,\n}\n\nconst makeFlatMapDerivationClass = () => {\n  class FlatMapDerivation<V, DepType> extends AbstractDerivation<V> {\n    private _innerDerivation: undefined | null | IDerivation<V>\n    private _staleDependency: UPDATE_NEEDED_FROM\n\n    static displayName = 'flatMap'\n\n    constructor(\n      readonly _depDerivation: IDerivation<DepType>,\n      readonly _fn: (v: DepType) => IDerivation<V> | V,\n    ) {\n      super()\n      this._innerDerivation = undefined\n      this._staleDependency = UPDATE_NEEDED_FROM.dep\n\n      this._addDependency(_depDerivation)\n\n      return this\n    }\n\n    _recalculateHot() {\n      const updateNeededFrom = this._staleDependency\n      this._staleDependency = UPDATE_NEEDED_FROM.none\n\n      if (updateNeededFrom === UPDATE_NEEDED_FROM.inner) {\n        // @ts-ignore\n        return this._innerDerivation.getValue()\n      }\n\n      const possibleInnerDerivation = this._fn(this._depDerivation.getValue())\n\n      if (possibleInnerDerivation instanceof AbstractDerivation) {\n        this._innerDerivation = possibleInnerDerivation\n        this._addDependency(possibleInnerDerivation)\n        return possibleInnerDerivation.getValue()\n      } else {\n        return possibleInnerDerivation\n      }\n    }\n\n    protected _recalculateCold() {\n      const possibleInnerDerivation = this._fn(this._depDerivation.getValue())\n\n      if (possibleInnerDerivation instanceof AbstractDerivation) {\n        return possibleInnerDerivation.getValue()\n      } else {\n        return possibleInnerDerivation\n      }\n    }\n\n    protected _recalculate() {\n      return this.isHot ? this._recalculateHot() : this._recalculateCold()\n    }\n\n    protected _reactToDependencyBecomingStale(\n      msgComingFrom: IDerivation<unknown>,\n    ) {\n      const updateNeededFrom =\n        msgComingFrom === this._depDerivation\n          ? UPDATE_NEEDED_FROM.dep\n          : UPDATE_NEEDED_FROM.inner\n\n      if (\n        updateNeededFrom === UPDATE_NEEDED_FROM.inner &&\n        msgComingFrom !== this._innerDerivation\n      ) {\n        throw Error(\n          `got a _pipostale() from neither the dep nor the inner derivation`,\n        )\n      }\n\n      if (this._staleDependency === UPDATE_NEEDED_FROM.none) {\n        this._staleDependency = updateNeededFrom\n\n        if (updateNeededFrom === UPDATE_NEEDED_FROM.dep) {\n          this._removeInnerDerivation()\n        }\n      } else if (this._staleDependency === UPDATE_NEEDED_FROM.dep) {\n      } else {\n        if (updateNeededFrom === UPDATE_NEEDED_FROM.dep) {\n          this._staleDependency = UPDATE_NEEDED_FROM.dep\n          this._removeInnerDerivation()\n        }\n      }\n    }\n\n    private _removeInnerDerivation() {\n      if (this._innerDerivation) {\n        this._removeDependency(this._innerDerivation)\n        this._innerDerivation = undefined\n      }\n    }\n\n    protected _keepHot() {\n      this._staleDependency = UPDATE_NEEDED_FROM.dep\n      this.getValue()\n    }\n\n    protected _becomeCold() {\n      this._staleDependency = UPDATE_NEEDED_FROM.dep\n      this._removeInnerDerivation()\n    }\n  }\n  return FlatMapDerivation\n}\n\nlet cls: ReturnType<typeof makeFlatMapDerivationClass> | undefined = undefined\n\nexport default function flatMap<V, R>(\n  dep: IDerivation<V>,\n  fn: (v: V) => R,\n): IDerivation<R extends IDerivation<infer T> ? T : R> {\n  if (!cls) {\n    cls = makeFlatMapDerivationClass()\n  }\n  return new cls(dep, fn) as $FixMe\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/iterateAndCountTicks.ts",
    "content": "import {isPointer, valueDerivation} from '../Atom'\nimport type {Pointer} from '../pointer'\nimport type {IDerivation} from './IDerivation'\nimport {isDerivation} from './IDerivation'\n\nexport default function* iterateAndCountTicks<V>(\n  pointerOrDerivation: IDerivation<V> | Pointer<V>,\n): Generator<{value: V; ticks: number}, void, void> {\n  let d\n  if (isPointer(pointerOrDerivation)) {\n    d = valueDerivation(pointerOrDerivation) as IDerivation<V>\n  } else if (isDerivation(pointerOrDerivation)) {\n    d = pointerOrDerivation\n  } else {\n    throw new Error(`Only pointers and derivations are supported`)\n  }\n\n  let ticksCountedSinceLastYield = 0\n  const untap = d.changes().tap(() => {\n    ticksCountedSinceLastYield++\n  })\n\n  try {\n    while (true) {\n      const ticks = ticksCountedSinceLastYield\n      ticksCountedSinceLastYield = 0\n      yield {value: d.getValue(), ticks}\n    }\n  } finally {\n    untap()\n  }\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/iterateOver.test.ts",
    "content": "import Atom from '../Atom'\nimport iterateOver from './iterateOver'\n\ndescribe.skip(`iterateOver()`, () => {\n  test('it should work', () => {\n    const a = new Atom({a: 0})\n    let iter = iterateOver(a.pointer.a)\n    expect(iter.next().value).toEqual(0)\n    a.setIn(['a'], 1)\n    a.setIn(['a'], 2)\n    expect(iter.next()).toMatchObject({value: 2, done: false})\n    iter.return()\n    iter = iterateOver(a.pointer.a)\n    expect(iter.next().value).toEqual(2)\n    a.setIn(['a'], 3)\n    expect(iter.next()).toMatchObject({done: false, value: 3})\n    iter.return()\n  })\n})\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/iterateOver.ts",
    "content": "import {isPointer, valueDerivation} from '../Atom'\nimport type {Pointer} from '../pointer'\nimport Ticker from '../Ticker'\nimport type {IDerivation} from './IDerivation'\nimport {isDerivation} from './IDerivation'\n\nexport default function* iterateOver<V>(\n  pointerOrDerivation: IDerivation<V> | Pointer<V>,\n): Generator<V, void, void> {\n  let d\n  if (isPointer(pointerOrDerivation)) {\n    d = valueDerivation(pointerOrDerivation) as IDerivation<V>\n  } else if (isDerivation(pointerOrDerivation)) {\n    d = pointerOrDerivation\n  } else {\n    throw new Error(`Only pointers and derivations are supported`)\n  }\n\n  const ticker = new Ticker()\n\n  const untap = d.changes().tap((v) => {})\n\n  try {\n    while (true) {\n      ticker.tick()\n\n      yield d.getValue()\n    }\n  } finally {\n    untap()\n  }\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/map.ts",
    "content": "import AbstractDerivation from './AbstractDerivation'\nimport type {IDerivation} from './IDerivation'\n\n// Exporting from a function because of the circular dependency with AbstractDerivation\nconst makeMapDerivationClass = () =>\n  class MapDerivation<T, V> extends AbstractDerivation<V> {\n    constructor(\n      private readonly _dep: IDerivation<T>,\n      private readonly _fn: (t: T) => V,\n    ) {\n      super()\n      this._addDependency(_dep)\n    }\n\n    _recalculate() {\n      return this._fn(this._dep.getValue())\n    }\n\n    _reactToDependencyBecomingStale() {}\n  }\n\nlet cls: ReturnType<typeof makeMapDerivationClass> | undefined = undefined\n\nexport default function flatMap<V, R>(\n  dep: IDerivation<V>,\n  fn: (v: V) => R,\n): IDerivation<R> {\n  if (!cls) {\n    cls = makeMapDerivationClass()\n  }\n  return new cls(dep, fn)\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/prism/discoveryMechanism.ts",
    "content": "import type {$IntentionalAny} from '../../types'\nimport Stack from '../../utils/Stack'\nimport type {IDerivation} from '../IDerivation'\n\nconst noop = () => {}\n\nconst stack = new Stack<Collector>()\nconst noopCollector: Collector = noop\n\ntype Collector = (d: IDerivation<$IntentionalAny>) => void\n\nexport const collectObservedDependencies = (\n  cb: () => void,\n  collector: Collector,\n) => {\n  stack.push(collector)\n  cb()\n  stack.pop()\n}\n\nexport const startIgnoringDependencies = () => {\n  stack.push(noopCollector)\n}\n\nexport const stopIgnoringDependencies = () => {\n  if (stack.peek() !== noopCollector) {\n    if (process.env.NODE_ENV === 'development') {\n      console.warn('This should never happen')\n    }\n  } else {\n    stack.pop()\n  }\n}\n\nexport const reportResolutionStart = (d: IDerivation<$IntentionalAny>) => {\n  const possibleCollector = stack.peek()\n  if (possibleCollector) {\n    possibleCollector(d)\n  }\n\n  stack.push(noopCollector)\n}\n\nexport const reportResolutionEnd = (_d: IDerivation<$IntentionalAny>) => {\n  stack.pop()\n}\n\nexport const isCollectingDependencies = () => {\n  return stack.peek() !== noopCollector\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/prism/prism.test.ts",
    "content": "import Atom, {val} from '../../Atom'\nimport Ticker from '../../Ticker'\nimport type {$FixMe, $IntentionalAny} from '../../types'\nimport ConstantDerivation from '../ConstantDerivation'\nimport iterateAndCountTicks from '../iterateAndCountTicks'\nimport prism, {PrismDerivation} from './prism'\n\ndescribe.skip('prism', () => {\n  let ticker: Ticker\n  beforeEach(() => {\n    ticker = new Ticker()\n  })\n\n  it('should work', () => {\n    const o = new Atom({foo: 'foo'})\n    const d = new PrismDerivation(() => {\n      return val(o.pointer.foo) + 'boo'\n    })\n    expect(d.getValue()).toEqual('fooboo')\n\n    const changes: Array<$FixMe> = []\n    d.changes().tap((c) => {\n      changes.push(c)\n    })\n\n    o.reduceState(['foo'], () => 'foo2')\n    ticker.tick()\n    expect(changes).toMatchObject(['foo2boo'])\n  })\n  it('should only collect immediate dependencies', () => {\n    const aD = new ConstantDerivation(1)\n    const bD = aD.map((v) => v * 2)\n    const cD = prism(() => {\n      return bD.getValue()\n    })\n    expect(cD.getValue()).toEqual(2)\n    expect((cD as $IntentionalAny)._dependencies.size).toEqual(1)\n  })\n\n  describe('prism.ref()', () => {\n    it('should work', () => {\n      const theAtom: Atom<{n: number}> = new Atom({n: 2})\n\n      const isEvenD = prism((): {isEven: boolean} => {\n        const ref = prism.ref<{isEven: boolean} | undefined>('cache', undefined)\n        const currentN = val(theAtom.pointer.n)\n\n        const isEven = currentN % 2 === 0\n        if (ref.current && ref.current.isEven === isEven) {\n          return ref.current\n        } else {\n          ref.current = {isEven}\n          return ref.current\n        }\n      })\n\n      const iterator = iterateAndCountTicks(isEvenD)\n\n      theAtom.reduceState(['n'], () => 3)\n\n      expect(iterator.next().value).toMatchObject({\n        value: {isEven: false},\n        ticks: 0,\n      })\n      theAtom.reduceState(['n'], () => 5)\n      theAtom.reduceState(['n'], () => 7)\n      expect(iterator.next().value).toMatchObject({\n        value: {isEven: false},\n        ticks: 1,\n      })\n      theAtom.reduceState(['n'], () => 2)\n      theAtom.reduceState(['n'], () => 4)\n      expect(iterator.next().value).toMatchObject({\n        value: {isEven: true},\n        ticks: 1,\n      })\n      expect(iterator.next().value).toMatchObject({\n        value: {isEven: true},\n        ticks: 0,\n      })\n    })\n  })\n\n  describe('prism.effect()', () => {\n    it('should work', async () => {\n      let iteration = 0\n      const sequence: unknown[] = []\n      let deps: unknown[] = []\n\n      const a = new Atom({letter: 'a'})\n\n      const derivation = prism(() => {\n        const n = val(a.pointer.letter)\n        const iterationAtTimeOfCall = iteration\n        sequence.push({derivationCall: iterationAtTimeOfCall})\n\n        prism.effect(\n          'f',\n          () => {\n            sequence.push({effectCall: iterationAtTimeOfCall})\n            return () => {\n              sequence.push({cleanupCall: iterationAtTimeOfCall})\n            }\n          },\n          [...deps],\n        )\n\n        return n\n      })\n\n      const untap = derivation.changes().tap((change) => {\n        sequence.push({change})\n      })\n\n      expect(sequence).toMatchObject([{derivationCall: 0}, {effectCall: 0}])\n      sequence.length = 0\n\n      iteration++\n      a.setIn(['letter'], 'b')\n      ticker.tick()\n      expect(sequence).toMatchObject([{derivationCall: 1}, {change: 'b'}])\n      sequence.length = 0\n\n      deps = [1]\n      iteration++\n      a.setIn(['letter'], 'c')\n      ticker.tick()\n      expect(sequence).toMatchObject([\n        {derivationCall: 2},\n        {cleanupCall: 0},\n        {effectCall: 2},\n        {change: 'c'},\n      ])\n      sequence.length = 0\n\n      untap()\n\n      // takes a tick before untap takes effect\n      await new Promise((resolve) => setTimeout(resolve, 1))\n      expect(sequence).toMatchObject([{cleanupCall: 2}])\n    })\n  })\n\n  describe('prism.memo()', () => {\n    it('should work', async () => {\n      let iteration = 0\n      const sequence: unknown[] = []\n      let deps: unknown[] = []\n\n      const a = new Atom({letter: 'a'})\n\n      const derivation = prism(() => {\n        const n = val(a.pointer.letter)\n        const iterationAtTimeOfCall = iteration\n        sequence.push({derivationCall: iterationAtTimeOfCall})\n\n        const resultOfMemo = prism.memo(\n          'memo',\n          () => {\n            sequence.push({memoCall: iterationAtTimeOfCall})\n            return iterationAtTimeOfCall\n          },\n          [...deps],\n        )\n\n        sequence.push({resultOfMemo})\n\n        return n\n      })\n\n      const untap = derivation.changes().tap((change) => {\n        sequence.push({change})\n      })\n\n      expect(sequence).toMatchObject([\n        {derivationCall: 0},\n        {memoCall: 0},\n        {resultOfMemo: 0},\n      ])\n      sequence.length = 0\n\n      iteration++\n      a.setIn(['letter'], 'b')\n      ticker.tick()\n      expect(sequence).toMatchObject([\n        {derivationCall: 1},\n        {resultOfMemo: 0},\n        {change: 'b'},\n      ])\n      sequence.length = 0\n\n      deps = [1]\n      iteration++\n      a.setIn(['letter'], 'c')\n      ticker.tick()\n      expect(sequence).toMatchObject([\n        {derivationCall: 2},\n        {memoCall: 2},\n        {resultOfMemo: 2},\n        {change: 'c'},\n      ])\n      sequence.length = 0\n\n      untap()\n    })\n  })\n\n  describe(`prism.scope()`, () => {\n    it('should prevent name conflicts', () => {\n      const d = prism(() => {\n        const thisNameWillBeUsedForBothMemos = 'blah'\n        const a = prism.scope('a', () => {\n          return prism.memo(thisNameWillBeUsedForBothMemos, () => 'a', [])\n        })\n\n        const b = prism.scope('b', () => {\n          return prism.memo(thisNameWillBeUsedForBothMemos, () => 'b', [])\n        })\n\n        return {a, b}\n      })\n      expect(d.getValue()).toMatchObject({a: 'a', b: 'b'})\n    })\n  })\n})\n"
  },
  {
    "path": "packages/dataverse-experiments/src/derivations/prism/prism.ts",
    "content": "import Box from '../../Box'\nimport type {$IntentionalAny, VoidFn} from '../../types'\nimport Stack from '../../utils/Stack'\nimport AbstractDerivation from '../AbstractDerivation'\nimport type {IDerivation} from '../IDerivation'\nimport {\n  collectObservedDependencies,\n  startIgnoringDependencies,\n  stopIgnoringDependencies,\n} from './discoveryMechanism'\n\nconst voidFn = () => {}\n\nexport class PrismDerivation<V> extends AbstractDerivation<V> {\n  protected _cacheOfDendencyValues: Map<IDerivation<unknown>, unknown> =\n    new Map()\n  protected _possiblyStaleDeps = new Set<IDerivation<unknown>>()\n  private _prismScope = new PrismScope()\n\n  constructor(readonly _fn: () => V) {\n    super()\n  }\n\n  _recalculate() {\n    let value: V\n\n    if (this._possiblyStaleDeps.size > 0) {\n      let anActuallyStaleDepWasFound = false\n      startIgnoringDependencies()\n      for (const dep of this._possiblyStaleDeps) {\n        if (this._cacheOfDendencyValues.get(dep) !== dep.getValue()) {\n          anActuallyStaleDepWasFound = true\n          break\n        }\n      }\n      stopIgnoringDependencies()\n      this._possiblyStaleDeps.clear()\n      if (!anActuallyStaleDepWasFound) {\n        // console.log('ok')\n\n        return this._lastValue!\n      }\n    }\n\n    const newDeps: Set<IDerivation<unknown>> = new Set()\n    this._cacheOfDendencyValues.clear()\n    collectObservedDependencies(\n      () => {\n        hookScopeStack.push(this._prismScope)\n        try {\n          value = this._fn()\n        } catch (error) {\n          console.error(error)\n        } finally {\n          const topOfTheStack = hookScopeStack.pop()\n          if (topOfTheStack !== this._prismScope) {\n            console.warn(\n              // @todo guide the user to report the bug in an issue\n              `The Prism hook stack has slipped. This is a bug.`,\n            )\n          }\n        }\n      },\n      (observedDep) => {\n        newDeps.add(observedDep)\n        this._addDependency(observedDep)\n      },\n    )\n\n    this._dependencies.forEach((dep) => {\n      if (!newDeps.has(dep)) {\n        this._removeDependency(dep)\n      }\n    })\n\n    this._dependencies = newDeps\n\n    startIgnoringDependencies()\n    newDeps.forEach((dep) => {\n      this._cacheOfDendencyValues.set(dep, dep.getValue())\n    })\n    stopIgnoringDependencies()\n\n    return value!\n  }\n\n  _reactToDependencyBecomingStale(msgComingFrom: IDerivation<unknown>) {\n    this._possiblyStaleDeps.add(msgComingFrom)\n  }\n\n  _keepHot() {\n    this._prismScope = new PrismScope()\n    startIgnoringDependencies()\n    this.getValue()\n    stopIgnoringDependencies()\n  }\n\n  _becomeCold() {\n    cleanupScopeStack(this._prismScope)\n    this._prismScope = new PrismScope()\n  }\n}\n\nclass PrismScope {\n  isPrismScope = true\n  private _subs: Record<string, PrismScope> = {}\n\n  sub(key: string) {\n    if (!this._subs[key]) {\n      this._subs[key] = new PrismScope()\n    }\n    return this._subs[key]\n  }\n\n  get subs() {\n    return this._subs\n  }\n}\n\nfunction cleanupScopeStack(scope: PrismScope) {\n  for (const [_, sub] of Object.entries(scope.subs)) {\n    cleanupScopeStack(sub)\n  }\n  cleanupEffects(scope)\n}\n\nfunction cleanupEffects(scope: PrismScope) {\n  const effects = effectsWeakMap.get(scope)\n  if (effects) {\n    for (const k of Object.keys(effects)) {\n      const effect = effects[k]\n      safelyRun(effect.cleanup, undefined)\n    }\n  }\n  effectsWeakMap.delete(scope)\n}\n\nfunction safelyRun<T, U>(\n  fn: () => T,\n  returnValueInCaseOfError: U,\n): {success: boolean; returnValue: T | U} {\n  let returnValue: T | U = returnValueInCaseOfError\n  let success = false\n  try {\n    returnValue = fn()\n    success = true\n  } catch (error) {\n    setTimeout(() => {\n      throw error\n    })\n  }\n  return {success, returnValue}\n}\n\nconst hookScopeStack = new Stack<PrismScope>()\n\nconst refsWeakMap = new WeakMap<PrismScope, Record<string, IRef<unknown>>>()\n\ntype IRef<T> = {\n  current: T\n}\nconst effectsWeakMap = new WeakMap<PrismScope, Record<string, IEffect>>()\n\ntype IEffect = {\n  deps: undefined | unknown[]\n  cleanup: VoidFn\n}\n\nconst memosWeakMap = new WeakMap<PrismScope, Record<string, IMemo>>()\n\ntype IMemo = {\n  deps: undefined | unknown[]\n  cachedValue: unknown\n}\n\nfunction ref<T>(key: string, initialValue: T): IRef<T> {\n  const scope = hookScopeStack.peek()\n  if (!scope) {\n    throw new Error(`prism.ref() is called outside of a prism() call.`)\n  }\n  let refs = refsWeakMap.get(scope)\n  if (!refs) {\n    refs = {}\n    refsWeakMap.set(scope, refs)\n  }\n\n  if (refs[key]) {\n    return refs[key] as $IntentionalAny as IRef<T>\n  } else {\n    const ref: IRef<T> = {\n      current: initialValue,\n    }\n    refs[key] = ref\n    return ref\n  }\n}\n\nfunction effect(key: string, cb: () => () => void, deps?: unknown[]): void {\n  const scope = hookScopeStack.peek()\n  if (!scope) {\n    throw new Error(`prism.effect() is called outside of a prism() call.`)\n  }\n  let effects = effectsWeakMap.get(scope)\n\n  if (!effects) {\n    effects = {}\n    effectsWeakMap.set(scope, effects)\n  }\n\n  if (!effects[key]) {\n    effects[key] = {\n      cleanup: voidFn,\n      deps: [{}],\n    }\n  }\n\n  const effect = effects[key]\n  if (depsHaveChanged(effect.deps, deps)) {\n    effect.cleanup()\n\n    startIgnoringDependencies()\n    effect.cleanup = safelyRun(cb, voidFn).returnValue\n    stopIgnoringDependencies()\n    effect.deps = deps\n  }\n}\n\nfunction depsHaveChanged(\n  oldDeps: undefined | unknown[],\n  newDeps: undefined | unknown[],\n): boolean {\n  if (oldDeps === undefined || newDeps === undefined) {\n    return true\n  } else if (oldDeps.length !== newDeps.length) {\n    return true\n  } else {\n    return oldDeps.some((el, i) => el !== newDeps[i])\n  }\n}\n\nfunction memo<T>(\n  key: string,\n  fn: () => T,\n  deps: undefined | $IntentionalAny[],\n): T {\n  const scope = hookScopeStack.peek()\n  if (!scope) {\n    throw new Error(`prism.memo() is called outside of a prism() call.`)\n  }\n\n  let memos = memosWeakMap.get(scope)\n\n  if (!memos) {\n    memos = {}\n    memosWeakMap.set(scope, memos)\n  }\n\n  if (!memos[key]) {\n    memos[key] = {\n      cachedValue: null,\n      deps: [{}],\n    }\n  }\n\n  const memo = memos[key]\n  if (depsHaveChanged(memo.deps, deps)) {\n    startIgnoringDependencies()\n\n    memo.cachedValue = safelyRun(fn, undefined).returnValue\n    stopIgnoringDependencies()\n    memo.deps = deps\n  }\n\n  return memo.cachedValue as $IntentionalAny as T\n}\n\nfunction state<T>(key: string, initialValue: T): [T, (val: T) => void] {\n  const {b, setValue} = prism.memo(\n    'state/' + key,\n    () => {\n      const b = new Box<T>(initialValue)\n      const setValue = (val: T) => b.set(val)\n      return {b, setValue}\n    },\n    [],\n  )\n\n  return [b.derivation.getValue(), setValue]\n}\n\nfunction ensurePrism(): void {\n  const scope = hookScopeStack.peek()\n  if (!scope) {\n    throw new Error(`The parent function is called outside of a prism() call.`)\n  }\n}\n\nfunction scope<T>(key: string, fn: () => T): T {\n  const parentScope = hookScopeStack.peek()\n  if (!parentScope) {\n    throw new Error(`prism.memo() is called outside of a prism() call.`)\n  }\n  const subScope = parentScope.sub(key)\n  hookScopeStack.push(subScope)\n  const ret = safelyRun(fn, undefined).returnValue\n  hookScopeStack.pop()\n  return ret as $IntentionalAny as T\n}\n\ntype IPrismFn = {\n  <T>(fn: () => T): IDerivation<T>\n  ref: typeof ref\n  effect: typeof effect\n  memo: typeof memo\n  ensurePrism: typeof ensurePrism\n  state: typeof state\n  scope: typeof scope\n}\n\nconst prism: IPrismFn = (fn) => {\n  return new PrismDerivation(fn)\n}\n\nprism.ref = ref\nprism.effect = effect\nprism.memo = memo\nprism.ensurePrism = ensurePrism\nprism.state = state\nprism.scope = scope\n\nexport default prism\n"
  },
  {
    "path": "packages/dataverse-experiments/src/index.ts",
    "content": "export {default as Atom, isPointer, val, valueDerivation} from './Atom'\nexport {default as Box} from './Box'\nexport type {IBox} from './Box'\nexport {default as AbstractDerivation} from './derivations/AbstractDerivation'\nexport {default as ConstantDerivation} from './derivations/ConstantDerivation'\nexport {default as DerivationFromSource} from './derivations/DerivationFromSource'\nexport {isDerivation} from './derivations/IDerivation'\nexport type {IDerivation} from './derivations/IDerivation'\nexport {default as iterateAndCountTicks} from './derivations/iterateAndCountTicks'\nexport {default as iterateOver} from './derivations/iterateOver'\nexport {default as prism} from './derivations/prism/prism'\nexport {default as pointer, getPointerParts} from './pointer'\nexport type {Pointer} from './pointer'\nexport {default as Ticker} from './Ticker'\n"
  },
  {
    "path": "packages/dataverse-experiments/src/integration.test.ts",
    "content": "import Atom, {val} from './Atom'\nimport prism from './derivations/prism/prism'\nimport Ticker from './Ticker'\n\ndescribe.skip(`dataverse-experiments integration tests`, () => {\n  describe(`identity pointers`, () => {\n    it(`should work`, () => {\n      const data = {foo: 'hi', bar: 0}\n      const a = new Atom(data)\n      const dataP = a.pointer\n      const bar = dataP.bar\n      expect(val(bar)).toEqual(0)\n\n      const d = prism(() => {\n        return val(bar)\n      })\n      expect(d.getValue()).toEqual(0)\n      const ticker = new Ticker()\n      const changes: number[] = []\n      d.changes().tap((c) => {\n        changes.push(c)\n      })\n      a.setState({...data, bar: 1})\n      ticker.tick()\n      expect(changes).toHaveLength(1)\n      expect(changes[0]).toEqual(1)\n      a.setState({...data, bar: 1})\n      ticker.tick()\n      expect(changes).toHaveLength(1)\n    })\n  })\n})\n"
  },
  {
    "path": "packages/dataverse-experiments/src/pointer.ts",
    "content": "import type {$IntentionalAny} from './types'\n\ntype PathToProp = Array<string | number>\n\ntype PointerMeta = {\n  root: {}\n  path: (string | number)[]\n}\n\nexport type UnindexableTypesForPointer =\n  | number\n  | string\n  | boolean\n  | null\n  | void\n  | undefined\n  | Function // eslint-disable-line @typescript-eslint/ban-types\n\nexport type UnindexablePointer = {\n  [K in $IntentionalAny]: Pointer<undefined>\n}\n\nconst pointerMetaWeakMap = new WeakMap<{}, PointerMeta>()\n\nexport type PointerType<O> = {\n  $$__pointer_type: O\n}\n\nexport type Pointer<O> = PointerType<O> &\n  (O extends UnindexableTypesForPointer\n    ? UnindexablePointer\n    : unknown extends O\n    ? UnindexablePointer\n    : O extends (infer T)[]\n    ? Pointer<T>[]\n    : O extends {}\n    ? {[K in keyof O]-?: Pointer<O[K]>}\n    : UnindexablePointer)\n\nconst pointerMetaSymbol = Symbol('pointerMeta')\n\nconst cachedSubPointersWeakMap = new WeakMap<\n  {},\n  Record<string | number, Pointer<unknown>>\n>()\n\nconst handler = {\n  get(obj: {}, prop: string | typeof pointerMetaSymbol): $IntentionalAny {\n    if (prop === pointerMetaSymbol) return pointerMetaWeakMap.get(obj)!\n\n    let subs = cachedSubPointersWeakMap.get(obj)\n    if (!subs) {\n      subs = {}\n      cachedSubPointersWeakMap.set(obj, subs)\n    }\n\n    if (subs[prop]) return subs[prop]\n\n    const meta = pointerMetaWeakMap.get(obj)!\n\n    const subPointer = pointer({root: meta.root, path: [...meta.path, prop]})\n    subs[prop] = subPointer\n    return subPointer\n  },\n}\n\nexport const getPointerMeta = (p: Pointer<$IntentionalAny>): PointerMeta => {\n  const meta: PointerMeta = p[\n    pointerMetaSymbol as unknown as $IntentionalAny\n  ] as $IntentionalAny\n  return meta\n}\n\nexport const getPointerParts = (\n  p: Pointer<$IntentionalAny>,\n): {root: {}; path: PathToProp} => {\n  const {root, path} = getPointerMeta(p)\n  return {root, path}\n}\n\nfunction pointer<O>({\n  root,\n  path,\n}: {\n  root: {}\n  path: Array<string | number>\n}): Pointer<O>\nfunction pointer(args: {root: {}; path?: Array<string | number>}) {\n  const meta: PointerMeta = {\n    root: args.root as $IntentionalAny,\n    path: args.path ?? [],\n  }\n  const hiddenObj = {}\n  pointerMetaWeakMap.set(hiddenObj, meta)\n  return new Proxy(hiddenObj, handler) as Pointer<$IntentionalAny>\n}\n\nexport default pointer\n"
  },
  {
    "path": "packages/dataverse-experiments/src/setupTestEnv.ts",
    "content": "export {}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/types.ts",
    "content": "/** For `any`s that aren't meant to stay `any`*/\nexport type $FixMe = any\n/** For `any`s that we don't care about */\nexport type $IntentionalAny = any\n\nexport type VoidFn = () => void\n"
  },
  {
    "path": "packages/dataverse-experiments/src/utils/Emitter.test.ts",
    "content": "import Emitter from './Emitter'\n\ndescribe.skip('dataverse-experiments.Emitter', () => {\n  it('should work', () => {\n    const e: Emitter<string> = new Emitter()\n    e.emit('no one will see this')\n    e.emit('nor this')\n\n    const tappedEvents: string[] = []\n    const untap = e.tappable.tap((payload) => {\n      tappedEvents.push(payload)\n    })\n    e.emit('foo')\n    e.emit('bar')\n    untap()\n    e.emit('baz')\n    expect(tappedEvents).toMatchObject(['foo', 'bar'])\n  })\n})\n"
  },
  {
    "path": "packages/dataverse-experiments/src/utils/Emitter.ts",
    "content": "import Tappable from './Tappable'\n\ntype Tapper<V> = (v: V) => void\ntype Untap = () => void\n\nexport default class Emitter<V> {\n  private _tappers: Map<any, (v: V) => void>\n  private _lastTapperId: number\n  readonly tappable: Tappable<V>\n  private _onNumberOfTappersChangeListener: undefined | ((n: number) => void)\n\n  constructor() {\n    this._lastTapperId = 0\n    this._tappers = new Map()\n    this.tappable = new Tappable({\n      tapToSource: (cb: Tapper<V>) => {\n        return this._tap(cb)\n      },\n    })\n  }\n\n  _tap(cb: Tapper<V>): Untap {\n    const tapperId = this._lastTapperId++\n    this._tappers.set(tapperId, cb)\n    this._onNumberOfTappersChangeListener &&\n      this._onNumberOfTappersChangeListener(this._tappers.size)\n    return () => {\n      this._removeTapperById(tapperId)\n    }\n  }\n\n  _removeTapperById(id: number) {\n    const oldSize = this._tappers.size\n    this._tappers.delete(id)\n    const newSize = this._tappers.size\n    if (oldSize !== newSize) {\n      this._onNumberOfTappersChangeListener &&\n        this._onNumberOfTappersChangeListener(this._tappers.size)\n    }\n  }\n\n  emit(payload: V) {\n    this._tappers.forEach((cb) => {\n      cb(payload)\n    })\n  }\n\n  hasTappers() {\n    return this._tappers.size !== 0\n  }\n\n  onNumberOfTappersChange(cb: (n: number) => void) {\n    this._onNumberOfTappersChangeListener = cb\n  }\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/utils/EventEmitter.ts",
    "content": "import forEach from 'lodash-es/forEach'\nimport without from 'lodash-es/without'\nimport type {$FixMe} from '../types'\n\ntype Listener = (v: $FixMe) => void\n\n/**\n * A simple barebones event emitter\n */\nexport default class EventEmitter {\n  _listenersByType: {[eventName: string]: Array<Listener>}\n  constructor() {\n    this._listenersByType = {}\n  }\n\n  addEventListener(eventName: string, listener: Listener) {\n    const listeners =\n      this._listenersByType[eventName] ||\n      (this._listenersByType[eventName] = [])\n\n    listeners.push(listener)\n\n    return this\n  }\n\n  removeEventListener(eventName: string, listener: Listener) {\n    const listeners = this._listenersByType[eventName]\n    if (listeners) {\n      const newListeners = without(listeners, listener)\n      if (newListeners.length === 0) {\n        delete this._listenersByType[eventName]\n      } else {\n        this._listenersByType[eventName] = newListeners\n      }\n    }\n\n    return this\n  }\n\n  emit(eventName: string, payload: unknown) {\n    const listeners = this.getListenersFor(eventName)\n    if (listeners) {\n      forEach(listeners, (listener) => {\n        listener(payload)\n      })\n    }\n  }\n\n  getListenersFor(eventName: string) {\n    return this._listenersByType[eventName]\n  }\n\n  hasListenersFor(eventName: string) {\n    return this.getListenersFor(eventName) ? true : false\n  }\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/utils/PathBasedReducer.ts",
    "content": "export type PathBasedReducer<S, ReturnType> = {\n  <\n    A0 extends keyof S,\n    A1 extends keyof S[A0],\n    A2 extends keyof S[A0][A1],\n    A3 extends keyof S[A0][A1][A2],\n    A4 extends keyof S[A0][A1][A2][A3],\n    A5 extends keyof S[A0][A1][A2][A3][A4],\n    A6 extends keyof S[A0][A1][A2][A3][A4][A5],\n    A7 extends keyof S[A0][A1][A2][A3][A4][A5][A6],\n    A8 extends keyof S[A0][A1][A2][A3][A4][A5][A6][A7],\n    A9 extends keyof S[A0][A1][A2][A3][A4][A5][A6][A7][A8],\n    A10 extends keyof S[A0][A1][A2][A3][A4][A5][A6][A7][A8][A9],\n  >(\n    addr: [A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10],\n    reducer: (\n      d: S[A0][A1][A2][A3][A4][A5][A6][A7][A8][A9][A10],\n    ) => S[A0][A1][A2][A3][A4][A5][A6][A7][A8][A9][A10],\n  ): ReturnType\n\n  <\n    A0 extends keyof S,\n    A1 extends keyof S[A0],\n    A2 extends keyof S[A0][A1],\n    A3 extends keyof S[A0][A1][A2],\n    A4 extends keyof S[A0][A1][A2][A3],\n    A5 extends keyof S[A0][A1][A2][A3][A4],\n    A6 extends keyof S[A0][A1][A2][A3][A4][A5],\n    A7 extends keyof S[A0][A1][A2][A3][A4][A5][A6],\n    A8 extends keyof S[A0][A1][A2][A3][A4][A5][A6][A7],\n    A9 extends keyof S[A0][A1][A2][A3][A4][A5][A6][A7][A8],\n  >(\n    addr: [A0, A1, A2, A3, A4, A5, A6, A7, A8, A9],\n    reducer: (\n      d: S[A0][A1][A2][A3][A4][A5][A6][A7][A8][A9],\n    ) => S[A0][A1][A2][A3][A4][A5][A6][A7][A8][A9],\n  ): ReturnType\n\n  <\n    A0 extends keyof S,\n    A1 extends keyof S[A0],\n    A2 extends keyof S[A0][A1],\n    A3 extends keyof S[A0][A1][A2],\n    A4 extends keyof S[A0][A1][A2][A3],\n    A5 extends keyof S[A0][A1][A2][A3][A4],\n    A6 extends keyof S[A0][A1][A2][A3][A4][A5],\n    A7 extends keyof S[A0][A1][A2][A3][A4][A5][A6],\n    A8 extends keyof S[A0][A1][A2][A3][A4][A5][A6][A7],\n  >(\n    addr: [A0, A1, A2, A3, A4, A5, A6, A7, A8],\n    reducer: (\n      d: S[A0][A1][A2][A3][A4][A5][A6][A7][A8],\n    ) => S[A0][A1][A2][A3][A4][A5][A6][A7][A8],\n  ): ReturnType\n\n  <\n    A0 extends keyof S,\n    A1 extends keyof S[A0],\n    A2 extends keyof S[A0][A1],\n    A3 extends keyof S[A0][A1][A2],\n    A4 extends keyof S[A0][A1][A2][A3],\n    A5 extends keyof S[A0][A1][A2][A3][A4],\n    A6 extends keyof S[A0][A1][A2][A3][A4][A5],\n    A7 extends keyof S[A0][A1][A2][A3][A4][A5][A6],\n  >(\n    addr: [A0, A1, A2, A3, A4, A5, A6, A7],\n    reducer: (\n      d: S[A0][A1][A2][A3][A4][A5][A6][A7],\n    ) => S[A0][A1][A2][A3][A4][A5][A6][A7],\n  ): ReturnType\n\n  <\n    A0 extends keyof S,\n    A1 extends keyof S[A0],\n    A2 extends keyof S[A0][A1],\n    A3 extends keyof S[A0][A1][A2],\n    A4 extends keyof S[A0][A1][A2][A3],\n    A5 extends keyof S[A0][A1][A2][A3][A4],\n    A6 extends keyof S[A0][A1][A2][A3][A4][A5],\n  >(\n    addr: [A0, A1, A2, A3, A4, A5, A6],\n    reducer: (\n      d: S[A0][A1][A2][A3][A4][A5][A6],\n    ) => S[A0][A1][A2][A3][A4][A5][A6],\n  ): ReturnType\n\n  <\n    A0 extends keyof S,\n    A1 extends keyof S[A0],\n    A2 extends keyof S[A0][A1],\n    A3 extends keyof S[A0][A1][A2],\n    A4 extends keyof S[A0][A1][A2][A3],\n    A5 extends keyof S[A0][A1][A2][A3][A4],\n  >(\n    addr: [A0, A1, A2, A3, A4, A5],\n    reducer: (d: S[A0][A1][A2][A3][A4][A5]) => S[A0][A1][A2][A3][A4][A5],\n  ): ReturnType\n\n  <\n    A0 extends keyof S,\n    A1 extends keyof S[A0],\n    A2 extends keyof S[A0][A1],\n    A3 extends keyof S[A0][A1][A2],\n    A4 extends keyof S[A0][A1][A2][A3],\n  >(\n    addr: [A0, A1, A2, A3, A4],\n    reducer: (d: S[A0][A1][A2][A3][A4]) => S[A0][A1][A2][A3][A4],\n  ): ReturnType\n\n  <\n    A0 extends keyof S,\n    A1 extends keyof S[A0],\n    A2 extends keyof S[A0][A1],\n    A3 extends keyof S[A0][A1][A2],\n  >(\n    addr: [A0, A1, A2, A3],\n    reducer: (d: S[A0][A1][A2][A3]) => S[A0][A1][A2][A3],\n  ): ReturnType\n\n  <A0 extends keyof S, A1 extends keyof S[A0], A2 extends keyof S[A0][A1]>(\n    addr: [A0, A1, A2],\n    reducer: (d: S[A0][A1][A2]) => S[A0][A1][A2],\n  ): ReturnType\n\n  <A0 extends keyof S, A1 extends keyof S[A0]>(\n    addr: [A0, A1],\n    reducer: (d: S[A0][A1]) => S[A0][A1],\n  ): ReturnType\n\n  <A0 extends keyof S>(addr: [A0], reducer: (d: S[A0]) => S[A0]): ReturnType\n\n  (addr: undefined[], reducer: (d: S) => S): ReturnType\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/utils/Stack.ts",
    "content": "interface Node<Data> {\n  next: undefined | Node<Data>\n  data: Data\n}\n\n/**\n * Just a simple LinkedList\n */\nexport default class Stack<Data> {\n  _head: undefined | Node<Data>\n\n  constructor() {\n    this._head = undefined\n  }\n\n  peek() {\n    return this._head && this._head.data\n  }\n\n  pop() {\n    const head = this._head\n    if (!head) {\n      return undefined\n    }\n    this._head = head.next\n    return head.data\n  }\n\n  push(data: Data) {\n    const node = {next: this._head, data}\n    this._head = node\n  }\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/utils/Tappable.ts",
    "content": "type Untap = () => void\ntype UntapFromSource = () => void\n\ninterface IProps<V> {\n  tapToSource: (cb: (payload: V) => void) => UntapFromSource\n}\n\ntype Listener<V> = ((v: V) => void) | (() => void)\n\nexport default class Tappable<V> {\n  private _props: IProps<V>\n  private _tappers: Map<number, {bivarianceHack(v: V): void}['bivarianceHack']>\n  private _untapFromSource: null | UntapFromSource\n  private _lastTapperId: number\n  private _untapFromSourceTimeout: null | NodeJS.Timer = null\n\n  constructor(props: IProps<V>) {\n    this._lastTapperId = 0\n    this._untapFromSource = null\n    this._props = props\n    this._tappers = new Map()\n  }\n\n  private _check() {\n    if (this._untapFromSource) {\n      if (this._tappers.size === 0) {\n        this._scheduleToUntapFromSource()\n        /*\n         * this._untapFromSource()\n         * this._untapFromSource = null\n         */\n      }\n    } else {\n      if (this._tappers.size !== 0) {\n        this._untapFromSource = this._props.tapToSource(this._cb)\n      }\n    }\n  }\n\n  private _scheduleToUntapFromSource() {\n    if (this._untapFromSourceTimeout !== null) return\n    this._untapFromSourceTimeout = setTimeout(() => {\n      this._untapFromSourceTimeout = null\n      if (this._tappers.size === 0) {\n        this._untapFromSource!()\n\n        this._untapFromSource = null\n      }\n    }, 0)\n  }\n\n  private _cb: any = (arg: any): void => {\n    this._tappers.forEach((cb) => {\n      cb(arg)\n    })\n  }\n\n  tap(cb: Listener<V>): Untap {\n    const tapperId = this._lastTapperId++\n    this._tappers.set(tapperId, cb)\n    this._check()\n    return () => {\n      this._removeTapperById(tapperId)\n    }\n  }\n\n  /*\n   * tapImmediate(cb: Listener<V>): Untap {\n   *   const ret = this.tap(cb)\n   *   return ret\n   * }\n   */\n\n  private _removeTapperById(id: number) {\n    this._tappers.delete(id)\n    this._check()\n  }\n\n  // /**\n  //  * @deprecated\n  //  */\n  // map<T>(transform: {bivarianceHack(v: V): T}['bivarianceHack']): Tappable<T> {\n  //   return new Tappable({\n  //     tapToSource: (cb: (v: T) => void) => {\n  //       return this.tap((v: $IntentionalAny) => {\n  //         return cb(transform(v))\n  //       })\n  //     },\n  //   })\n  // }\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/src/utils/typeTestUtils.ts",
    "content": "import type {$IntentionalAny} from '../types'\n\n/**\n * Useful in type tests, such as: const a: SomeType = _any\n */\nexport const _any: $IntentionalAny = null\n\n/**\n * Useful in typeTests. If you want to ensure that value v follows type V,\n * just write `expectType<V>(v)`\n */\nexport const expectType = <T extends unknown>(v: T): T => v\n"
  },
  {
    "path": "packages/dataverse-experiments/src/utils/updateDeep.ts",
    "content": "import type {$FixMe, $IntentionalAny} from '../types'\n\nexport default function updateDeep<S>(\n  state: S,\n  path: (string | number | undefined)[],\n  reducer: (...args: $IntentionalAny[]) => $IntentionalAny,\n): S {\n  if (path.length === 0) return reducer(state)\n  return hoop(state, path as $IntentionalAny, reducer)\n}\n\nconst hoop = (\n  s: $FixMe,\n  path: (string | number)[],\n  reducer: $FixMe,\n): $FixMe => {\n  if (path.length === 0) {\n    return reducer(s)\n  }\n  if (Array.isArray(s)) {\n    let [index, ...restOfPath] = path\n    index = parseInt(String(index), 10)\n    if (isNaN(index)) index = 0\n    const oldVal = s[index]\n    const newVal = hoop(oldVal, restOfPath, reducer)\n    if (oldVal === newVal) return s\n    const newS = [...s]\n    newS.splice(index, 1, newVal)\n    return newS\n  } else if (typeof s === 'object' && s !== null) {\n    const [key, ...restOfPath] = path\n    const oldVal = s[key]\n    const newVal = hoop(oldVal, restOfPath, reducer)\n    if (oldVal === newVal) return s\n    const newS = {...s, [key]: newVal}\n    return newS\n  } else {\n    const [key, ...restOfPath] = path\n\n    return {[key]: hoop(undefined, restOfPath, reducer)}\n  }\n}\n"
  },
  {
    "path": "packages/dataverse-experiments/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \".temp/declarations\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \".\",\n    \"types\": [\"jest\", \"node\"],\n    \"composite\": true\n  },\n  \"include\": [\"./src/**/*\"]\n}\n"
  },
  {
    "path": "packages/playground/.gitignore",
    "content": "/dist\n/test-results/\n/playwright-report/\n/build\n/dist"
  },
  {
    "path": "packages/playground/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "packages/playground/README.md",
    "content": "# The playground\n\nThe playground is the quickest way to hack on the internals of Theatre. It also\nhosts our end-to-end tests. It uses a build setup (see the live-reload esbuild\nserver in [./devEnv/build.ts](./devEnv/build.ts)) that builds all the related\npackages in one go, so you _don't_ have to run a bunch of build commands\nseparately to start developing.\n\n## Directory structure\n\n```\nsrc/\n  shared/                      <---- playgrounds shared with teammates.\n    [playground-name]/         <---- each playground has a name...\n      index.tsx                <---- and an entry file.\n\n  personal/                    <---- personal playgrounds (gitignored).\n    [playground-name]/         <---- personal playgrounds also have names,\n      index.tsx                <---- and an entry file.\n\n  tests/                       <---- playgrounds for e2e testing.\n    [playground-name]/         <---- the name of the test playground,\n      index.tsx                <---- and its entry file.\n      [test-file-name].e2e.ts  <---- The playwright test script that tests this particular playground.\n      [test2].e2e.ts           <---- We can have more than one test file per playground.\n```\n\n## How to use the playground\n\nSimply run `yarn run serve` in this folder to start the dev server.\n\nThere are some shared playgrounds in `src/shared` which are committed to the\nrepo. You can make your own playgrounds in `src/personal` which will be\n`.gitignore`d. Note that every playground must include an entry file called\n`index.tsx` (as you see in the\n[Directory structure section](#directory-structure)).\n\n## How to write and run end-to-end tests\n\nThe end-to-end tests are in the `src/tests` folder. Look at\n[directory structure](#directory-structure) to see how test files are organized.\n\nThe end-to-end tests are made using [playwright](https://playwright.dev). You\nshould refer to playwright's documentation\n\n```bash\n$ cd playground\n$ yarn test # runs the end-to-end tests\n$ yarn test --project=firefox # only run the tests in firefox\n$ yarn test --project=firefox --headed # run the test in headed mode in firefox\n$ yarn test --debug # run in debug mode using the inspector: https://playwright.dev/docs/inspector\n```\n\n### Using playwright codegen\n\nTo use [playwright's codegen tool](https://playwright.dev/docs/codegen), first\nserve the playground and then run the codegen on the a url that points to the\nplayground you wish to test:\n\n```bash\n$ cd playground\n$ yarn serve # first serve the playground\n$ yarn playwright codegen http://localhost:8080/tests/[playground-name] # run the codegen for [playground-name]\n```\n\n## Visual regression testing\n\nSome `.e2e.ts` files also contain visual regression tetst. These tests run only\nthe the [CI](../../.github/workflows/main.yml) using\n[Github actions](https://github.com/theatre-js/theatre/actions). Look at the\nexample at\n[`src/tests/setting-static-props/test.e2e.ts`](src/tests/setting-static-props/test.e2e.ts)\nfor an example of recording and diffing a screenshot.\n\nNote that CI runs the visual regression tests in a linux VM, which is bound to\nproduce a slightly different screenshot than a browser on Mac/Windows. Because\nof that, we have a `docker-compose.yml` file at the root of the repo which you\ncan use to produce a screenshot in a linux vm. Here is how you can use it:\n\n```bash\n$ cd repo\n$ docker-compose up -d # start the linux vm\n$ docker-compose exec -it node bash # ssh into the vm\n$ cd app\n$ yarn\n$ yarn test:e2e:ci\n```\n\nIf you're submitting a PR that breaks the visual regression tests and you're not\nfamiliar with Docker, simply ask the mainainers to update the screenshots for\nyou.\n"
  },
  {
    "path": "packages/playground/devEnv/.gitignore",
    "content": "build.compiled.js\n"
  },
  {
    "path": "packages/playground/devEnv/playwright-report/index.html",
    "content": "<!doctype html><html><head><meta charset=\"UTF-8\"><meta name=\"color-scheme\" content=\"dark light\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>Playwright Test Report</title><script>(()=>{\"use strict\";var e,t;e=void 0,t=function(e){const t=-2,n=-3,i=-5,r=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],a=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],s=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],o=[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],c=[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,112,112],l=[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],d=[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];function u(){let e,t,r,a,s,u;function f(e,t,o,c,l,d,f,h,_,w,p){let b,g,y,x,m,k,v,A,R,U,E,S,T,z,D;U=0,m=o;do{r[e[t+U]]++,U++,m--}while(0!==m);if(r[0]==o)return f[0]=-1,h[0]=0,0;for(A=h[0],k=1;k<=15&&0===r[k];k++);for(v=k,A<k&&(A=k),m=15;0!==m&&0===r[m];m--);for(y=m,A>m&&(A=m),h[0]=A,z=1<<k;k<m;k++,z<<=1)if((z-=r[k])<0)return n;if((z-=r[m])<0)return n;for(r[m]+=z,u[1]=k=0,U=1,T=2;0!=--m;)u[T]=k+=r[U],T++,U++;m=0,U=0;do{0!==(k=e[t+U])&&(p[u[k]++]=m),U++}while(++m<o);for(o=u[y],u[0]=m=0,U=0,x=-1,S=-A,s[0]=0,E=0,D=0;v<=y;v++)for(b=r[v];0!=b--;){for(;v>S+A;){if(x++,S+=A,D=y-S,D=D>A?A:D,(g=1<<(k=v-S))>b+1&&(g-=b+1,T=v,k<D))for(;++k<D&&!((g<<=1)<=r[++T]);)g-=r[T];if(D=1<<k,w[0]+D>1440)return n;s[x]=E=w[0],w[0]+=D,0!==x?(u[x]=m,a[0]=k,a[1]=A,k=m>>>S-A,a[2]=E-s[x-1]-k,_.set(a,3*(s[x-1]+k))):f[0]=E}for(a[1]=v-S,U>=o?a[0]=192:p[U]<c?(a[0]=p[U]<256?0:96,a[2]=p[U++]):(a[0]=d[p[U]-c]+16+64,a[2]=l[p[U++]-c]),g=1<<v-S,k=m>>>S;k<D;k+=g)_.set(a,3*(E+k));for(k=1<<v-1;0!=(m&k);k>>>=1)m^=k;for(m^=k,R=(1<<S)-1;(m&R)!=u[x];)x--,S-=A,R=(1<<S)-1}return 0!==z&&1!=y?i:0}function h(n){let i;for(e||(e=[],t=[],r=new Int32Array(16),a=[],s=new Int32Array(15),u=new Int32Array(16)),t.length<n&&(t=[]),i=0;i<n;i++)t[i]=0;for(i=0;i<16;i++)r[i]=0;for(i=0;i<3;i++)a[i]=0;s.set(r.subarray(0,15),0),u.set(r.subarray(0,16),0)}this.inflate_trees_bits=function(r,a,s,o,c){let l;return h(19),e[0]=0,l=f(r,0,19,19,null,null,s,a,o,e,t),l==n?c.msg=\"oversubscribed dynamic bit lengths tree\":l!=i&&0!==a[0]||(c.msg=\"incomplete dynamic bit lengths tree\",l=n),l},this.inflate_trees_dynamic=function(r,a,s,u,_,w,p,b,g){let y;return h(288),e[0]=0,y=f(s,0,r,257,o,c,w,u,b,e,t),0!=y||0===u[0]?(y==n?g.msg=\"oversubscribed literal/length tree\":-4!=y&&(g.msg=\"incomplete literal/length tree\",y=n),y):(h(288),y=f(s,r,a,0,l,d,p,_,b,e,t),0!=y||0===_[0]&&r>257?(y==n?g.msg=\"oversubscribed distance tree\":y==i?(g.msg=\"incomplete distance tree\",y=n):-4!=y&&(g.msg=\"empty distance tree with lengths\",y=n),y):0)}}function f(){const e=this;let i,a,s,o,c=0,l=0,d=0,u=0,f=0,h=0,_=0,w=0,p=0,b=0;function g(e,t,i,a,s,o,c,l){let d,u,f,h,_,w,p,b,g,y,x,m,k,v,A,R;p=l.next_in_index,b=l.avail_in,_=c.bitb,w=c.bitk,g=c.write,y=g<c.read?c.read-g-1:c.end-g,x=r[e],m=r[t];do{for(;w<20;)b--,_|=(255&l.read_byte(p++))<<w,w+=8;if(d=_&x,u=i,f=a,R=3*(f+d),0!==(h=u[R]))for(;;){if(_>>=u[R+1],w-=u[R+1],0!=(16&h)){for(h&=15,k=u[R+2]+(_&r[h]),_>>=h,w-=h;w<15;)b--,_|=(255&l.read_byte(p++))<<w,w+=8;for(d=_&m,u=s,f=o,R=3*(f+d),h=u[R];;){if(_>>=u[R+1],w-=u[R+1],0!=(16&h)){for(h&=15;w<h;)b--,_|=(255&l.read_byte(p++))<<w,w+=8;if(v=u[R+2]+(_&r[h]),_>>=h,w-=h,y-=k,g>=v)A=g-v,g-A>0&&2>g-A?(c.window[g++]=c.window[A++],c.window[g++]=c.window[A++],k-=2):(c.window.set(c.window.subarray(A,A+2),g),g+=2,A+=2,k-=2);else{A=g-v;do{A+=c.end}while(A<0);if(h=c.end-A,k>h){if(k-=h,g-A>0&&h>g-A)do{c.window[g++]=c.window[A++]}while(0!=--h);else c.window.set(c.window.subarray(A,A+h),g),g+=h,A+=h,h=0;A=0}}if(g-A>0&&k>g-A)do{c.window[g++]=c.window[A++]}while(0!=--k);else c.window.set(c.window.subarray(A,A+k),g),g+=k,A+=k,k=0;break}if(0!=(64&h))return l.msg=\"invalid distance code\",k=l.avail_in-b,k=w>>3<k?w>>3:k,b+=k,p-=k,w-=k<<3,c.bitb=_,c.bitk=w,l.avail_in=b,l.total_in+=p-l.next_in_index,l.next_in_index=p,c.write=g,n;d+=u[R+2],d+=_&r[h],R=3*(f+d),h=u[R]}break}if(0!=(64&h))return 0!=(32&h)?(k=l.avail_in-b,k=w>>3<k?w>>3:k,b+=k,p-=k,w-=k<<3,c.bitb=_,c.bitk=w,l.avail_in=b,l.total_in+=p-l.next_in_index,l.next_in_index=p,c.write=g,1):(l.msg=\"invalid literal/length code\",k=l.avail_in-b,k=w>>3<k?w>>3:k,b+=k,p-=k,w-=k<<3,c.bitb=_,c.bitk=w,l.avail_in=b,l.total_in+=p-l.next_in_index,l.next_in_index=p,c.write=g,n);if(d+=u[R+2],d+=_&r[h],R=3*(f+d),0===(h=u[R])){_>>=u[R+1],w-=u[R+1],c.window[g++]=u[R+2],y--;break}}else _>>=u[R+1],w-=u[R+1],c.window[g++]=u[R+2],y--}while(y>=258&&b>=10);return k=l.avail_in-b,k=w>>3<k?w>>3:k,b+=k,p-=k,w-=k<<3,c.bitb=_,c.bitk=w,l.avail_in=b,l.total_in+=p-l.next_in_index,l.next_in_index=p,c.write=g,0}e.init=function(e,t,n,r,c,l){i=0,_=e,w=t,s=n,p=r,o=c,b=l,a=null},e.proc=function(e,y,x){let m,k,v,A,R,U,E,S=0,T=0,z=0;for(z=y.next_in_index,A=y.avail_in,S=e.bitb,T=e.bitk,R=e.write,U=R<e.read?e.read-R-1:e.end-R;;)switch(i){case 0:if(U>=258&&A>=10&&(e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,x=g(_,w,s,p,o,b,e,y),z=y.next_in_index,A=y.avail_in,S=e.bitb,T=e.bitk,R=e.write,U=R<e.read?e.read-R-1:e.end-R,0!=x)){i=1==x?7:9;break}d=_,a=s,l=p,i=1;case 1:for(m=d;T<m;){if(0===A)return e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,e.inflate_flush(y,x);x=0,A--,S|=(255&y.read_byte(z++))<<T,T+=8}if(k=3*(l+(S&r[m])),S>>>=a[k+1],T-=a[k+1],v=a[k],0===v){u=a[k+2],i=6;break}if(0!=(16&v)){f=15&v,c=a[k+2],i=2;break}if(0==(64&v)){d=v,l=k/3+a[k+2];break}if(0!=(32&v)){i=7;break}return i=9,y.msg=\"invalid literal/length code\",x=n,e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,e.inflate_flush(y,x);case 2:for(m=f;T<m;){if(0===A)return e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,e.inflate_flush(y,x);x=0,A--,S|=(255&y.read_byte(z++))<<T,T+=8}c+=S&r[m],S>>=m,T-=m,d=w,a=o,l=b,i=3;case 3:for(m=d;T<m;){if(0===A)return e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,e.inflate_flush(y,x);x=0,A--,S|=(255&y.read_byte(z++))<<T,T+=8}if(k=3*(l+(S&r[m])),S>>=a[k+1],T-=a[k+1],v=a[k],0!=(16&v)){f=15&v,h=a[k+2],i=4;break}if(0==(64&v)){d=v,l=k/3+a[k+2];break}return i=9,y.msg=\"invalid distance code\",x=n,e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,e.inflate_flush(y,x);case 4:for(m=f;T<m;){if(0===A)return e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,e.inflate_flush(y,x);x=0,A--,S|=(255&y.read_byte(z++))<<T,T+=8}h+=S&r[m],S>>=m,T-=m,i=5;case 5:for(E=R-h;E<0;)E+=e.end;for(;0!==c;){if(0===U&&(R==e.end&&0!==e.read&&(R=0,U=R<e.read?e.read-R-1:e.end-R),0===U&&(e.write=R,x=e.inflate_flush(y,x),R=e.write,U=R<e.read?e.read-R-1:e.end-R,R==e.end&&0!==e.read&&(R=0,U=R<e.read?e.read-R-1:e.end-R),0===U)))return e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,e.inflate_flush(y,x);e.window[R++]=e.window[E++],U--,E==e.end&&(E=0),c--}i=0;break;case 6:if(0===U&&(R==e.end&&0!==e.read&&(R=0,U=R<e.read?e.read-R-1:e.end-R),0===U&&(e.write=R,x=e.inflate_flush(y,x),R=e.write,U=R<e.read?e.read-R-1:e.end-R,R==e.end&&0!==e.read&&(R=0,U=R<e.read?e.read-R-1:e.end-R),0===U)))return e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,e.inflate_flush(y,x);x=0,e.window[R++]=u,U--,i=0;break;case 7:if(T>7&&(T-=8,A++,z--),e.write=R,x=e.inflate_flush(y,x),R=e.write,U=R<e.read?e.read-R-1:e.end-R,e.read!=e.write)return e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,e.inflate_flush(y,x);i=8;case 8:return x=1,e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,e.inflate_flush(y,x);case 9:return x=n,e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,e.inflate_flush(y,x);default:return x=t,e.bitb=S,e.bitk=T,y.avail_in=A,y.total_in+=z-y.next_in_index,y.next_in_index=z,e.write=R,e.inflate_flush(y,x)}},e.free=function(){}}u.inflate_trees_fixed=function(e,t,n,i){return e[0]=9,t[0]=5,n[0]=a,i[0]=s,0};const h=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function _(e,a){const s=this;let o,c=0,l=0,d=0,_=0;const w=[0],p=[0],b=new f;let g=0,y=new Int32Array(4320);const x=new u;s.bitk=0,s.bitb=0,s.window=new Uint8Array(a),s.end=a,s.read=0,s.write=0,s.reset=function(e,t){t&&(t[0]=0),6==c&&b.free(e),c=0,s.bitk=0,s.bitb=0,s.read=s.write=0},s.reset(e,null),s.inflate_flush=function(e,t){let n,r,a;return r=e.next_out_index,a=s.read,n=(a<=s.write?s.write:s.end)-a,n>e.avail_out&&(n=e.avail_out),0!==n&&t==i&&(t=0),e.avail_out-=n,e.total_out+=n,e.next_out.set(s.window.subarray(a,a+n),r),r+=n,a+=n,a==s.end&&(a=0,s.write==s.end&&(s.write=0),n=s.write-a,n>e.avail_out&&(n=e.avail_out),0!==n&&t==i&&(t=0),e.avail_out-=n,e.total_out+=n,e.next_out.set(s.window.subarray(a,a+n),r),r+=n,a+=n),e.next_out_index=r,s.read=a,t},s.proc=function(e,i){let a,f,m,k,v,A,R,U;for(k=e.next_in_index,v=e.avail_in,f=s.bitb,m=s.bitk,A=s.write,R=A<s.read?s.read-A-1:s.end-A;;){let E,S,T,z,D,F,C,O;switch(c){case 0:for(;m<3;){if(0===v)return s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);i=0,v--,f|=(255&e.read_byte(k++))<<m,m+=8}switch(a=7&f,g=1&a,a>>>1){case 0:f>>>=3,m-=3,a=7&m,f>>>=a,m-=a,c=1;break;case 1:E=[],S=[],T=[[]],z=[[]],u.inflate_trees_fixed(E,S,T,z),b.init(E[0],S[0],T[0],0,z[0],0),f>>>=3,m-=3,c=6;break;case 2:f>>>=3,m-=3,c=3;break;case 3:return f>>>=3,m-=3,c=9,e.msg=\"invalid block type\",i=n,s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i)}break;case 1:for(;m<32;){if(0===v)return s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);i=0,v--,f|=(255&e.read_byte(k++))<<m,m+=8}if((~f>>>16&65535)!=(65535&f))return c=9,e.msg=\"invalid stored block lengths\",i=n,s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);l=65535&f,f=m=0,c=0!==l?2:0!==g?7:0;break;case 2:if(0===v)return s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);if(0===R&&(A==s.end&&0!==s.read&&(A=0,R=A<s.read?s.read-A-1:s.end-A),0===R&&(s.write=A,i=s.inflate_flush(e,i),A=s.write,R=A<s.read?s.read-A-1:s.end-A,A==s.end&&0!==s.read&&(A=0,R=A<s.read?s.read-A-1:s.end-A),0===R)))return s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);if(i=0,a=l,a>v&&(a=v),a>R&&(a=R),s.window.set(e.read_buf(k,a),A),k+=a,v-=a,A+=a,R-=a,0!=(l-=a))break;c=0!==g?7:0;break;case 3:for(;m<14;){if(0===v)return s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);i=0,v--,f|=(255&e.read_byte(k++))<<m,m+=8}if(d=a=16383&f,(31&a)>29||(a>>5&31)>29)return c=9,e.msg=\"too many length or distance symbols\",i=n,s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);if(a=258+(31&a)+(a>>5&31),!o||o.length<a)o=[];else for(U=0;U<a;U++)o[U]=0;f>>>=14,m-=14,_=0,c=4;case 4:for(;_<4+(d>>>10);){for(;m<3;){if(0===v)return s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);i=0,v--,f|=(255&e.read_byte(k++))<<m,m+=8}o[h[_++]]=7&f,f>>>=3,m-=3}for(;_<19;)o[h[_++]]=0;if(w[0]=7,a=x.inflate_trees_bits(o,w,p,y,e),0!=a)return(i=a)==n&&(o=null,c=9),s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);_=0,c=5;case 5:for(;a=d,!(_>=258+(31&a)+(a>>5&31));){let t,l;for(a=w[0];m<a;){if(0===v)return s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);i=0,v--,f|=(255&e.read_byte(k++))<<m,m+=8}if(a=y[3*(p[0]+(f&r[a]))+1],l=y[3*(p[0]+(f&r[a]))+2],l<16)f>>>=a,m-=a,o[_++]=l;else{for(U=18==l?7:l-14,t=18==l?11:3;m<a+U;){if(0===v)return s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);i=0,v--,f|=(255&e.read_byte(k++))<<m,m+=8}if(f>>>=a,m-=a,t+=f&r[U],f>>>=U,m-=U,U=_,a=d,U+t>258+(31&a)+(a>>5&31)||16==l&&U<1)return o=null,c=9,e.msg=\"invalid bit length repeat\",i=n,s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);l=16==l?o[U-1]:0;do{o[U++]=l}while(0!=--t);_=U}}if(p[0]=-1,D=[],F=[],C=[],O=[],D[0]=9,F[0]=6,a=d,a=x.inflate_trees_dynamic(257+(31&a),1+(a>>5&31),o,D,F,C,O,y,e),0!=a)return a==n&&(o=null,c=9),i=a,s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);b.init(D[0],F[0],y,C[0],y,O[0]),c=6;case 6:if(s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,1!=(i=b.proc(s,e,i)))return s.inflate_flush(e,i);if(i=0,b.free(e),k=e.next_in_index,v=e.avail_in,f=s.bitb,m=s.bitk,A=s.write,R=A<s.read?s.read-A-1:s.end-A,0===g){c=0;break}c=7;case 7:if(s.write=A,i=s.inflate_flush(e,i),A=s.write,R=A<s.read?s.read-A-1:s.end-A,s.read!=s.write)return s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);c=8;case 8:return i=1,s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);case 9:return i=n,s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i);default:return i=t,s.bitb=f,s.bitk=m,e.avail_in=v,e.total_in+=k-e.next_in_index,e.next_in_index=k,s.write=A,s.inflate_flush(e,i)}}},s.free=function(e){s.reset(e,null),s.window=null,y=null},s.set_dictionary=function(e,t,n){s.window.set(e.subarray(t,t+n),0),s.read=s.write=n},s.sync_point=function(){return 1==c?1:0}}const w=13,p=[0,0,255,255];function b(){const e=this;function r(e){return e&&e.istate?(e.total_in=e.total_out=0,e.msg=null,e.istate.mode=7,e.istate.blocks.reset(e,null),0):t}e.mode=0,e.method=0,e.was=[0],e.need=0,e.marker=0,e.wbits=0,e.inflateEnd=function(t){return e.blocks&&e.blocks.free(t),e.blocks=null,0},e.inflateInit=function(n,i){return n.msg=null,e.blocks=null,i<8||i>15?(e.inflateEnd(n),t):(e.wbits=i,n.istate.blocks=new _(n,1<<i),r(n),0)},e.inflate=function(e,r){let a,s;if(!e||!e.istate||!e.next_in)return t;const o=e.istate;for(r=4==r?i:0,a=i;;)switch(o.mode){case 0:if(0===e.avail_in)return a;if(a=r,e.avail_in--,e.total_in++,8!=(15&(o.method=e.read_byte(e.next_in_index++)))){o.mode=w,e.msg=\"unknown compression method\",o.marker=5;break}if(8+(o.method>>4)>o.wbits){o.mode=w,e.msg=\"invalid window size\",o.marker=5;break}o.mode=1;case 1:if(0===e.avail_in)return a;if(a=r,e.avail_in--,e.total_in++,s=255&e.read_byte(e.next_in_index++),((o.method<<8)+s)%31!=0){o.mode=w,e.msg=\"incorrect header check\",o.marker=5;break}if(0==(32&s)){o.mode=7;break}o.mode=2;case 2:if(0===e.avail_in)return a;a=r,e.avail_in--,e.total_in++,o.need=(255&e.read_byte(e.next_in_index++))<<24&4278190080,o.mode=3;case 3:if(0===e.avail_in)return a;a=r,e.avail_in--,e.total_in++,o.need+=(255&e.read_byte(e.next_in_index++))<<16&16711680,o.mode=4;case 4:if(0===e.avail_in)return a;a=r,e.avail_in--,e.total_in++,o.need+=(255&e.read_byte(e.next_in_index++))<<8&65280,o.mode=5;case 5:return 0===e.avail_in?a:(a=r,e.avail_in--,e.total_in++,o.need+=255&e.read_byte(e.next_in_index++),o.mode=6,2);case 6:return o.mode=w,e.msg=\"need dictionary\",o.marker=0,t;case 7:if(a=o.blocks.proc(e,a),a==n){o.mode=w,o.marker=0;break}if(0==a&&(a=r),1!=a)return a;a=r,o.blocks.reset(e,o.was),o.mode=12;case 12:return 1;case w:return n;default:return t}},e.inflateSetDictionary=function(e,n,i){let r=0,a=i;if(!e||!e.istate||6!=e.istate.mode)return t;const s=e.istate;return a>=1<<s.wbits&&(a=(1<<s.wbits)-1,r=i-a),s.blocks.set_dictionary(n,r,a),s.mode=7,0},e.inflateSync=function(e){let a,s,o,c,l;if(!e||!e.istate)return t;const d=e.istate;if(d.mode!=w&&(d.mode=w,d.marker=0),0===(a=e.avail_in))return i;for(s=e.next_in_index,o=d.marker;0!==a&&o<4;)e.read_byte(s)==p[o]?o++:o=0!==e.read_byte(s)?0:4-o,s++,a--;return e.total_in+=s-e.next_in_index,e.next_in_index=s,e.avail_in=a,d.marker=o,4!=o?n:(c=e.total_in,l=e.total_out,r(e),e.total_in=c,e.total_out=l,d.mode=7,0)},e.inflateSyncPoint=function(e){return e&&e.istate&&e.istate.blocks?e.istate.blocks.sync_point():t}}function g(){}g.prototype={inflateInit:function(e){const t=this;return t.istate=new b,e||(e=15),t.istate.inflateInit(t,e)},inflate:function(e){const n=this;return n.istate?n.istate.inflate(n,e):t},inflateEnd:function(){const e=this;if(!e.istate)return t;const n=e.istate.inflateEnd(e);return e.istate=null,n},inflateSync:function(){const e=this;return e.istate?e.istate.inflateSync(e):t},inflateSetDictionary:function(e,n){const i=this;return i.istate?i.istate.inflateSetDictionary(i,e,n):t},read_byte:function(e){return this.next_in[e]},read_buf:function(e,t){return this.next_in.subarray(e,e+t)}};const y={chunkSize:524288,maxWorkers:\"undefined\"!=typeof navigator&&navigator.hardwareConcurrency||2,terminateWorkerTimeout:5e3,useWebWorkers:!0,workerScripts:void 0},x=Object.assign({},y);function m(e){if(void 0!==e.baseURL&&(x.baseURL=e.baseURL),void 0!==e.chunkSize&&(x.chunkSize=e.chunkSize),void 0!==e.maxWorkers&&(x.maxWorkers=e.maxWorkers),void 0!==e.terminateWorkerTimeout&&(x.terminateWorkerTimeout=e.terminateWorkerTimeout),void 0!==e.useWebWorkers&&(x.useWebWorkers=e.useWebWorkers),void 0!==e.Deflate&&(x.Deflate=e.Deflate),void 0!==e.Inflate&&(x.Inflate=e.Inflate),void 0!==e.workerScripts){if(e.workerScripts.deflate){if(!Array.isArray(e.workerScripts.deflate))throw new Error(\"workerScripts.deflate must be an array\");x.workerScripts||(x.workerScripts={}),x.workerScripts.deflate=e.workerScripts.deflate}if(e.workerScripts.inflate){if(!Array.isArray(e.workerScripts.inflate))throw new Error(\"workerScripts.inflate must be an array\");x.workerScripts||(x.workerScripts={}),x.workerScripts.inflate=e.workerScripts.inflate}}}const k=\"Abort error\";function v(e,t){if(e&&e.aborted)throw t.flush(),new Error(k)}async function A(e,t){return t.length&&await e.writeUint8Array(t),t.length}const R=\"HTTP error \",U=\"HTTP Range not supported\",E=\"text/plain\",S=\"GET\";class T{constructor(){this.size=0}init(){this.initialized=!0}}class z extends T{}class D extends T{writeUint8Array(e){this.size+=e.length}}class F extends z{constructor(e){super(),this.blob=e,this.size=e.size}async readUint8Array(e,t){if(this.blob.arrayBuffer)return new Uint8Array(await this.blob.slice(e,e+t).arrayBuffer());{const n=new FileReader;return new Promise(((i,r)=>{n.onload=e=>i(new Uint8Array(e.target.result)),n.onerror=()=>r(n.error),n.readAsArrayBuffer(this.blob.slice(e,e+t))}))}}}class C extends z{constructor(e,t){super(),this.url=e,this.preventHeadRequest=t.preventHeadRequest,this.useRangeHeader=t.useRangeHeader,this.forceRangeRequests=t.forceRangeRequests,this.options=Object.assign({},t),delete this.options.preventHeadRequest,delete this.options.useRangeHeader,delete this.options.forceRangeRequests,delete this.options.useXHR}async init(){super.init(),await I(this,j,L)}async readUint8Array(e,t){return B(this,e,t,j,L)}}class O extends z{constructor(e,t){super(),this.url=e,this.preventHeadRequest=t.preventHeadRequest,this.useRangeHeader=t.useRangeHeader,this.forceRangeRequests=t.forceRangeRequests,this.options=t}async init(){super.init(),await I(this,V,H)}async readUint8Array(e,t){return B(this,e,t,V,H)}}async function I(e,t,n){if(function(e){if(\"undefined\"!=typeof document){const t=document.createElement(\"a\");return t.href=e,\"http:\"==t.protocol||\"https:\"==t.protocol}return/^https?:\\/\\//i.test(e)}(e.url)&&(e.useRangeHeader||e.forceRangeRequests)){const i=await t(S,e,M(e));if(!e.forceRangeRequests&&\"bytes\"!=i.headers.get(\"Accept-Ranges\"))throw new Error(U);{let r;const a=i.headers.get(\"Content-Range\");if(a){const e=a.trim().split(/\\s*\\/\\s*/);if(e.length){const t=e[1];t&&\"*\"!=t&&(r=Number(t))}}void 0===r?await P(e,t,n):e.size=r}}else await P(e,t,n)}async function B(e,t,n,i,r){if(e.useRangeHeader||e.forceRangeRequests){const r=await i(S,e,M(e,t,n));if(206!=r.status)throw new Error(U);return new Uint8Array(await r.arrayBuffer())}return e.data||await r(e,e.options),new Uint8Array(e.data.subarray(t,t+n))}function M(e,t=0,n=1){return Object.assign({},W(e),{Range:\"bytes=\"+t+\"-\"+(t+n-1)})}function W(e){let t=e.options.headers;if(t)return Symbol.iterator in t?Object.fromEntries(t):t}async function L(e){await N(e,j)}async function H(e){await N(e,V)}async function N(e,t){const n=await t(S,e,W(e));e.data=new Uint8Array(await n.arrayBuffer()),e.size||(e.size=e.data.length)}async function P(e,t,n){if(e.preventHeadRequest)await n(e,e.options);else{const i=(await t(\"HEAD\",e,W(e))).headers.get(\"Content-Length\");i?e.size=Number(i):await n(e,e.options)}}async function j(e,{options:t,url:n},i){const r=await fetch(n,Object.assign({},t,{method:e,headers:i}));if(r.status<400)return r;throw new Error(R+(r.statusText||r.status))}function V(e,{url:t},n){return new Promise(((i,r)=>{const a=new XMLHttpRequest;if(a.addEventListener(\"load\",(()=>{if(a.status<400){const e=[];a.getAllResponseHeaders().trim().split(/[\\r\\n]+/).forEach((t=>{const n=t.trim().split(/\\s*:\\s*/);n[0]=n[0].trim().replace(/^[a-z]|-[a-z]/g,(e=>e.toUpperCase())),e.push(n)})),i({status:a.status,arrayBuffer:()=>a.response,headers:new Map(e)})}else r(new Error(R+(a.statusText||a.status)))}),!1),a.addEventListener(\"error\",(e=>r(e.detail.error)),!1),a.open(e,t),n)for(const e of Object.entries(n))a.setRequestHeader(e[0],e[1]);a.responseType=\"arraybuffer\",a.send()}))}class q extends z{constructor(e,t={}){super(),this.url=e,t.useXHR?this.reader=new O(e,t):this.reader=new C(e,t)}set size(e){}get size(){return this.reader.size}async init(){super.init(),await this.reader.init()}async readUint8Array(e,t){return this.reader.readUint8Array(e,t)}}const Z=4294967295,G=33639248,K=101075792,X=[];for(let e=0;e<256;e++){let t=e;for(let e=0;e<8;e++)1&t?t=t>>>1^3988292384:t>>>=1;X[e]=t}class Y{constructor(e){this.crc=e||-1}append(e){let t=0|this.crc;for(let n=0,i=0|e.length;n<i;n++)t=t>>>8^X[255&(t^e[n])];this.crc=t}get(){return~this.crc}}const J={concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const n=e[e.length-1],i=J.getPartial(n);return 32===i?e.concat(t):J._shiftRight(t,i,0|n,e.slice(0,e.length-1))},bitLength(e){const t=e.length;if(0===t)return 0;const n=e[t-1];return 32*(t-1)+J.getPartial(n)},clamp(e,t){if(32*e.length<t)return e;const n=(e=e.slice(0,Math.ceil(t/32))).length;return t&=31,n>0&&t&&(e[n-1]=J.partial(t,e[n-1]&2147483648>>t-1,1)),e},partial:(e,t,n)=>32===e?t:(n?0|t:t<<32-e)+1099511627776*e,getPartial:e=>Math.round(e/1099511627776)||32,_shiftRight(e,t,n,i){for(void 0===i&&(i=[]);t>=32;t-=32)i.push(n),n=0;if(0===t)return i.concat(e);for(let r=0;r<e.length;r++)i.push(n|e[r]>>>t),n=e[r]<<32-t;const r=e.length?e[e.length-1]:0,a=J.getPartial(r);return i.push(J.partial(t+a&31,t+a>32?n:i.pop(),1)),i}},Q={bytes:{fromBits(e){const t=J.bitLength(e)/8,n=new Uint8Array(t);let i;for(let r=0;r<t;r++)0==(3&r)&&(i=e[r/4]),n[r]=i>>>24,i<<=8;return n},toBits(e){const t=[];let n,i=0;for(n=0;n<e.length;n++)i=i<<8|e[n],3==(3&n)&&(t.push(i),i=0);return 3&n&&t.push(J.partial(8*(3&n),i)),t}}},$={sha1:function(e){e?(this._h=e._h.slice(0),this._buffer=e._buffer.slice(0),this._length=e._length):this.reset()}};$.sha1.prototype={blockSize:512,reset:function(){const e=this;return e._h=this._init.slice(0),e._buffer=[],e._length=0,e},update:function(e){const t=this;\"string\"==typeof e&&(e=Q.utf8String.toBits(e));const n=t._buffer=J.concat(t._buffer,e),i=t._length,r=t._length=i+J.bitLength(e);if(r>9007199254740991)throw new Error(\"Cannot hash more than 2^53 - 1 bits\");const a=new Uint32Array(n);let s=0;for(let e=t.blockSize+i-(t.blockSize+i&t.blockSize-1);e<=r;e+=t.blockSize)t._block(a.subarray(16*s,16*(s+1))),s+=1;return n.splice(0,16*s),t},finalize:function(){const e=this;let t=e._buffer;const n=e._h;t=J.concat(t,[J.partial(1,1)]);for(let e=t.length+2;15&e;e++)t.push(0);for(t.push(Math.floor(e._length/4294967296)),t.push(0|e._length);t.length;)e._block(t.splice(0,16));return e.reset(),n},_init:[1732584193,4023233417,2562383102,271733878,3285377520],_key:[1518500249,1859775393,2400959708,3395469782],_f:function(e,t,n,i){return e<=19?t&n|~t&i:e<=39?t^n^i:e<=59?t&n|t&i|n&i:e<=79?t^n^i:void 0},_S:function(e,t){return t<<e|t>>>32-e},_block:function(e){const t=this,n=t._h,i=Array(80);for(let t=0;t<16;t++)i[t]=e[t];let r=n[0],a=n[1],s=n[2],o=n[3],c=n[4];for(let e=0;e<=79;e++){e>=16&&(i[e]=t._S(1,i[e-3]^i[e-8]^i[e-14]^i[e-16]));const n=t._S(5,r)+t._f(e,a,s,o)+c+i[e]+t._key[Math.floor(e/20)]|0;c=o,o=s,s=t._S(30,a),a=r,r=n}n[0]=n[0]+r|0,n[1]=n[1]+a|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+c|0}};const ee=\"Invalid pasword\",te=16,ne={name:\"PBKDF2\"},ie=Object.assign({hash:{name:\"HMAC\"}},ne),re=Object.assign({iterations:1e3,hash:{name:\"SHA-1\"}},ne),ae=[\"deriveBits\"],se=[8,12,16],oe=[16,24,32],ce=10,le=[0,0,0,0],de=Q.bytes,ue=class{constructor(e){const t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();const n=t._tables[0][4],i=t._tables[1],r=e.length;let a,s,o,c=1;if(4!==r&&6!==r&&8!==r)throw new Error(\"invalid aes key size\");for(t._key=[s=e.slice(0),o=[]],a=r;a<4*r+28;a++){let e=s[a-1];(a%r==0||8===r&&a%r==4)&&(e=n[e>>>24]<<24^n[e>>16&255]<<16^n[e>>8&255]<<8^n[255&e],a%r==0&&(e=e<<8^e>>>24^c<<24,c=c<<1^283*(c>>7))),s[a]=s[a-r]^e}for(let e=0;a;e++,a--){const t=s[3&e?a:a-4];o[e]=a<=4||e<4?t:i[0][n[t>>>24]]^i[1][n[t>>16&255]]^i[2][n[t>>8&255]]^i[3][n[255&t]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){const e=this._tables[0],t=this._tables[1],n=e[4],i=t[4],r=[],a=[];let s,o,c,l;for(let e=0;e<256;e++)a[(r[e]=e<<1^283*(e>>7))^e]=e;for(let d=s=0;!n[d];d^=o||1,s=a[s]||1){let a=s^s<<1^s<<2^s<<3^s<<4;a=a>>8^255&a^99,n[d]=a,i[a]=d,l=r[c=r[o=r[d]]];let u=16843009*l^65537*c^257*o^16843008*d,f=257*r[a]^16843008*a;for(let n=0;n<4;n++)e[n][d]=f=f<<24^f>>>8,t[n][a]=u=u<<24^u>>>8}for(let n=0;n<5;n++)e[n]=e[n].slice(0),t[n]=t[n].slice(0)}_crypt(e,t){if(4!==e.length)throw new Error(\"invalid aes block size\");const n=this._key[t],i=n.length/4-2,r=[0,0,0,0],a=this._tables[t],s=a[0],o=a[1],c=a[2],l=a[3],d=a[4];let u,f,h,_=e[0]^n[0],w=e[t?3:1]^n[1],p=e[2]^n[2],b=e[t?1:3]^n[3],g=4;for(let e=0;e<i;e++)u=s[_>>>24]^o[w>>16&255]^c[p>>8&255]^l[255&b]^n[g],f=s[w>>>24]^o[p>>16&255]^c[b>>8&255]^l[255&_]^n[g+1],h=s[p>>>24]^o[b>>16&255]^c[_>>8&255]^l[255&w]^n[g+2],b=s[b>>>24]^o[_>>16&255]^c[w>>8&255]^l[255&p]^n[g+3],g+=4,_=u,w=f,p=h;for(let e=0;e<4;e++)r[t?3&-e:e]=d[_>>>24]<<24^d[w>>16&255]<<16^d[p>>8&255]<<8^d[255&b]^n[g++],u=_,_=w,w=p,p=b,b=u;return r}},fe=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if(255==(e>>24&255)){let t=e>>16&255,n=e>>8&255,i=255&e;255===t?(t=0,255===n?(n=0,255===i?i=0:++i):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=i}else e+=1<<24;return e}incCounter(e){0===(e[0]=this.incWord(e[0]))&&(e[1]=this.incWord(e[1]))}calculate(e,t,n){let i;if(!(i=t.length))return[];const r=J.bitLength(t);for(let r=0;r<i;r+=4){this.incCounter(n);const i=e.encrypt(n);t[r]^=i[0],t[r+1]^=i[1],t[r+2]^=i[2],t[r+3]^=i[3]}return J.clamp(t,r)}},he=class{constructor(e){const t=this,n=t._hash=$.sha1,i=[[],[]],r=n.prototype.blockSize/32;t._baseHash=[new n,new n],e.length>r&&(e=n.hash(e));for(let t=0;t<r;t++)i[0][t]=909522486^e[t],i[1][t]=1549556828^e[t];t._baseHash[0].update(i[0]),t._baseHash[1].update(i[1]),t._resultHash=new n(t._baseHash[0])}reset(){const e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){this._updated=!0,this._resultHash.update(e)}digest(){const e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),n}};class _e{constructor(e,t,n){Object.assign(this,{password:e,signed:t,strength:n-1,pendingInput:new Uint8Array(0)})}async append(e){const t=this;if(t.password){const n=ye(e,0,se[t.strength]+2);await async function(e,t,n){await be(e,n,ye(t,0,se[e.strength]));const i=ye(t,se[e.strength]),r=e.keys.passwordVerification;if(r[0]!=i[0]||r[1]!=i[1])throw new Error(ee)}(t,n,t.password),t.password=null,t.aesCtrGladman=new fe(new ue(t.keys.key),Array.from(le)),t.hmac=new he(t.keys.authentication),e=ye(e,se[t.strength]+2)}return pe(t,e,new Uint8Array(e.length-ce-(e.length-ce)%te),0,ce,!0)}flush(){const e=this,t=e.pendingInput,n=ye(t,0,t.length-ce),i=ye(t,t.length-ce);let r=new Uint8Array(0);if(n.length){const t=de.toBits(n);e.hmac.update(t);const i=e.aesCtrGladman.update(t);r=de.fromBits(i)}let a=!0;if(e.signed){const t=ye(de.fromBits(e.hmac.digest()),0,ce);for(let e=0;e<ce;e++)t[e]!=i[e]&&(a=!1)}return{valid:a,data:r}}}class we{constructor(e,t){Object.assign(this,{password:e,strength:t-1,pendingInput:new Uint8Array(0)})}async append(e){const t=this;let n=new Uint8Array(0);t.password&&(n=await async function(e,t){const n=crypto.getRandomValues(new Uint8Array(se[e.strength]));return await be(e,t,n),ge(n,e.keys.passwordVerification)}(t,t.password),t.password=null,t.aesCtrGladman=new fe(new ue(t.keys.key),Array.from(le)),t.hmac=new he(t.keys.authentication));const i=new Uint8Array(n.length+e.length-e.length%te);return i.set(n,0),pe(t,e,i,n.length,0)}flush(){const e=this;let t=new Uint8Array(0);if(e.pendingInput.length){const n=e.aesCtrGladman.update(de.toBits(e.pendingInput));e.hmac.update(n),t=de.fromBits(n)}const n=ye(de.fromBits(e.hmac.digest()),0,ce);return{data:ge(t,n),signature:n}}}function pe(e,t,n,i,r,a){const s=t.length-r;let o;for(e.pendingInput.length&&(t=ge(e.pendingInput,t),n=function(e,t){if(t&&t>e.length){const n=e;(e=new Uint8Array(t)).set(n,0)}return e}(n,s-s%te)),o=0;o<=s-te;o+=te){const r=de.toBits(ye(t,o,o+te));a&&e.hmac.update(r);const s=e.aesCtrGladman.update(r);a||e.hmac.update(s),n.set(de.fromBits(s),o+i)}return e.pendingInput=ye(t,o),n}async function be(e,t,n){const i=function(e){if(\"undefined\"==typeof TextEncoder){e=unescape(encodeURIComponent(e));const t=new Uint8Array(e.length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}return(new TextEncoder).encode(e)}(t),r=await crypto.subtle.importKey(\"raw\",i,ie,!1,ae),a=await crypto.subtle.deriveBits(Object.assign({salt:n},re),r,8*(2*oe[e.strength]+2)),s=new Uint8Array(a);e.keys={key:de.toBits(ye(s,0,oe[e.strength])),authentication:de.toBits(ye(s,oe[e.strength],2*oe[e.strength])),passwordVerification:ye(s,2*oe[e.strength])}}function ge(e,t){let n=e;return e.length+t.length&&(n=new Uint8Array(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function ye(e,t,n){return e.subarray(t,n)}class xe{constructor(e,t){Object.assign(this,{password:e,passwordVerification:t}),Ae(this,e)}append(e){const t=this;if(t.password){const n=ke(t,e.subarray(0,12));if(t.password=null,n[11]!=t.passwordVerification)throw new Error(ee);e=e.subarray(12)}return ke(t,e)}flush(){return{valid:!0,data:new Uint8Array(0)}}}class me{constructor(e,t){Object.assign(this,{password:e,passwordVerification:t}),Ae(this,e)}append(e){const t=this;let n,i;if(t.password){t.password=null;const r=crypto.getRandomValues(new Uint8Array(12));r[11]=t.passwordVerification,n=new Uint8Array(e.length+r.length),n.set(ve(t,r),0),i=12}else n=new Uint8Array(e.length),i=0;return n.set(ve(t,e),i),n}flush(){return{data:new Uint8Array(0)}}}function ke(e,t){const n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=Ue(e)^t[i],Re(e,n[i]);return n}function ve(e,t){const n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=Ue(e)^t[i],Re(e,t[i]);return n}function Ae(e,t){e.keys=[305419896,591751049,878082192],e.crcKey0=new Y(e.keys[0]),e.crcKey2=new Y(e.keys[2]);for(let n=0;n<t.length;n++)Re(e,t.charCodeAt(n))}function Re(e,t){e.crcKey0.append([t]),e.keys[0]=~e.crcKey0.get(),e.keys[1]=Se(e.keys[1]+Ee(e.keys[0])),e.keys[1]=Se(Math.imul(e.keys[1],134775813)+1),e.crcKey2.append([e.keys[1]>>>24]),e.keys[2]=~e.crcKey2.get()}function Ue(e){const t=2|e.keys[2];return Ee(Math.imul(t,1^t)>>>8)}function Ee(e){return 255&e}function Se(e){return 4294967295&e}const Te=\"inflate\",ze=\"Invalid signature\";class De{constructor(e,{signature:t,password:n,signed:i,compressed:r,zipCrypto:a,passwordVerification:s,encryptionStrength:o},{chunkSize:c}){const l=Boolean(n);Object.assign(this,{signature:t,encrypted:l,signed:i,compressed:r,inflate:r&&new e({chunkSize:c}),crc32:i&&new Y,zipCrypto:a,decrypt:l&&a?new xe(n,s):new _e(n,i,o)})}async append(e){const t=this;return t.encrypted&&e.length&&(e=await t.decrypt.append(e)),t.compressed&&e.length&&(e=await t.inflate.append(e)),(!t.encrypted||t.zipCrypto)&&t.signed&&e.length&&t.crc32.append(e),e}async flush(){const e=this;let t,n=new Uint8Array(0);if(e.encrypted){const t=e.decrypt.flush();if(!t.valid)throw new Error(ze);n=t.data}if((!e.encrypted||e.zipCrypto)&&e.signed){const n=new DataView(new Uint8Array(4).buffer);if(t=e.crc32.get(),n.setUint32(0,t),e.signature!=n.getUint32(0,!1))throw new Error(ze)}return e.compressed&&(n=await e.inflate.append(n)||new Uint8Array(0),await e.inflate.flush()),{data:n,signature:t}}}class Fe{constructor(e,{encrypted:t,signed:n,compressed:i,level:r,zipCrypto:a,password:s,passwordVerification:o,encryptionStrength:c},{chunkSize:l}){Object.assign(this,{encrypted:t,signed:n,compressed:i,deflate:i&&new e({level:r||5,chunkSize:l}),crc32:n&&new Y,zipCrypto:a,encrypt:t&&a?new me(s,o):new we(s,c)})}async append(e){const t=this;let n=e;return t.compressed&&e.length&&(n=await t.deflate.append(e)),t.encrypted&&n.length&&(n=await t.encrypt.append(n)),(!t.encrypted||t.zipCrypto)&&t.signed&&e.length&&t.crc32.append(e),n}async flush(){const e=this;let t,n=new Uint8Array(0);if(e.compressed&&(n=await e.deflate.flush()||new Uint8Array(0)),e.encrypted){n=await e.encrypt.append(n);const i=e.encrypt.flush();t=i.signature;const r=new Uint8Array(n.length+i.data.length);r.set(n,0),r.set(i.data,n.length),n=r}return e.encrypted&&!e.zipCrypto||!e.signed||(t=e.crc32.get()),{data:n,signature:t}}}const Ce=\"init\",Oe=\"append\",Ie=\"flush\";let Be=!0;var Me=(e,t,n,i,r,a,s)=>(Object.assign(e,{busy:!0,codecConstructor:t,options:Object.assign({},n),scripts:s,terminate(){e.worker&&!e.busy&&(e.worker.terminate(),e.interface=null)},onTaskFinished(){e.busy=!1,r(e)}}),a?function(e,t){let n;const i={type:\"module\"};if(!e.interface){if(Be)try{e.worker=r({},t.baseURL)}catch(n){Be=!1,e.worker=r(i,t.baseURL)}else e.worker=r(i,t.baseURL);e.worker.addEventListener(\"message\",(function(t){const i=t.data;if(n){const t=i.error,r=i.type;if(t){const i=new Error(t.message);i.stack=t.stack,n.reject(i),n=null,e.onTaskFinished()}else if(r==Ce||r==Ie||r==Oe){const t=i.data;r==Ie?(n.resolve({data:new Uint8Array(t),signature:i.signature}),n=null,e.onTaskFinished()):n.resolve(t&&new Uint8Array(t))}}}),!1),e.interface={append:e=>a({type:Oe,data:e}),flush:()=>a({type:Ie})}}return e.interface;function r(t,n){let i;try{i=new URL(e.scripts[0],n)}catch(t){i=e.scripts[0]}return new Worker(i,t)}async function a(i){if(!n){const n=e.options,i=e.scripts.slice(1);await s({scripts:i,type:Ce,options:n,config:{chunkSize:t.chunkSize}})}return s(i)}function s(t){const i=e.worker,r=new Promise(((e,t)=>n={resolve:e,reject:t}));try{if(t.data)try{t.data=t.data.buffer,i.postMessage(t,[t.data])}catch(e){i.postMessage(t)}else i.postMessage(t)}catch(t){n.reject(t),n=null,e.onTaskFinished()}return r}}(e,i):function(e,t){const n=function(e,t,n){return t.codecType.startsWith(\"deflate\")?new Fe(e,t,n):t.codecType.startsWith(Te)?new De(e,t,n):void 0}(e.codecConstructor,e.options,t);return{async append(t){try{return await n.append(t)}catch(t){throw e.onTaskFinished(),t}},async flush(){try{return await n.flush()}finally{e.onTaskFinished()}}}}(e,i));let We=[],Le=[];function He(e){e.terminateTimeout&&(clearTimeout(e.terminateTimeout),e.terminateTimeout=null)}const Ne=\"\\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \".split(\"\");async function Pe(e,t){if(t&&\"cp437\"==t.trim().toLowerCase())return(e=>{let t=\"\";for(let n=0;n<e.length;n++)t+=Ne[e[n]];return t})(e);if(\"undefined\"==typeof TextDecoder){const t=new FileReader;return new Promise(((n,i)=>{t.onload=e=>n(e.target.result),t.onerror=()=>i(t.error),t.readAsText(new Blob([e]))}))}return new TextDecoder(t).decode(e)}const je=[\"filename\",\"rawFilename\",\"directory\",\"encrypted\",\"compressedSize\",\"uncompressedSize\",\"lastModDate\",\"rawLastModDate\",\"comment\",\"rawComment\",\"signature\",\"extraField\",\"rawExtraField\",\"bitFlag\",\"extraFieldZip64\",\"extraFieldUnicodePath\",\"extraFieldUnicodeComment\",\"extraFieldAES\",\"filenameUTF8\",\"commentUTF8\",\"offset\",\"zip64\",\"compressionMethod\",\"extraFieldNTFS\",\"lastAccessDate\",\"creationDate\",\"extraFieldExtendedTimestamp\",\"version\",\"versionMadeBy\",\"msDosCompatible\",\"internalFileAttribute\",\"externalFileAttribute\"];class Ve{constructor(e){je.forEach((t=>this[t]=e[t]))}}const qe=\"File format is not recognized\",Ze=\"End of central directory not found\",Ge=\"End of Zip64 central directory not found\",Ke=\"End of Zip64 central directory locator not found\",Xe=\"Central directory header not found\",Ye=\"Local file header not found\",Je=\"Zip64 extra field not found\",Qe=\"File contains encrypted entry\",$e=\"Encryption method not supported\",et=\"Compression method not supported\",tt=\"utf-8\",nt=\"cp437\",it=[\"uncompressedSize\",\"compressedSize\",\"offset\"];class rt{constructor(e,t,n){Object.assign(this,{reader:e,config:t,options:n})}async getData(e,t,n={}){const i=this,{reader:r,offset:a,extraFieldAES:s,compressionMethod:o,config:c,bitFlag:l,signature:d,rawLastModDate:u,compressedSize:f}=i,h=i.localDirectory={};r.initialized||await r.init();let _=await pt(r,a,30);const w=wt(_);let p=ct(i,n,\"password\");if(p=p&&p.length&&p,s&&99!=s.originalCompressionMethod)throw new Error(et);if(0!=o&&8!=o)throw new Error(et);if(67324752!=ht(w,0))throw new Error(Ye);at(h,w,4),_=await pt(r,a,30+h.filenameLength+h.extraFieldLength),h.rawExtraField=_.subarray(30+h.filenameLength),await st(i,h,w,4),t.lastAccessDate=h.lastAccessDate,t.creationDate=h.creationDate;const b=i.encrypted&&h.encrypted,g=b&&!s;if(b){if(!g&&void 0===s.strength)throw new Error($e);if(!p)throw new Error(Qe)}const y=await function(e,t,n){const i=!(!t.compressed&&!t.signed&&!t.encrypted)&&(t.useWebWorkers||void 0===t.useWebWorkers&&n.useWebWorkers),r=i&&n.workerScripts?n.workerScripts[t.codecType]:[];if(We.length<n.maxWorkers){const s={};return We.push(s),Me(s,e,t,n,a,i,r)}{const s=We.find((e=>!e.busy));return s?(He(s),Me(s,e,t,n,a,i,r)):new Promise((n=>Le.push({resolve:n,codecConstructor:e,options:t,webWorker:i,scripts:r})))}function a(e){if(Le.length){const[{resolve:t,codecConstructor:i,options:r,webWorker:s,scripts:o}]=Le.splice(0,1);t(Me(e,i,r,n,a,s,o))}else e.worker?(He(e),Number.isFinite(n.terminateWorkerTimeout)&&n.terminateWorkerTimeout>=0&&(e.terminateTimeout=setTimeout((()=>{We=We.filter((t=>t!=e)),e.terminate()}),n.terminateWorkerTimeout))):We=We.filter((t=>t!=e))}}(c.Inflate,{codecType:Te,password:p,zipCrypto:g,encryptionStrength:s&&s.strength,signed:ct(i,n,\"checkSignature\"),passwordVerification:g&&(l.dataDescriptor?u>>>8&255:d>>>24&255),signature:d,compressed:0!=o,encrypted:b,useWebWorkers:ct(i,n,\"useWebWorkers\")},c);e.initialized||await e.init();const x=ct(i,n,\"signal\"),m=a+30+h.filenameLength+h.extraFieldLength;return await async function(e,t,n,i,r,a,s){const o=Math.max(a.chunkSize,64);return async function a(c=0,l=0){const d=s.signal;if(c<r){v(d,e);const u=await t.readUint8Array(c+i,Math.min(o,r-c)),f=u.length;v(d,e);const h=await e.append(u);if(v(d,e),l+=await A(n,h),s.onprogress)try{s.onprogress(c+f,r)}catch(e){}return a(c+o,l)}{const t=await e.flush();return l+=await A(n,t.data),{signature:t.signature,length:l}}}()}(y,r,e,m,f,c,{onprogress:n.onprogress,signal:x}),e.getData()}}function at(e,t,n){const i=e.rawBitFlag=ft(t,n+2),r=1==(1&i),a=ht(t,n+6);Object.assign(e,{encrypted:r,version:ft(t,n),bitFlag:{level:(6&i)>>1,dataDescriptor:8==(8&i),languageEncodingFlag:2048==(2048&i)},rawLastModDate:a,lastModDate:lt(a),filenameLength:ft(t,n+22),extraFieldLength:ft(t,n+24)})}async function st(e,t,n,i){const r=t.rawExtraField,a=t.extraField=new Map,s=wt(new Uint8Array(r));let o=0;try{for(;o<r.length;){const e=ft(s,o),t=ft(s,o+2);a.set(e,{type:e,data:r.slice(o+4,o+4+t)}),o+=4+t}}catch(e){}const c=ft(n,i+4);t.signature=ht(n,i+10),t.uncompressedSize=ht(n,i+18),t.compressedSize=ht(n,i+14);const l=a.get(1);l&&(function(e,t){t.zip64=!0;const n=wt(e.data);e.values=[];for(let t=0;t<Math.floor(e.data.length/8);t++)e.values.push(_t(n,0+8*t));const i=it.filter((e=>t[e]==Z));for(let t=0;t<i.length;t++)e[i[t]]=e.values[t];it.forEach((n=>{if(t[n]==Z){if(void 0===e[n])throw new Error(Je);t[n]=e[n]}}))}(l,t),t.extraFieldZip64=l);const d=a.get(28789);d&&(await ot(d,\"filename\",\"rawFilename\",t,e),t.extraFieldUnicodePath=d);const u=a.get(25461);u&&(await ot(u,\"comment\",\"rawComment\",t,e),t.extraFieldUnicodeComment=u);const f=a.get(39169);f?(function(e,t,n){const i=wt(e.data);e.vendorVersion=ut(i,0),e.vendorId=ut(i,2);const r=ut(i,4);e.strength=r,e.originalCompressionMethod=n,t.compressionMethod=e.compressionMethod=ft(i,5)}(f,t,c),t.extraFieldAES=f):t.compressionMethod=c;const h=a.get(10);h&&(function(e,t){const n=wt(e.data);let i,r=4;try{for(;r<e.data.length&&!i;){const t=ft(n,r),a=ft(n,r+2);1==t&&(i=e.data.slice(r+4,r+4+a)),r+=4+a}}catch(e){}try{if(i&&24==i.length){const n=wt(i),r=n.getBigUint64(0,!0),a=n.getBigUint64(8,!0),s=n.getBigUint64(16,!0);Object.assign(e,{rawLastModDate:r,rawLastAccessDate:a,rawCreationDate:s});const o={lastModDate:dt(r),lastAccessDate:dt(a),creationDate:dt(s)};Object.assign(e,o),Object.assign(t,o)}}catch(e){}}(h,t),t.extraFieldNTFS=h);const _=a.get(21589);_&&(function(e,t){const n=wt(e.data),i=ut(n,0),r=[],a=[];1==(1&i)&&(r.push(\"lastModDate\"),a.push(\"rawLastModDate\")),2==(2&i)&&(r.push(\"lastAccessDate\"),a.push(\"rawLastAccessDate\")),4==(4&i)&&(r.push(\"creationDate\"),a.push(\"rawCreationDate\"));let s=1;r.forEach(((i,r)=>{if(e.data.length>=s+4){const o=ht(n,s);t[i]=e[i]=new Date(1e3*o);const c=a[r];e[c]=o}s+=4}))}(_,t),t.extraFieldExtendedTimestamp=_)}async function ot(e,t,n,i,r){const a=wt(e.data);e.version=ut(a,0),e.signature=ht(a,1);const s=new Y;s.append(r[n]);const o=wt(new Uint8Array(4));o.setUint32(0,s.get(),!0),e[t]=await Pe(e.data.subarray(5)),e.valid=!r.bitFlag.languageEncodingFlag&&e.signature==ht(o,0),e.valid&&(i[t]=e[t],i[t+\"UTF8\"]=!0)}function ct(e,t,n){return void 0===t[n]?e.options[n]:t[n]}function lt(e){const t=(4294901760&e)>>16,n=65535&e;try{return new Date(1980+((65024&t)>>9),((480&t)>>5)-1,31&t,(63488&n)>>11,(2016&n)>>5,2*(31&n),0)}catch(e){}}function dt(e){return new Date(Number(e/BigInt(1e4)-BigInt(116444736e5)))}function ut(e,t){return e.getUint8(t)}function ft(e,t){return e.getUint16(t,!0)}function ht(e,t){return e.getUint32(t,!0)}function _t(e,t){return Number(e.getBigUint64(t,!0))}function wt(e){return new DataView(e.buffer)}function pt(e,t,n){return e.readUint8Array(t,n)}m({Inflate:function(e){const t=new g,n=e&&e.chunkSize?Math.floor(2*e.chunkSize):131072,r=new Uint8Array(n);let a=!1;t.inflateInit(),t.next_out=r,this.append=function(e,s){const o=[];let c,l,d=0,u=0,f=0;if(0!==e.length){t.next_in_index=0,t.next_in=e,t.avail_in=e.length;do{if(t.next_out_index=0,t.avail_out=n,0!==t.avail_in||a||(t.next_in_index=0,a=!0),c=t.inflate(0),a&&c===i){if(0!==t.avail_in)throw new Error(\"inflating: bad input\")}else if(0!==c&&1!==c)throw new Error(\"inflating: \"+t.msg);if((a||1===c)&&t.avail_in===e.length)throw new Error(\"inflating: bad input\");t.next_out_index&&(t.next_out_index===n?o.push(new Uint8Array(r)):o.push(r.slice(0,t.next_out_index))),f+=t.next_out_index,s&&t.next_in_index>0&&t.next_in_index!=d&&(s(t.next_in_index),d=t.next_in_index)}while(t.avail_in>0||0===t.avail_out);return o.length>1?(l=new Uint8Array(f),o.forEach((function(e){l.set(e,u),u+=e.length}))):l=o[0]||new Uint8Array(0),l}},this.flush=function(){t.inflateEnd()}}}),e.BlobReader=F,e.BlobWriter=class extends D{constructor(e){super(),this.contentType=e,this.arrayBuffers=[]}async writeUint8Array(e){super.writeUint8Array(e),this.arrayBuffers.push(e.buffer)}getData(){return this.blob||(this.blob=new Blob(this.arrayBuffers,{type:this.contentType})),this.blob}},e.Data64URIReader=class extends z{constructor(e){super(),this.dataURI=e;let t=e.length;for(;\"=\"==e.charAt(t-1);)t--;this.dataStart=e.indexOf(\",\")+1,this.size=Math.floor(.75*(t-this.dataStart))}async readUint8Array(e,t){const n=new Uint8Array(t),i=4*Math.floor(e/3),r=atob(this.dataURI.substring(i+this.dataStart,4*Math.ceil((e+t)/3)+this.dataStart)),a=e-3*Math.floor(i/4);for(let e=a;e<a+t;e++)n[e-a]=r.charCodeAt(e);return n}},e.Data64URIWriter=class extends D{constructor(e){super(),this.data=\"data:\"+(e||\"\")+\";base64,\",this.pending=[]}async writeUint8Array(e){super.writeUint8Array(e);let t=0,n=this.pending;const i=this.pending.length;for(this.pending=\"\",t=0;t<3*Math.floor((i+e.length)/3)-i;t++)n+=String.fromCharCode(e[t]);for(;t<e.length;t++)this.pending+=String.fromCharCode(e[t]);n.length>2?this.data+=btoa(n):this.pending=n}getData(){return this.data+btoa(this.pending)}},e.ERR_ABORT=k,e.ERR_BAD_FORMAT=qe,e.ERR_CENTRAL_DIRECTORY_NOT_FOUND=Xe,e.ERR_ENCRYPTED=Qe,e.ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND=Ke,e.ERR_EOCDR_NOT_FOUND=Ze,e.ERR_EOCDR_ZIP64_NOT_FOUND=Ge,e.ERR_EXTRAFIELD_ZIP64_NOT_FOUND=Je,e.ERR_HTTP_RANGE=U,e.ERR_INVALID_PASSWORD=ee,e.ERR_INVALID_SIGNATURE=ze,e.ERR_LOCAL_FILE_HEADER_NOT_FOUND=Ye,e.ERR_UNSUPPORTED_COMPRESSION=et,e.ERR_UNSUPPORTED_ENCRYPTION=$e,e.HttpRangeReader=class extends q{constructor(e,t={}){t.useRangeHeader=!0,super(e,t)}},e.HttpReader=q,e.Reader=z,e.TextReader=class extends z{constructor(e){super(),this.blobReader=new F(new Blob([e],{type:E}))}async init(){super.init(),this.blobReader.init(),this.size=this.blobReader.size}async readUint8Array(e,t){return this.blobReader.readUint8Array(e,t)}},e.TextWriter=class extends D{constructor(e){super(),this.encoding=e,this.blob=new Blob([],{type:E})}async writeUint8Array(e){super.writeUint8Array(e),this.blob=new Blob([this.blob,e.buffer],{type:E})}getData(){if(this.blob.text)return this.blob.text();{const e=new FileReader;return new Promise(((t,n)=>{e.onload=e=>t(e.target.result),e.onerror=()=>n(e.error),e.readAsText(this.blob,this.encoding)}))}}},e.Uint8ArrayReader=class extends z{constructor(e){super(),this.array=e,this.size=e.length}async readUint8Array(e,t){return this.array.slice(e,e+t)}},e.Uint8ArrayWriter=class extends D{constructor(){super(),this.array=new Uint8Array(0)}async writeUint8Array(e){super.writeUint8Array(e);const t=this.array;this.array=new Uint8Array(t.length+e.length),this.array.set(t),this.array.set(e,t.length)}getData(){return this.array}},e.Writer=D,e.ZipReader=class{constructor(e,t={}){Object.assign(this,{reader:e,options:t,config:x})}async getEntries(e={}){const t=this,n=t.reader;if(n.initialized||await n.init(),n.size<22)throw new Error(qe);const i=await async function(e,t,n,i,r){const a=new Uint8Array(4);return function(e,t,n){e.setUint32(0,101010256,!0)}(wt(a)),await s(22)||await s(Math.min(1048582,n));async function s(t){const i=n-t,r=await pt(e,i,t);for(let e=r.length-22;e>=0;e--)if(r[e]==a[0]&&r[e+1]==a[1]&&r[e+2]==a[2]&&r[e+3]==a[3])return{offset:i+e,buffer:r.slice(e,e+22).buffer}}}(n,0,n.size);if(!i)throw new Error(Ze);const r=wt(i);let a=ht(r,12),s=ht(r,16),o=ft(r,8),c=0;if(s==Z||a==Z||65535==o){const e=wt(await pt(n,i.offset-20,20));if(117853008!=ht(e,0))throw new Error(Ge);s=_t(e,8);let t=await pt(n,s,56),r=wt(t);const l=i.offset-20-56;if(ht(r,0)!=K&&s!=l){const e=s;s=l,c=s-e,t=await pt(n,s,56),r=wt(t)}if(ht(r,0)!=K)throw new Error(Ke);o=_t(r,32),a=_t(r,40),s-=a}if(s<0||s>=n.size)throw new Error(qe);let l=0,d=await pt(n,s,a),u=wt(d);if(a){const e=i.offset-a;if(ht(u,l)!=G&&s!=e){const t=s;s=e,c=s-t,d=await pt(n,s,a),u=wt(d)}}if(s<0||s>=n.size)throw new Error(qe);const f=[];for(let i=0;i<o;i++){const r=new rt(n,t.config,t.options);if(ht(u,l)!=G)throw new Error(Xe);at(r,u,l+6);const a=Boolean(r.bitFlag.languageEncodingFlag),s=l+46,h=s+r.filenameLength,_=h+r.extraFieldLength,w=ft(u,l+4),p=0==(0&w);Object.assign(r,{versionMadeBy:w,msDosCompatible:p,compressedSize:0,uncompressedSize:0,commentLength:ft(u,l+32),directory:p&&16==(16&ut(u,l+38)),offset:ht(u,l+42)+c,internalFileAttribute:ht(u,l+34),externalFileAttribute:ht(u,l+38),rawFilename:d.subarray(s,h),filenameUTF8:a,commentUTF8:a,rawExtraField:d.subarray(h,_)});const b=_+r.commentLength;r.rawComment=d.subarray(_,b);const g=ct(t,e,\"filenameEncoding\"),y=ct(t,e,\"commentEncoding\"),[x,m]=await Promise.all([Pe(r.rawFilename,r.filenameUTF8?tt:g||nt),Pe(r.rawComment,r.commentUTF8?tt:y||nt)]);r.filename=x,r.comment=m,!r.directory&&r.filename.endsWith(\"/\")&&(r.directory=!0),await st(r,r,u,l+6);const k=new Ve(r);if(k.getData=(e,t)=>r.getData(e,k,t),f.push(k),l=b,e.onprogress)try{e.onprogress(i+1,o,new Ve(r))}catch(e){}}return f}async close(){}},e.configure=m,e.getMimeType=function(){return\"application/octet-stream\"},Object.defineProperty(e,\"__esModule\",{value:!0})},\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).zip={})})();</script><script>/*! For license information please see app.bundle.js.LICENSE.txt */\n(()=>{\"use strict\";var e={7174:(e,n,t)=>{function r(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function o(e,n){var t=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!t){if(Array.isArray(e)||(t=function(e,n){if(e){if(\"string\"==typeof e)return a(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t?Array.from(e):\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?a(e,n):void 0}}(e))||n&&e&&\"number\"==typeof e.length){t&&(e=t);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}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 l,i=!0,c=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return i=e.done,e},e:function(e){c=!0,l=e},f:function(){try{i||null==t.return||t.return()}finally{if(c)throw l}}}}function a(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}var l,i=t(5863),c={fg:\"#FFF\",bg:\"#000\",newline:!1,escapeXML:!1,stream:!1,colors:(l={0:\"#000\",1:\"#A00\",2:\"#0A0\",3:\"#A50\",4:\"#00A\",5:\"#A0A\",6:\"#0AA\",7:\"#AAA\",8:\"#555\",9:\"#F55\",10:\"#5F5\",11:\"#FF5\",12:\"#55F\",13:\"#F5F\",14:\"#5FF\",15:\"#FFF\"},f(0,5).forEach((function(e){f(0,5).forEach((function(n){f(0,5).forEach((function(t){return function(e,n,t,r){var a=e>0?40*e+55:0,l=n>0?40*n+55:0,i=t>0?40*t+55:0;r[16+36*e+6*n+t]=function(e){var n,t=[],r=o(e);try{for(r.s();!(n=r.n()).done;){var a=n.value;t.push(s(a))}}catch(e){r.e(e)}finally{r.f()}return\"#\"+t.join(\"\")}([a,l,i])}(e,n,t,l)}))}))})),f(0,23).forEach((function(e){var n=e+232,t=s(10*e+8);l[n]=\"#\"+t+t+t})),l)};function s(e){for(var n=e.toString(16);n.length<2;)n=\"0\"+n;return n}function u(e,n,t,r){var o;return\"text\"===n?o=function(e,n){return n.escapeXML?i.encodeXML(e):e}(t,r):\"display\"===n?o=function(e,n,t){var r,o={\"-1\":function(){return\"<br/>\"},0:function(){return e.length&&d(e)},1:function(){return g(e,\"b\")},3:function(){return g(e,\"i\")},4:function(){return g(e,\"u\")},8:function(){return h(e,\"display:none\")},9:function(){return g(e,\"strike\")},22:function(){return h(e,\"font-weight:normal;text-decoration:none;font-style:normal\")},23:function(){return v(e,\"i\")},24:function(){return v(e,\"u\")},39:function(){return b(e,t.fg)},49:function(){return m(e,t.bg)},53:function(){return h(e,\"text-decoration:overline\")}};return o[n=parseInt(n,10)]?r=o[n]():4<n&&n<7?r=g(e,\"blink\"):29<n&&n<38?r=b(e,t.colors[n-30]):39<n&&n<48?r=m(e,t.colors[n-40]):89<n&&n<98?r=b(e,t.colors[n-90+8]):99<n&&n<108&&(r=m(e,t.colors[n-100+8])),r}(e,t,r):\"xterm256Foreground\"===n?o=b(e,r.colors[t]):\"xterm256Background\"===n?o=m(e,r.colors[t]):\"rgb\"===n&&(o=function(e,n){return h(e,(38===+(n=n.substring(2).slice(0,-1)).substr(0,2)?\"color:#\":\"background-color:#\")+n.substring(5).split(\";\").map((function(e){return(\"0\"+Number(e).toString(16)).substr(-2)})).join(\"\"))}(e,t)),o}function d(e){var n=e.slice(0);return e.length=0,n.reverse().map((function(e){return\"</\"+e+\">\"})).join(\"\")}function f(e,n){for(var t=[],r=e;r<=n;r++)t.push(r);return t}function p(e){var n=null;return 0===(e=parseInt(e,10))?n=\"all\":1===e?n=\"bold\":2<e&&e<5?n=\"underline\":4<e&&e<7?n=\"blink\":8===e?n=\"hide\":9===e?n=\"strike\":29<e&&e<38||39===e||89<e&&e<98?n=\"foreground-color\":(39<e&&e<48||49===e||99<e&&e<108)&&(n=\"background-color\"),n}function g(e,n,t){return t||(t=\"\"),e.push(n),\"<\".concat(n).concat(t?' style=\"'.concat(t,'\"'):\"\",\">\")}function h(e,n){return g(e,\"span\",n)}function b(e,n){return g(e,\"span\",\"color:\"+n)}function m(e,n){return g(e,\"span\",\"background-color:\"+n)}function v(e,n){var t;if(e.slice(-1)[0]===n&&(t=e.pop()),t)return\"</\"+n+\">\"}var y=function(){function e(n){!function(e,n){if(!(e instanceof n))throw new TypeError(\"Cannot call a class as a function\")}(this,e),(n=n||{}).colors&&(n.colors=Object.assign({},c.colors,n.colors)),this.options=Object.assign({},c,n),this.stack=[],this.stickyStack=[]}var n,t;return n=e,(t=[{key:\"toHtml\",value:function(e){var n=this;e=\"string\"==typeof e?[e]:e;var t=this.stack,r=this.options,a=[];return this.stickyStack.forEach((function(e){var n=u(t,e.token,e.data,r);n&&a.push(n)})),function(e,n,t){var r=!1;function a(){return\"\"}function l(e){return n.newline?t(\"display\",-1):t(\"text\",e),\"\"}var i=[{pattern:/^\\x08+/,sub:a},{pattern:/^\\x1b\\[[012]?K/,sub:a},{pattern:/^\\x1b\\[\\(B/,sub:a},{pattern:/^\\x1b\\[[34]8;2;\\d+;\\d+;\\d+m/,sub:function(e){return t(\"rgb\",e),\"\"}},{pattern:/^\\x1b\\[38;5;(\\d+)m/,sub:function(e,n){return t(\"xterm256Foreground\",n),\"\"}},{pattern:/^\\x1b\\[48;5;(\\d+)m/,sub:function(e,n){return t(\"xterm256Background\",n),\"\"}},{pattern:/^\\n/,sub:l},{pattern:/^\\r+\\n/,sub:l},{pattern:/^\\r/,sub:l},{pattern:/^\\x1b\\[((?:\\d{1,3};?)+|)m/,sub:function(e,n){r=!0,0===n.trim().length&&(n=\"0\");var a,l=o(n=n.trimRight(\";\").split(\";\"));try{for(l.s();!(a=l.n()).done;){var i=a.value;t(\"display\",i)}}catch(e){l.e(e)}finally{l.f()}return\"\"}},{pattern:/^\\x1b\\[\\d?J/,sub:a},{pattern:/^\\x1b\\[\\d{0,3};\\d{0,3}f/,sub:a},{pattern:/^\\x1b\\[?[\\d;]{0,3}/,sub:a},{pattern:/^(([^\\x1b\\x08\\r\\n])+)/,sub:function(e){return t(\"text\",e),\"\"}}];function c(n,t){t>3&&r||(r=!1,e=e.replace(n.pattern,n.sub))}var s=[],u=e.length;e:for(;u>0;){for(var d=0,f=0,p=i.length;f<p;d=++f)if(c(i[d],d),e.length!==u){u=e.length;continue e}if(e.length===u)break;s.push(0),u=e.length}}(e.join(\"\"),r,(function(e,o){var l=u(t,e,o,r);l&&a.push(l),r.stream&&(n.stickyStack=function(e,n,t){var r;return\"text\"!==n&&(e=e.filter((r=p(t),function(e){return(null===r||e.category!==r)&&\"all\"!==r}))).push({token:n,data:t,category:p(t)}),e}(n.stickyStack,e,o))})),t.length&&a.push(d(t)),a.join(\"\")}}])&&r(n.prototype,t),e}();e.exports=y},1232:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.Chip=n.AutoChip=void 0;var r=l(t(7294));t(3822),t(6150),t(7425);var o=l(t(8376));function a(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(a=function(e){return e?t:n})(e)}function l(e,n){if(!n&&e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=a(n);if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if(\"default\"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var i=o?Object.getOwnPropertyDescriptor(e,l):null;i&&(i.get||i.set)?Object.defineProperty(r,l,i):r[l]=e[l]}return r.default=e,t&&t.set(e,r),r}const i=({header:e,expanded:n,setExpanded:t,children:a,noInsets:l})=>r.createElement(\"div\",{className:\"chip\"},r.createElement(\"div\",{className:\"chip-header\"+(t?\" expanded-\"+n:\"\"),onClick:()=>null==t?void 0:t(!n),title:\"string\"==typeof e?e:void 0},t&&!!n&&o.downArrow(),t&&!n&&o.rightArrow(),e),(!t||n)&&r.createElement(\"div\",{className:\"chip-body\"+(l?\" chip-body-no-insets\":\"\")},a));n.Chip=i,n.AutoChip=({header:e,initialExpanded:n,noInsets:t,children:o})=>{const[a,l]=r.useState(n||void 0===n);return r.createElement(i,{header:e,expanded:a,setExpanded:l,noInsets:t},o)}},2537:(e,n)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.Filter=void 0;class t{constructor(){this.project=[],this.status=[],this.text=[]}empty(){return this.project.length+this.status.length+this.text.length===0}static parse(e){const n=t.tokenize(e),r=new Set,o=new Set,a=[];for(const e of n)e.startsWith(\"p:\")?r.add(e.slice(2)):e.startsWith(\"s:\")?o.add(e.slice(2)):a.push(e.toLowerCase());const l=new t;return l.text=a,l.project=[...r],l.status=[...o],l}static tokenize(e){const n=[];let t,r=[];for(let o=0;o<e.length;++o){const a=e[o];t&&\"\\\\\"===a&&e[o+1]===t?(r.push(t),++o):'\"'!==a&&\"'\"!==a?t||\" \"!==a?r.push(a):r.length&&(n.push(r.join(\"\").toLowerCase()),r=[]):t===a?(n.push(r.join(\"\").toLowerCase()),r=[],t=void 0):t?r.push(a):t=a}return r.length&&n.push(r.join(\"\").toLowerCase()),n}matches(e){if(!e.searchValues){let n=\"passed\";\"unexpected\"===e.outcome&&(n=\"failed\"),\"flaky\"===e.outcome&&(n=\"flaky\"),\"skipped\"===e.outcome&&(n=\"skipped\");const t={text:(n+\" \"+e.projectName+\" \"+e.path.join(\" \")+e.title).toLowerCase(),project:e.projectName.toLowerCase(),status:n};e.searchValues=t}const n=e.searchValues;return!(this.project.length&&!this.project.find((e=>n.project.includes(e))))&&(!(this.status.length&&!this.status.find((e=>n.status.includes(e))))&&(!this.text.length||this.text.filter((e=>n.text.includes(e))).length===this.text.length))}}n.Filter=t},1905:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.HeaderView=void 0;var r=c(t(7294));t(6150),t(7425),t(3617);var o=c(t(8376)),a=t(2060),l=t(7908);function i(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(i=function(e){return e?t:n})(e)}function c(e,n){if(!n&&e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=i(n);if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(\"default\"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=o?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(r,a,l):r[a]=e[a]}return r.default=e,t&&t.set(e,r),r}n.HeaderView=({stats:e,filterText:n,setFilterText:t})=>(r.useEffect((()=>{(async()=>{window.addEventListener(\"popstate\",(()=>{const e=new URLSearchParams(window.location.hash.slice(1));t(e.get(\"q\")||\"\")}))})()})),r.createElement(\"div\",{className:\"pt-3\"},r.createElement(\"div\",{className:\"header-view-status-container ml-2 pl-2 d-flex\"},r.createElement(s,{stats:e})),r.createElement(\"form\",{className:\"subnav-search\",onSubmit:e=>{e.preventDefault(),(0,a.navigate)(`#?q=${n?encodeURIComponent(n):\"\"}`)}},o.search(),r.createElement(\"input\",{type:\"search\",spellCheck:!1,className:\"form-control subnav-search-input input-contrast width-full\",value:n,onChange:e=>{t(e.target.value)}}))));const s=({stats:e})=>r.createElement(\"nav\",{className:\"d-flex no-wrap\"},r.createElement(a.Link,{className:\"subnav-item\",href:\"#?\"},\"All \",r.createElement(\"span\",{className:\"d-inline counter\"},e.total)),r.createElement(a.Link,{className:\"subnav-item\",href:\"#?q=s:passed\"},\"Passed \",r.createElement(\"span\",{className:\"d-inline counter\"},e.expected)),r.createElement(a.Link,{className:\"subnav-item\",href:\"#?q=s:failed\"},!!e.unexpected&&(0,l.statusIcon)(\"unexpected\"),\" Failed \",r.createElement(\"span\",{className:\"d-inline counter\"},e.unexpected)),r.createElement(a.Link,{className:\"subnav-item\",href:\"#?q=s:flaky\"},!!e.flaky&&(0,l.statusIcon)(\"flaky\"),\" Flaky \",r.createElement(\"span\",{className:\"d-inline counter\"},e.flaky)),r.createElement(a.Link,{className:\"subnav-item\",href:\"#?q=s:skipped\"},\"Skipped \",r.createElement(\"span\",{className:\"d-inline counter\"},e.skipped)))},8376:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.warning=n.search=n.rightArrow=n.downArrow=n.cross=n.clock=n.check=n.blank=n.attachment=void 0;var r=function(e,n){if(e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=o(n);if(t&&t.has(e))return t.get(e);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if(\"default\"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var i=a?Object.getOwnPropertyDescriptor(e,l):null;i&&(i.get||i.set)?Object.defineProperty(r,l,i):r[l]=e[l]}return r.default=e,t&&t.set(e,r),r}(t(7294));function o(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(o=function(e){return e?t:n})(e)}t(6150),t(7425),n.search=()=>r.createElement(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",\"data-view-component\":\"true\",className:\"octicon subnav-search-icon\"},r.createElement(\"path\",{fillRule:\"evenodd\",d:\"M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z\"})),n.downArrow=()=>r.createElement(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",className:\"octicon color-fg-muted\"},r.createElement(\"path\",{fillRule:\"evenodd\",d:\"M12.78 6.22a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06 0L3.22 7.28a.75.75 0 011.06-1.06L8 9.94l3.72-3.72a.75.75 0 011.06 0z\"})),n.rightArrow=()=>r.createElement(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",\"data-view-component\":\"true\",className:\"octicon color-fg-muted\"},r.createElement(\"path\",{fillRule:\"evenodd\",d:\"M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z\"})),n.warning=()=>r.createElement(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",\"data-view-component\":\"true\",className:\"octicon color-text-warning\"},r.createElement(\"path\",{fillRule:\"evenodd\",d:\"M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z\"})),n.attachment=()=>r.createElement(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",\"data-view-component\":\"true\",className:\"octicon color-fg-muted\"},r.createElement(\"path\",{fillRule:\"evenodd\",d:\"M3.5 1.75a.25.25 0 01.25-.25h3a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h2.086a.25.25 0 01.177.073l2.914 2.914a.25.25 0 01.073.177v8.586a.25.25 0 01-.25.25h-.5a.75.75 0 000 1.5h.5A1.75 1.75 0 0014 13.25V4.664c0-.464-.184-.909-.513-1.237L10.573.513A1.75 1.75 0 009.336 0H3.75A1.75 1.75 0 002 1.75v11.5c0 .649.353 1.214.874 1.515a.75.75 0 10.752-1.298.25.25 0 01-.126-.217V1.75zM8.75 3a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h-.5zM6 5.25a.75.75 0 01.75-.75h.5a.75.75 0 010 1.5h-.5A.75.75 0 016 5.25zm2 1.5A.75.75 0 018.75 6h.5a.75.75 0 010 1.5h-.5A.75.75 0 018 6.75zm-1.25.75a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h-.5zM8 9.75A.75.75 0 018.75 9h.5a.75.75 0 010 1.5h-.5A.75.75 0 018 9.75zm-.75.75a1.75 1.75 0 00-1.75 1.75v3c0 .414.336.75.75.75h2.5a.75.75 0 00.75-.75v-3a1.75 1.75 0 00-1.75-1.75h-.5zM7 12.25a.25.25 0 01.25-.25h.5a.25.25 0 01.25.25v2.25H7v-2.25z\"})),n.cross=()=>r.createElement(\"svg\",{className:\"octicon color-text-danger\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",height:\"16\",\"aria-hidden\":\"true\"},r.createElement(\"path\",{fillRule:\"evenodd\",d:\"M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z\"})),n.check=()=>r.createElement(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",\"data-view-component\":\"true\",className:\"octicon color-icon-success\"},r.createElement(\"path\",{fillRule:\"evenodd\",d:\"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z\"})),n.clock=()=>r.createElement(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",\"data-view-component\":\"true\",className:\"octicon color-text-danger\"},r.createElement(\"path\",{fillRule:\"evenodd\",d:\"M5.75.75A.75.75 0 016.5 0h3a.75.75 0 010 1.5h-.75v1l-.001.041a6.718 6.718 0 013.464 1.435l.007-.006.75-.75a.75.75 0 111.06 1.06l-.75.75-.006.007a6.75 6.75 0 11-10.548 0L2.72 5.03l-.75-.75a.75.75 0 011.06-1.06l.75.75.007.006A6.718 6.718 0 017.25 2.541a.756.756 0 010-.041v-1H6.5a.75.75 0 01-.75-.75zM8 14.5A5.25 5.25 0 108 4a5.25 5.25 0 000 10.5zm.389-6.7l1.33-1.33a.75.75 0 111.061 1.06L9.45 8.861A1.502 1.502 0 018 10.75a1.5 1.5 0 11.389-2.95z\"})),n.blank=()=>r.createElement(\"svg\",{className:\"octicon\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",height:\"16\",\"aria-hidden\":\"true\"})},4861:(e,n)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.traceImage=void 0,n.traceImage=\"data:image/png;base64,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\"},2060:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.Route=n.ProjectLink=n.Link=n.AttachmentLink=void 0,n.navigate=function(e){window.history.pushState({},\"\",e);const n=new PopStateEvent(\"popstate\");window.dispatchEvent(n)};var r=i(t(7294)),o=i(t(8376)),a=t(6470);function l(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(l=function(e){return e?t:n})(e)}function i(e,n){if(!n&&e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=l(n);if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(\"default\"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var i=o?Object.getOwnPropertyDescriptor(e,a):null;i&&(i.get||i.set)?Object.defineProperty(r,a,i):r[a]=e[a]}return r.default=e,t&&t.set(e,r),r}t(4217),n.Route=({params:e,children:n})=>{const t=[...new URLSearchParams(window.location.hash.slice(1)).keys()].join(\"&\"),[o,a]=r.useState(t);return r.useEffect((()=>{const e=()=>{const e=[...new URLSearchParams(window.location.hash.slice(1)).keys()].join(\"&\");a(e)};return window.addEventListener(\"popstate\",e),()=>window.removeEventListener(\"popstate\",e)}),[]),o===e?n:null};const c=({href:e,className:n,children:t,title:o})=>r.createElement(\"a\",{style:{textDecoration:\"none\",color:\"var(--color-fg-default)\"},className:`${n||\"\"}`,href:e,title:o},t);n.Link=c,n.ProjectLink=({projectNames:e,projectName:n})=>{const t=encodeURIComponent(n),o=n===t?n:`\"${t.replace(/%22/g,\"%5C%22\")}\"`;return r.createElement(c,{href:`#?q=p:${o}`},r.createElement(\"span\",{className:\"label label-color-\"+e.indexOf(n)%6},n))},n.AttachmentLink=({attachment:e,href:n})=>r.createElement(a.TreeItem,{title:r.createElement(\"span\",null,e.contentType===s?o.warning():o.attachment(),e.path&&r.createElement(\"a\",{href:n||e.path,target:\"_blank\"},e.name),e.body&&r.createElement(\"span\",null,e.name)),loadChildren:e.body?()=>[r.createElement(\"div\",{className:\"attachment-body\"},e.body)]:void 0,depth:0});const s=\"x-playwright/missing\"},1715:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.ReportView=void 0;var r=function(e,n){if(e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=s(n);if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(\"default\"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=o?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(r,a,l):r[a]=e[a]}return r.default=e,t&&t.set(e,r),r}(t(7294));t(6150),t(7425);var o=t(2537),a=t(1905),l=t(2060);t(7298);var i=t(523),c=t(481);function s(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(s=function(e){return e?t:n})(e)}t(621),n.ReportView=({report:e})=>{const n=new URLSearchParams(window.location.hash.slice(1)),[t,i]=r.useState(new Map),[s,d]=r.useState(n.get(\"q\")||\"\"),f=r.useMemo((()=>o.Filter.parse(s)),[s]);return r.createElement(\"div\",{className:\"htmlreport vbox px-4 pb-4\"},(null==e?void 0:e.json())&&r.createElement(a.HeaderView,{stats:e.json().stats,filterText:s,setFilterText:d}),r.createElement(r.Fragment,null,r.createElement(l.Route,{params:\"\"},r.createElement(c.TestFilesView,{report:null==e?void 0:e.json(),filter:f,expandedFiles:t,setExpandedFiles:i})),r.createElement(l.Route,{params:\"q\"},r.createElement(c.TestFilesView,{report:null==e?void 0:e.json(),filter:f,expandedFiles:t,setExpandedFiles:i})),r.createElement(l.Route,{params:\"testId\"},!!e&&r.createElement(u,{report:e}))))};const u=({report:e})=>{const n=new URLSearchParams(window.location.hash.slice(1)),[t,o]=r.useState(),a=n.get(\"testId\");return r.useEffect((()=>{(async()=>{if(!a||a===(null==t?void 0:t.testId))return;const n=a.split(\"-\")[0];if(!n)return;const r=await e.entry(`${n}.json`);for(const e of[...r.tests,...r.hooks])if(e.testId===a){o(e);break}})()}),[t,e,a]),r.createElement(i.TestCaseView,{projectNames:e.json().projectNames,test:t})}},7908:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.statusIcon=function(e){switch(e){case\"failed\":case\"unexpected\":return r.cross();case\"passed\":case\"expected\":return r.check();case\"timedOut\":return r.clock();case\"flaky\":return r.warning();case\"skipped\":return r.blank()}};var r=function(e,n){if(e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=o(n);if(t&&t.has(e))return t.get(e);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if(\"default\"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var i=a?Object.getOwnPropertyDescriptor(e,l):null;i&&(i.get||i.set)?Object.defineProperty(r,l,i):r[l]=e[l]}return r.default=e,t&&t.set(e,r),r}(t(8376));function o(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(o=function(e){return e?t:n})(e)}t(6150),t(7425)},1002:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.TabbedPane=void 0,t(8405);var r=function(e,n){if(e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=o(n);if(t&&t.has(e))return t.get(e);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if(\"default\"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var i=a?Object.getOwnPropertyDescriptor(e,l):null;i&&(i.get||i.set)?Object.defineProperty(r,l,i):r[l]=e[l]}return r.default=e,t&&t.set(e,r),r}(t(7294));function o(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(o=function(e){return e?t:n})(e)}n.TabbedPane=({tabs:e,selectedTab:n,setSelectedTab:t})=>r.createElement(\"div\",{className:\"tabbed-pane\"},r.createElement(\"div\",{className:\"vbox\"},r.createElement(\"div\",{className:\"hbox\",style:{flex:\"none\"}},r.createElement(\"div\",{className:\"tabbed-pane-tab-strip\"},e.map((e=>r.createElement(\"div\",{className:\"tabbed-pane-tab-element \"+(n===e.id?\"selected\":\"\"),onClick:()=>t(e.id),key:e.id},r.createElement(\"div\",{className:\"tabbed-pane-tab-label\"},e.title)))))),e.map((e=>{if(n===e.id)return r.createElement(\"div\",{key:e.id,className:\"tab-content\"},e.render())}))))},523:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.TestCaseView=void 0;var r=function(e,n){if(e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=s(n);if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(\"default\"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=o?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(r,a,l):r[a]=e[a]}return r.default=e,t&&t.set(e,r),r}(t(7294)),o=t(1002),a=t(1232);t(7425);var l=t(2060),i=t(7908);t(8798);var c=t(4916);function s(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(s=function(e){return e?t:n})(e)}function u(e){return e?`Retry #${e}`:\"Run\"}n.TestCaseView=({projectNames:e,test:n})=>{const[t,s]=r.useState(0);return r.createElement(\"div\",{className:\"test-case-column vbox\"},n&&r.createElement(\"div\",{className:\"test-case-path\"},n.path.join(\" › \")),n&&r.createElement(\"div\",{className:\"test-case-title\"},null==n?void 0:n.title),n&&r.createElement(\"div\",{className:\"test-case-location\"},n.location.file,\":\",n.location.line),n&&!!n.projectName&&r.createElement(l.ProjectLink,{projectNames:e,projectName:n.projectName}),n&&!!n.annotations.length&&r.createElement(a.AutoChip,{header:\"Annotations\"},n.annotations.map((e=>r.createElement(\"div\",{className:\"test-case-annotation\"},r.createElement(\"span\",{style:{fontWeight:\"bold\"}},e.type),e.description&&r.createElement(\"span\",null,\": \",e.description))))),n&&r.createElement(o.TabbedPane,{tabs:n.results.map(((e,t)=>({id:String(t),title:r.createElement(\"div\",{style:{display:\"flex\",alignItems:\"center\"}},(0,i.statusIcon)(e.status),\" \",u(t)),render:()=>r.createElement(c.TestResultView,{test:n,result:e})})))||[],selectedTab:String(t),setSelectedTab:e=>s(+e)}))}},8515:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.TestFileView=void 0;var r=function(e,n){if(e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=c(n);if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(\"default\"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=o?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(r,a,l):r[a]=e[a]}return r.default=e,t&&t.set(e,r),r}(t(7294)),o=t(1029),a=t(1232),l=t(2060),i=t(7908);function c(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(c=function(e){return e?t:n})(e)}t(7421),n.TestFileView=({file:e,report:n,isFileExpanded:t,setFileExpanded:c,filter:s})=>r.createElement(a.Chip,{expanded:t(e.fileId),noInsets:!0,setExpanded:n=>c(e.fileId,n),header:r.createElement(\"span\",null,r.createElement(\"span\",{style:{float:\"right\"}},(0,o.msToString)(e.stats.duration)),e.fileName)},[...e.tests,...e.hooks].filter((e=>s.matches(e))).map((e=>r.createElement(\"div\",{key:`test-${e.testId}`,className:\"test-file-test test-file-test-outcome-\"+e.outcome},r.createElement(\"span\",{style:{float:\"right\"}},(0,o.msToString)(e.duration)),n.projectNames.length>1&&!!e.projectName&&r.createElement(\"span\",{style:{float:\"right\"}},r.createElement(l.ProjectLink,{projectNames:n.projectNames,projectName:e.projectName})),(0,i.statusIcon)(e.outcome),r.createElement(l.Link,{href:`#?testId=${e.testId}`,title:[...e.path,e.title].join(\" › \")},[...e.path,e.title].join(\" › \"),r.createElement(\"span\",{className:\"test-file-path\"},\"— \",e.location.file,\":\",e.location.line))))))},481:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.TestFilesView=void 0;var r=function(e,n){if(e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=a(n);if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if(\"default\"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var i=o?Object.getOwnPropertyDescriptor(e,l):null;i&&(i.get||i.set)?Object.defineProperty(r,l,i):r[l]=e[l]}return r.default=e,t&&t.set(e,r),r}(t(7294)),o=t(8515);function a(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(a=function(e){return e?t:n})(e)}t(7421),n.TestFilesView=({report:e,filter:n,expandedFiles:t,setExpandedFiles:a})=>{const l=r.useMemo((()=>{const t=[];let r=0;for(const o of(null==e?void 0:e.files)||[]){const e=o.tests.filter((e=>n.matches(e)));r+=e.length,e.length&&t.push({file:o,defaultExpanded:r<200})}return t}),[e,n]);return r.createElement(r.Fragment,null,e&&l.map((({file:l,defaultExpanded:i})=>r.createElement(o.TestFileView,{key:`file-${l.fileId}`,report:e,file:l,isFileExpanded:e=>{const n=t.get(e);return void 0===n?i:!!n},setFileExpanded:(e,n)=>{const r=new Map(t);r.set(e,n),a(r)},filter:n}))))}},4916:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.TestResultView=void 0;var r,o=(r=t(7174))&&r.__esModule?r:{default:r},a=function(e,n){if(e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=p(n);if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(\"default\"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=o?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(r,a,l):r[a]=e[a]}return r.default=e,t&&t.set(e,r),r}(t(7294)),l=t(6470),i=t(1002),c=t(1029),s=t(1232),u=t(4861),d=t(2060),f=t(7908);function p(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(p=function(e){return e?t:n})(e)}t(2296);const g=[\"expected\",\"actual\",\"diff\"];n.TestResultView=({result:e})=>{const{screenshots:n,videos:t,traces:r,otherAttachments:o,attachmentsMap:l}=a.useMemo((()=>{const n=new Map,t=(null==e?void 0:e.attachments)||[],r=new Set(t),o=t.filter((e=>e.contentType.startsWith(\"image/\")&&!g.includes(e.name))),a=t.filter((e=>\"video\"===e.name)),l=t.filter((e=>\"trace\"===e.name));for(const e of t)n.set(e.name,e);return[...o,...a,...l].forEach((e=>r.delete(e))),{attachmentsMap:n,screenshots:o,videos:a,otherAttachments:r,traces:l}}),[e]),i=l.get(\"expected\"),c=l.get(\"actual\"),f=l.get(\"diff\"),p=[null==c?void 0:c.contentType,null==i?void 0:i.contentType,null==f?void 0:f.contentType].some((e=>e&&/^image\\//i.test(e)));return a.createElement(\"div\",{className:\"test-result\"},!!e.errors.length&&a.createElement(s.AutoChip,{header:\"Errors\"},e.errors.map(((e,n)=>a.createElement(m,{key:\"test-result-error-message-\"+n,error:e})))),!!e.steps.length&&a.createElement(s.AutoChip,{header:\"Test Steps\"},e.steps.map(((e,n)=>a.createElement(h,{key:`step-${n}`,step:e,depth:0})))),i&&c&&a.createElement(s.AutoChip,{header:(p?\"Image\":\"Snapshot\")+\" mismatch\"},p&&a.createElement(b,{actual:c,expected:i,diff:f}),a.createElement(d.AttachmentLink,{key:\"expected\",attachment:i}),a.createElement(d.AttachmentLink,{key:\"actual\",attachment:c}),f&&a.createElement(d.AttachmentLink,{key:\"diff\",attachment:f})),!!n.length&&a.createElement(s.AutoChip,{header:\"Screenshots\"},n.map(((e,n)=>a.createElement(\"div\",{key:`screenshot-${n}`},a.createElement(\"img\",{src:e.path}),a.createElement(d.AttachmentLink,{attachment:e}))))),!!r.length&&a.createElement(s.AutoChip,{header:\"Traces\"},r.map(((e,n)=>a.createElement(\"div\",{key:`trace-${n}`},a.createElement(\"a\",{href:`trace/index.html?trace=${new URL(e.path,window.location.href)}`},a.createElement(\"img\",{src:u.traceImage,style:{width:192,height:117,marginLeft:20}})),a.createElement(d.AttachmentLink,{attachment:e}))))),!!t.length&&a.createElement(s.AutoChip,{header:\"Videos\"},t.map(((e,n)=>a.createElement(\"div\",{key:`video-${n}`},a.createElement(\"video\",{controls:!0},a.createElement(\"source\",{src:e.path,type:e.contentType})),a.createElement(d.AttachmentLink,{attachment:e}))))),!!o.size&&a.createElement(s.AutoChip,{header:\"Attachments\"},[...o].map(((e,n)=>a.createElement(d.AttachmentLink,{key:`attachment-link-${n}`,attachment:e})))))};const h=({step:e,depth:n})=>a.createElement(l.TreeItem,{title:a.createElement(\"span\",null,a.createElement(\"span\",{style:{float:\"right\"}},(0,c.msToString)(e.duration)),(0,f.statusIcon)(e.error||-1===e.duration?\"failed\":\"passed\"),a.createElement(\"span\",null,e.title),e.count>1&&a.createElement(a.Fragment,null,\" ✕ \",a.createElement(\"span\",{className:\"test-result-counter\"},e.count)),e.location&&a.createElement(\"span\",{className:\"test-result-path\"},\"— \",e.location.file,\":\",e.location.line)),loadChildren:e.steps.length+(e.snippet?1:0)?()=>{const t=e.steps.map(((e,t)=>a.createElement(h,{key:t,step:e,depth:n+1})));return e.snippet&&t.unshift(a.createElement(m,{key:\"line\",error:e.snippet})),t}:void 0,depth:n}),b=({actual:e,expected:n,diff:t})=>{const[r,o]=a.useState(\"actual\"),l=a.useRef(null),c=[];return c.push({id:\"actual\",title:\"Actual\",render:()=>a.createElement(\"img\",{src:e.path,onLoad:()=>{l.current&&(l.current.style.minHeight=l.current.offsetHeight+\"px\")}})}),c.push({id:\"expected\",title:\"Expected\",render:()=>a.createElement(\"img\",{src:n.path,onLoad:()=>{l.current&&(l.current.style.minHeight=l.current.offsetHeight+\"px\")}})}),t&&c.push({id:\"diff\",title:\"Diff\",render:()=>a.createElement(\"img\",{src:t.path})}),a.createElement(\"div\",{className:\"vbox\",\"data-testid\":\"test-result-image-mismatch\",ref:l},a.createElement(i.TabbedPane,{tabs:c,selectedTab:r,setSelectedTab:o}))},m=({error:e})=>{const n=a.useMemo((()=>{const n={bg:\"var(--color-canvas-subtle)\",fg:\"var(--color-fg-default)\"};return n.colors=v,new o.default(n).toHtml(e.replace(/[&\"<>]/g,(e=>({\"&\":\"&amp;\",'\"':\"&quot;\",\"<\":\"&lt;\",\">\":\"&gt;\"}[e]))))}),[e]);return a.createElement(\"div\",{className:\"test-result-error-message\",dangerouslySetInnerHTML:{__html:n||\"\"}})},v={0:\"#000\",1:\"#C00\",2:\"#0C0\",3:\"#C50\",4:\"#00C\",5:\"#C0C\",6:\"#0CC\",7:\"#CCC\",8:\"#555\",9:\"#F55\",10:\"#5F5\",11:\"#FF5\",12:\"#55F\",13:\"#F5F\",14:\"#5FF\",15:\"#FFF\"}},6470:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.TreeItem=void 0;var r=l(t(7294));t(3921);var o=l(t(8376));function a(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(a=function(e){return e?t:n})(e)}function l(e,n){if(!n&&e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=a(n);if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if(\"default\"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var i=o?Object.getOwnPropertyDescriptor(e,l):null;i&&(i.get||i.set)?Object.defineProperty(r,l,i):r[l]=e[l]}return r.default=e,t&&t.set(e,r),r}n.TreeItem=({title:e,loadChildren:n,onClick:t,expandByDefault:a,depth:l,selected:i})=>{const[c,s]=r.useState(a||!1),u=i?\"tree-item-title selected\":\"tree-item-title\";return r.createElement(\"div\",{className:\"tree-item\"},r.createElement(\"span\",{className:u,style:{whiteSpace:\"nowrap\",paddingLeft:22*l+4},onClick:()=>{null==t||t(),s(!c)}},n&&!!c&&o.downArrow(),n&&!c&&o.rightArrow(),!n&&r.createElement(\"span\",{style:{visibility:\"hidden\"}},o.rightArrow()),e),c&&(null==n?void 0:n()))}},1029:(e,n)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.msToString=function(e){if(!isFinite(e))return\"-\";if(0===e)return\"0\";if(e<1e3)return e.toFixed(0)+\"ms\";const n=e/1e3;if(n<60)return n.toFixed(1)+\"s\";const t=n/60;if(t<60)return t.toFixed(1)+\"m\";const r=t/60;return r<24?r.toFixed(1)+\"h\":(r/24).toFixed(1)+\"d\"}},2540:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(8081),o=t.n(r),a=t(3645),l=t.n(a)()(o());l.push([e.id,'/*\\n  Copyright (c) Microsoft Corporation.\\n\\n  Licensed under the Apache License, Version 2.0 (the \"License\");\\n  you may not use this file except in compliance with the License.\\n  You may obtain a copy of the License at\\n\\n      http://www.apache.org/licenses/LICENSE-2.0\\n\\n  Unless required by applicable law or agreed to in writing, software\\n  distributed under the License is distributed on an \"AS IS\" BASIS,\\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n  See the License for the specific language governing permissions and\\n  limitations under the License.\\n*/\\n\\n.chip-header {\\n  border: 1px solid var(--color-border-default);\\n  border-top-left-radius: 6px;\\n  border-top-right-radius: 6px;\\n  background-color: var(--color-canvas-subtle);\\n  padding: 0 8px;\\n  border-bottom: none;\\n  margin-top: 24px;\\n  font-weight: 600;\\n  line-height: 38px;\\n  white-space: nowrap;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n}\\n\\n.chip-header.expanded-false {\\n  border: 1px solid var(--color-border-default);\\n  border-radius: 6px;\\n}\\n\\n.chip-header.expanded-false,\\n.chip-header.expanded-true {\\n  cursor: pointer;\\n}\\n\\n.chip-body {\\n  border: 1px solid var(--color-border-default);\\n  border-bottom-left-radius: 6px;\\n  border-bottom-right-radius: 6px;\\n  padding: 16px;\\n}\\n\\n.chip-body-no-insets {\\n  padding: 0;\\n}\\n\\n@media only screen and (max-width: 600px) {\\n  .chip-header {\\n    border-radius: 0;\\n    border-right: none;\\n    border-left: none;\\n  }\\n\\n  .chip-body {\\n    border-radius: 0;\\n    border-right: none;\\n    border-left: none;\\n    padding: 8px;\\n  }\\n\\n  .chip-body-no-insets {\\n    padding: 0; \\n  }\\n}\\n',\"\"]);const i=l},7566:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(8081),o=t.n(r),a=t(3645),l=t.n(a)()(o());l.push([e.id,'/* The MIT License (MIT)\\n\\nCopyright (c) 2021 GitHub Inc.\\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\\n:root {\\n  --color-canvas-default-transparent: rgba(255,255,255,0);\\n  --color-marketing-icon-primary: #218bff;\\n  --color-marketing-icon-secondary: #54aeff;\\n  --color-diff-blob-addition-num-text: #24292f;\\n  --color-diff-blob-addition-fg: #24292f;\\n  --color-diff-blob-addition-num-bg: #CCFFD8;\\n  --color-diff-blob-addition-line-bg: #E6FFEC;\\n  --color-diff-blob-addition-word-bg: #ABF2BC;\\n  --color-diff-blob-deletion-num-text: #24292f;\\n  --color-diff-blob-deletion-fg: #24292f;\\n  --color-diff-blob-deletion-num-bg: #FFD7D5;\\n  --color-diff-blob-deletion-line-bg: #FFEBE9;\\n  --color-diff-blob-deletion-word-bg: rgba(255,129,130,0.4);\\n  --color-diff-blob-hunk-num-bg: rgba(84,174,255,0.4);\\n  --color-diff-blob-expander-icon: #57606a;\\n  --color-diff-blob-selected-line-highlight-mix-blend-mode: multiply;\\n  --color-diffstat-deletion-border: rgba(27,31,36,0.15);\\n  --color-diffstat-addition-border: rgba(27,31,36,0.15);\\n  --color-diffstat-addition-bg: #2da44e;\\n  --color-search-keyword-hl: #fff8c5;\\n  --color-prettylights-syntax-comment: #6e7781;\\n  --color-prettylights-syntax-constant: #0550ae;\\n  --color-prettylights-syntax-entity: #8250df;\\n  --color-prettylights-syntax-storage-modifier-import: #24292f;\\n  --color-prettylights-syntax-entity-tag: #116329;\\n  --color-prettylights-syntax-keyword: #cf222e;\\n  --color-prettylights-syntax-string: #0a3069;\\n  --color-prettylights-syntax-variable: #953800;\\n  --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;\\n  --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;\\n  --color-prettylights-syntax-invalid-illegal-bg: #82071e;\\n  --color-prettylights-syntax-carriage-return-text: #f6f8fa;\\n  --color-prettylights-syntax-carriage-return-bg: #cf222e;\\n  --color-prettylights-syntax-string-regexp: #116329;\\n  --color-prettylights-syntax-markup-list: #3b2300;\\n  --color-prettylights-syntax-markup-heading: #0550ae;\\n  --color-prettylights-syntax-markup-italic: #24292f;\\n  --color-prettylights-syntax-markup-bold: #24292f;\\n  --color-prettylights-syntax-markup-deleted-text: #82071e;\\n  --color-prettylights-syntax-markup-deleted-bg: #FFEBE9;\\n  --color-prettylights-syntax-markup-inserted-text: #116329;\\n  --color-prettylights-syntax-markup-inserted-bg: #dafbe1;\\n  --color-prettylights-syntax-markup-changed-text: #953800;\\n  --color-prettylights-syntax-markup-changed-bg: #ffd8b5;\\n  --color-prettylights-syntax-markup-ignored-text: #eaeef2;\\n  --color-prettylights-syntax-markup-ignored-bg: #0550ae;\\n  --color-prettylights-syntax-meta-diff-range: #8250df;\\n  --color-prettylights-syntax-brackethighlighter-angle: #57606a;\\n  --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;\\n  --color-prettylights-syntax-constant-other-reference-link: #0a3069;\\n  --color-codemirror-text: #24292f;\\n  --color-codemirror-bg: #ffffff;\\n  --color-codemirror-gutters-bg: #ffffff;\\n  --color-codemirror-guttermarker-text: #ffffff;\\n  --color-codemirror-guttermarker-subtle-text: #6e7781;\\n  --color-codemirror-linenumber-text: #57606a;\\n  --color-codemirror-cursor: #24292f;\\n  --color-codemirror-selection-bg: rgba(84,174,255,0.4);\\n  --color-codemirror-activeline-bg: rgba(234,238,242,0.5);\\n  --color-codemirror-matchingbracket-text: #24292f;\\n  --color-codemirror-lines-bg: #ffffff;\\n  --color-codemirror-syntax-comment: #24292f;\\n  --color-codemirror-syntax-constant: #0550ae;\\n  --color-codemirror-syntax-entity: #8250df;\\n  --color-codemirror-syntax-keyword: #cf222e;\\n  --color-codemirror-syntax-storage: #cf222e;\\n  --color-codemirror-syntax-string: #0a3069;\\n  --color-codemirror-syntax-support: #0550ae;\\n  --color-codemirror-syntax-variable: #953800;\\n  --color-checks-bg: #24292f;\\n  --color-checks-run-border-width: 0px;\\n  --color-checks-container-border-width: 0px;\\n  --color-checks-text-primary: #f6f8fa;\\n  --color-checks-text-secondary: #8c959f;\\n  --color-checks-text-link: #54aeff;\\n  --color-checks-btn-icon: #afb8c1;\\n  --color-checks-btn-hover-icon: #f6f8fa;\\n  --color-checks-btn-hover-bg: rgba(255,255,255,0.125);\\n  --color-checks-input-text: #eaeef2;\\n  --color-checks-input-placeholder-text: #8c959f;\\n  --color-checks-input-focus-text: #8c959f;\\n  --color-checks-input-bg: #32383f;\\n  --color-checks-input-shadow: none;\\n  --color-checks-donut-error: #fa4549;\\n  --color-checks-donut-pending: #bf8700;\\n  --color-checks-donut-success: #2da44e;\\n  --color-checks-donut-neutral: #afb8c1;\\n  --color-checks-dropdown-text: #afb8c1;\\n  --color-checks-dropdown-bg: #32383f;\\n  --color-checks-dropdown-border: #424a53;\\n  --color-checks-dropdown-shadow: rgba(27,31,36,0.3);\\n  --color-checks-dropdown-hover-text: #f6f8fa;\\n  --color-checks-dropdown-hover-bg: #424a53;\\n  --color-checks-dropdown-btn-hover-text: #f6f8fa;\\n  --color-checks-dropdown-btn-hover-bg: #32383f;\\n  --color-checks-scrollbar-thumb-bg: #57606a;\\n  --color-checks-header-label-text: #d0d7de;\\n  --color-checks-header-label-open-text: #f6f8fa;\\n  --color-checks-header-border: #32383f;\\n  --color-checks-header-icon: #8c959f;\\n  --color-checks-line-text: #d0d7de;\\n  --color-checks-line-num-text: rgba(140,149,159,0.75);\\n  --color-checks-line-timestamp-text: #8c959f;\\n  --color-checks-line-hover-bg: #32383f;\\n  --color-checks-line-selected-bg: rgba(33,139,255,0.15);\\n  --color-checks-line-selected-num-text: #54aeff;\\n  --color-checks-line-dt-fm-text: #24292f;\\n  --color-checks-line-dt-fm-bg: #9a6700;\\n  --color-checks-gate-bg: rgba(125,78,0,0.15);\\n  --color-checks-gate-text: #d0d7de;\\n  --color-checks-gate-waiting-text: #afb8c1;\\n  --color-checks-step-header-open-bg: #32383f;\\n  --color-checks-step-error-text: #ff8182;\\n  --color-checks-step-warning-text: #d4a72c;\\n  --color-checks-logline-text: #8c959f;\\n  --color-checks-logline-num-text: rgba(140,149,159,0.75);\\n  --color-checks-logline-debug-text: #c297ff;\\n  --color-checks-logline-error-text: #d0d7de;\\n  --color-checks-logline-error-num-text: #ff8182;\\n  --color-checks-logline-error-bg: rgba(164,14,38,0.15);\\n  --color-checks-logline-warning-text: #d0d7de;\\n  --color-checks-logline-warning-num-text: #d4a72c;\\n  --color-checks-logline-warning-bg: rgba(125,78,0,0.15);\\n  --color-checks-logline-command-text: #54aeff;\\n  --color-checks-logline-section-text: #4ac26b;\\n  --color-checks-ansi-black: #24292f;\\n  --color-checks-ansi-black-bright: #32383f;\\n  --color-checks-ansi-white: #d0d7de;\\n  --color-checks-ansi-white-bright: #d0d7de;\\n  --color-checks-ansi-gray: #8c959f;\\n  --color-checks-ansi-red: #ff8182;\\n  --color-checks-ansi-red-bright: #ffaba8;\\n  --color-checks-ansi-green: #4ac26b;\\n  --color-checks-ansi-green-bright: #6fdd8b;\\n  --color-checks-ansi-yellow: #d4a72c;\\n  --color-checks-ansi-yellow-bright: #eac54f;\\n  --color-checks-ansi-blue: #54aeff;\\n  --color-checks-ansi-blue-bright: #80ccff;\\n  --color-checks-ansi-magenta: #c297ff;\\n  --color-checks-ansi-magenta-bright: #d8b9ff;\\n  --color-checks-ansi-cyan: #76e3ea;\\n  --color-checks-ansi-cyan-bright: #b3f0ff;\\n  --color-project-header-bg: #24292f;\\n  --color-project-sidebar-bg: #ffffff;\\n  --color-project-gradient-in: #ffffff;\\n  --color-project-gradient-out: rgba(255,255,255,0);\\n  --color-mktg-success: rgba(36,146,67,1);\\n  --color-mktg-info: rgba(19,119,234,1);\\n  --color-mktg-bg-shade-gradient-top: rgba(27,31,36,0.065);\\n  --color-mktg-bg-shade-gradient-bottom: rgba(27,31,36,0);\\n  --color-mktg-btn-bg-top: hsla(228,82%,66%,1);\\n  --color-mktg-btn-bg-bottom: #4969ed;\\n  --color-mktg-btn-bg-overlay-top: hsla(228,74%,59%,1);\\n  --color-mktg-btn-bg-overlay-bottom: #3355e0;\\n  --color-mktg-btn-text: #ffffff;\\n  --color-mktg-btn-primary-bg-top: hsla(137,56%,46%,1);\\n  --color-mktg-btn-primary-bg-bottom: #2ea44f;\\n  --color-mktg-btn-primary-bg-overlay-top: hsla(134,60%,38%,1);\\n  --color-mktg-btn-primary-bg-overlay-bottom: #22863a;\\n  --color-mktg-btn-primary-text: #ffffff;\\n  --color-mktg-btn-enterprise-bg-top: hsla(249,100%,72%,1);\\n  --color-mktg-btn-enterprise-bg-bottom: #6f57ff;\\n  --color-mktg-btn-enterprise-bg-overlay-top: hsla(248,65%,63%,1);\\n  --color-mktg-btn-enterprise-bg-overlay-bottom: #614eda;\\n  --color-mktg-btn-enterprise-text: #ffffff;\\n  --color-mktg-btn-outline-text: #4969ed;\\n  --color-mktg-btn-outline-border: rgba(73,105,237,0.3);\\n  --color-mktg-btn-outline-hover-text: #3355e0;\\n  --color-mktg-btn-outline-hover-border: rgba(51,85,224,0.5);\\n  --color-mktg-btn-outline-focus-border: #4969ed;\\n  --color-mktg-btn-outline-focus-border-inset: rgba(73,105,237,0.5);\\n  --color-mktg-btn-dark-text: #ffffff;\\n  --color-mktg-btn-dark-border: rgba(255,255,255,0.3);\\n  --color-mktg-btn-dark-hover-text: #ffffff;\\n  --color-mktg-btn-dark-hover-border: rgba(255,255,255,0.5);\\n  --color-mktg-btn-dark-focus-border: #ffffff;\\n  --color-mktg-btn-dark-focus-border-inset: rgba(255,255,255,0.5);\\n  --color-avatar-bg: #ffffff;\\n  --color-avatar-border: rgba(27,31,36,0.15);\\n  --color-avatar-stack-fade: #afb8c1;\\n  --color-avatar-stack-fade-more: #d0d7de;\\n  --color-avatar-child-shadow: -2px -2px 0 rgba(255,255,255,0.8);\\n  --color-topic-tag-border: rgba(0,0,0,0);\\n  --color-select-menu-backdrop-border: rgba(0,0,0,0);\\n  --color-select-menu-tap-highlight: rgba(175,184,193,0.5);\\n  --color-select-menu-tap-focus-bg: #b6e3ff;\\n  --color-overlay-shadow: 0 1px 3px rgba(27,31,36,0.12), 0 8px 24px rgba(66,74,83,0.12);\\n  --color-header-text: rgba(255,255,255,0.7);\\n  --color-header-bg: #24292f;\\n  --color-header-logo: #ffffff;\\n  --color-header-search-bg: #24292f;\\n  --color-header-search-border: #57606a;\\n  --color-sidenav-selected-bg: #ffffff;\\n  --color-menu-bg-active: rgba(0,0,0,0);\\n  --color-input-disabled-bg: rgba(175,184,193,0.2);\\n  --color-timeline-badge-bg: #eaeef2;\\n  --color-ansi-black: #24292f;\\n  --color-ansi-black-bright: #57606a;\\n  --color-ansi-white: #6e7781;\\n  --color-ansi-white-bright: #8c959f;\\n  --color-ansi-gray: #6e7781;\\n  --color-ansi-red: #cf222e;\\n  --color-ansi-red-bright: #a40e26;\\n  --color-ansi-green: #116329;\\n  --color-ansi-green-bright: #1a7f37;\\n  --color-ansi-yellow: #4d2d00;\\n  --color-ansi-yellow-bright: #633c01;\\n  --color-ansi-blue: #0969da;\\n  --color-ansi-blue-bright: #218bff;\\n  --color-ansi-magenta: #8250df;\\n  --color-ansi-magenta-bright: #a475f9;\\n  --color-ansi-cyan: #1b7c83;\\n  --color-ansi-cyan-bright: #3192aa;\\n  --color-btn-text: #24292f;\\n  --color-btn-bg: #f6f8fa;\\n  --color-btn-border: rgba(27,31,36,0.15);\\n  --color-btn-shadow: 0 1px 0 rgba(27,31,36,0.04);\\n  --color-btn-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.25);\\n  --color-btn-hover-bg: #f3f4f6;\\n  --color-btn-hover-border: rgba(27,31,36,0.15);\\n  --color-btn-active-bg: hsla(220,14%,93%,1);\\n  --color-btn-active-border: rgba(27,31,36,0.15);\\n  --color-btn-selected-bg: hsla(220,14%,94%,1);\\n  --color-btn-focus-bg: #f6f8fa;\\n  --color-btn-focus-border: rgba(27,31,36,0.15);\\n  --color-btn-focus-shadow: 0 0 0 3px rgba(9,105,218,0.3);\\n  --color-btn-shadow-active: inset 0 0.15em 0.3em rgba(27,31,36,0.15);\\n  --color-btn-shadow-input-focus: 0 0 0 0.2em rgba(9,105,218,0.3);\\n  --color-btn-counter-bg: rgba(27,31,36,0.08);\\n  --color-btn-primary-text: #ffffff;\\n  --color-btn-primary-bg: #2da44e;\\n  --color-btn-primary-border: rgba(27,31,36,0.15);\\n  --color-btn-primary-shadow: 0 1px 0 rgba(27,31,36,0.1);\\n  --color-btn-primary-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);\\n  --color-btn-primary-hover-bg: #2c974b;\\n  --color-btn-primary-hover-border: rgba(27,31,36,0.15);\\n  --color-btn-primary-selected-bg: hsla(137,55%,36%,1);\\n  --color-btn-primary-selected-shadow: inset 0 1px 0 rgba(0,45,17,0.2);\\n  --color-btn-primary-disabled-text: rgba(255,255,255,0.8);\\n  --color-btn-primary-disabled-bg: #94d3a2;\\n  --color-btn-primary-disabled-border: rgba(27,31,36,0.15);\\n  --color-btn-primary-focus-bg: #2da44e;\\n  --color-btn-primary-focus-border: rgba(27,31,36,0.15);\\n  --color-btn-primary-focus-shadow: 0 0 0 3px rgba(45,164,78,0.4);\\n  --color-btn-primary-icon: rgba(255,255,255,0.8);\\n  --color-btn-primary-counter-bg: rgba(255,255,255,0.2);\\n  --color-btn-outline-text: #0969da;\\n  --color-btn-outline-hover-text: #ffffff;\\n  --color-btn-outline-hover-bg: #0969da;\\n  --color-btn-outline-hover-border: rgba(27,31,36,0.15);\\n  --color-btn-outline-hover-shadow: 0 1px 0 rgba(27,31,36,0.1);\\n  --color-btn-outline-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);\\n  --color-btn-outline-hover-counter-bg: rgba(255,255,255,0.2);\\n  --color-btn-outline-selected-text: #ffffff;\\n  --color-btn-outline-selected-bg: hsla(212,92%,42%,1);\\n  --color-btn-outline-selected-border: rgba(27,31,36,0.15);\\n  --color-btn-outline-selected-shadow: inset 0 1px 0 rgba(0,33,85,0.2);\\n  --color-btn-outline-disabled-text: rgba(9,105,218,0.5);\\n  --color-btn-outline-disabled-bg: #f6f8fa;\\n  --color-btn-outline-disabled-counter-bg: rgba(9,105,218,0.05);\\n  --color-btn-outline-focus-border: rgba(27,31,36,0.15);\\n  --color-btn-outline-focus-shadow: 0 0 0 3px rgba(5,80,174,0.4);\\n  --color-btn-outline-counter-bg: rgba(9,105,218,0.1);\\n  --color-btn-danger-text: #cf222e;\\n  --color-btn-danger-hover-text: #ffffff;\\n  --color-btn-danger-hover-bg: #a40e26;\\n  --color-btn-danger-hover-border: rgba(27,31,36,0.15);\\n  --color-btn-danger-hover-shadow: 0 1px 0 rgba(27,31,36,0.1);\\n  --color-btn-danger-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,0.03);\\n  --color-btn-danger-hover-counter-bg: rgba(255,255,255,0.2);\\n  --color-btn-danger-selected-text: #ffffff;\\n  --color-btn-danger-selected-bg: hsla(356,72%,44%,1);\\n  --color-btn-danger-selected-border: rgba(27,31,36,0.15);\\n  --color-btn-danger-selected-shadow: inset 0 1px 0 rgba(76,0,20,0.2);\\n  --color-btn-danger-disabled-text: rgba(207,34,46,0.5);\\n  --color-btn-danger-disabled-bg: #f6f8fa;\\n  --color-btn-danger-disabled-counter-bg: rgba(207,34,46,0.05);\\n  --color-btn-danger-focus-border: rgba(27,31,36,0.15);\\n  --color-btn-danger-focus-shadow: 0 0 0 3px rgba(164,14,38,0.4);\\n  --color-btn-danger-counter-bg: rgba(207,34,46,0.1);\\n  --color-btn-danger-icon: #cf222e;\\n  --color-btn-danger-hover-icon: #ffffff;\\n  --color-underlinenav-icon: #6e7781;\\n  --color-underlinenav-border-hover: rgba(175,184,193,0.2);\\n  --color-fg-default: #24292f;\\n  --color-fg-muted: #57606a;\\n  --color-fg-subtle: #6e7781;\\n  --color-fg-on-emphasis: #ffffff;\\n  --color-canvas-default: #ffffff;\\n  --color-canvas-overlay: #ffffff;\\n  --color-canvas-inset: #f6f8fa;\\n  --color-canvas-subtle: #f6f8fa;\\n  --color-border-default: #d0d7de;\\n  --color-border-muted: hsla(210,18%,87%,1);\\n  --color-border-subtle: rgba(27,31,36,0.15);\\n  --color-shadow-small: 0 1px 0 rgba(27,31,36,0.04);\\n  --color-shadow-medium: 0 3px 6px rgba(140,149,159,0.15);\\n  --color-shadow-large: 0 8px 24px rgba(140,149,159,0.2);\\n  --color-shadow-extra-large: 0 12px 28px rgba(140,149,159,0.3);\\n  --color-neutral-emphasis-plus: #24292f;\\n  --color-neutral-emphasis: #6e7781;\\n  --color-neutral-muted: rgba(175,184,193,0.2);\\n  --color-neutral-subtle: rgba(234,238,242,0.5);\\n  --color-accent-fg: #0969da;\\n  --color-accent-emphasis: #0969da;\\n  --color-accent-muted: rgba(84,174,255,0.4);\\n  --color-accent-subtle: #ddf4ff;\\n  --color-success-fg: #1a7f37;\\n  --color-success-emphasis: #2da44e;\\n  --color-success-muted: rgba(74,194,107,0.4);\\n  --color-success-subtle: #dafbe1;\\n  --color-attention-fg: #9a6700;\\n  --color-attention-emphasis: #bf8700;\\n  --color-attention-muted: rgba(212,167,44,0.4);\\n  --color-attention-subtle: #fff8c5;\\n  --color-severe-fg: #bc4c00;\\n  --color-severe-emphasis: #bc4c00;\\n  --color-severe-muted: rgba(251,143,68,0.4);\\n  --color-severe-subtle: #fff1e5;\\n  --color-danger-fg: #cf222e;\\n  --color-danger-emphasis: #cf222e;\\n  --color-danger-muted: rgba(255,129,130,0.4);\\n  --color-danger-subtle: #FFEBE9;\\n  --color-done-fg: #8250df;\\n  --color-done-emphasis: #8250df;\\n  --color-done-muted: rgba(194,151,255,0.4);\\n  --color-done-subtle: #fbefff;\\n  --color-sponsors-fg: #bf3989;\\n  --color-sponsors-emphasis: #bf3989;\\n  --color-sponsors-muted: rgba(255,128,200,0.4);\\n  --color-sponsors-subtle: #ffeff7;\\n  --color-primer-canvas-backdrop: rgba(27,31,36,0.5);\\n  --color-primer-canvas-sticky: rgba(255,255,255,0.95);\\n  --color-primer-border-active: #FD8C73;\\n  --color-primer-border-contrast: rgba(27,31,36,0.1);\\n  --color-primer-shadow-highlight: inset 0 1px 0 rgba(255,255,255,0.25);\\n  --color-primer-shadow-inset: inset 0 1px 0 rgba(208,215,222,0.2);\\n  --color-primer-shadow-focus: 0 0 0 3px rgba(9,105,218,0.3);\\n  --color-scale-black: #1b1f24;\\n  --color-scale-white: #ffffff;\\n  --color-scale-gray-0: #f6f8fa;\\n  --color-scale-gray-1: #eaeef2;\\n  --color-scale-gray-2: #d0d7de;\\n  --color-scale-gray-3: #afb8c1;\\n  --color-scale-gray-4: #8c959f;\\n  --color-scale-gray-5: #6e7781;\\n  --color-scale-gray-6: #57606a;\\n  --color-scale-gray-7: #424a53;\\n  --color-scale-gray-8: #32383f;\\n  --color-scale-gray-9: #24292f;\\n  --color-scale-blue-0: #ddf4ff;\\n  --color-scale-blue-1: #b6e3ff;\\n  --color-scale-blue-2: #80ccff;\\n  --color-scale-blue-3: #54aeff;\\n  --color-scale-blue-4: #218bff;\\n  --color-scale-blue-5: #0969da;\\n  --color-scale-blue-6: #0550ae;\\n  --color-scale-blue-7: #033d8b;\\n  --color-scale-blue-8: #0a3069;\\n  --color-scale-blue-9: #002155;\\n  --color-scale-green-0: #dafbe1;\\n  --color-scale-green-1: #aceebb;\\n  --color-scale-green-2: #6fdd8b;\\n  --color-scale-green-3: #4ac26b;\\n  --color-scale-green-4: #2da44e;\\n  --color-scale-green-5: #1a7f37;\\n  --color-scale-green-6: #116329;\\n  --color-scale-green-7: #044f1e;\\n  --color-scale-green-8: #003d16;\\n  --color-scale-green-9: #002d11;\\n  --color-scale-yellow-0: #fff8c5;\\n  --color-scale-yellow-1: #fae17d;\\n  --color-scale-yellow-2: #eac54f;\\n  --color-scale-yellow-3: #d4a72c;\\n  --color-scale-yellow-4: #bf8700;\\n  --color-scale-yellow-5: #9a6700;\\n  --color-scale-yellow-6: #7d4e00;\\n  --color-scale-yellow-7: #633c01;\\n  --color-scale-yellow-8: #4d2d00;\\n  --color-scale-yellow-9: #3b2300;\\n  --color-scale-orange-0: #fff1e5;\\n  --color-scale-orange-1: #ffd8b5;\\n  --color-scale-orange-2: #ffb77c;\\n  --color-scale-orange-3: #fb8f44;\\n  --color-scale-orange-4: #e16f24;\\n  --color-scale-orange-5: #bc4c00;\\n  --color-scale-orange-6: #953800;\\n  --color-scale-orange-7: #762c00;\\n  --color-scale-orange-8: #5c2200;\\n  --color-scale-orange-9: #471700;\\n  --color-scale-red-0: #FFEBE9;\\n  --color-scale-red-1: #ffcecb;\\n  --color-scale-red-2: #ffaba8;\\n  --color-scale-red-3: #ff8182;\\n  --color-scale-red-4: #fa4549;\\n  --color-scale-red-5: #cf222e;\\n  --color-scale-red-6: #a40e26;\\n  --color-scale-red-7: #82071e;\\n  --color-scale-red-8: #660018;\\n  --color-scale-red-9: #4c0014;\\n  --color-scale-purple-0: #fbefff;\\n  --color-scale-purple-1: #ecd8ff;\\n  --color-scale-purple-2: #d8b9ff;\\n  --color-scale-purple-3: #c297ff;\\n  --color-scale-purple-4: #a475f9;\\n  --color-scale-purple-5: #8250df;\\n  --color-scale-purple-6: #6639ba;\\n  --color-scale-purple-7: #512a97;\\n  --color-scale-purple-8: #3e1f79;\\n  --color-scale-purple-9: #2e1461;\\n  --color-scale-pink-0: #ffeff7;\\n  --color-scale-pink-1: #ffd3eb;\\n  --color-scale-pink-2: #ffadda;\\n  --color-scale-pink-3: #ff80c8;\\n  --color-scale-pink-4: #e85aad;\\n  --color-scale-pink-5: #bf3989;\\n  --color-scale-pink-6: #99286e;\\n  --color-scale-pink-7: #772057;\\n  --color-scale-pink-8: #611347;\\n  --color-scale-pink-9: #4d0336;\\n  --color-scale-coral-0: #FFF0EB;\\n  --color-scale-coral-1: #FFD6CC;\\n  --color-scale-coral-2: #FFB4A1;\\n  --color-scale-coral-3: #FD8C73;\\n  --color-scale-coral-4: #EC6547;\\n  --color-scale-coral-5: #C4432B;\\n  --color-scale-coral-6: #9E2F1C;\\n  --color-scale-coral-7: #801F0F;\\n  --color-scale-coral-8: #691105;\\n  --color-scale-coral-9: #510901\\n}\\n\\n@media(prefers-color-scheme: dark) {\\n  :root {\\n    --color-canvas-default-transparent: rgba(13,17,23,0);\\n    --color-marketing-icon-primary: #79c0ff;\\n    --color-marketing-icon-secondary: #1f6feb;\\n    --color-diff-blob-addition-num-text: #c9d1d9;\\n    --color-diff-blob-addition-fg: #c9d1d9;\\n    --color-diff-blob-addition-num-bg: rgba(63,185,80,0.3);\\n    --color-diff-blob-addition-line-bg: rgba(46,160,67,0.15);\\n    --color-diff-blob-addition-word-bg: rgba(46,160,67,0.4);\\n    --color-diff-blob-deletion-num-text: #c9d1d9;\\n    --color-diff-blob-deletion-fg: #c9d1d9;\\n    --color-diff-blob-deletion-num-bg: rgba(248,81,73,0.3);\\n    --color-diff-blob-deletion-line-bg: rgba(248,81,73,0.15);\\n    --color-diff-blob-deletion-word-bg: rgba(248,81,73,0.4);\\n    --color-diff-blob-hunk-num-bg: rgba(56,139,253,0.4);\\n    --color-diff-blob-expander-icon: #8b949e;\\n    --color-diff-blob-selected-line-highlight-mix-blend-mode: screen;\\n    --color-diffstat-deletion-border: rgba(240,246,252,0.1);\\n    --color-diffstat-addition-border: rgba(240,246,252,0.1);\\n    --color-diffstat-addition-bg: #3fb950;\\n    --color-search-keyword-hl: rgba(210,153,34,0.4);\\n    --color-prettylights-syntax-comment: #8b949e;\\n    --color-prettylights-syntax-constant: #79c0ff;\\n    --color-prettylights-syntax-entity: #d2a8ff;\\n    --color-prettylights-syntax-storage-modifier-import: #c9d1d9;\\n    --color-prettylights-syntax-entity-tag: #7ee787;\\n    --color-prettylights-syntax-keyword: #ff7b72;\\n    --color-prettylights-syntax-string: #a5d6ff;\\n    --color-prettylights-syntax-variable: #ffa657;\\n    --color-prettylights-syntax-brackethighlighter-unmatched: #f85149;\\n    --color-prettylights-syntax-invalid-illegal-text: #f0f6fc;\\n    --color-prettylights-syntax-invalid-illegal-bg: #8e1519;\\n    --color-prettylights-syntax-carriage-return-text: #f0f6fc;\\n    --color-prettylights-syntax-carriage-return-bg: #b62324;\\n    --color-prettylights-syntax-string-regexp: #7ee787;\\n    --color-prettylights-syntax-markup-list: #f2cc60;\\n    --color-prettylights-syntax-markup-heading: #1f6feb;\\n    --color-prettylights-syntax-markup-italic: #c9d1d9;\\n    --color-prettylights-syntax-markup-bold: #c9d1d9;\\n    --color-prettylights-syntax-markup-deleted-text: #ffdcd7;\\n    --color-prettylights-syntax-markup-deleted-bg: #67060c;\\n    --color-prettylights-syntax-markup-inserted-text: #aff5b4;\\n    --color-prettylights-syntax-markup-inserted-bg: #033a16;\\n    --color-prettylights-syntax-markup-changed-text: #ffdfb6;\\n    --color-prettylights-syntax-markup-changed-bg: #5a1e02;\\n    --color-prettylights-syntax-markup-ignored-text: #c9d1d9;\\n    --color-prettylights-syntax-markup-ignored-bg: #1158c7;\\n    --color-prettylights-syntax-meta-diff-range: #d2a8ff;\\n    --color-prettylights-syntax-brackethighlighter-angle: #8b949e;\\n    --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;\\n    --color-prettylights-syntax-constant-other-reference-link: #a5d6ff;\\n    --color-codemirror-text: #c9d1d9;\\n    --color-codemirror-bg: #0d1117;\\n    --color-codemirror-gutters-bg: #0d1117;\\n    --color-codemirror-guttermarker-text: #0d1117;\\n    --color-codemirror-guttermarker-subtle-text: #484f58;\\n    --color-codemirror-linenumber-text: #8b949e;\\n    --color-codemirror-cursor: #c9d1d9;\\n    --color-codemirror-selection-bg: rgba(56,139,253,0.4);\\n    --color-codemirror-activeline-bg: rgba(110,118,129,0.1);\\n    --color-codemirror-matchingbracket-text: #c9d1d9;\\n    --color-codemirror-lines-bg: #0d1117;\\n    --color-codemirror-syntax-comment: #8b949e;\\n    --color-codemirror-syntax-constant: #79c0ff;\\n    --color-codemirror-syntax-entity: #d2a8ff;\\n    --color-codemirror-syntax-keyword: #ff7b72;\\n    --color-codemirror-syntax-storage: #ff7b72;\\n    --color-codemirror-syntax-string: #a5d6ff;\\n    --color-codemirror-syntax-support: #79c0ff;\\n    --color-codemirror-syntax-variable: #ffa657;\\n    --color-checks-bg: #010409;\\n    --color-checks-run-border-width: 1px;\\n    --color-checks-container-border-width: 1px;\\n    --color-checks-text-primary: #c9d1d9;\\n    --color-checks-text-secondary: #8b949e;\\n    --color-checks-text-link: #58a6ff;\\n    --color-checks-btn-icon: #8b949e;\\n    --color-checks-btn-hover-icon: #c9d1d9;\\n    --color-checks-btn-hover-bg: rgba(110,118,129,0.1);\\n    --color-checks-input-text: #8b949e;\\n    --color-checks-input-placeholder-text: #484f58;\\n    --color-checks-input-focus-text: #c9d1d9;\\n    --color-checks-input-bg: #161b22;\\n    --color-checks-input-shadow: none;\\n    --color-checks-donut-error: #f85149;\\n    --color-checks-donut-pending: #d29922;\\n    --color-checks-donut-success: #2ea043;\\n    --color-checks-donut-neutral: #8b949e;\\n    --color-checks-dropdown-text: #c9d1d9;\\n    --color-checks-dropdown-bg: #161b22;\\n    --color-checks-dropdown-border: #30363d;\\n    --color-checks-dropdown-shadow: rgba(1,4,9,0.3);\\n    --color-checks-dropdown-hover-text: #c9d1d9;\\n    --color-checks-dropdown-hover-bg: rgba(110,118,129,0.1);\\n    --color-checks-dropdown-btn-hover-text: #c9d1d9;\\n    --color-checks-dropdown-btn-hover-bg: rgba(110,118,129,0.1);\\n    --color-checks-scrollbar-thumb-bg: rgba(110,118,129,0.4);\\n    --color-checks-header-label-text: #8b949e;\\n    --color-checks-header-label-open-text: #c9d1d9;\\n    --color-checks-header-border: #21262d;\\n    --color-checks-header-icon: #8b949e;\\n    --color-checks-line-text: #8b949e;\\n    --color-checks-line-num-text: #484f58;\\n    --color-checks-line-timestamp-text: #484f58;\\n    --color-checks-line-hover-bg: rgba(110,118,129,0.1);\\n    --color-checks-line-selected-bg: rgba(56,139,253,0.15);\\n    --color-checks-line-selected-num-text: #58a6ff;\\n    --color-checks-line-dt-fm-text: #f0f6fc;\\n    --color-checks-line-dt-fm-bg: #9e6a03;\\n    --color-checks-gate-bg: rgba(187,128,9,0.15);\\n    --color-checks-gate-text: #8b949e;\\n    --color-checks-gate-waiting-text: #d29922;\\n    --color-checks-step-header-open-bg: #161b22;\\n    --color-checks-step-error-text: #f85149;\\n    --color-checks-step-warning-text: #d29922;\\n    --color-checks-logline-text: #8b949e;\\n    --color-checks-logline-num-text: #484f58;\\n    --color-checks-logline-debug-text: #a371f7;\\n    --color-checks-logline-error-text: #8b949e;\\n    --color-checks-logline-error-num-text: #484f58;\\n    --color-checks-logline-error-bg: rgba(248,81,73,0.15);\\n    --color-checks-logline-warning-text: #8b949e;\\n    --color-checks-logline-warning-num-text: #d29922;\\n    --color-checks-logline-warning-bg: rgba(187,128,9,0.15);\\n    --color-checks-logline-command-text: #58a6ff;\\n    --color-checks-logline-section-text: #3fb950;\\n    --color-checks-ansi-black: #0d1117;\\n    --color-checks-ansi-black-bright: #161b22;\\n    --color-checks-ansi-white: #b1bac4;\\n    --color-checks-ansi-white-bright: #b1bac4;\\n    --color-checks-ansi-gray: #6e7681;\\n    --color-checks-ansi-red: #ff7b72;\\n    --color-checks-ansi-red-bright: #ffa198;\\n    --color-checks-ansi-green: #3fb950;\\n    --color-checks-ansi-green-bright: #56d364;\\n    --color-checks-ansi-yellow: #d29922;\\n    --color-checks-ansi-yellow-bright: #e3b341;\\n    --color-checks-ansi-blue: #58a6ff;\\n    --color-checks-ansi-blue-bright: #79c0ff;\\n    --color-checks-ansi-magenta: #bc8cff;\\n    --color-checks-ansi-magenta-bright: #d2a8ff;\\n    --color-checks-ansi-cyan: #76e3ea;\\n    --color-checks-ansi-cyan-bright: #b3f0ff;\\n    --color-project-header-bg: #0d1117;\\n    --color-project-sidebar-bg: #161b22;\\n    --color-project-gradient-in: #161b22;\\n    --color-project-gradient-out: rgba(22,27,34,0);\\n    --color-mktg-success: rgba(41,147,61,1);\\n    --color-mktg-info: rgba(42,123,243,1);\\n    --color-mktg-bg-shade-gradient-top: rgba(1,4,9,0.065);\\n    --color-mktg-bg-shade-gradient-bottom: rgba(1,4,9,0);\\n    --color-mktg-btn-bg-top: hsla(228,82%,66%,1);\\n    --color-mktg-btn-bg-bottom: #4969ed;\\n    --color-mktg-btn-bg-overlay-top: hsla(228,74%,59%,1);\\n    --color-mktg-btn-bg-overlay-bottom: #3355e0;\\n    --color-mktg-btn-text: #f0f6fc;\\n    --color-mktg-btn-primary-bg-top: hsla(137,56%,46%,1);\\n    --color-mktg-btn-primary-bg-bottom: #2ea44f;\\n    --color-mktg-btn-primary-bg-overlay-top: hsla(134,60%,38%,1);\\n    --color-mktg-btn-primary-bg-overlay-bottom: #22863a;\\n    --color-mktg-btn-primary-text: #f0f6fc;\\n    --color-mktg-btn-enterprise-bg-top: hsla(249,100%,72%,1);\\n    --color-mktg-btn-enterprise-bg-bottom: #6f57ff;\\n    --color-mktg-btn-enterprise-bg-overlay-top: hsla(248,65%,63%,1);\\n    --color-mktg-btn-enterprise-bg-overlay-bottom: #614eda;\\n    --color-mktg-btn-enterprise-text: #f0f6fc;\\n    --color-mktg-btn-outline-text: #f0f6fc;\\n    --color-mktg-btn-outline-border: rgba(240,246,252,0.3);\\n    --color-mktg-btn-outline-hover-text: #f0f6fc;\\n    --color-mktg-btn-outline-hover-border: rgba(240,246,252,0.5);\\n    --color-mktg-btn-outline-focus-border: #f0f6fc;\\n    --color-mktg-btn-outline-focus-border-inset: rgba(240,246,252,0.5);\\n    --color-mktg-btn-dark-text: #f0f6fc;\\n    --color-mktg-btn-dark-border: rgba(240,246,252,0.3);\\n    --color-mktg-btn-dark-hover-text: #f0f6fc;\\n    --color-mktg-btn-dark-hover-border: rgba(240,246,252,0.5);\\n    --color-mktg-btn-dark-focus-border: #f0f6fc;\\n    --color-mktg-btn-dark-focus-border-inset: rgba(240,246,252,0.5);\\n    --color-avatar-bg: rgba(240,246,252,0.1);\\n    --color-avatar-border: rgba(240,246,252,0.1);\\n    --color-avatar-stack-fade: #30363d;\\n    --color-avatar-stack-fade-more: #21262d;\\n    --color-avatar-child-shadow: -2px -2px 0 #0d1117;\\n    --color-topic-tag-border: rgba(0,0,0,0);\\n    --color-select-menu-backdrop-border: #484f58;\\n    --color-select-menu-tap-highlight: rgba(48,54,61,0.5);\\n    --color-select-menu-tap-focus-bg: #0c2d6b;\\n    --color-overlay-shadow: 0 0 0 1px #30363d, 0 16px 32px rgba(1,4,9,0.85);\\n    --color-header-text: rgba(240,246,252,0.7);\\n    --color-header-bg: #161b22;\\n    --color-header-logo: #f0f6fc;\\n    --color-header-search-bg: #0d1117;\\n    --color-header-search-border: #30363d;\\n    --color-sidenav-selected-bg: #21262d;\\n    --color-menu-bg-active: #161b22;\\n    --color-input-disabled-bg: rgba(110,118,129,0);\\n    --color-timeline-badge-bg: #21262d;\\n    --color-ansi-black: #484f58;\\n    --color-ansi-black-bright: #6e7681;\\n    --color-ansi-white: #b1bac4;\\n    --color-ansi-white-bright: #f0f6fc;\\n    --color-ansi-gray: #6e7681;\\n    --color-ansi-red: #ff7b72;\\n    --color-ansi-red-bright: #ffa198;\\n    --color-ansi-green: #3fb950;\\n    --color-ansi-green-bright: #56d364;\\n    --color-ansi-yellow: #d29922;\\n    --color-ansi-yellow-bright: #e3b341;\\n    --color-ansi-blue: #58a6ff;\\n    --color-ansi-blue-bright: #79c0ff;\\n    --color-ansi-magenta: #bc8cff;\\n    --color-ansi-magenta-bright: #d2a8ff;\\n    --color-ansi-cyan: #39c5cf;\\n    --color-ansi-cyan-bright: #56d4dd;\\n    --color-btn-text: #c9d1d9;\\n    --color-btn-bg: #21262d;\\n    --color-btn-border: rgba(240,246,252,0.1);\\n    --color-btn-shadow: 0 0 transparent;\\n    --color-btn-inset-shadow: 0 0 transparent;\\n    --color-btn-hover-bg: #30363d;\\n    --color-btn-hover-border: #8b949e;\\n    --color-btn-active-bg: hsla(212,12%,18%,1);\\n    --color-btn-active-border: #6e7681;\\n    --color-btn-selected-bg: #161b22;\\n    --color-btn-focus-bg: #21262d;\\n    --color-btn-focus-border: #8b949e;\\n    --color-btn-focus-shadow: 0 0 0 3px rgba(139,148,158,0.3);\\n    --color-btn-shadow-active: inset 0 0.15em 0.3em rgba(1,4,9,0.15);\\n    --color-btn-shadow-input-focus: 0 0 0 0.2em rgba(31,111,235,0.3);\\n    --color-btn-counter-bg: #30363d;\\n    --color-btn-primary-text: #ffffff;\\n    --color-btn-primary-bg: #238636;\\n    --color-btn-primary-border: rgba(240,246,252,0.1);\\n    --color-btn-primary-shadow: 0 0 transparent;\\n    --color-btn-primary-inset-shadow: 0 0 transparent;\\n    --color-btn-primary-hover-bg: #2ea043;\\n    --color-btn-primary-hover-border: rgba(240,246,252,0.1);\\n    --color-btn-primary-selected-bg: #238636;\\n    --color-btn-primary-selected-shadow: 0 0 transparent;\\n    --color-btn-primary-disabled-text: rgba(240,246,252,0.5);\\n    --color-btn-primary-disabled-bg: rgba(35,134,54,0.6);\\n    --color-btn-primary-disabled-border: rgba(240,246,252,0.1);\\n    --color-btn-primary-focus-bg: #238636;\\n    --color-btn-primary-focus-border: rgba(240,246,252,0.1);\\n    --color-btn-primary-focus-shadow: 0 0 0 3px rgba(46,164,79,0.4);\\n    --color-btn-primary-icon: #f0f6fc;\\n    --color-btn-primary-counter-bg: rgba(240,246,252,0.2);\\n    --color-btn-outline-text: #58a6ff;\\n    --color-btn-outline-hover-text: #58a6ff;\\n    --color-btn-outline-hover-bg: #30363d;\\n    --color-btn-outline-hover-border: rgba(240,246,252,0.1);\\n    --color-btn-outline-hover-shadow: 0 1px 0 rgba(1,4,9,0.1);\\n    --color-btn-outline-hover-inset-shadow: inset 0 1px 0 rgba(240,246,252,0.03);\\n    --color-btn-outline-hover-counter-bg: rgba(240,246,252,0.2);\\n    --color-btn-outline-selected-text: #f0f6fc;\\n    --color-btn-outline-selected-bg: #0d419d;\\n    --color-btn-outline-selected-border: rgba(240,246,252,0.1);\\n    --color-btn-outline-selected-shadow: 0 0 transparent;\\n    --color-btn-outline-disabled-text: rgba(88,166,255,0.5);\\n    --color-btn-outline-disabled-bg: #0d1117;\\n    --color-btn-outline-disabled-counter-bg: rgba(31,111,235,0.05);\\n    --color-btn-outline-focus-border: rgba(240,246,252,0.1);\\n    --color-btn-outline-focus-shadow: 0 0 0 3px rgba(17,88,199,0.4);\\n    --color-btn-outline-counter-bg: rgba(31,111,235,0.1);\\n    --color-btn-danger-text: #f85149;\\n    --color-btn-danger-hover-text: #f0f6fc;\\n    --color-btn-danger-hover-bg: #da3633;\\n    --color-btn-danger-hover-border: #f85149;\\n    --color-btn-danger-hover-shadow: 0 0 transparent;\\n    --color-btn-danger-hover-inset-shadow: 0 0 transparent;\\n    --color-btn-danger-hover-icon: #f0f6fc;\\n    --color-btn-danger-hover-counter-bg: rgba(255,255,255,0.2);\\n    --color-btn-danger-selected-text: #ffffff;\\n    --color-btn-danger-selected-bg: #b62324;\\n    --color-btn-danger-selected-border: #ff7b72;\\n    --color-btn-danger-selected-shadow: 0 0 transparent;\\n    --color-btn-danger-disabled-text: rgba(248,81,73,0.5);\\n    --color-btn-danger-disabled-bg: #0d1117;\\n    --color-btn-danger-disabled-counter-bg: rgba(218,54,51,0.05);\\n    --color-btn-danger-focus-border: #f85149;\\n    --color-btn-danger-focus-shadow: 0 0 0 3px rgba(248,81,73,0.4);\\n    --color-btn-danger-counter-bg: rgba(218,54,51,0.1);\\n    --color-btn-danger-icon: #f85149;\\n    --color-underlinenav-icon: #484f58;\\n    --color-underlinenav-border-hover: rgba(110,118,129,0.4);\\n    --color-fg-default: #c9d1d9;\\n    --color-fg-muted: #8b949e;\\n    --color-fg-subtle: #484f58;\\n    --color-fg-on-emphasis: #f0f6fc;\\n    --color-canvas-default: #0d1117;\\n    --color-canvas-overlay: #161b22;\\n    --color-canvas-inset: #010409;\\n    --color-canvas-subtle: #161b22;\\n    --color-border-default: #30363d;\\n    --color-border-muted: #21262d;\\n    --color-border-subtle: rgba(240,246,252,0.1);\\n    --color-shadow-small: 0 0 transparent;\\n    --color-shadow-medium: 0 3px 6px #010409;\\n    --color-shadow-large: 0 8px 24px #010409;\\n    --color-shadow-extra-large: 0 12px 48px #010409;\\n    --color-neutral-emphasis-plus: #6e7681;\\n    --color-neutral-emphasis: #6e7681;\\n    --color-neutral-muted: rgba(110,118,129,0.4);\\n    --color-neutral-subtle: rgba(110,118,129,0.1);\\n    --color-accent-fg: #58a6ff;\\n    --color-accent-emphasis: #1f6feb;\\n    --color-accent-muted: rgba(56,139,253,0.4);\\n    --color-accent-subtle: rgba(56,139,253,0.15);\\n    --color-success-fg: #3fb950;\\n    --color-success-emphasis: #238636;\\n    --color-success-muted: rgba(46,160,67,0.4);\\n    --color-success-subtle: rgba(46,160,67,0.15);\\n    --color-attention-fg: #d29922;\\n    --color-attention-emphasis: #9e6a03;\\n    --color-attention-muted: rgba(187,128,9,0.4);\\n    --color-attention-subtle: rgba(187,128,9,0.15);\\n    --color-severe-fg: #db6d28;\\n    --color-severe-emphasis: #bd561d;\\n    --color-severe-muted: rgba(219,109,40,0.4);\\n    --color-severe-subtle: rgba(219,109,40,0.15);\\n    --color-danger-fg: #f85149;\\n    --color-danger-emphasis: #da3633;\\n    --color-danger-muted: rgba(248,81,73,0.4);\\n    --color-danger-subtle: rgba(248,81,73,0.15);\\n    --color-done-fg: #a371f7;\\n    --color-done-emphasis: #8957e5;\\n    --color-done-muted: rgba(163,113,247,0.4);\\n    --color-done-subtle: rgba(163,113,247,0.15);\\n    --color-sponsors-fg: #db61a2;\\n    --color-sponsors-emphasis: #bf4b8a;\\n    --color-sponsors-muted: rgba(219,97,162,0.4);\\n    --color-sponsors-subtle: rgba(219,97,162,0.15);\\n    --color-primer-canvas-backdrop: rgba(1,4,9,0.8);\\n    --color-primer-canvas-sticky: rgba(13,17,23,0.95);\\n    --color-primer-border-active: #F78166;\\n    --color-primer-border-contrast: rgba(240,246,252,0.2);\\n    --color-primer-shadow-highlight: 0 0 transparent;\\n    --color-primer-shadow-inset: 0 0 transparent;\\n    --color-primer-shadow-focus: 0 0 0 3px #0c2d6b;\\n    --color-scale-black: #010409;\\n    --color-scale-white: #f0f6fc;\\n    --color-scale-gray-0: #f0f6fc;\\n    --color-scale-gray-1: #c9d1d9;\\n    --color-scale-gray-2: #b1bac4;\\n    --color-scale-gray-3: #8b949e;\\n    --color-scale-gray-4: #6e7681;\\n    --color-scale-gray-5: #484f58;\\n    --color-scale-gray-6: #30363d;\\n    --color-scale-gray-7: #21262d;\\n    --color-scale-gray-8: #161b22;\\n    --color-scale-gray-9: #0d1117;\\n    --color-scale-blue-0: #cae8ff;\\n    --color-scale-blue-1: #a5d6ff;\\n    --color-scale-blue-2: #79c0ff;\\n    --color-scale-blue-3: #58a6ff;\\n    --color-scale-blue-4: #388bfd;\\n    --color-scale-blue-5: #1f6feb;\\n    --color-scale-blue-6: #1158c7;\\n    --color-scale-blue-7: #0d419d;\\n    --color-scale-blue-8: #0c2d6b;\\n    --color-scale-blue-9: #051d4d;\\n    --color-scale-green-0: #aff5b4;\\n    --color-scale-green-1: #7ee787;\\n    --color-scale-green-2: #56d364;\\n    --color-scale-green-3: #3fb950;\\n    --color-scale-green-4: #2ea043;\\n    --color-scale-green-5: #238636;\\n    --color-scale-green-6: #196c2e;\\n    --color-scale-green-7: #0f5323;\\n    --color-scale-green-8: #033a16;\\n    --color-scale-green-9: #04260f;\\n    --color-scale-yellow-0: #f8e3a1;\\n    --color-scale-yellow-1: #f2cc60;\\n    --color-scale-yellow-2: #e3b341;\\n    --color-scale-yellow-3: #d29922;\\n    --color-scale-yellow-4: #bb8009;\\n    --color-scale-yellow-5: #9e6a03;\\n    --color-scale-yellow-6: #845306;\\n    --color-scale-yellow-7: #693e00;\\n    --color-scale-yellow-8: #4b2900;\\n    --color-scale-yellow-9: #341a00;\\n    --color-scale-orange-0: #ffdfb6;\\n    --color-scale-orange-1: #ffc680;\\n    --color-scale-orange-2: #ffa657;\\n    --color-scale-orange-3: #f0883e;\\n    --color-scale-orange-4: #db6d28;\\n    --color-scale-orange-5: #bd561d;\\n    --color-scale-orange-6: #9b4215;\\n    --color-scale-orange-7: #762d0a;\\n    --color-scale-orange-8: #5a1e02;\\n    --color-scale-orange-9: #3d1300;\\n    --color-scale-red-0: #ffdcd7;\\n    --color-scale-red-1: #ffc1ba;\\n    --color-scale-red-2: #ffa198;\\n    --color-scale-red-3: #ff7b72;\\n    --color-scale-red-4: #f85149;\\n    --color-scale-red-5: #da3633;\\n    --color-scale-red-6: #b62324;\\n    --color-scale-red-7: #8e1519;\\n    --color-scale-red-8: #67060c;\\n    --color-scale-red-9: #490202;\\n    --color-scale-purple-0: #eddeff;\\n    --color-scale-purple-1: #e2c5ff;\\n    --color-scale-purple-2: #d2a8ff;\\n    --color-scale-purple-3: #bc8cff;\\n    --color-scale-purple-4: #a371f7;\\n    --color-scale-purple-5: #8957e5;\\n    --color-scale-purple-6: #6e40c9;\\n    --color-scale-purple-7: #553098;\\n    --color-scale-purple-8: #3c1e70;\\n    --color-scale-purple-9: #271052;\\n    --color-scale-pink-0: #ffdaec;\\n    --color-scale-pink-1: #ffbedd;\\n    --color-scale-pink-2: #ff9bce;\\n    --color-scale-pink-3: #f778ba;\\n    --color-scale-pink-4: #db61a2;\\n    --color-scale-pink-5: #bf4b8a;\\n    --color-scale-pink-6: #9e3670;\\n    --color-scale-pink-7: #7d2457;\\n    --color-scale-pink-8: #5e103e;\\n    --color-scale-pink-9: #42062a;\\n    --color-scale-coral-0: #FFDDD2;\\n    --color-scale-coral-1: #FFC2B2;\\n    --color-scale-coral-2: #FFA28B;\\n    --color-scale-coral-3: #F78166;\\n    --color-scale-coral-4: #EA6045;\\n    --color-scale-coral-5: #CF462D;\\n    --color-scale-coral-6: #AC3220;\\n    --color-scale-coral-7: #872012;\\n    --color-scale-coral-8: #640D04;\\n    --color-scale-coral-9: #460701\\n  }\\n}\\n',\"\"]);const i=l},3697:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(8081),o=t.n(r),a=t(3645),l=t.n(a)()(o());l.push([e.id,'/*\\n  Copyright (c) Microsoft Corporation.\\n\\n  Licensed under the Apache License, Version 2.0 (the \"License\");\\n  you may not use this file except in compliance with the License.\\n  You may obtain a copy of the License at\\n\\n      http://www.apache.org/licenses/LICENSE-2.0\\n\\n  Unless required by applicable law or agreed to in writing, software\\n  distributed under the License is distributed on an \"AS IS\" BASIS,\\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n  See the License for the specific language governing permissions and\\n  limitations under the License.\\n*/\\n\\n:root {\\n  --box-shadow: rgba(0, 0, 0, 0.133) 0px 1.6px 3.6px 0px, rgba(0, 0, 0, 0.11) 0px 0.3px 0.9px 0px;\\n  --monospace-font: \"SF Mono\", Monaco, Consolas, \"Droid Sans Mono\", Inconsolata, \"Courier New\",monospace;\\n  --box-shadow-thick: rgb(0 0 0 / 10%) 0px 1.8px 1.9px,\\n    rgb(0 0 0 / 15%) 0px 6.1px 6.3px,\\n    rgb(0 0 0 / 10%) 0px -2px 4px,\\n    rgb(0 0 0 / 15%) 0px -6.1px 12px,\\n    rgb(0 0 0 / 25%) 0px 6px 12px;\\n}\\n\\n* {\\n  box-sizing: border-box;\\n  min-width: 0;\\n  min-height: 0;\\n}\\n\\nsvg {\\n  fill: currentColor;\\n}\\n\\n.vbox {\\n  display: flex;\\n  flex-direction: column;\\n  flex: auto;\\n  position: relative;\\n}\\n\\n.hbox {\\n  display: flex;\\n  flex: auto;\\n  position: relative;\\n}\\n\\n.d-flex {\\n  display: flex !important;\\n}\\n\\n.d-inline {\\n  display: inline !important;\\n}\\n\\n.m-1 { margin: 4px; }\\n.m-2 { margin: 8px; }\\n.m-3 { margin: 16px; }\\n.m-4 { margin: 24px; }\\n.m-5 { margin: 32px; }\\n\\n.mx-1 { margin: 0 4px; }\\n.mx-2 { margin: 0 8px; }\\n.mx-3 { margin: 0 16px; }\\n.mx-4 { margin: 0 24px; }\\n.mx-5 { margin: 0 32px; }\\n\\n.my-1 { margin: 4px 0; }\\n.my-2 { margin: 8px 0; }\\n.my-3 { margin: 16px 0; }\\n.my-4 { margin: 24px 0; }\\n.my-5 { margin: 32px 0; }\\n\\n.mt-1 { margin-top: 4px; }\\n.mt-2 { margin-top: 8px; }\\n.mt-3 { margin-top: 16px; }\\n.mt-4 { margin-top: 24px; }\\n.mt-5 { margin-top: 32px; }\\n\\n.mr-1 { margin-right: 4px; }\\n.mr-2 { margin-right: 8px; }\\n.mr-3 { margin-right: 16px; }\\n.mr-4 { margin-right: 24px; }\\n.mr-5 { margin-right: 32px; }\\n\\n.mb-1 { margin-bottom: 4px; }\\n.mb-2 { margin-bottom: 8px; }\\n.mb-3 { margin-bottom: 16px; }\\n.mb-4 { margin-bottom: 24px; }\\n.mb-5 { margin-bottom: 32px; }\\n\\n.ml-1 { margin-left: 4px; }\\n.ml-2 { margin-left: 8px; }\\n.ml-3 { margin-left: 16px; }\\n.ml-4 { margin-left: 24px; }\\n.ml-5 { margin-left: 32px; }\\n\\n.p-1 { padding: 4px; }\\n.p-2 { padding: 8px; }\\n.p-3 { padding: 16px; }\\n.p-4 { padding: 24px; }\\n.p-5 { padding: 32px; }\\n\\n.px-1 { padding: 0 4px; }\\n.px-2 { padding: 0 8px; }\\n.px-3 { padding: 0 16px; }\\n.px-4 { padding: 0 24px; }\\n.px-5 { padding: 0 32px; }\\n\\n.py-1 { padding: 4px 0; }\\n.py-2 { padding: 8px 0; }\\n.py-3 { padding: 16px 0; }\\n.py-4 { padding: 24px 0; }\\n.py-5 { padding: 32px 0; }\\n\\n.pt-1 { padding-top: 4px; }\\n.pt-2 { padding-top: 8px; }\\n.pt-3 { padding-top: 16px; }\\n.pt-4 { padding-top: 24px; }\\n.pt-5 { padding-top: 32px; }\\n\\n.pr-1 { padding-right: 4px; }\\n.pr-2 { padding-right: 8px; }\\n.pr-3 { padding-right: 16px; }\\n.pr-4 { padding-right: 24px; }\\n.pr-5 { padding-right: 32px; }\\n\\n.pb-1 { padding-bottom: 4px; }\\n.pb-2 { padding-bottom: 8px; }\\n.pb-3 { padding-bottom: 16px; }\\n.pb-4 { padding-bottom: 24px; }\\n.pb-5 { padding-bottom: 32px; }\\n\\n.pl-1 { padding-left: 4px; }\\n.pl-2 { padding-left: 8px; }\\n.pl-3 { padding-left: 16px; }\\n.pl-4 { padding-left: 24px; }\\n.pl-5 { padding-left: 32px; }\\n\\n.no-wrap {\\n  white-space: nowrap !important;\\n}\\n\\n.float-left {\\n  float: left !important;\\n}\\n\\narticle, aside, details, figcaption, figure, footer, header, main, menu, nav, section {\\n  display: block;\\n}\\n\\n.form-control, .form-select {\\n  padding: 5px 12px;\\n  font-size: 14px;\\n  line-height: 20px;\\n  color: var(--color-fg-default);\\n  vertical-align: middle;\\n  background-color: var(--color-canvas-default);\\n  background-repeat: no-repeat;\\n  background-position: right 8px center;\\n  border: 1px solid var(--color-border-default);\\n  border-radius: 6px;\\n  outline: none;\\n  box-shadow: var(--color-primer-shadow-inset);\\n}\\n\\n.input-contrast {\\n  background-color: var(--color-canvas-inset);\\n}\\n\\n.subnav-search {\\n  position: relative;\\n  flex: auto;\\n  display: flex;\\n}\\n\\n.subnav-search-input {\\n  flex: auto;\\n  padding-left: 32px;\\n  color: var(--color-fg-muted);\\n}\\n\\n.subnav-search-icon {\\n  position: absolute;\\n  top: 9px;\\n  left: 8px;\\n  display: block;\\n  color: var(--color-fg-muted);\\n  text-align: center;\\n  pointer-events: none;\\n}\\n\\n.subnav-search-context + .subnav-search {\\n  margin-left: -1px;\\n}\\n\\n.subnav-item {\\n  flex: none;\\n  position: relative;\\n  float: left;\\n  padding: 5px 10px;\\n  font-weight: 500;\\n  line-height: 20px;\\n  color: var(--color-fg-default);\\n  border: 1px solid var(--color-border-default);\\n}\\n\\n.subnav-item:hover {\\n  background-color: var(--color-canvas-subtle);\\n}\\n\\n.subnav-item:first-child {\\n  border-top-left-radius: 6px;\\n  border-bottom-left-radius: 6px;\\n}\\n\\n.subnav-item:last-child {\\n  border-top-right-radius: 6px;\\n  border-bottom-right-radius: 6px;\\n}\\n\\n.subnav-item + .subnav-item {\\n  margin-left: -1px;\\n}\\n\\n.counter {\\n  display: inline-block;\\n  min-width: 20px;\\n  padding: 0 6px;\\n  font-size: 12px;\\n  font-weight: 500;\\n  line-height: 18px;\\n  color: var(--color-fg-default);\\n  text-align: center;\\n  background-color: var(--color-neutral-muted);\\n  border: 1px solid transparent;\\n  border-radius: 2em;\\n}\\n\\n.color-icon-success {\\n  color: var(--color-success-fg) !important;\\n}\\n\\n.color-text-danger {\\n  color: var(--color-danger-fg) !important;\\n}\\n\\n.color-text-warning {\\n  color: var(--color-checks-step-warning-text) !important;\\n}\\n\\n.color-fg-muted {\\n  color: var(--color-fg-muted) !important;\\n}\\n\\n.octicon {\\n  display: inline-block;\\n  overflow: visible !important;\\n  vertical-align: text-bottom;\\n  fill: currentColor;\\n  margin-right: 7px;\\n  flex: none;\\n}\\n\\n@media only screen and (max-width: 600px) {\\n  .subnav-item, .form-control {\\n    border-radius: 0 !important;\\n  }\\n\\n  .subnav-item {\\n    padding: 5px 3px;\\n    border: none;\\n  }\\n}\\n',\"\"]);const i=l},8118:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(8081),o=t.n(r),a=t(3645),l=t.n(a)()(o());l.push([e.id,'/*\\n  Copyright (c) Microsoft Corporation.\\n\\n  Licensed under the Apache License, Version 2.0 (the \"License\");\\n  you may not use this file except in compliance with the License.\\n  You may obtain a copy of the License at\\n\\n      http://www.apache.org/licenses/LICENSE-2.0\\n\\n  Unless required by applicable law or agreed to in writing, software\\n  distributed under the License is distributed on an \"AS IS\" BASIS,\\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n  See the License for the specific language governing permissions and\\n  limitations under the License.\\n*/\\n\\n.header-view-status-container {\\n  float: right;\\n}\\n\\n@media only screen and (max-width: 600px) {\\n  .header-view-status-container {\\n    float: none;\\n    margin: 0 0 10px 0 !important;\\n    overflow: hidden;\\n  }\\n\\n  .header-view-status-container .subnav-search-input {\\n    border-left: none;\\n    border-right: none;\\n  }\\n}\\n',\"\"]);const i=l},74:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(8081),o=t.n(r),a=t(3645),l=t.n(a)()(o());l.push([e.id,'/*\\n  Copyright (c) Microsoft Corporation.\\n\\n  Licensed under the Apache License, Version 2.0 (the \"License\");\\n  you may not use this file except in compliance with the License.\\n  You may obtain a copy of the License at\\n\\n      http://www.apache.org/licenses/LICENSE-2.0\\n\\n  Unless required by applicable law or agreed to in writing, software\\n  distributed under the License is distributed on an \"AS IS\" BASIS,\\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n  See the License for the specific language governing permissions and\\n  limitations under the License.\\n*/\\n\\n.label {\\n  display: inline-block;\\n  padding: 0 8px;\\n  font-size: 12px;\\n  font-weight: 500;\\n  line-height: 18px;\\n  border: 1px solid transparent;\\n  border-radius: 2em;\\n  background-color: var(--color-scale-gray-4);\\n  color: white;\\n  margin: 0 10px;\\n  flex: none;\\n  font-weight: 600;\\n}\\n\\n@media(prefers-color-scheme: light) {\\n  .label-color-0 {\\n    background-color: var(--color-scale-blue-0);\\n    color: var(--color-scale-blue-6);\\n    border: 1px solid var(--color-scale-blue-4);\\n  }\\n  .label-color-1 {\\n    background-color: var(--color-scale-yellow-0);\\n    color: var(--color-scale-yellow-6);\\n    border: 1px solid var(--color-scale-yellow-4);\\n  }\\n  .label-color-2 {\\n    background-color: var(--color-scale-purple-0);\\n    color: var(--color-scale-purple-6);\\n    border: 1px solid var(--color-scale-purple-4);\\n  }\\n  .label-color-3 {\\n    background-color: var(--color-scale-pink-0);\\n    color: var(--color-scale-pink-6);\\n    border: 1px solid var(--color-scale-pink-4);\\n  }\\n  .label-color-4 {\\n    background-color: var(--color-scale-coral-0);\\n    color: var(--color-scale-coral-6);\\n    border: 1px solid var(--color-scale-coral-4);\\n  }\\n  .label-color-5 {\\n    background-color: var(--color-scale-orange-0);\\n    color: var(--color-scale-orange-6);\\n    border: 1px solid var(--color-scale-orange-4);\\n  }\\n}\\n\\n@media(prefers-color-scheme: dark) {\\n  .label-color-0 {\\n    background-color: var(--color-scale-blue-9);\\n    color: var(--color-scale-blue-2);\\n    border: 1px solid var(--color-scale-blue-4);\\n  }\\n  .label-color-1 {\\n    background-color: var(--color-scale-yellow-9);\\n    color: var(--color-scale-yellow-2);\\n    border: 1px solid var(--color-scale-yellow-4);\\n  }\\n  .label-color-2 {\\n    background-color: var(--color-scale-purple-9);\\n    color: var(--color-scale-purple-2);\\n    border: 1px solid var(--color-scale-purple-4);\\n  }\\n  .label-color-3 {\\n    background-color: var(--color-scale-pink-9);\\n    color: var(--color-scale-pink-2);\\n    border: 1px solid var(--color-scale-pink-4);\\n  }\\n  .label-color-4 {\\n    background-color: var(--color-scale-coral-9);\\n    color: var(--color-scale-coral-2);\\n    border: 1px solid var(--color-scale-coral-4);\\n  }\\n  .label-color-5 {\\n    background-color: var(--color-scale-orange-9);\\n    color: var(--color-scale-orange-2);\\n    border: 1px solid var(--color-scale-orange-4);\\n  }\\n}\\n\\n.attachment-body {\\n  white-space: pre-wrap;\\n  background-color: var(--color-canvas-subtle);\\n  margin-left: 24px;\\n  line-height: normal;\\n  padding: 8px;\\n  font-family: monospace;\\n}\\n',\"\"]);const i=l},3510:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(8081),o=t.n(r),a=t(3645),l=t.n(a)()(o());l.push([e.id,'/*\\n  Copyright (c) Microsoft Corporation.\\n\\n  Licensed under the Apache License, Version 2.0 (the \"License\");\\n  you may not use this file except in compliance with the License.\\n  You may obtain a copy of the License at\\n\\n      http://www.apache.org/licenses/LICENSE-2.0\\n\\n  Unless required by applicable law or agreed to in writing, software\\n  distributed under the License is distributed on an \"AS IS\" BASIS,\\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n  See the License for the specific language governing permissions and\\n  limitations under the License.\\n*/\\n\\nhtml, body {\\n  width: 100%;\\n  height: 100%;\\n  padding: 0;\\n  margin: 0;\\n  overscroll-behavior-x: none;\\n}\\n\\nbody {\\n  overflow: auto;\\n  max-width: 1024px;\\n  margin: 0 auto;\\n  width: 100%;\\n}\\n\\n.test-file-test:not(:first-child) {\\n  border-top: 1px solid var(--color-border-default);\\n}\\n\\n@media only screen and (max-width: 600px) {\\n  .report {\\n    padding: 0 !important;\\n  }\\n}\\n',\"\"]);const i=l},7557:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(8081),o=t.n(r),a=t(3645),l=t.n(a)()(o());l.push([e.id,'/*\\n  Copyright (c) Microsoft Corporation.\\n\\n  Licensed under the Apache License, Version 2.0 (the \"License\");\\n  you may not use this file except in compliance with the License.\\n  You may obtain a copy of the License at\\n\\n      http://www.apache.org/licenses/LICENSE-2.0\\n\\n  Unless required by applicable law or agreed to in writing, software\\n  distributed under the License is distributed on an \"AS IS\" BASIS,\\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n  See the License for the specific language governing permissions and\\n  limitations under the License.\\n*/\\n\\n.tabbed-pane {\\n  display: flex;\\n  flex: auto;\\n  overflow: hidden;\\n}\\n\\n.tabbed-pane-tab-content {\\n  display: flex;\\n  flex: auto;\\n  overflow: hidden;\\n}\\n\\n.tabbed-pane-tab-strip {\\n  display: flex;\\n  align-items: center;\\n  padding-right: 10px;\\n  flex: none;\\n  width: 100%;\\n  z-index: 2;\\n  font-size: 14px;\\n  line-height: 32px;\\n  color: var(--color-fg-default);\\n  height: 48px;\\n  min-width: 70px;\\n  box-shadow: inset 0 -1px 0 var(--color-border-muted) !important;\\n}\\n\\n.tabbed-pane-tab-strip:focus {\\n  outline: none;\\n}\\n\\n.tabbed-pane-tab-element {\\n  padding: 4px 8px 0 8px;\\n  margin-right: 4px;\\n  cursor: pointer;\\n  display: flex;\\n  flex: none;\\n  align-items: center;\\n  justify-content: center;\\n  user-select: none;\\n  border-bottom: 2px solid transparent;\\n  outline: none;\\n  height: 100%;\\n}\\n\\n.tabbed-pane-tab-label {\\n  max-width: 250px;\\n  white-space: pre;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  display: inline-block;\\n}\\n\\n.tabbed-pane-tab-element.selected {\\n  border-bottom-color: #666;\\n}\\n\\n.tabbed-pane-tab-element:hover {\\n  color: #333;\\n}\\n',\"\"]);const i=l},7302:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(8081),o=t.n(r),a=t(3645),l=t.n(a)()(o());l.push([e.id,'/*\\n  Copyright (c) Microsoft Corporation.\\n\\n  Licensed under the Apache License, Version 2.0 (the \"License\");\\n  you may not use this file except in compliance with the License.\\n  You may obtain a copy of the License at\\n\\n      http://www.apache.org/licenses/LICENSE-2.0\\n\\n  Unless required by applicable law or agreed to in writing, software\\n  distributed under the License is distributed on an \"AS IS\" BASIS,\\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n  See the License for the specific language governing permissions and\\n  limitations under the License.\\n*/\\n\\n.test-case-column {\\n  border-radius: 6px;\\n  margin: 24px 0;\\n}\\n\\n.test-case-column .tab-element.selected {\\n  font-weight: 600;\\n  border-bottom-color: var(--color-primer-border-active);\\n}\\n\\n.test-case-column .tab-element {\\n  border: none;\\n  color: var(--color-fg-default);\\n  border-bottom: 2px solid transparent;\\n}\\n\\n.test-case-column .tab-element:hover {\\n  color: var(--color-fg-default);\\n}\\n\\n.test-case-title {\\n  flex: none;\\n  padding: 8px;\\n  font-weight: 400;\\n  font-size: 32px !important;\\n  line-height: 1.25 !important;\\n}\\n\\n.test-case-location {\\n  flex: none;\\n  align-items: center;\\n  padding: 0 8px 24px;\\n}\\n\\n.test-case-path {\\n  flex: none;\\n  align-items: center;\\n  padding: 0 8px;\\n}\\n\\n.test-case-annotation {\\n  flex: none;\\n  align-items: center;\\n  padding: 0 8px;\\n  line-height: 24px;\\n}\\n\\n@media only screen and (max-width: 600px) {\\n  .test-case-column {\\n    border-radius: 0 !important;\\n    margin: 0 !important;\\n  }\\n}\\n',\"\"]);const i=l},5664:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(8081),o=t.n(r),a=t(3645),l=t.n(a)()(o());l.push([e.id,'/*\\n  Copyright (c) Microsoft Corporation.\\n\\n  Licensed under the Apache License, Version 2.0 (the \"License\");\\n  you may not use this file except in compliance with the License.\\n  You may obtain a copy of the License at\\n\\n      http://www.apache.org/licenses/LICENSE-2.0\\n\\n  Unless required by applicable law or agreed to in writing, software\\n  distributed under the License is distributed on an \"AS IS\" BASIS,\\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n  See the License for the specific language governing permissions and\\n  limitations under the License.\\n*/\\n\\n.test-file-test {\\n  height: 38px;\\n  line-height: 38px;\\n  align-items: center;\\n  padding: 0 10px;\\n  white-space: nowrap;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n}\\n\\n.test-file-test:hover {\\n  background-color: var(--color-canvas-subtle);\\n}\\n\\n.test-file-path {\\n  padding: 0 0 0 8px;\\n  color: var(--color-fg-muted);\\n}\\n\\n.test-file-test-outcome-skipped {\\n  color: var(--color-fg-muted);\\n}\\n',\"\"]);const i=l},8710:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(8081),o=t.n(r),a=t(3645),l=t.n(a)()(o());l.push([e.id,'/*\\n  Copyright (c) Microsoft Corporation.\\n\\n  Licensed under the Apache License, Version 2.0 (the \"License\");\\n  you may not use this file except in compliance with the License.\\n  You may obtain a copy of the License at\\n\\n      http://www.apache.org/licenses/LICENSE-2.0\\n\\n  Unless required by applicable law or agreed to in writing, software\\n  distributed under the License is distributed on an \"AS IS\" BASIS,\\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n  See the License for the specific language governing permissions and\\n  limitations under the License.\\n*/\\n\\n.test-result {\\n  flex: auto;\\n  display: flex;\\n  flex-direction: column;\\n  margin-bottom: 24px;\\n}\\n\\n.test-result .tabbed-pane .tab-content {\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n}\\n\\n.test-result > div {\\n  flex: none;\\n}\\n\\n.test-result video,\\n.test-result img {\\n  flex: none;\\n  box-shadow: var(--box-shadow-thick);\\n  margin: 24px auto;\\n  min-width: 200px;\\n  max-width: 80%;\\n}\\n\\n.test-result-path {\\n  padding: 0 0 0 5px;\\n  color: var(--color-fg-muted);\\n}\\n\\n.test-result-error-message {\\n  white-space: pre;\\n  font-family: monospace;\\n  overflow: auto;\\n  flex: none;\\n  padding: 0;\\n  background-color: var(--color-canvas-subtle);\\n  border-radius: 6px;\\n  padding: 16px;\\n  line-height: initial;\\n  margin-bottom: 6px;\\n}\\n\\n.test-result-counter {\\n  border-radius: 12px;\\n  color: var(--color-canvas-default);\\n  padding: 2px 8px;\\n}\\n\\n@media(prefers-color-scheme: light) {\\n  .test-result-counter {\\n    background: var(--color-scale-gray-5);\\n  }\\n}\\n\\n@media(prefers-color-scheme: dark) {\\n  .test-result-counter {\\n    background: var(--color-scale-gray-3);\\n  }\\n}\\n\\n@media only screen and (max-width: 600px) {\\n  .test-result {\\n    padding: 0 !important;\\n  }\\n}\\n',\"\"]);const i=l},191:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(8081),o=t.n(r),a=t(3645),l=t.n(a)()(o());l.push([e.id,'/*\\n  Copyright (c) Microsoft Corporation.\\n\\n  Licensed under the Apache License, Version 2.0 (the \"License\");\\n  you may not use this file except in compliance with the License.\\n  You may obtain a copy of the License at\\n\\n      http://www.apache.org/licenses/LICENSE-2.0\\n\\n  Unless required by applicable law or agreed to in writing, software\\n  distributed under the License is distributed on an \"AS IS\" BASIS,\\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n  See the License for the specific language governing permissions and\\n  limitations under the License.\\n*/\\n\\n#root {\\n  color: var(--color-fg-default);\\n  font-size: 14px;\\n  font-family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\";\\n  -webkit-font-smoothing: antialiased;\\n}\\n',\"\"]);const i=l},2097:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(8081),o=t.n(r),a=t(3645),l=t.n(a)()(o());l.push([e.id,'/*\\n  Copyright (c) Microsoft Corporation.\\n\\n  Licensed under the Apache License, Version 2.0 (the \"License\");\\n  you may not use this file except in compliance with the License.\\n  You may obtain a copy of the License at\\n\\n      http://www.apache.org/licenses/LICENSE-2.0\\n\\n  Unless required by applicable law or agreed to in writing, software\\n  distributed under the License is distributed on an \"AS IS\" BASIS,\\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n  See the License for the specific language governing permissions and\\n  limitations under the License.\\n*/\\n\\n.tree-item {\\n  text-overflow: ellipsis;\\n  overflow: hidden;\\n  white-space: nowrap;\\n  line-height: 38px;\\n}\\n\\n.tree-item-title {\\n  cursor: pointer;\\n}\\n\\n.tree-item-body {\\n  min-height: 18px;\\n}\\n',\"\"]);const i=l},3645:e=>{e.exports=function(e){var n=[];return n.toString=function(){return this.map((function(n){var t=\"\",r=void 0!==n[5];return n[4]&&(t+=\"@supports (\".concat(n[4],\") {\")),n[2]&&(t+=\"@media \".concat(n[2],\" {\")),r&&(t+=\"@layer\".concat(n[5].length>0?\" \".concat(n[5]):\"\",\" {\")),t+=e(n),r&&(t+=\"}\"),n[2]&&(t+=\"}\"),n[4]&&(t+=\"}\"),t})).join(\"\")},n.i=function(e,t,r,o,a){\"string\"==typeof e&&(e=[[null,e,void 0]]);var l={};if(r)for(var i=0;i<this.length;i++){var c=this[i][0];null!=c&&(l[c]=!0)}for(var s=0;s<e.length;s++){var u=[].concat(e[s]);r&&l[u[0]]||(void 0!==a&&(void 0===u[5]||(u[1]=\"@layer\".concat(u[5].length>0?\" \".concat(u[5]):\"\",\" {\").concat(u[1],\"}\")),u[5]=a),t&&(u[2]?(u[1]=\"@media \".concat(u[2],\" {\").concat(u[1],\"}\"),u[2]=t):u[2]=t),o&&(u[4]?(u[1]=\"@supports (\".concat(u[4],\") {\").concat(u[1],\"}\"),u[4]=o):u[4]=\"\".concat(o)),n.push(u))}},n}},8081:e=>{e.exports=function(e){return e[1]}},4076:function(e,n,t){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,\"__esModule\",{value:!0}),n.decodeHTML=n.decodeHTMLStrict=n.decodeXML=void 0;var o=r(t(9323)),a=r(t(9591)),l=r(t(2586)),i=r(t(26)),c=/&(?:[a-zA-Z0-9]+|#[xX][\\da-fA-F]+|#\\d+);/g;function s(e){var n=d(e);return function(e){return String(e).replace(c,n)}}n.decodeXML=s(l.default),n.decodeHTMLStrict=s(o.default);var u=function(e,n){return e<n?1:-1};function d(e){return function(n){if(\"#\"===n.charAt(1)){var t=n.charAt(2);return\"X\"===t||\"x\"===t?i.default(parseInt(n.substr(3),16)):i.default(parseInt(n.substr(2),10))}return e[n.slice(1,-1)]||n}}n.decodeHTML=function(){for(var e=Object.keys(a.default).sort(u),n=Object.keys(o.default).sort(u),t=0,r=0;t<n.length;t++)e[r]===n[t]?(n[t]+=\";?\",r++):n[t]+=\";\";var l=new RegExp(\"&(?:\"+n.join(\"|\")+\"|#[xX][\\\\da-fA-F]+;?|#\\\\d+;?)\",\"g\"),i=d(o.default);function c(e){return\";\"!==e.substr(-1)&&(e+=\";\"),i(e)}return function(e){return String(e).replace(l,c)}}()},26:function(e,n,t){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,\"__esModule\",{value:!0});var o=r(t(3600)),a=String.fromCodePoint||function(e){var n=\"\";return e>65535&&(e-=65536,n+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),n+String.fromCharCode(e)};n.default=function(e){return e>=55296&&e<=57343||e>1114111?\"�\":(e in o.default&&(e=o.default[e]),a(e))}},7322:function(e,n,t){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,\"__esModule\",{value:!0}),n.escapeUTF8=n.escape=n.encodeNonAsciiHTML=n.encodeHTML=n.encodeXML=void 0;var o=u(r(t(2586)).default),a=d(o);n.encodeXML=b(o);var l,i,c=u(r(t(9323)).default),s=d(c);function u(e){return Object.keys(e).sort().reduce((function(n,t){return n[e[t]]=\"&\"+t+\";\",n}),{})}function d(e){for(var n=[],t=[],r=0,o=Object.keys(e);r<o.length;r++){var a=o[r];1===a.length?n.push(\"\\\\\"+a):t.push(a)}n.sort();for(var l=0;l<n.length-1;l++){for(var i=l;i<n.length-1&&n[i].charCodeAt(1)+1===n[i+1].charCodeAt(1);)i+=1;var c=1+i-l;c<3||n.splice(l,c,n[l]+\"-\"+n[i])}return t.unshift(\"[\"+n.join(\"\")+\"]\"),new RegExp(t.join(\"|\"),\"g\")}n.encodeHTML=(l=c,i=s,function(e){return e.replace(i,(function(e){return l[e]})).replace(f,g)}),n.encodeNonAsciiHTML=b(c);var f=/(?:[\\x80-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,p=null!=String.prototype.codePointAt?function(e){return e.codePointAt(0)}:function(e){return 1024*(e.charCodeAt(0)-55296)+e.charCodeAt(1)-56320+65536};function g(e){return\"&#x\"+(e.length>1?p(e):e.charCodeAt(0)).toString(16).toUpperCase()+\";\"}var h=new RegExp(a.source+\"|\"+f.source,\"g\");function b(e){return function(n){return n.replace(h,(function(n){return e[n]||g(n)}))}}n.escape=function(e){return e.replace(h,g)},n.escapeUTF8=function(e){return e.replace(a,g)}},5863:(e,n,t)=>{Object.defineProperty(n,\"__esModule\",{value:!0}),n.decodeXMLStrict=n.decodeHTML5Strict=n.decodeHTML4Strict=n.decodeHTML5=n.decodeHTML4=n.decodeHTMLStrict=n.decodeHTML=n.decodeXML=n.encodeHTML5=n.encodeHTML4=n.escapeUTF8=n.escape=n.encodeNonAsciiHTML=n.encodeHTML=n.encodeXML=n.encode=n.decodeStrict=n.decode=void 0;var r=t(4076),o=t(7322);n.decode=function(e,n){return(!n||n<=0?r.decodeXML:r.decodeHTML)(e)},n.decodeStrict=function(e,n){return(!n||n<=0?r.decodeXML:r.decodeHTMLStrict)(e)},n.encode=function(e,n){return(!n||n<=0?o.encodeXML:o.encodeHTML)(e)};var a=t(7322);Object.defineProperty(n,\"encodeXML\",{enumerable:!0,get:function(){return a.encodeXML}}),Object.defineProperty(n,\"encodeHTML\",{enumerable:!0,get:function(){return a.encodeHTML}}),Object.defineProperty(n,\"encodeNonAsciiHTML\",{enumerable:!0,get:function(){return a.encodeNonAsciiHTML}}),Object.defineProperty(n,\"escape\",{enumerable:!0,get:function(){return a.escape}}),Object.defineProperty(n,\"escapeUTF8\",{enumerable:!0,get:function(){return a.escapeUTF8}}),Object.defineProperty(n,\"encodeHTML4\",{enumerable:!0,get:function(){return a.encodeHTML}}),Object.defineProperty(n,\"encodeHTML5\",{enumerable:!0,get:function(){return a.encodeHTML}});var l=t(4076);Object.defineProperty(n,\"decodeXML\",{enumerable:!0,get:function(){return l.decodeXML}}),Object.defineProperty(n,\"decodeHTML\",{enumerable:!0,get:function(){return l.decodeHTML}}),Object.defineProperty(n,\"decodeHTMLStrict\",{enumerable:!0,get:function(){return l.decodeHTMLStrict}}),Object.defineProperty(n,\"decodeHTML4\",{enumerable:!0,get:function(){return l.decodeHTML}}),Object.defineProperty(n,\"decodeHTML5\",{enumerable:!0,get:function(){return l.decodeHTML}}),Object.defineProperty(n,\"decodeHTML4Strict\",{enumerable:!0,get:function(){return l.decodeHTMLStrict}}),Object.defineProperty(n,\"decodeHTML5Strict\",{enumerable:!0,get:function(){return l.decodeHTMLStrict}}),Object.defineProperty(n,\"decodeXMLStrict\",{enumerable:!0,get:function(){return l.decodeXML}})},7418:e=>{var n=Object.getOwnPropertySymbols,t=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function o(e){if(null==e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}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 n={},t=0;t<10;t++)n[\"_\"+String.fromCharCode(t)]=t;if(\"0123456789\"!==Object.getOwnPropertyNames(n).map((function(e){return n[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,a){for(var l,i,c=o(e),s=1;s<arguments.length;s++){for(var u in l=Object(arguments[s]))t.call(l,u)&&(c[u]=l[u]);if(n){i=n(l);for(var d=0;d<i.length;d++)r.call(l,i[d])&&(c[i[d]]=l[i[d]])}}return c}},4448:(e,n,t)=>{var r=t(7294),o=t(7418),a=t(3840);function l(e){for(var n=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,t=1;t<arguments.length;t++)n+=\"&args[]=\"+encodeURIComponent(arguments[t]);return\"Minified React error #\"+e+\"; visit \"+n+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}if(!r)throw Error(l(227));var i=new Set,c={};function s(e,n){u(e,n),u(e+\"Capture\",n)}function u(e,n){for(c[e]=n,e=0;e<n.length;e++)i.add(n[e])}var d=!(\"undefined\"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[: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][: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\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,p=Object.prototype.hasOwnProperty,g={},h={};function b(e,n,t,r,o,a,l){this.acceptsBooleans=2===n||3===n||4===n,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=t,this.propertyName=e,this.type=n,this.sanitizeURL=a,this.removeEmptyString=l}var m={};\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach((function(e){m[e]=new b(e,0,!1,e,null,!1,!1)})),[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach((function(e){var n=e[0];m[n]=new b(n,1,!1,e[1],null,!1,!1)})),[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach((function(e){m[e]=new b(e,2,!1,e.toLowerCase(),null,!1,!1)})),[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach((function(e){m[e]=new b(e,2,!1,e,null,!1,!1)})),\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach((function(e){m[e]=new b(e,3,!1,e.toLowerCase(),null,!1,!1)})),[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach((function(e){m[e]=new b(e,3,!0,e,null,!1,!1)})),[\"capture\",\"download\"].forEach((function(e){m[e]=new b(e,4,!1,e,null,!1,!1)})),[\"cols\",\"rows\",\"size\",\"span\"].forEach((function(e){m[e]=new b(e,6,!1,e,null,!1,!1)})),[\"rowSpan\",\"start\"].forEach((function(e){m[e]=new b(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function w(e,n,t,r){var o=m.hasOwnProperty(n)?m[n]:null;(null!==o?0===o.type:!r&&2<n.length&&(\"o\"===n[0]||\"O\"===n[0])&&(\"n\"===n[1]||\"N\"===n[1]))||(function(e,n,t,r){if(null==n||function(e,n,t,r){if(null!==t&&0===t.type)return!1;switch(typeof n){case\"function\":case\"symbol\":return!0;case\"boolean\":return!r&&(null!==t?!t.acceptsBooleans:\"data-\"!==(e=e.toLowerCase().slice(0,5))&&\"aria-\"!==e);default:return!1}}(e,n,t,r))return!0;if(r)return!1;if(null!==t)switch(t.type){case 3:return!n;case 4:return!1===n;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}(n,t,o,r)&&(t=null),r||null===o?function(e){return!!p.call(h,e)||!p.call(g,e)&&(f.test(e)?h[e]=!0:(g[e]=!0,!1))}(n)&&(null===t?e.removeAttribute(n):e.setAttribute(n,\"\"+t)):o.mustUseProperty?e[o.propertyName]=null===t?3!==o.type&&\"\":t:(n=o.attributeName,r=o.attributeNamespace,null===t?e.removeAttribute(n):(t=3===(o=o.type)||4===o&&!0===t?\"\":\"\"+t,r?e.setAttributeNS(r,n,t):e.setAttribute(n,t))))}\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach((function(e){var n=e.replace(v,y);m[n]=new b(n,1,!1,e,null,!1,!1)})),\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach((function(e){var n=e.replace(v,y);m[n]=new b(n,1,!1,e,\"http://www.w3.org/1999/xlink\",!1,!1)})),[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach((function(e){var n=e.replace(v,y);m[n]=new b(n,1,!1,e,\"http://www.w3.org/XML/1998/namespace\",!1,!1)})),[\"tabIndex\",\"crossOrigin\"].forEach((function(e){m[e]=new b(e,1,!1,e.toLowerCase(),null,!1,!1)})),m.xlinkHref=new b(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1),[\"src\",\"href\",\"action\",\"formAction\"].forEach((function(e){m[e]=new b(e,1,!1,e.toLowerCase(),null,!0,!0)}));var A=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=60103,k=60106,E=60107,C=60108,S=60114,I=60109,O=60110,P=60112,N=60113,T=60120,D=60115,L=60116,M=60121,R=60128,B=60129,H=60130,Q=60131;if(\"function\"==typeof Symbol&&Symbol.for){var j=Symbol.for;x=j(\"react.element\"),k=j(\"react.portal\"),E=j(\"react.fragment\"),C=j(\"react.strict_mode\"),S=j(\"react.profiler\"),I=j(\"react.provider\"),O=j(\"react.context\"),P=j(\"react.forward_ref\"),N=j(\"react.suspense\"),T=j(\"react.suspense_list\"),D=j(\"react.memo\"),L=j(\"react.lazy\"),M=j(\"react.block\"),j(\"react.scope\"),R=j(\"react.opaque.id\"),B=j(\"react.debug_trace_mode\"),H=j(\"react.offscreen\"),Q=j(\"react.legacy_hidden\")}var F,z=\"function\"==typeof Symbol&&Symbol.iterator;function U(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=z&&e[z]||e[\"@@iterator\"])?e:null}function q(e){if(void 0===F)try{throw Error()}catch(e){var n=e.stack.trim().match(/\\n( *(at )?)/);F=n&&n[1]||\"\"}return\"\\n\"+F+e}var V=!1;function W(e,n){if(!e||V)return\"\";V=!0;var t=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(n)if(n=function(){throw Error()},Object.defineProperty(n.prototype,\"props\",{set:function(){throw Error()}}),\"object\"==typeof Reflect&&Reflect.construct){try{Reflect.construct(n,[])}catch(e){var r=e}Reflect.construct(e,[],n)}else{try{n.call()}catch(e){r=e}e.call(n.prototype)}else{try{throw Error()}catch(e){r=e}e()}}catch(e){if(e&&r&&\"string\"==typeof e.stack){for(var o=e.stack.split(\"\\n\"),a=r.stack.split(\"\\n\"),l=o.length-1,i=a.length-1;1<=l&&0<=i&&o[l]!==a[i];)i--;for(;1<=l&&0<=i;l--,i--)if(o[l]!==a[i]){if(1!==l||1!==i)do{if(l--,0>--i||o[l]!==a[i])return\"\\n\"+o[l].replace(\" at new \",\" at \")}while(1<=l&&0<=i);break}}}finally{V=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:\"\")?q(e):\"\"}function Y(e){switch(e.tag){case 5:return q(e.type);case 16:return q(\"Lazy\");case 13:return q(\"Suspense\");case 19:return q(\"SuspenseList\");case 0:case 2:case 15:return W(e.type,!1);case 11:return W(e.type.render,!1);case 22:return W(e.type._render,!1);case 1:return W(e.type,!0);default:return\"\"}}function X(e){if(null==e)return null;if(\"function\"==typeof e)return e.displayName||e.name||null;if(\"string\"==typeof e)return e;switch(e){case E:return\"Fragment\";case k:return\"Portal\";case S:return\"Profiler\";case C:return\"StrictMode\";case N:return\"Suspense\";case T:return\"SuspenseList\"}if(\"object\"==typeof e)switch(e.$$typeof){case O:return(e.displayName||\"Context\")+\".Consumer\";case I:return(e._context.displayName||\"Context\")+\".Provider\";case P:var n=e.render;return n=n.displayName||n.name||\"\",e.displayName||(\"\"!==n?\"ForwardRef(\"+n+\")\":\"ForwardRef\");case D:return X(e.type);case M:return X(e._render);case L:n=e._payload,e=e._init;try{return X(e(n))}catch(e){}}return null}function G(e){switch(typeof e){case\"boolean\":case\"number\":case\"object\":case\"string\":case\"undefined\":return e;default:return\"\"}}function K(e){var n=e.type;return(e=e.nodeName)&&\"input\"===e.toLowerCase()&&(\"checkbox\"===n||\"radio\"===n)}function Z(e){e._valueTracker||(e._valueTracker=function(e){var n=K(e)?\"checked\":\"value\",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),r=\"\"+e[n];if(!e.hasOwnProperty(n)&&void 0!==t&&\"function\"==typeof t.get&&\"function\"==typeof t.set){var o=t.get,a=t.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=\"\"+e,a.call(this,e)}}),Object.defineProperty(e,n,{enumerable:t.enumerable}),{getValue:function(){return r},setValue:function(e){r=\"\"+e},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}(e))}function J(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),r=\"\";return e&&(r=K(e)?e.checked?\"true\":\"false\":e.value),(e=r)!==t&&(n.setValue(e),!0)}function _(e){if(void 0===(e=e||(\"undefined\"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(n){return e.body}}function $(e,n){var t=n.checked;return o({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=t?t:e._wrapperState.initialChecked})}function ee(e,n){var t=null==n.defaultValue?\"\":n.defaultValue,r=null!=n.checked?n.checked:n.defaultChecked;t=G(null!=n.value?n.value:t),e._wrapperState={initialChecked:r,initialValue:t,controlled:\"checkbox\"===n.type||\"radio\"===n.type?null!=n.checked:null!=n.value}}function ne(e,n){null!=(n=n.checked)&&w(e,\"checked\",n,!1)}function te(e,n){ne(e,n);var t=G(n.value),r=n.type;if(null!=t)\"number\"===r?(0===t&&\"\"===e.value||e.value!=t)&&(e.value=\"\"+t):e.value!==\"\"+t&&(e.value=\"\"+t);else if(\"submit\"===r||\"reset\"===r)return void e.removeAttribute(\"value\");n.hasOwnProperty(\"value\")?oe(e,n.type,t):n.hasOwnProperty(\"defaultValue\")&&oe(e,n.type,G(n.defaultValue)),null==n.checked&&null!=n.defaultChecked&&(e.defaultChecked=!!n.defaultChecked)}function re(e,n,t){if(n.hasOwnProperty(\"value\")||n.hasOwnProperty(\"defaultValue\")){var r=n.type;if(!(\"submit\"!==r&&\"reset\"!==r||void 0!==n.value&&null!==n.value))return;n=\"\"+e._wrapperState.initialValue,t||n===e.value||(e.value=n),e.defaultValue=n}\"\"!==(t=e.name)&&(e.name=\"\"),e.defaultChecked=!!e._wrapperState.initialChecked,\"\"!==t&&(e.name=t)}function oe(e,n,t){\"number\"===n&&_(e.ownerDocument)===e||(null==t?e.defaultValue=\"\"+e._wrapperState.initialValue:e.defaultValue!==\"\"+t&&(e.defaultValue=\"\"+t))}function ae(e,n){return e=o({children:void 0},n),(n=function(e){var n=\"\";return r.Children.forEach(e,(function(e){null!=e&&(n+=e)})),n}(n.children))&&(e.children=n),e}function le(e,n,t,r){if(e=e.options,n){n={};for(var o=0;o<t.length;o++)n[\"$\"+t[o]]=!0;for(t=0;t<e.length;t++)o=n.hasOwnProperty(\"$\"+e[t].value),e[t].selected!==o&&(e[t].selected=o),o&&r&&(e[t].defaultSelected=!0)}else{for(t=\"\"+G(t),n=null,o=0;o<e.length;o++){if(e[o].value===t)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==n||e[o].disabled||(n=e[o])}null!==n&&(n.selected=!0)}}function ie(e,n){if(null!=n.dangerouslySetInnerHTML)throw Error(l(91));return o({},n,{value:void 0,defaultValue:void 0,children:\"\"+e._wrapperState.initialValue})}function ce(e,n){var t=n.value;if(null==t){if(t=n.children,n=n.defaultValue,null!=t){if(null!=n)throw Error(l(92));if(Array.isArray(t)){if(!(1>=t.length))throw Error(l(93));t=t[0]}n=t}null==n&&(n=\"\"),t=n}e._wrapperState={initialValue:G(t)}}function se(e,n){var t=G(n.value),r=G(n.defaultValue);null!=t&&((t=\"\"+t)!==e.value&&(e.value=t),null==n.defaultValue&&e.defaultValue!==t&&(e.defaultValue=t)),null!=r&&(e.defaultValue=\"\"+r)}function ue(e){var n=e.textContent;n===e._wrapperState.initialValue&&\"\"!==n&&null!==n&&(e.value=n)}var de=\"http://www.w3.org/1999/xhtml\";function fe(e){switch(e){case\"svg\":return\"http://www.w3.org/2000/svg\";case\"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function pe(e,n){return null==e||\"http://www.w3.org/1999/xhtml\"===e?fe(n):\"http://www.w3.org/2000/svg\"===e&&\"foreignObject\"===n?\"http://www.w3.org/1999/xhtml\":e}var ge,he,be=(he=function(e,n){if(\"http://www.w3.org/2000/svg\"!==e.namespaceURI||\"innerHTML\"in e)e.innerHTML=n;else{for((ge=ge||document.createElement(\"div\")).innerHTML=\"<svg>\"+n.valueOf().toString()+\"</svg>\",n=ge.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}},\"undefined\"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,n,t,r){MSApp.execUnsafeLocalFunction((function(){return he(e,n)}))}:he);function me(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&3===t.nodeType)return void(t.nodeValue=n)}e.textContent=n}var ve={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,gridArea:!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},ye=[\"Webkit\",\"ms\",\"Moz\",\"O\"];function we(e,n,t){return null==n||\"boolean\"==typeof n||\"\"===n?\"\":t||\"number\"!=typeof n||0===n||ve.hasOwnProperty(e)&&ve[e]?(\"\"+n).trim():n+\"px\"}function Ae(e,n){for(var t in e=e.style,n)if(n.hasOwnProperty(t)){var r=0===t.indexOf(\"--\"),o=we(t,n[t],r);\"float\"===t&&(t=\"cssFloat\"),r?e.setProperty(t,o):e[t]=o}}Object.keys(ve).forEach((function(e){ye.forEach((function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),ve[n]=ve[e]}))}));var xe=o({menuitem:!0},{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});function ke(e,n){if(n){if(xe[e]&&(null!=n.children||null!=n.dangerouslySetInnerHTML))throw Error(l(137,e));if(null!=n.dangerouslySetInnerHTML){if(null!=n.children)throw Error(l(60));if(\"object\"!=typeof n.dangerouslySetInnerHTML||!(\"__html\"in n.dangerouslySetInnerHTML))throw Error(l(61))}if(null!=n.style&&\"object\"!=typeof n.style)throw Error(l(62))}}function Ee(e,n){if(-1===e.indexOf(\"-\"))return\"string\"==typeof n.is;switch(e){case\"annotation-xml\":case\"color-profile\":case\"font-face\":case\"font-face-src\":case\"font-face-uri\":case\"font-face-format\":case\"font-face-name\":case\"missing-glyph\":return!1;default:return!0}}function Ce(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Se=null,Ie=null,Oe=null;function Pe(e){if(e=to(e)){if(\"function\"!=typeof Se)throw Error(l(280));var n=e.stateNode;n&&(n=oo(n),Se(e.stateNode,e.type,n))}}function Ne(e){Ie?Oe?Oe.push(e):Oe=[e]:Ie=e}function Te(){if(Ie){var e=Ie,n=Oe;if(Oe=Ie=null,Pe(e),n)for(e=0;e<n.length;e++)Pe(n[e])}}function De(e,n){return e(n)}function Le(e,n,t,r,o){return e(n,t,r,o)}function Me(){}var Re=De,Be=!1,He=!1;function Qe(){null===Ie&&null===Oe||(Me(),Te())}function je(e,n){var t=e.stateNode;if(null===t)return null;var r=oo(t);if(null===r)return null;t=r[n];e:switch(n){case\"onClick\":case\"onClickCapture\":case\"onDoubleClick\":case\"onDoubleClickCapture\":case\"onMouseDown\":case\"onMouseDownCapture\":case\"onMouseMove\":case\"onMouseMoveCapture\":case\"onMouseUp\":case\"onMouseUpCapture\":case\"onMouseEnter\":(r=!r.disabled)||(r=!(\"button\"===(e=e.type)||\"input\"===e||\"select\"===e||\"textarea\"===e)),e=!r;break e;default:e=!1}if(e)return null;if(t&&\"function\"!=typeof t)throw Error(l(231,n,typeof t));return t}var Fe=!1;if(d)try{var ze={};Object.defineProperty(ze,\"passive\",{get:function(){Fe=!0}}),window.addEventListener(\"test\",ze,ze),window.removeEventListener(\"test\",ze,ze)}catch(he){Fe=!1}function Ue(e,n,t,r,o,a,l,i,c){var s=Array.prototype.slice.call(arguments,3);try{n.apply(t,s)}catch(e){this.onError(e)}}var qe=!1,Ve=null,We=!1,Ye=null,Xe={onError:function(e){qe=!0,Ve=e}};function Ge(e,n,t,r,o,a,l,i,c){qe=!1,Ve=null,Ue.apply(Xe,arguments)}function Ke(e){var n=e,t=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do{0!=(1026&(n=e).flags)&&(t=n.return),e=n.return}while(e)}return 3===n.tag?t:null}function Ze(e){if(13===e.tag){var n=e.memoizedState;if(null===n&&null!==(e=e.alternate)&&(n=e.memoizedState),null!==n)return n.dehydrated}return null}function Je(e){if(Ke(e)!==e)throw Error(l(188))}function _e(e){if(e=function(e){var n=e.alternate;if(!n){if(null===(n=Ke(e)))throw Error(l(188));return n!==e?null:e}for(var t=e,r=n;;){var o=t.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){t=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===t)return Je(o),e;if(a===r)return Je(o),n;a=a.sibling}throw Error(l(188))}if(t.return!==r.return)t=o,r=a;else{for(var i=!1,c=o.child;c;){if(c===t){i=!0,t=o,r=a;break}if(c===r){i=!0,r=o,t=a;break}c=c.sibling}if(!i){for(c=a.child;c;){if(c===t){i=!0,t=a,r=o;break}if(c===r){i=!0,r=a,t=o;break}c=c.sibling}if(!i)throw Error(l(189))}}if(t.alternate!==r)throw Error(l(190))}if(3!==t.tag)throw Error(l(188));return t.stateNode.current===t?e:n}(e),!e)return null;for(var n=e;;){if(5===n.tag||6===n.tag)return n;if(n.child)n.child.return=n,n=n.child;else{if(n===e)break;for(;!n.sibling;){if(!n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}}return null}function $e(e,n){for(var t=e.alternate;null!==n;){if(n===e||n===t)return!0;n=n.return}return!1}var en,nn,tn,rn,on=!1,an=[],ln=null,cn=null,sn=null,un=new Map,dn=new Map,fn=[],pn=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");function gn(e,n,t,r,o){return{blockedOn:e,domEventName:n,eventSystemFlags:16|t,nativeEvent:o,targetContainers:[r]}}function hn(e,n){switch(e){case\"focusin\":case\"focusout\":ln=null;break;case\"dragenter\":case\"dragleave\":cn=null;break;case\"mouseover\":case\"mouseout\":sn=null;break;case\"pointerover\":case\"pointerout\":un.delete(n.pointerId);break;case\"gotpointercapture\":case\"lostpointercapture\":dn.delete(n.pointerId)}}function bn(e,n,t,r,o,a){return null===e||e.nativeEvent!==a?(e=gn(n,t,r,o,a),null!==n&&null!==(n=to(n))&&nn(n),e):(e.eventSystemFlags|=r,n=e.targetContainers,null!==o&&-1===n.indexOf(o)&&n.push(o),e)}function mn(e){var n=no(e.target);if(null!==n){var t=Ke(n);if(null!==t)if(13===(n=t.tag)){if(null!==(n=Ze(t)))return e.blockedOn=n,void rn(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){tn(t)}))}))}else if(3===n&&t.stateNode.hydrate)return void(e.blockedOn=3===t.tag?t.stateNode.containerInfo:null)}e.blockedOn=null}function vn(e){if(null!==e.blockedOn)return!1;for(var n=e.targetContainers;0<n.length;){var t=$n(e.domEventName,e.eventSystemFlags,n[0],e.nativeEvent);if(null!==t)return null!==(n=to(t))&&nn(n),e.blockedOn=t,!1;n.shift()}return!0}function yn(e,n,t){vn(e)&&t.delete(n)}function wn(){for(on=!1;0<an.length;){var e=an[0];if(null!==e.blockedOn){null!==(e=to(e.blockedOn))&&en(e);break}for(var n=e.targetContainers;0<n.length;){var t=$n(e.domEventName,e.eventSystemFlags,n[0],e.nativeEvent);if(null!==t){e.blockedOn=t;break}n.shift()}null===e.blockedOn&&an.shift()}null!==ln&&vn(ln)&&(ln=null),null!==cn&&vn(cn)&&(cn=null),null!==sn&&vn(sn)&&(sn=null),un.forEach(yn),dn.forEach(yn)}function An(e,n){e.blockedOn===n&&(e.blockedOn=null,on||(on=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,wn)))}function xn(e){function n(n){return An(n,e)}if(0<an.length){An(an[0],e);for(var t=1;t<an.length;t++){var r=an[t];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==ln&&An(ln,e),null!==cn&&An(cn,e),null!==sn&&An(sn,e),un.forEach(n),dn.forEach(n),t=0;t<fn.length;t++)(r=fn[t]).blockedOn===e&&(r.blockedOn=null);for(;0<fn.length&&null===(t=fn[0]).blockedOn;)mn(t),null===t.blockedOn&&fn.shift()}function kn(e,n){var t={};return t[e.toLowerCase()]=n.toLowerCase(),t[\"Webkit\"+e]=\"webkit\"+n,t[\"Moz\"+e]=\"moz\"+n,t}var En={animationend:kn(\"Animation\",\"AnimationEnd\"),animationiteration:kn(\"Animation\",\"AnimationIteration\"),animationstart:kn(\"Animation\",\"AnimationStart\"),transitionend:kn(\"Transition\",\"TransitionEnd\")},Cn={},Sn={};function In(e){if(Cn[e])return Cn[e];if(!En[e])return e;var n,t=En[e];for(n in t)if(t.hasOwnProperty(n)&&n in Sn)return Cn[e]=t[n];return e}d&&(Sn=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete En.animationend.animation,delete En.animationiteration.animation,delete En.animationstart.animation),\"TransitionEvent\"in window||delete En.transitionend.transition);var On=In(\"animationend\"),Pn=In(\"animationiteration\"),Nn=In(\"animationstart\"),Tn=In(\"transitionend\"),Dn=new Map,Ln=new Map,Mn=[\"abort\",\"abort\",On,\"animationEnd\",Pn,\"animationIteration\",Nn,\"animationStart\",\"canplay\",\"canPlay\",\"canplaythrough\",\"canPlayThrough\",\"durationchange\",\"durationChange\",\"emptied\",\"emptied\",\"encrypted\",\"encrypted\",\"ended\",\"ended\",\"error\",\"error\",\"gotpointercapture\",\"gotPointerCapture\",\"load\",\"load\",\"loadeddata\",\"loadedData\",\"loadedmetadata\",\"loadedMetadata\",\"loadstart\",\"loadStart\",\"lostpointercapture\",\"lostPointerCapture\",\"playing\",\"playing\",\"progress\",\"progress\",\"seeking\",\"seeking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",Tn,\"transitionEnd\",\"waiting\",\"waiting\"];function Rn(e,n){for(var t=0;t<e.length;t+=2){var r=e[t],o=e[t+1];o=\"on\"+(o[0].toUpperCase()+o.slice(1)),Ln.set(r,n),Dn.set(r,o),s(o,[r])}}(0,a.unstable_now)();var Bn=8;function Hn(e){if(0!=(1&e))return Bn=15,1;if(0!=(2&e))return Bn=14,2;if(0!=(4&e))return Bn=13,4;var n=24&e;return 0!==n?(Bn=12,n):0!=(32&e)?(Bn=11,32):0!=(n=192&e)?(Bn=10,n):0!=(256&e)?(Bn=9,256):0!=(n=3584&e)?(Bn=8,n):0!=(4096&e)?(Bn=7,4096):0!=(n=4186112&e)?(Bn=6,n):0!=(n=62914560&e)?(Bn=5,n):67108864&e?(Bn=4,67108864):0!=(134217728&e)?(Bn=3,134217728):0!=(n=805306368&e)?(Bn=2,n):0!=(1073741824&e)?(Bn=1,1073741824):(Bn=8,e)}function Qn(e,n){var t=e.pendingLanes;if(0===t)return Bn=0;var r=0,o=0,a=e.expiredLanes,l=e.suspendedLanes,i=e.pingedLanes;if(0!==a)r=a,o=Bn=15;else if(0!=(a=134217727&t)){var c=a&~l;0!==c?(r=Hn(c),o=Bn):0!=(i&=a)&&(r=Hn(i),o=Bn)}else 0!=(a=t&~l)?(r=Hn(a),o=Bn):0!==i&&(r=Hn(i),o=Bn);if(0===r)return 0;if(r=t&((0>(r=31-Vn(r))?0:1<<r)<<1)-1,0!==n&&n!==r&&0==(n&l)){if(Hn(n),o<=Bn)return n;Bn=o}if(0!==(n=e.entangledLanes))for(e=e.entanglements,n&=r;0<n;)o=1<<(t=31-Vn(n)),r|=e[t],n&=~o;return r}function jn(e){return 0!=(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Fn(e,n){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=zn(24&~n))?Fn(10,n):e;case 10:return 0===(e=zn(192&~n))?Fn(8,n):e;case 8:return 0===(e=zn(3584&~n))&&0===(e=zn(4186112&~n))&&(e=512),e;case 2:return 0===(n=zn(805306368&~n))&&(n=268435456),n}throw Error(l(358,e))}function zn(e){return e&-e}function Un(e){for(var n=[],t=0;31>t;t++)n.push(e);return n}function qn(e,n,t){e.pendingLanes|=n;var r=n-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[n=31-Vn(n)]=t}var Vn=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Wn(e)/Yn|0)|0},Wn=Math.log,Yn=Math.LN2,Xn=a.unstable_UserBlockingPriority,Gn=a.unstable_runWithPriority,Kn=!0;function Zn(e,n,t,r){Be||Me();var o=_n,a=Be;Be=!0;try{Le(o,e,n,t,r)}finally{(Be=a)||Qe()}}function Jn(e,n,t,r){Gn(Xn,_n.bind(null,e,n,t,r))}function _n(e,n,t,r){var o;if(Kn)if((o=0==(4&n))&&0<an.length&&-1<pn.indexOf(e))e=gn(null,e,n,t,r),an.push(e);else{var a=$n(e,n,t,r);if(null===a)o&&hn(e,r);else{if(o){if(-1<pn.indexOf(e))return e=gn(a,e,n,t,r),void an.push(e);if(function(e,n,t,r,o){switch(n){case\"focusin\":return ln=bn(ln,e,n,t,r,o),!0;case\"dragenter\":return cn=bn(cn,e,n,t,r,o),!0;case\"mouseover\":return sn=bn(sn,e,n,t,r,o),!0;case\"pointerover\":var a=o.pointerId;return un.set(a,bn(un.get(a)||null,e,n,t,r,o)),!0;case\"gotpointercapture\":return a=o.pointerId,dn.set(a,bn(dn.get(a)||null,e,n,t,r,o)),!0}return!1}(a,e,n,t,r))return;hn(e,r)}Mr(e,n,r,null,t)}}}function $n(e,n,t,r){var o=Ce(r);if(null!==(o=no(o))){var a=Ke(o);if(null===a)o=null;else{var l=a.tag;if(13===l){if(null!==(o=Ze(a)))return o;o=null}else if(3===l){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return Mr(e,n,r,o,t),null}var et=null,nt=null,tt=null;function rt(){if(tt)return tt;var e,n,t=nt,r=t.length,o=\"value\"in et?et.value:et.textContent,a=o.length;for(e=0;e<r&&t[e]===o[e];e++);var l=r-e;for(n=1;n<=l&&t[r-n]===o[a-n];n++);return tt=o.slice(e,1<n?1-n:void 0)}function ot(e){var n=e.keyCode;return\"charCode\"in e?0===(e=e.charCode)&&13===n&&(e=13):e=n,10===e&&(e=13),32<=e||13===e?e:0}function at(){return!0}function lt(){return!1}function it(e){function n(n,t,r,o,a){for(var l in this._reactName=n,this._targetInst=r,this.type=t,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(l)&&(n=e[l],this[l]=n?n(o):o[l]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?at:lt,this.isPropagationStopped=lt,this}return o(n.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():\"unknown\"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=at)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():\"unknown\"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=at)},persist:function(){},isPersistent:at}),n}var ct,st,ut,dt={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},ft=it(dt),pt=o({},dt,{view:0,detail:0}),gt=it(pt),ht=o({},pt,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:It,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return\"movementX\"in e?e.movementX:(e!==ut&&(ut&&\"mousemove\"===e.type?(ct=e.screenX-ut.screenX,st=e.screenY-ut.screenY):st=ct=0,ut=e),ct)},movementY:function(e){return\"movementY\"in e?e.movementY:st}}),bt=it(ht),mt=it(o({},ht,{dataTransfer:0})),vt=it(o({},pt,{relatedTarget:0})),yt=it(o({},dt,{animationName:0,elapsedTime:0,pseudoElement:0})),wt=o({},dt,{clipboardData:function(e){return\"clipboardData\"in e?e.clipboardData:window.clipboardData}}),At=it(wt),xt=it(o({},dt,{data:0})),kt={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Et={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\"},Ct={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function St(e){var n=this.nativeEvent;return n.getModifierState?n.getModifierState(e):!!(e=Ct[e])&&!!n[e]}function It(){return St}var Ot=o({},pt,{key:function(e){if(e.key){var n=kt[e.key]||e.key;if(\"Unidentified\"!==n)return n}return\"keypress\"===e.type?13===(e=ot(e))?\"Enter\":String.fromCharCode(e):\"keydown\"===e.type||\"keyup\"===e.type?Et[e.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:It,charCode:function(e){return\"keypress\"===e.type?ot(e):0},keyCode:function(e){return\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0},which:function(e){return\"keypress\"===e.type?ot(e):\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0}}),Pt=it(Ot),Nt=it(o({},ht,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Tt=it(o({},pt,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:It})),Dt=it(o({},dt,{propertyName:0,elapsedTime:0,pseudoElement:0})),Lt=o({},ht,{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:0,deltaMode:0}),Mt=it(Lt),Rt=[9,13,27,32],Bt=d&&\"CompositionEvent\"in window,Ht=null;d&&\"documentMode\"in document&&(Ht=document.documentMode);var Qt=d&&\"TextEvent\"in window&&!Ht,jt=d&&(!Bt||Ht&&8<Ht&&11>=Ht),Ft=String.fromCharCode(32),zt=!1;function Ut(e,n){switch(e){case\"keyup\":return-1!==Rt.indexOf(n.keyCode);case\"keydown\":return 229!==n.keyCode;case\"keypress\":case\"mousedown\":case\"focusout\":return!0;default:return!1}}function qt(e){return\"object\"==typeof(e=e.detail)&&\"data\"in e?e.data:null}var Vt=!1,Wt={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};function Yt(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return\"input\"===n?!!Wt[e.type]:\"textarea\"===n}function Xt(e,n,t,r){Ne(r),0<(n=Br(n,\"onChange\")).length&&(t=new ft(\"onChange\",\"change\",null,t,r),e.push({event:t,listeners:n}))}var Gt=null,Kt=null;function Zt(e){Or(e,0)}function Jt(e){if(J(ro(e)))return e}function _t(e,n){if(\"change\"===e)return n}var $t=!1;if(d){var er;if(d){var nr=\"oninput\"in document;if(!nr){var tr=document.createElement(\"div\");tr.setAttribute(\"oninput\",\"return;\"),nr=\"function\"==typeof tr.oninput}er=nr}else er=!1;$t=er&&(!document.documentMode||9<document.documentMode)}function rr(){Gt&&(Gt.detachEvent(\"onpropertychange\",or),Kt=Gt=null)}function or(e){if(\"value\"===e.propertyName&&Jt(Kt)){var n=[];if(Xt(n,Kt,e,Ce(e)),e=Zt,Be)e(n);else{Be=!0;try{De(e,n)}finally{Be=!1,Qe()}}}}function ar(e,n,t){\"focusin\"===e?(rr(),Kt=t,(Gt=n).attachEvent(\"onpropertychange\",or)):\"focusout\"===e&&rr()}function lr(e){if(\"selectionchange\"===e||\"keyup\"===e||\"keydown\"===e)return Jt(Kt)}function ir(e,n){if(\"click\"===e)return Jt(n)}function cr(e,n){if(\"input\"===e||\"change\"===e)return Jt(n)}var sr=\"function\"==typeof Object.is?Object.is:function(e,n){return e===n&&(0!==e||1/e==1/n)||e!=e&&n!=n},ur=Object.prototype.hasOwnProperty;function dr(e,n){if(sr(e,n))return!0;if(\"object\"!=typeof e||null===e||\"object\"!=typeof n||null===n)return!1;var t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(r=0;r<t.length;r++)if(!ur.call(n,t[r])||!sr(e[t[r]],n[t[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pr(e,n){var t,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(t=e+r.textContent.length,e<=n&&t>=n)return{node:r,offset:n-e};e=t}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function gr(e,n){return!(!e||!n)&&(e===n||(!e||3!==e.nodeType)&&(n&&3===n.nodeType?gr(e,n.parentNode):\"contains\"in e?e.contains(n):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(n))))}function hr(){for(var e=window,n=_();n instanceof e.HTMLIFrameElement;){try{var t=\"string\"==typeof n.contentWindow.location.href}catch(e){t=!1}if(!t)break;n=_((e=n.contentWindow).document)}return n}function br(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(\"input\"===n&&(\"text\"===e.type||\"search\"===e.type||\"tel\"===e.type||\"url\"===e.type||\"password\"===e.type)||\"textarea\"===n||\"true\"===e.contentEditable)}var mr=d&&\"documentMode\"in document&&11>=document.documentMode,vr=null,yr=null,wr=null,Ar=!1;function xr(e,n,t){var r=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;Ar||null==vr||vr!==_(r)||(r=\"selectionStart\"in(r=vr)&&br(r)?{start:r.selectionStart,end:r.selectionEnd}:{anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Br(yr,\"onSelect\")).length&&(n=new ft(\"onSelect\",\"select\",null,n,t),e.push({event:n,listeners:r}),n.target=vr)))}Rn(\"cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange\".split(\" \"),0),Rn(\"drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel\".split(\" \"),1),Rn(Mn,2);for(var kr=\"change selectionchange textInput compositionstart compositionend compositionupdate\".split(\" \"),Er=0;Er<kr.length;Er++)Ln.set(kr[Er],0);u(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]),u(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]),u(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]),u(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]),s(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \")),s(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \")),s(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]),s(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \")),s(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")),s(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var Cr=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),Sr=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(Cr));function Ir(e,n,t){var r=e.type||\"unknown-event\";e.currentTarget=t,function(e,n,t,r,o,a,i,c,s){if(Ge.apply(this,arguments),qe){if(!qe)throw Error(l(198));var u=Ve;qe=!1,Ve=null,We||(We=!0,Ye=u)}}(r,n,void 0,e),e.currentTarget=null}function Or(e,n){n=0!=(4&n);for(var t=0;t<e.length;t++){var r=e[t],o=r.event;r=r.listeners;e:{var a=void 0;if(n)for(var l=r.length-1;0<=l;l--){var i=r[l],c=i.instance,s=i.currentTarget;if(i=i.listener,c!==a&&o.isPropagationStopped())break e;Ir(o,i,s),a=c}else for(l=0;l<r.length;l++){if(c=(i=r[l]).instance,s=i.currentTarget,i=i.listener,c!==a&&o.isPropagationStopped())break e;Ir(o,i,s),a=c}}}if(We)throw e=Ye,We=!1,Ye=null,e}function Pr(e,n){var t=ao(n),r=e+\"__bubble\";t.has(r)||(Lr(n,e,2,!1),t.add(r))}var Nr=\"_reactListening\"+Math.random().toString(36).slice(2);function Tr(e){e[Nr]||(e[Nr]=!0,i.forEach((function(n){Sr.has(n)||Dr(n,!1,e,null),Dr(n,!0,e,null)})))}function Dr(e,n,t,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=t;if(\"selectionchange\"===e&&9!==t.nodeType&&(a=t.ownerDocument),null!==r&&!n&&Sr.has(e)){if(\"scroll\"!==e)return;o|=2,a=r}var l=ao(a),i=e+\"__\"+(n?\"capture\":\"bubble\");l.has(i)||(n&&(o|=4),Lr(a,e,o,n),l.add(i))}function Lr(e,n,t,r){var o=Ln.get(n);switch(void 0===o?2:o){case 0:o=Zn;break;case 1:o=Jn;break;default:o=_n}t=o.bind(null,n,t,e),o=void 0,!Fe||\"touchstart\"!==n&&\"touchmove\"!==n&&\"wheel\"!==n||(o=!0),r?void 0!==o?e.addEventListener(n,t,{capture:!0,passive:o}):e.addEventListener(n,t,!0):void 0!==o?e.addEventListener(n,t,{passive:o}):e.addEventListener(n,t,!1)}function Mr(e,n,t,r,o){var a=r;if(0==(1&n)&&0==(2&n)&&null!==r)e:for(;;){if(null===r)return;var l=r.tag;if(3===l||4===l){var i=r.stateNode.containerInfo;if(i===o||8===i.nodeType&&i.parentNode===o)break;if(4===l)for(l=r.return;null!==l;){var c=l.tag;if((3===c||4===c)&&((c=l.stateNode.containerInfo)===o||8===c.nodeType&&c.parentNode===o))return;l=l.return}for(;null!==i;){if(null===(l=no(i)))return;if(5===(c=l.tag)||6===c){r=a=l;continue e}i=i.parentNode}}r=r.return}!function(e,n,t){if(He)return e();He=!0;try{Re(e,n,t)}finally{He=!1,Qe()}}((function(){var r=a,o=Ce(t),l=[];e:{var i=Dn.get(e);if(void 0!==i){var c=ft,s=e;switch(e){case\"keypress\":if(0===ot(t))break e;case\"keydown\":case\"keyup\":c=Pt;break;case\"focusin\":s=\"focus\",c=vt;break;case\"focusout\":s=\"blur\",c=vt;break;case\"beforeblur\":case\"afterblur\":c=vt;break;case\"click\":if(2===t.button)break e;case\"auxclick\":case\"dblclick\":case\"mousedown\":case\"mousemove\":case\"mouseup\":case\"mouseout\":case\"mouseover\":case\"contextmenu\":c=bt;break;case\"drag\":case\"dragend\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"dragstart\":case\"drop\":c=mt;break;case\"touchcancel\":case\"touchend\":case\"touchmove\":case\"touchstart\":c=Tt;break;case On:case Pn:case Nn:c=yt;break;case Tn:c=Dt;break;case\"scroll\":c=gt;break;case\"wheel\":c=Mt;break;case\"copy\":case\"cut\":case\"paste\":c=At;break;case\"gotpointercapture\":case\"lostpointercapture\":case\"pointercancel\":case\"pointerdown\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"pointerup\":c=Nt}var u=0!=(4&n),d=!u&&\"scroll\"===e,f=u?null!==i?i+\"Capture\":null:i;u=[];for(var p,g=r;null!==g;){var h=(p=g).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==f&&null!=(h=je(g,f))&&u.push(Rr(g,h,p))),d)break;g=g.return}0<u.length&&(i=new c(i,s,null,t,o),l.push({event:i,listeners:u}))}}if(0==(7&n)){if(c=\"mouseout\"===e||\"pointerout\"===e,(!(i=\"mouseover\"===e||\"pointerover\"===e)||0!=(16&n)||!(s=t.relatedTarget||t.fromElement)||!no(s)&&!s[$r])&&(c||i)&&(i=o.window===o?o:(i=o.ownerDocument)?i.defaultView||i.parentWindow:window,c?(c=r,null!==(s=(s=t.relatedTarget||t.toElement)?no(s):null)&&(s!==(d=Ke(s))||5!==s.tag&&6!==s.tag)&&(s=null)):(c=null,s=r),c!==s)){if(u=bt,h=\"onMouseLeave\",f=\"onMouseEnter\",g=\"mouse\",\"pointerout\"!==e&&\"pointerover\"!==e||(u=Nt,h=\"onPointerLeave\",f=\"onPointerEnter\",g=\"pointer\"),d=null==c?i:ro(c),p=null==s?i:ro(s),(i=new u(h,g+\"leave\",c,t,o)).target=d,i.relatedTarget=p,h=null,no(o)===r&&((u=new u(f,g+\"enter\",s,t,o)).target=p,u.relatedTarget=d,h=u),d=h,c&&s)e:{for(f=s,g=0,p=u=c;p;p=Hr(p))g++;for(p=0,h=f;h;h=Hr(h))p++;for(;0<g-p;)u=Hr(u),g--;for(;0<p-g;)f=Hr(f),p--;for(;g--;){if(u===f||null!==f&&u===f.alternate)break e;u=Hr(u),f=Hr(f)}u=null}else u=null;null!==c&&Qr(l,i,c,u,!1),null!==s&&null!==d&&Qr(l,d,s,u,!0)}if(\"select\"===(c=(i=r?ro(r):window).nodeName&&i.nodeName.toLowerCase())||\"input\"===c&&\"file\"===i.type)var b=_t;else if(Yt(i))if($t)b=cr;else{b=lr;var m=ar}else(c=i.nodeName)&&\"input\"===c.toLowerCase()&&(\"checkbox\"===i.type||\"radio\"===i.type)&&(b=ir);switch(b&&(b=b(e,r))?Xt(l,b,t,o):(m&&m(e,i,r),\"focusout\"===e&&(m=i._wrapperState)&&m.controlled&&\"number\"===i.type&&oe(i,\"number\",i.value)),m=r?ro(r):window,e){case\"focusin\":(Yt(m)||\"true\"===m.contentEditable)&&(vr=m,yr=r,wr=null);break;case\"focusout\":wr=yr=vr=null;break;case\"mousedown\":Ar=!0;break;case\"contextmenu\":case\"mouseup\":case\"dragend\":Ar=!1,xr(l,t,o);break;case\"selectionchange\":if(mr)break;case\"keydown\":case\"keyup\":xr(l,t,o)}var v;if(Bt)e:{switch(e){case\"compositionstart\":var y=\"onCompositionStart\";break e;case\"compositionend\":y=\"onCompositionEnd\";break e;case\"compositionupdate\":y=\"onCompositionUpdate\";break e}y=void 0}else Vt?Ut(e,t)&&(y=\"onCompositionEnd\"):\"keydown\"===e&&229===t.keyCode&&(y=\"onCompositionStart\");y&&(jt&&\"ko\"!==t.locale&&(Vt||\"onCompositionStart\"!==y?\"onCompositionEnd\"===y&&Vt&&(v=rt()):(nt=\"value\"in(et=o)?et.value:et.textContent,Vt=!0)),0<(m=Br(r,y)).length&&(y=new xt(y,e,null,t,o),l.push({event:y,listeners:m}),(v||null!==(v=qt(t)))&&(y.data=v))),(v=Qt?function(e,n){switch(e){case\"compositionend\":return qt(n);case\"keypress\":return 32!==n.which?null:(zt=!0,Ft);case\"textInput\":return(e=n.data)===Ft&&zt?null:e;default:return null}}(e,t):function(e,n){if(Vt)return\"compositionend\"===e||!Bt&&Ut(e,n)?(e=rt(),tt=nt=et=null,Vt=!1,e):null;switch(e){case\"paste\":default:return null;case\"keypress\":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1<n.char.length)return n.char;if(n.which)return String.fromCharCode(n.which)}return null;case\"compositionend\":return jt&&\"ko\"!==n.locale?null:n.data}}(e,t))&&0<(r=Br(r,\"onBeforeInput\")).length&&(o=new xt(\"onBeforeInput\",\"beforeinput\",null,t,o),l.push({event:o,listeners:r}),o.data=v)}Or(l,n)}))}function Rr(e,n,t){return{instance:e,listener:n,currentTarget:t}}function Br(e,n){for(var t=n+\"Capture\",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=je(e,t))&&r.unshift(Rr(e,a,o)),null!=(a=je(e,n))&&r.push(Rr(e,a,o))),e=e.return}return r}function Hr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Qr(e,n,t,r,o){for(var a=n._reactName,l=[];null!==t&&t!==r;){var i=t,c=i.alternate,s=i.stateNode;if(null!==c&&c===r)break;5===i.tag&&null!==s&&(i=s,o?null!=(c=je(t,a))&&l.unshift(Rr(t,c,i)):o||null!=(c=je(t,a))&&l.push(Rr(t,c,i))),t=t.return}0!==l.length&&e.push({event:n,listeners:l})}function jr(){}var Fr=null,zr=null;function Ur(e,n){switch(e){case\"button\":case\"input\":case\"select\":case\"textarea\":return!!n.autoFocus}return!1}function qr(e,n){return\"textarea\"===e||\"option\"===e||\"noscript\"===e||\"string\"==typeof n.children||\"number\"==typeof n.children||\"object\"==typeof n.dangerouslySetInnerHTML&&null!==n.dangerouslySetInnerHTML&&null!=n.dangerouslySetInnerHTML.__html}var Vr=\"function\"==typeof setTimeout?setTimeout:void 0,Wr=\"function\"==typeof clearTimeout?clearTimeout:void 0;function Yr(e){(1===e.nodeType||9===e.nodeType&&null!=(e=e.body))&&(e.textContent=\"\")}function Xr(e){for(;null!=e;e=e.nextSibling){var n=e.nodeType;if(1===n||3===n)break}return e}function Gr(e){e=e.previousSibling;for(var n=0;e;){if(8===e.nodeType){var t=e.data;if(\"$\"===t||\"$!\"===t||\"$?\"===t){if(0===n)return e;n--}else\"/$\"===t&&n++}e=e.previousSibling}return null}var Kr=0,Zr=Math.random().toString(36).slice(2),Jr=\"__reactFiber$\"+Zr,_r=\"__reactProps$\"+Zr,$r=\"__reactContainer$\"+Zr,eo=\"__reactEvents$\"+Zr;function no(e){var n=e[Jr];if(n)return n;for(var t=e.parentNode;t;){if(n=t[$r]||t[Jr]){if(t=n.alternate,null!==n.child||null!==t&&null!==t.child)for(e=Gr(e);null!==e;){if(t=e[Jr])return t;e=Gr(e)}return n}t=(e=t).parentNode}return null}function to(e){return!(e=e[Jr]||e[$r])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(l(33))}function oo(e){return e[_r]||null}function ao(e){var n=e[eo];return void 0===n&&(n=e[eo]=new Set),n}var lo=[],io=-1;function co(e){return{current:e}}function so(e){0>io||(e.current=lo[io],lo[io]=null,io--)}function uo(e,n){io++,lo[io]=e.current,e.current=n}var fo={},po=co(fo),go=co(!1),ho=fo;function bo(e,n){var t=e.type.contextTypes;if(!t)return fo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in t)a[o]=n[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=a),a}function mo(e){return null!=e.childContextTypes}function vo(){so(go),so(po)}function yo(e,n,t){if(po.current!==fo)throw Error(l(168));uo(po,n),uo(go,t)}function wo(e,n,t){var r=e.stateNode;if(e=n.childContextTypes,\"function\"!=typeof r.getChildContext)return t;for(var a in r=r.getChildContext())if(!(a in e))throw Error(l(108,X(n)||\"Unknown\",a));return o({},t,r)}function Ao(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||fo,ho=po.current,uo(po,e),uo(go,go.current),!0}function xo(e,n,t){var r=e.stateNode;if(!r)throw Error(l(169));t?(e=wo(e,n,ho),r.__reactInternalMemoizedMergedChildContext=e,so(go),so(po),uo(po,e)):so(go),uo(go,t)}var ko=null,Eo=null,Co=a.unstable_runWithPriority,So=a.unstable_scheduleCallback,Io=a.unstable_cancelCallback,Oo=a.unstable_shouldYield,Po=a.unstable_requestPaint,No=a.unstable_now,To=a.unstable_getCurrentPriorityLevel,Do=a.unstable_ImmediatePriority,Lo=a.unstable_UserBlockingPriority,Mo=a.unstable_NormalPriority,Ro=a.unstable_LowPriority,Bo=a.unstable_IdlePriority,Ho={},Qo=void 0!==Po?Po:function(){},jo=null,Fo=null,zo=!1,Uo=No(),qo=1e4>Uo?No:function(){return No()-Uo};function Vo(){switch(To()){case Do:return 99;case Lo:return 98;case Mo:return 97;case Ro:return 96;case Bo:return 95;default:throw Error(l(332))}}function Wo(e){switch(e){case 99:return Do;case 98:return Lo;case 97:return Mo;case 96:return Ro;case 95:return Bo;default:throw Error(l(332))}}function Yo(e,n){return e=Wo(e),Co(e,n)}function Xo(e,n,t){return e=Wo(e),So(e,n,t)}function Go(){if(null!==Fo){var e=Fo;Fo=null,Io(e)}Ko()}function Ko(){if(!zo&&null!==jo){zo=!0;var e=0;try{var n=jo;Yo(99,(function(){for(;e<n.length;e++){var t=n[e];do{t=t(!0)}while(null!==t)}})),jo=null}catch(n){throw null!==jo&&(jo=jo.slice(e+1)),So(Do,Go),n}finally{zo=!1}}}var Zo=A.ReactCurrentBatchConfig;function Jo(e,n){if(e&&e.defaultProps){for(var t in n=o({},n),e=e.defaultProps)void 0===n[t]&&(n[t]=e[t]);return n}return n}var _o=co(null),$o=null,ea=null,na=null;function ta(){na=ea=$o=null}function ra(e){var n=_o.current;so(_o),e.type._context._currentValue=n}function oa(e,n){for(;null!==e;){var t=e.alternate;if((e.childLanes&n)===n){if(null===t||(t.childLanes&n)===n)break;t.childLanes|=n}else e.childLanes|=n,null!==t&&(t.childLanes|=n);e=e.return}}function aa(e,n){$o=e,na=ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&n)&&(Bl=!0),e.firstContext=null)}function la(e,n){if(na!==e&&!1!==n&&0!==n)if(\"number\"==typeof n&&1073741823!==n||(na=e,n=1073741823),n={context:e,observedBits:n,next:null},null===ea){if(null===$o)throw Error(l(308));ea=n,$o.dependencies={lanes:0,firstContext:n,responders:null}}else ea=ea.next=n;return e._currentValue}var ia=!1;function ca(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function sa(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ua(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function da(e,n){if(null!==(e=e.updateQueue)){var t=(e=e.shared).pending;null===t?n.next=n:(n.next=t.next,t.next=n),e.pending=n}}function fa(e,n){var t=e.updateQueue,r=e.alternate;if(null!==r&&t===(r=r.updateQueue)){var o=null,a=null;if(null!==(t=t.firstBaseUpdate)){do{var l={eventTime:t.eventTime,lane:t.lane,tag:t.tag,payload:t.payload,callback:t.callback,next:null};null===a?o=a=l:a=a.next=l,t=t.next}while(null!==t);null===a?o=a=n:a=a.next=n}else o=a=n;return t={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=t)}null===(e=t.lastBaseUpdate)?t.firstBaseUpdate=n:e.next=n,t.lastBaseUpdate=n}function pa(e,n,t,r){var a=e.updateQueue;ia=!1;var l=a.firstBaseUpdate,i=a.lastBaseUpdate,c=a.shared.pending;if(null!==c){a.shared.pending=null;var s=c,u=s.next;s.next=null,null===i?l=u:i.next=u,i=s;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==i&&(null===f?d.firstBaseUpdate=u:f.next=u,d.lastBaseUpdate=s)}}if(null!==l){for(f=a.baseState,i=0,d=u=s=null;;){c=l.lane;var p=l.eventTime;if((r&c)===c){null!==d&&(d=d.next={eventTime:p,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var g=e,h=l;switch(c=n,p=t,h.tag){case 1:if(\"function\"==typeof(g=h.payload)){f=g.call(p,f,c);break e}f=g;break e;case 3:g.flags=-4097&g.flags|64;case 0:if(null==(c=\"function\"==typeof(g=h.payload)?g.call(p,f,c):g))break e;f=o({},f,c);break e;case 2:ia=!0}}null!==l.callback&&(e.flags|=32,null===(c=a.effects)?a.effects=[l]:c.push(l))}else p={eventTime:p,lane:c,tag:l.tag,payload:l.payload,callback:l.callback,next:null},null===d?(u=d=p,s=f):d=d.next=p,i|=c;if(null===(l=l.next)){if(null===(c=a.shared.pending))break;l=c.next,c.next=null,a.lastBaseUpdate=c,a.shared.pending=null}}null===d&&(s=f),a.baseState=s,a.firstBaseUpdate=u,a.lastBaseUpdate=d,Qi|=i,e.lanes=i,e.memoizedState=f}}function ga(e,n,t){if(e=n.effects,n.effects=null,null!==e)for(n=0;n<e.length;n++){var r=e[n],o=r.callback;if(null!==o){if(r.callback=null,r=t,\"function\"!=typeof o)throw Error(l(191,o));o.call(r)}}}var ha=(new r.Component).refs;function ba(e,n,t,r){t=null==(t=t(r,n=e.memoizedState))?n:o({},n,t),e.memoizedState=t,0===e.lanes&&(e.updateQueue.baseState=t)}var ma={isMounted:function(e){return!!(e=e._reactInternals)&&Ke(e)===e},enqueueSetState:function(e,n,t){e=e._reactInternals;var r=sc(),o=uc(e),a=ua(r,o);a.payload=n,null!=t&&(a.callback=t),da(e,a),dc(e,o,r)},enqueueReplaceState:function(e,n,t){e=e._reactInternals;var r=sc(),o=uc(e),a=ua(r,o);a.tag=1,a.payload=n,null!=t&&(a.callback=t),da(e,a),dc(e,o,r)},enqueueForceUpdate:function(e,n){e=e._reactInternals;var t=sc(),r=uc(e),o=ua(t,r);o.tag=2,null!=n&&(o.callback=n),da(e,o),dc(e,r,t)}};function va(e,n,t,r,o,a,l){return\"function\"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,l):!(n.prototype&&n.prototype.isPureReactComponent&&dr(t,r)&&dr(o,a))}function ya(e,n,t){var r=!1,o=fo,a=n.contextType;return\"object\"==typeof a&&null!==a?a=la(a):(o=mo(n)?ho:po.current,a=(r=null!=(r=n.contextTypes))?bo(e,o):fo),n=new n(t,a),e.memoizedState=null!==n.state&&void 0!==n.state?n.state:null,n.updater=ma,e.stateNode=n,n._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),n}function wa(e,n,t,r){e=n.state,\"function\"==typeof n.componentWillReceiveProps&&n.componentWillReceiveProps(t,r),\"function\"==typeof n.UNSAFE_componentWillReceiveProps&&n.UNSAFE_componentWillReceiveProps(t,r),n.state!==e&&ma.enqueueReplaceState(n,n.state,null)}function Aa(e,n,t,r){var o=e.stateNode;o.props=t,o.state=e.memoizedState,o.refs=ha,ca(e);var a=n.contextType;\"object\"==typeof a&&null!==a?o.context=la(a):(a=mo(n)?ho:po.current,o.context=bo(e,a)),pa(e,t,o,r),o.state=e.memoizedState,\"function\"==typeof(a=n.getDerivedStateFromProps)&&(ba(e,n,a,t),o.state=e.memoizedState),\"function\"==typeof n.getDerivedStateFromProps||\"function\"==typeof o.getSnapshotBeforeUpdate||\"function\"!=typeof o.UNSAFE_componentWillMount&&\"function\"!=typeof o.componentWillMount||(n=o.state,\"function\"==typeof o.componentWillMount&&o.componentWillMount(),\"function\"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),n!==o.state&&ma.enqueueReplaceState(o,o.state,null),pa(e,t,o,r),o.state=e.memoizedState),\"function\"==typeof o.componentDidMount&&(e.flags|=4)}var xa=Array.isArray;function ka(e,n,t){if(null!==(e=t.ref)&&\"function\"!=typeof e&&\"object\"!=typeof e){if(t._owner){if(t=t._owner){if(1!==t.tag)throw Error(l(309));var r=t.stateNode}if(!r)throw Error(l(147,e));var o=\"\"+e;return null!==n&&null!==n.ref&&\"function\"==typeof n.ref&&n.ref._stringRef===o?n.ref:(n=function(e){var n=r.refs;n===ha&&(n=r.refs={}),null===e?delete n[o]:n[o]=e},n._stringRef=o,n)}if(\"string\"!=typeof e)throw Error(l(284));if(!t._owner)throw Error(l(290,e))}return e}function Ea(e,n){if(\"textarea\"!==e.type)throw Error(l(31,\"[object Object]\"===Object.prototype.toString.call(n)?\"object with keys {\"+Object.keys(n).join(\", \")+\"}\":n))}function Ca(e){function n(n,t){if(e){var r=n.lastEffect;null!==r?(r.nextEffect=t,n.lastEffect=t):n.firstEffect=n.lastEffect=t,t.nextEffect=null,t.flags=8}}function t(t,r){if(!e)return null;for(;null!==r;)n(t,r),r=r.sibling;return null}function r(e,n){for(e=new Map;null!==n;)null!==n.key?e.set(n.key,n):e.set(n.index,n),n=n.sibling;return e}function o(e,n){return(e=qc(e,n)).index=0,e.sibling=null,e}function a(n,t,r){return n.index=r,e?null!==(r=n.alternate)?(r=r.index)<t?(n.flags=2,t):r:(n.flags=2,t):t}function i(n){return e&&null===n.alternate&&(n.flags=2),n}function c(e,n,t,r){return null===n||6!==n.tag?((n=Xc(t,e.mode,r)).return=e,n):((n=o(n,t)).return=e,n)}function s(e,n,t,r){return null!==n&&n.elementType===t.type?((r=o(n,t.props)).ref=ka(e,n,t),r.return=e,r):((r=Vc(t.type,t.key,t.props,null,e.mode,r)).ref=ka(e,n,t),r.return=e,r)}function u(e,n,t,r){return null===n||4!==n.tag||n.stateNode.containerInfo!==t.containerInfo||n.stateNode.implementation!==t.implementation?((n=Gc(t,e.mode,r)).return=e,n):((n=o(n,t.children||[])).return=e,n)}function d(e,n,t,r,a){return null===n||7!==n.tag?((n=Wc(t,e.mode,r,a)).return=e,n):((n=o(n,t)).return=e,n)}function f(e,n,t){if(\"string\"==typeof n||\"number\"==typeof n)return(n=Xc(\"\"+n,e.mode,t)).return=e,n;if(\"object\"==typeof n&&null!==n){switch(n.$$typeof){case x:return(t=Vc(n.type,n.key,n.props,null,e.mode,t)).ref=ka(e,null,n),t.return=e,t;case k:return(n=Gc(n,e.mode,t)).return=e,n}if(xa(n)||U(n))return(n=Wc(n,e.mode,t,null)).return=e,n;Ea(e,n)}return null}function p(e,n,t,r){var o=null!==n?n.key:null;if(\"string\"==typeof t||\"number\"==typeof t)return null!==o?null:c(e,n,\"\"+t,r);if(\"object\"==typeof t&&null!==t){switch(t.$$typeof){case x:return t.key===o?t.type===E?d(e,n,t.props.children,r,o):s(e,n,t,r):null;case k:return t.key===o?u(e,n,t,r):null}if(xa(t)||U(t))return null!==o?null:d(e,n,t,r,null);Ea(e,t)}return null}function g(e,n,t,r,o){if(\"string\"==typeof r||\"number\"==typeof r)return c(n,e=e.get(t)||null,\"\"+r,o);if(\"object\"==typeof r&&null!==r){switch(r.$$typeof){case x:return e=e.get(null===r.key?t:r.key)||null,r.type===E?d(n,e,r.props.children,o,r.key):s(n,e,r,o);case k:return u(n,e=e.get(null===r.key?t:r.key)||null,r,o)}if(xa(r)||U(r))return d(n,e=e.get(t)||null,r,o,null);Ea(n,r)}return null}function h(o,l,i,c){for(var s=null,u=null,d=l,h=l=0,b=null;null!==d&&h<i.length;h++){d.index>h?(b=d,d=null):b=d.sibling;var m=p(o,d,i[h],c);if(null===m){null===d&&(d=b);break}e&&d&&null===m.alternate&&n(o,d),l=a(m,l,h),null===u?s=m:u.sibling=m,u=m,d=b}if(h===i.length)return t(o,d),s;if(null===d){for(;h<i.length;h++)null!==(d=f(o,i[h],c))&&(l=a(d,l,h),null===u?s=d:u.sibling=d,u=d);return s}for(d=r(o,d);h<i.length;h++)null!==(b=g(d,o,h,i[h],c))&&(e&&null!==b.alternate&&d.delete(null===b.key?h:b.key),l=a(b,l,h),null===u?s=b:u.sibling=b,u=b);return e&&d.forEach((function(e){return n(o,e)})),s}function b(o,i,c,s){var u=U(c);if(\"function\"!=typeof u)throw Error(l(150));if(null==(c=u.call(c)))throw Error(l(151));for(var d=u=null,h=i,b=i=0,m=null,v=c.next();null!==h&&!v.done;b++,v=c.next()){h.index>b?(m=h,h=null):m=h.sibling;var y=p(o,h,v.value,s);if(null===y){null===h&&(h=m);break}e&&h&&null===y.alternate&&n(o,h),i=a(y,i,b),null===d?u=y:d.sibling=y,d=y,h=m}if(v.done)return t(o,h),u;if(null===h){for(;!v.done;b++,v=c.next())null!==(v=f(o,v.value,s))&&(i=a(v,i,b),null===d?u=v:d.sibling=v,d=v);return u}for(h=r(o,h);!v.done;b++,v=c.next())null!==(v=g(h,o,b,v.value,s))&&(e&&null!==v.alternate&&h.delete(null===v.key?b:v.key),i=a(v,i,b),null===d?u=v:d.sibling=v,d=v);return e&&h.forEach((function(e){return n(o,e)})),u}return function(e,r,a,c){var s=\"object\"==typeof a&&null!==a&&a.type===E&&null===a.key;s&&(a=a.props.children);var u=\"object\"==typeof a&&null!==a;if(u)switch(a.$$typeof){case x:e:{for(u=a.key,s=r;null!==s;){if(s.key===u){if(7===s.tag){if(a.type===E){t(e,s.sibling),(r=o(s,a.props.children)).return=e,e=r;break e}}else if(s.elementType===a.type){t(e,s.sibling),(r=o(s,a.props)).ref=ka(e,s,a),r.return=e,e=r;break e}t(e,s);break}n(e,s),s=s.sibling}a.type===E?((r=Wc(a.props.children,e.mode,c,a.key)).return=e,e=r):((c=Vc(a.type,a.key,a.props,null,e.mode,c)).ref=ka(e,r,a),c.return=e,e=c)}return i(e);case k:e:{for(s=a.key;null!==r;){if(r.key===s){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){t(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}t(e,r);break}n(e,r),r=r.sibling}(r=Gc(a,e.mode,c)).return=e,e=r}return i(e)}if(\"string\"==typeof a||\"number\"==typeof a)return a=\"\"+a,null!==r&&6===r.tag?(t(e,r.sibling),(r=o(r,a)).return=e,e=r):(t(e,r),(r=Xc(a,e.mode,c)).return=e,e=r),i(e);if(xa(a))return h(e,r,a,c);if(U(a))return b(e,r,a,c);if(u&&Ea(e,a),void 0===a&&!s)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(l(152,X(e.type)||\"Component\"))}return t(e,r)}}var Sa=Ca(!0),Ia=Ca(!1),Oa={},Pa=co(Oa),Na=co(Oa),Ta=co(Oa);function Da(e){if(e===Oa)throw Error(l(174));return e}function La(e,n){switch(uo(Ta,n),uo(Na,e),uo(Pa,Oa),e=n.nodeType){case 9:case 11:n=(n=n.documentElement)?n.namespaceURI:pe(null,\"\");break;default:n=pe(n=(e=8===e?n.parentNode:n).namespaceURI||null,e=e.tagName)}so(Pa),uo(Pa,n)}function Ma(){so(Pa),so(Na),so(Ta)}function Ra(e){Da(Ta.current);var n=Da(Pa.current),t=pe(n,e.type);n!==t&&(uo(Na,e),uo(Pa,t))}function Ba(e){Na.current===e&&(so(Pa),so(Na))}var Ha=co(0);function Qa(e){for(var n=e;null!==n;){if(13===n.tag){var t=n.memoizedState;if(null!==t&&(null===(t=t.dehydrated)||\"$?\"===t.data||\"$!\"===t.data))return n}else if(19===n.tag&&void 0!==n.memoizedProps.revealOrder){if(0!=(64&n.flags))return n}else if(null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var ja=null,Fa=null,za=!1;function Ua(e,n){var t=zc(5,null,null,0);t.elementType=\"DELETED\",t.type=\"DELETED\",t.stateNode=n,t.return=e,t.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=t,e.lastEffect=t):e.firstEffect=e.lastEffect=t}function qa(e,n){switch(e.tag){case 5:var t=e.type;return null!==(n=1!==n.nodeType||t.toLowerCase()!==n.nodeName.toLowerCase()?null:n)&&(e.stateNode=n,!0);case 6:return null!==(n=\"\"===e.pendingProps||3!==n.nodeType?null:n)&&(e.stateNode=n,!0);default:return!1}}function Va(e){if(za){var n=Fa;if(n){var t=n;if(!qa(e,n)){if(!(n=Xr(t.nextSibling))||!qa(e,n))return e.flags=-1025&e.flags|2,za=!1,void(ja=e);Ua(ja,t)}ja=e,Fa=Xr(n.firstChild)}else e.flags=-1025&e.flags|2,za=!1,ja=e}}function Wa(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ja=e}function Ya(e){if(e!==ja)return!1;if(!za)return Wa(e),za=!0,!1;var n=e.type;if(5!==e.tag||\"head\"!==n&&\"body\"!==n&&!qr(n,e.memoizedProps))for(n=Fa;n;)Ua(e,n),n=Xr(n.nextSibling);if(Wa(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(l(317));e:{for(e=e.nextSibling,n=0;e;){if(8===e.nodeType){var t=e.data;if(\"/$\"===t){if(0===n){Fa=Xr(e.nextSibling);break e}n--}else\"$\"!==t&&\"$!\"!==t&&\"$?\"!==t||n++}e=e.nextSibling}Fa=null}}else Fa=ja?Xr(e.stateNode.nextSibling):null;return!0}function Xa(){Fa=ja=null,za=!1}var Ga=[];function Ka(){for(var e=0;e<Ga.length;e++)Ga[e]._workInProgressVersionPrimary=null;Ga.length=0}var Za=A.ReactCurrentDispatcher,Ja=A.ReactCurrentBatchConfig,_a=0,$a=null,el=null,nl=null,tl=!1,rl=!1;function ol(){throw Error(l(321))}function al(e,n){if(null===n)return!1;for(var t=0;t<n.length&&t<e.length;t++)if(!sr(e[t],n[t]))return!1;return!0}function ll(e,n,t,r,o,a){if(_a=a,$a=n,n.memoizedState=null,n.updateQueue=null,n.lanes=0,Za.current=null===e||null===e.memoizedState?Dl:Ll,e=t(r,o),rl){a=0;do{if(rl=!1,!(25>a))throw Error(l(301));a+=1,nl=el=null,n.updateQueue=null,Za.current=Ml,e=t(r,o)}while(rl)}if(Za.current=Tl,n=null!==el&&null!==el.next,_a=0,nl=el=$a=null,tl=!1,n)throw Error(l(300));return e}function il(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===nl?$a.memoizedState=nl=e:nl=nl.next=e,nl}function cl(){if(null===el){var e=$a.alternate;e=null!==e?e.memoizedState:null}else e=el.next;var n=null===nl?$a.memoizedState:nl.next;if(null!==n)nl=n,el=e;else{if(null===e)throw Error(l(310));e={memoizedState:(el=e).memoizedState,baseState:el.baseState,baseQueue:el.baseQueue,queue:el.queue,next:null},null===nl?$a.memoizedState=nl=e:nl=nl.next=e}return nl}function sl(e,n){return\"function\"==typeof n?n(e):n}function ul(e){var n=cl(),t=n.queue;if(null===t)throw Error(l(311));t.lastRenderedReducer=e;var r=el,o=r.baseQueue,a=t.pending;if(null!==a){if(null!==o){var i=o.next;o.next=a.next,a.next=i}r.baseQueue=o=a,t.pending=null}if(null!==o){o=o.next,r=r.baseState;var c=i=a=null,s=o;do{var u=s.lane;if((_a&u)===u)null!==c&&(c=c.next={lane:0,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null}),r=s.eagerReducer===e?s.eagerState:e(r,s.action);else{var d={lane:u,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null};null===c?(i=c=d,a=r):c=c.next=d,$a.lanes|=u,Qi|=u}s=s.next}while(null!==s&&s!==o);null===c?a=r:c.next=i,sr(r,n.memoizedState)||(Bl=!0),n.memoizedState=r,n.baseState=a,n.baseQueue=c,t.lastRenderedState=r}return[n.memoizedState,t.dispatch]}function dl(e){var n=cl(),t=n.queue;if(null===t)throw Error(l(311));t.lastRenderedReducer=e;var r=t.dispatch,o=t.pending,a=n.memoizedState;if(null!==o){t.pending=null;var i=o=o.next;do{a=e(a,i.action),i=i.next}while(i!==o);sr(a,n.memoizedState)||(Bl=!0),n.memoizedState=a,null===n.baseQueue&&(n.baseState=a),t.lastRenderedState=a}return[a,r]}function fl(e,n,t){var r=n._getVersion;r=r(n._source);var o=n._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(_a&e)===e)&&(n._workInProgressVersionPrimary=r,Ga.push(n))),e)return t(n._source);throw Ga.push(n),Error(l(350))}function pl(e,n,t,r){var o=Ni;if(null===o)throw Error(l(349));var a=n._getVersion,i=a(n._source),c=Za.current,s=c.useState((function(){return fl(o,n,t)})),u=s[1],d=s[0];s=nl;var f=e.memoizedState,p=f.refs,g=p.getSnapshot,h=f.source;f=f.subscribe;var b=$a;return e.memoizedState={refs:p,source:n,subscribe:r},c.useEffect((function(){p.getSnapshot=t,p.setSnapshot=u;var e=a(n._source);if(!sr(i,e)){e=t(n._source),sr(d,e)||(u(e),e=uc(b),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,l=e;0<l;){var c=31-Vn(l),s=1<<c;r[c]|=e,l&=~s}}}),[t,n,r]),c.useEffect((function(){return r(n._source,(function(){var e=p.getSnapshot,t=p.setSnapshot;try{t(e(n._source));var r=uc(b);o.mutableReadLanes|=r&o.pendingLanes}catch(e){t((function(){throw e}))}}))}),[n,r]),sr(g,t)&&sr(h,n)&&sr(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:sl,lastRenderedState:d}).dispatch=u=Nl.bind(null,$a,e),s.queue=e,s.baseQueue=null,d=fl(o,n,t),s.memoizedState=s.baseState=d),d}function gl(e,n,t){return pl(cl(),e,n,t)}function hl(e){var n=il();return\"function\"==typeof e&&(e=e()),n.memoizedState=n.baseState=e,e=(e=n.queue={pending:null,dispatch:null,lastRenderedReducer:sl,lastRenderedState:e}).dispatch=Nl.bind(null,$a,e),[n.memoizedState,e]}function bl(e,n,t,r){return e={tag:e,create:n,destroy:t,deps:r,next:null},null===(n=$a.updateQueue)?(n={lastEffect:null},$a.updateQueue=n,n.lastEffect=e.next=e):null===(t=n.lastEffect)?n.lastEffect=e.next=e:(r=t.next,t.next=e,e.next=r,n.lastEffect=e),e}function ml(e){return e={current:e},il().memoizedState=e}function vl(){return cl().memoizedState}function yl(e,n,t,r){var o=il();$a.flags|=e,o.memoizedState=bl(1|n,t,void 0,void 0===r?null:r)}function wl(e,n,t,r){var o=cl();r=void 0===r?null:r;var a=void 0;if(null!==el){var l=el.memoizedState;if(a=l.destroy,null!==r&&al(r,l.deps))return void bl(n,t,a,r)}$a.flags|=e,o.memoizedState=bl(1|n,t,a,r)}function Al(e,n){return yl(516,4,e,n)}function xl(e,n){return wl(516,4,e,n)}function kl(e,n){return wl(4,2,e,n)}function El(e,n){return\"function\"==typeof n?(e=e(),n(e),function(){n(null)}):null!=n?(e=e(),n.current=e,function(){n.current=null}):void 0}function Cl(e,n,t){return t=null!=t?t.concat([e]):null,wl(4,2,El.bind(null,n,e),t)}function Sl(){}function Il(e,n){var t=cl();n=void 0===n?null:n;var r=t.memoizedState;return null!==r&&null!==n&&al(n,r[1])?r[0]:(t.memoizedState=[e,n],e)}function Ol(e,n){var t=cl();n=void 0===n?null:n;var r=t.memoizedState;return null!==r&&null!==n&&al(n,r[1])?r[0]:(e=e(),t.memoizedState=[e,n],e)}function Pl(e,n){var t=Vo();Yo(98>t?98:t,(function(){e(!0)})),Yo(97<t?97:t,(function(){var t=Ja.transition;Ja.transition=1;try{e(!1),n()}finally{Ja.transition=t}}))}function Nl(e,n,t){var r=sc(),o=uc(e),a={lane:o,action:t,eagerReducer:null,eagerState:null,next:null},l=n.pending;if(null===l?a.next=a:(a.next=l.next,l.next=a),n.pending=a,l=e.alternate,e===$a||null!==l&&l===$a)rl=tl=!0;else{if(0===e.lanes&&(null===l||0===l.lanes)&&null!==(l=n.lastRenderedReducer))try{var i=n.lastRenderedState,c=l(i,t);if(a.eagerReducer=l,a.eagerState=c,sr(c,i))return}catch(e){}dc(e,o,r)}}var Tl={readContext:la,useCallback:ol,useContext:ol,useEffect:ol,useImperativeHandle:ol,useLayoutEffect:ol,useMemo:ol,useReducer:ol,useRef:ol,useState:ol,useDebugValue:ol,useDeferredValue:ol,useTransition:ol,useMutableSource:ol,useOpaqueIdentifier:ol,unstable_isNewReconciler:!1},Dl={readContext:la,useCallback:function(e,n){return il().memoizedState=[e,void 0===n?null:n],e},useContext:la,useEffect:Al,useImperativeHandle:function(e,n,t){return t=null!=t?t.concat([e]):null,yl(4,2,El.bind(null,n,e),t)},useLayoutEffect:function(e,n){return yl(4,2,e,n)},useMemo:function(e,n){var t=il();return n=void 0===n?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=il();return n=void 0!==t?t(n):n,r.memoizedState=r.baseState=n,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:n}).dispatch=Nl.bind(null,$a,e),[r.memoizedState,e]},useRef:ml,useState:hl,useDebugValue:Sl,useDeferredValue:function(e){var n=hl(e),t=n[0],r=n[1];return Al((function(){var n=Ja.transition;Ja.transition=1;try{r(e)}finally{Ja.transition=n}}),[e]),t},useTransition:function(){var e=hl(!1),n=e[0];return ml(e=Pl.bind(null,e[1])),[e,n]},useMutableSource:function(e,n,t){var r=il();return r.memoizedState={refs:{getSnapshot:n,setSnapshot:null},source:e,subscribe:t},pl(r,e,n,t)},useOpaqueIdentifier:function(){if(za){var e=!1,n=function(e){return{$$typeof:R,toString:e,valueOf:e}}((function(){throw e||(e=!0,t(\"r:\"+(Kr++).toString(36))),Error(l(355))})),t=hl(n)[1];return 0==(2&$a.mode)&&($a.flags|=516,bl(5,(function(){t(\"r:\"+(Kr++).toString(36))}),void 0,null)),n}return hl(n=\"r:\"+(Kr++).toString(36)),n},unstable_isNewReconciler:!1},Ll={readContext:la,useCallback:Il,useContext:la,useEffect:xl,useImperativeHandle:Cl,useLayoutEffect:kl,useMemo:Ol,useReducer:ul,useRef:vl,useState:function(){return ul(sl)},useDebugValue:Sl,useDeferredValue:function(e){var n=ul(sl),t=n[0],r=n[1];return xl((function(){var n=Ja.transition;Ja.transition=1;try{r(e)}finally{Ja.transition=n}}),[e]),t},useTransition:function(){var e=ul(sl)[0];return[vl().current,e]},useMutableSource:gl,useOpaqueIdentifier:function(){return ul(sl)[0]},unstable_isNewReconciler:!1},Ml={readContext:la,useCallback:Il,useContext:la,useEffect:xl,useImperativeHandle:Cl,useLayoutEffect:kl,useMemo:Ol,useReducer:dl,useRef:vl,useState:function(){return dl(sl)},useDebugValue:Sl,useDeferredValue:function(e){var n=dl(sl),t=n[0],r=n[1];return xl((function(){var n=Ja.transition;Ja.transition=1;try{r(e)}finally{Ja.transition=n}}),[e]),t},useTransition:function(){var e=dl(sl)[0];return[vl().current,e]},useMutableSource:gl,useOpaqueIdentifier:function(){return dl(sl)[0]},unstable_isNewReconciler:!1},Rl=A.ReactCurrentOwner,Bl=!1;function Hl(e,n,t,r){n.child=null===e?Ia(n,null,t,r):Sa(n,e.child,t,r)}function Ql(e,n,t,r,o){t=t.render;var a=n.ref;return aa(n,o),r=ll(e,n,t,r,a,o),null===e||Bl?(n.flags|=1,Hl(e,n,r,o),n.child):(n.updateQueue=e.updateQueue,n.flags&=-517,e.lanes&=~o,ti(e,n,o))}function jl(e,n,t,r,o,a){if(null===e){var l=t.type;return\"function\"!=typeof l||Uc(l)||void 0!==l.defaultProps||null!==t.compare||void 0!==t.defaultProps?((e=Vc(t.type,null,r,n,n.mode,a)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=l,Fl(e,n,l,r,o,a))}return l=e.child,0==(o&a)&&(o=l.memoizedProps,(t=null!==(t=t.compare)?t:dr)(o,r)&&e.ref===n.ref)?ti(e,n,a):(n.flags|=1,(e=qc(l,r)).ref=n.ref,e.return=n,n.child=e)}function Fl(e,n,t,r,o,a){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===n.ref){if(Bl=!1,0==(a&o))return n.lanes=e.lanes,ti(e,n,a);0!=(16384&e.flags)&&(Bl=!0)}return ql(e,n,t,r,a)}function zl(e,n,t){var r=n.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if(\"hidden\"===r.mode||\"unstable-defer-without-hiding\"===r.mode)if(0==(4&n.mode))n.memoizedState={baseLanes:0},yc(0,t);else{if(0==(1073741824&t))return e=null!==a?a.baseLanes|t:t,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e},yc(0,e),null;n.memoizedState={baseLanes:0},yc(0,null!==a?a.baseLanes:t)}else null!==a?(r=a.baseLanes|t,n.memoizedState=null):r=t,yc(0,r);return Hl(e,n,o,t),n.child}function Ul(e,n){var t=n.ref;(null===e&&null!==t||null!==e&&e.ref!==t)&&(n.flags|=128)}function ql(e,n,t,r,o){var a=mo(t)?ho:po.current;return a=bo(n,a),aa(n,o),t=ll(e,n,t,r,a,o),null===e||Bl?(n.flags|=1,Hl(e,n,t,o),n.child):(n.updateQueue=e.updateQueue,n.flags&=-517,e.lanes&=~o,ti(e,n,o))}function Vl(e,n,t,r,o){if(mo(t)){var a=!0;Ao(n)}else a=!1;if(aa(n,o),null===n.stateNode)null!==e&&(e.alternate=null,n.alternate=null,n.flags|=2),ya(n,t,r),Aa(n,t,r,o),r=!0;else if(null===e){var l=n.stateNode,i=n.memoizedProps;l.props=i;var c=l.context,s=t.contextType;s=\"object\"==typeof s&&null!==s?la(s):bo(n,s=mo(t)?ho:po.current);var u=t.getDerivedStateFromProps,d=\"function\"==typeof u||\"function\"==typeof l.getSnapshotBeforeUpdate;d||\"function\"!=typeof l.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof l.componentWillReceiveProps||(i!==r||c!==s)&&wa(n,l,r,s),ia=!1;var f=n.memoizedState;l.state=f,pa(n,r,l,o),c=n.memoizedState,i!==r||f!==c||go.current||ia?(\"function\"==typeof u&&(ba(n,t,u,r),c=n.memoizedState),(i=ia||va(n,t,i,r,f,c,s))?(d||\"function\"!=typeof l.UNSAFE_componentWillMount&&\"function\"!=typeof l.componentWillMount||(\"function\"==typeof l.componentWillMount&&l.componentWillMount(),\"function\"==typeof l.UNSAFE_componentWillMount&&l.UNSAFE_componentWillMount()),\"function\"==typeof l.componentDidMount&&(n.flags|=4)):(\"function\"==typeof l.componentDidMount&&(n.flags|=4),n.memoizedProps=r,n.memoizedState=c),l.props=r,l.state=c,l.context=s,r=i):(\"function\"==typeof l.componentDidMount&&(n.flags|=4),r=!1)}else{l=n.stateNode,sa(e,n),i=n.memoizedProps,s=n.type===n.elementType?i:Jo(n.type,i),l.props=s,d=n.pendingProps,f=l.context,c=\"object\"==typeof(c=t.contextType)&&null!==c?la(c):bo(n,c=mo(t)?ho:po.current);var p=t.getDerivedStateFromProps;(u=\"function\"==typeof p||\"function\"==typeof l.getSnapshotBeforeUpdate)||\"function\"!=typeof l.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof l.componentWillReceiveProps||(i!==d||f!==c)&&wa(n,l,r,c),ia=!1,f=n.memoizedState,l.state=f,pa(n,r,l,o);var g=n.memoizedState;i!==d||f!==g||go.current||ia?(\"function\"==typeof p&&(ba(n,t,p,r),g=n.memoizedState),(s=ia||va(n,t,s,r,f,g,c))?(u||\"function\"!=typeof l.UNSAFE_componentWillUpdate&&\"function\"!=typeof l.componentWillUpdate||(\"function\"==typeof l.componentWillUpdate&&l.componentWillUpdate(r,g,c),\"function\"==typeof l.UNSAFE_componentWillUpdate&&l.UNSAFE_componentWillUpdate(r,g,c)),\"function\"==typeof l.componentDidUpdate&&(n.flags|=4),\"function\"==typeof l.getSnapshotBeforeUpdate&&(n.flags|=256)):(\"function\"!=typeof l.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),\"function\"!=typeof l.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=256),n.memoizedProps=r,n.memoizedState=g),l.props=r,l.state=g,l.context=c,r=s):(\"function\"!=typeof l.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),\"function\"!=typeof l.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=256),r=!1)}return Wl(e,n,t,r,a,o)}function Wl(e,n,t,r,o,a){Ul(e,n);var l=0!=(64&n.flags);if(!r&&!l)return o&&xo(n,t,!1),ti(e,n,a);r=n.stateNode,Rl.current=n;var i=l&&\"function\"!=typeof t.getDerivedStateFromError?null:r.render();return n.flags|=1,null!==e&&l?(n.child=Sa(n,e.child,null,a),n.child=Sa(n,null,i,a)):Hl(e,n,i,a),n.memoizedState=r.state,o&&xo(n,t,!0),n.child}function Yl(e){var n=e.stateNode;n.pendingContext?yo(0,n.pendingContext,n.pendingContext!==n.context):n.context&&yo(0,n.context,!1),La(e,n.containerInfo)}var Xl,Gl,Kl,Zl={dehydrated:null,retryLane:0};function Jl(e,n,t){var r,o=n.pendingProps,a=Ha.current,l=!1;return(r=0!=(64&n.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(l=!0,n.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),uo(Ha,1&a),null===e?(void 0!==o.fallback&&Va(n),e=o.children,a=o.fallback,l?(e=_l(n,e,a,t),n.child.memoizedState={baseLanes:t},n.memoizedState=Zl,e):\"number\"==typeof o.unstable_expectedLoadTime?(e=_l(n,e,a,t),n.child.memoizedState={baseLanes:t},n.memoizedState=Zl,n.lanes=33554432,e):((t=Yc({mode:\"visible\",children:e},n.mode,t,null)).return=n,n.child=t)):(e.memoizedState,l?(o=function(e,n,t,r,o){var a=n.mode,l=e.child;e=l.sibling;var i={mode:\"hidden\",children:t};return 0==(2&a)&&n.child!==l?((t=n.child).childLanes=0,t.pendingProps=i,null!==(l=t.lastEffect)?(n.firstEffect=t.firstEffect,n.lastEffect=l,l.nextEffect=null):n.firstEffect=n.lastEffect=null):t=qc(l,i),null!==e?r=qc(e,r):(r=Wc(r,a,o,null)).flags|=2,r.return=n,t.return=n,t.sibling=r,n.child=t,r}(e,n,o.children,o.fallback,t),l=n.child,a=e.child.memoizedState,l.memoizedState=null===a?{baseLanes:t}:{baseLanes:a.baseLanes|t},l.childLanes=e.childLanes&~t,n.memoizedState=Zl,o):(t=function(e,n,t,r){var o=e.child;return e=o.sibling,t=qc(o,{mode:\"visible\",children:t}),0==(2&n.mode)&&(t.lanes=r),t.return=n,t.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,n.firstEffect=n.lastEffect=e),n.child=t}(e,n,o.children,t),n.memoizedState=null,t))}function _l(e,n,t,r){var o=e.mode,a=e.child;return n={mode:\"hidden\",children:n},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=n):a=Yc(n,o,0,null),t=Wc(t,o,r,null),a.return=e,t.return=e,a.sibling=t,e.child=a,t}function $l(e,n){e.lanes|=n;var t=e.alternate;null!==t&&(t.lanes|=n),oa(e.return,n)}function ei(e,n,t,r,o,a){var l=e.memoizedState;null===l?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:r,tail:t,tailMode:o,lastEffect:a}:(l.isBackwards=n,l.rendering=null,l.renderingStartTime=0,l.last=r,l.tail=t,l.tailMode=o,l.lastEffect=a)}function ni(e,n,t){var r=n.pendingProps,o=r.revealOrder,a=r.tail;if(Hl(e,n,r.children,t),0!=(2&(r=Ha.current)))r=1&r|2,n.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&$l(e,t);else if(19===e.tag)$l(e,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break e;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(uo(Ha,r),0==(2&n.mode))n.memoizedState=null;else switch(o){case\"forwards\":for(t=n.child,o=null;null!==t;)null!==(e=t.alternate)&&null===Qa(e)&&(o=t),t=t.sibling;null===(t=o)?(o=n.child,n.child=null):(o=t.sibling,t.sibling=null),ei(n,!1,o,t,a,n.lastEffect);break;case\"backwards\":for(t=null,o=n.child,n.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Qa(e)){n.child=o;break}e=o.sibling,o.sibling=t,t=o,o=e}ei(n,!0,t,null,a,n.lastEffect);break;case\"together\":ei(n,!1,null,null,void 0,n.lastEffect);break;default:n.memoizedState=null}return n.child}function ti(e,n,t){if(null!==e&&(n.dependencies=e.dependencies),Qi|=n.lanes,0!=(t&n.childLanes)){if(null!==e&&n.child!==e.child)throw Error(l(153));if(null!==n.child){for(t=qc(e=n.child,e.pendingProps),n.child=t,t.return=n;null!==e.sibling;)e=e.sibling,(t=t.sibling=qc(e,e.pendingProps)).return=n;t.sibling=null}return n.child}return null}function ri(e,n){if(!za)switch(e.tailMode){case\"hidden\":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case\"collapsed\":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?n||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function oi(e,n,t){var r=n.pendingProps;switch(n.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return mo(n.type)&&vo(),null;case 3:return Ma(),so(go),so(po),Ka(),(r=n.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Ya(n)?n.flags|=4:r.hydrate||(n.flags|=256)),null;case 5:Ba(n);var a=Da(Ta.current);if(t=n.type,null!==e&&null!=n.stateNode)Gl(e,n,t,r),e.ref!==n.ref&&(n.flags|=128);else{if(!r){if(null===n.stateNode)throw Error(l(166));return null}if(e=Da(Pa.current),Ya(n)){r=n.stateNode,t=n.type;var i=n.memoizedProps;switch(r[Jr]=n,r[_r]=i,t){case\"dialog\":Pr(\"cancel\",r),Pr(\"close\",r);break;case\"iframe\":case\"object\":case\"embed\":Pr(\"load\",r);break;case\"video\":case\"audio\":for(e=0;e<Cr.length;e++)Pr(Cr[e],r);break;case\"source\":Pr(\"error\",r);break;case\"img\":case\"image\":case\"link\":Pr(\"error\",r),Pr(\"load\",r);break;case\"details\":Pr(\"toggle\",r);break;case\"input\":ee(r,i),Pr(\"invalid\",r);break;case\"select\":r._wrapperState={wasMultiple:!!i.multiple},Pr(\"invalid\",r);break;case\"textarea\":ce(r,i),Pr(\"invalid\",r)}for(var s in ke(t,i),e=null,i)i.hasOwnProperty(s)&&(a=i[s],\"children\"===s?\"string\"==typeof a?r.textContent!==a&&(e=[\"children\",a]):\"number\"==typeof a&&r.textContent!==\"\"+a&&(e=[\"children\",\"\"+a]):c.hasOwnProperty(s)&&null!=a&&\"onScroll\"===s&&Pr(\"scroll\",r));switch(t){case\"input\":Z(r),re(r,i,!0);break;case\"textarea\":Z(r),ue(r);break;case\"select\":case\"option\":break;default:\"function\"==typeof i.onClick&&(r.onclick=jr)}r=e,n.updateQueue=r,null!==r&&(n.flags|=4)}else{switch(s=9===a.nodeType?a:a.ownerDocument,e===de&&(e=fe(t)),e===de?\"script\"===t?((e=s.createElement(\"div\")).innerHTML=\"<script><\\/script>\",e=e.removeChild(e.firstChild)):\"string\"==typeof r.is?e=s.createElement(t,{is:r.is}):(e=s.createElement(t),\"select\"===t&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,t),e[Jr]=n,e[_r]=r,Xl(e,n),n.stateNode=e,s=Ee(t,r),t){case\"dialog\":Pr(\"cancel\",e),Pr(\"close\",e),a=r;break;case\"iframe\":case\"object\":case\"embed\":Pr(\"load\",e),a=r;break;case\"video\":case\"audio\":for(a=0;a<Cr.length;a++)Pr(Cr[a],e);a=r;break;case\"source\":Pr(\"error\",e),a=r;break;case\"img\":case\"image\":case\"link\":Pr(\"error\",e),Pr(\"load\",e),a=r;break;case\"details\":Pr(\"toggle\",e),a=r;break;case\"input\":ee(e,r),a=$(e,r),Pr(\"invalid\",e);break;case\"option\":a=ae(e,r);break;case\"select\":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Pr(\"invalid\",e);break;case\"textarea\":ce(e,r),a=ie(e,r),Pr(\"invalid\",e);break;default:a=r}ke(t,a);var u=a;for(i in u)if(u.hasOwnProperty(i)){var d=u[i];\"style\"===i?Ae(e,d):\"dangerouslySetInnerHTML\"===i?null!=(d=d?d.__html:void 0)&&be(e,d):\"children\"===i?\"string\"==typeof d?(\"textarea\"!==t||\"\"!==d)&&me(e,d):\"number\"==typeof d&&me(e,\"\"+d):\"suppressContentEditableWarning\"!==i&&\"suppressHydrationWarning\"!==i&&\"autoFocus\"!==i&&(c.hasOwnProperty(i)?null!=d&&\"onScroll\"===i&&Pr(\"scroll\",e):null!=d&&w(e,i,d,s))}switch(t){case\"input\":Z(e),re(e,r,!1);break;case\"textarea\":Z(e),ue(e);break;case\"option\":null!=r.value&&e.setAttribute(\"value\",\"\"+G(r.value));break;case\"select\":e.multiple=!!r.multiple,null!=(i=r.value)?le(e,!!r.multiple,i,!1):null!=r.defaultValue&&le(e,!!r.multiple,r.defaultValue,!0);break;default:\"function\"==typeof a.onClick&&(e.onclick=jr)}Ur(t,r)&&(n.flags|=4)}null!==n.ref&&(n.flags|=128)}return null;case 6:if(e&&null!=n.stateNode)Kl(0,n,e.memoizedProps,r);else{if(\"string\"!=typeof r&&null===n.stateNode)throw Error(l(166));t=Da(Ta.current),Da(Pa.current),Ya(n)?(r=n.stateNode,t=n.memoizedProps,r[Jr]=n,r.nodeValue!==t&&(n.flags|=4)):((r=(9===t.nodeType?t:t.ownerDocument).createTextNode(r))[Jr]=n,n.stateNode=r)}return null;case 13:return so(Ha),r=n.memoizedState,0!=(64&n.flags)?(n.lanes=t,n):(r=null!==r,t=!1,null===e?void 0!==n.memoizedProps.fallback&&Ya(n):t=null!==e.memoizedState,r&&!t&&0!=(2&n.mode)&&(null===e&&!0!==n.memoizedProps.unstable_avoidThisFallback||0!=(1&Ha.current)?0===Ri&&(Ri=3):(0!==Ri&&3!==Ri||(Ri=4),null===Ni||0==(134217727&Qi)&&0==(134217727&ji)||hc(Ni,Di))),(r||t)&&(n.flags|=4),null);case 4:return Ma(),null===e&&Tr(n.stateNode.containerInfo),null;case 10:return ra(n),null;case 19:if(so(Ha),null===(r=n.memoizedState))return null;if(i=0!=(64&n.flags),null===(s=r.rendering))if(i)ri(r,!1);else{if(0!==Ri||null!==e&&0!=(64&e.flags))for(e=n.child;null!==e;){if(null!==(s=Qa(e))){for(n.flags|=64,ri(r,!1),null!==(i=s.updateQueue)&&(n.updateQueue=i,n.flags|=4),null===r.lastEffect&&(n.firstEffect=null),n.lastEffect=r.lastEffect,r=t,t=n.child;null!==t;)e=r,(i=t).flags&=2,i.nextEffect=null,i.firstEffect=null,i.lastEffect=null,null===(s=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=s.childLanes,i.lanes=s.lanes,i.child=s.child,i.memoizedProps=s.memoizedProps,i.memoizedState=s.memoizedState,i.updateQueue=s.updateQueue,i.type=s.type,e=s.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),t=t.sibling;return uo(Ha,1&Ha.current|2),n.child}e=e.sibling}null!==r.tail&&qo()>qi&&(n.flags|=64,i=!0,ri(r,!1),n.lanes=33554432)}else{if(!i)if(null!==(e=Qa(s))){if(n.flags|=64,i=!0,null!==(t=e.updateQueue)&&(n.updateQueue=t,n.flags|=4),ri(r,!0),null===r.tail&&\"hidden\"===r.tailMode&&!s.alternate&&!za)return null!==(n=n.lastEffect=r.lastEffect)&&(n.nextEffect=null),null}else 2*qo()-r.renderingStartTime>qi&&1073741824!==t&&(n.flags|=64,i=!0,ri(r,!1),n.lanes=33554432);r.isBackwards?(s.sibling=n.child,n.child=s):(null!==(t=r.last)?t.sibling=s:n.child=s,r.last=s)}return null!==r.tail?(t=r.tail,r.rendering=t,r.tail=t.sibling,r.lastEffect=n.lastEffect,r.renderingStartTime=qo(),t.sibling=null,n=Ha.current,uo(Ha,i?1&n|2:1&n),t):null;case 23:case 24:return wc(),null!==e&&null!==e.memoizedState!=(null!==n.memoizedState)&&\"unstable-defer-without-hiding\"!==r.mode&&(n.flags|=4),null}throw Error(l(156,n.tag))}function ai(e){switch(e.tag){case 1:mo(e.type)&&vo();var n=e.flags;return 4096&n?(e.flags=-4097&n|64,e):null;case 3:if(Ma(),so(go),so(po),Ka(),0!=(64&(n=e.flags)))throw Error(l(285));return e.flags=-4097&n|64,e;case 5:return Ba(e),null;case 13:return so(Ha),4096&(n=e.flags)?(e.flags=-4097&n|64,e):null;case 19:return so(Ha),null;case 4:return Ma(),null;case 10:return ra(e),null;case 23:case 24:return wc(),null;default:return null}}function li(e,n){try{var t=\"\",r=n;do{t+=Y(r),r=r.return}while(r);var o=t}catch(e){o=\"\\nError generating stack: \"+e.message+\"\\n\"+e.stack}return{value:e,source:n,stack:o}}function ii(e,n){try{console.error(n.value)}catch(e){setTimeout((function(){throw e}))}}Xl=function(e,n){for(var t=n.child;null!==t;){if(5===t.tag||6===t.tag)e.appendChild(t.stateNode);else if(4!==t.tag&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===n)break;for(;null===t.sibling;){if(null===t.return||t.return===n)return;t=t.return}t.sibling.return=t.return,t=t.sibling}},Gl=function(e,n,t,r){var a=e.memoizedProps;if(a!==r){e=n.stateNode,Da(Pa.current);var l,i=null;switch(t){case\"input\":a=$(e,a),r=$(e,r),i=[];break;case\"option\":a=ae(e,a),r=ae(e,r),i=[];break;case\"select\":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),i=[];break;case\"textarea\":a=ie(e,a),r=ie(e,r),i=[];break;default:\"function\"!=typeof a.onClick&&\"function\"==typeof r.onClick&&(e.onclick=jr)}for(d in ke(t,r),t=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if(\"style\"===d){var s=a[d];for(l in s)s.hasOwnProperty(l)&&(t||(t={}),t[l]=\"\")}else\"dangerouslySetInnerHTML\"!==d&&\"children\"!==d&&\"suppressContentEditableWarning\"!==d&&\"suppressHydrationWarning\"!==d&&\"autoFocus\"!==d&&(c.hasOwnProperty(d)?i||(i=[]):(i=i||[]).push(d,null));for(d in r){var u=r[d];if(s=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&u!==s&&(null!=u||null!=s))if(\"style\"===d)if(s){for(l in s)!s.hasOwnProperty(l)||u&&u.hasOwnProperty(l)||(t||(t={}),t[l]=\"\");for(l in u)u.hasOwnProperty(l)&&s[l]!==u[l]&&(t||(t={}),t[l]=u[l])}else t||(i||(i=[]),i.push(d,t)),t=u;else\"dangerouslySetInnerHTML\"===d?(u=u?u.__html:void 0,s=s?s.__html:void 0,null!=u&&s!==u&&(i=i||[]).push(d,u)):\"children\"===d?\"string\"!=typeof u&&\"number\"!=typeof u||(i=i||[]).push(d,\"\"+u):\"suppressContentEditableWarning\"!==d&&\"suppressHydrationWarning\"!==d&&(c.hasOwnProperty(d)?(null!=u&&\"onScroll\"===d&&Pr(\"scroll\",e),i||s===u||(i=[])):\"object\"==typeof u&&null!==u&&u.$$typeof===R?u.toString():(i=i||[]).push(d,u))}t&&(i=i||[]).push(\"style\",t);var d=i;(n.updateQueue=d)&&(n.flags|=4)}},Kl=function(e,n,t,r){t!==r&&(n.flags|=4)};var ci=\"function\"==typeof WeakMap?WeakMap:Map;function si(e,n,t){(t=ua(-1,t)).tag=3,t.payload={element:null};var r=n.value;return t.callback=function(){Xi||(Xi=!0,Gi=r),ii(0,n)},t}function ui(e,n,t){(t=ua(-1,t)).tag=3;var r=e.type.getDerivedStateFromError;if(\"function\"==typeof r){var o=n.value;t.payload=function(){return ii(0,n),r(o)}}var a=e.stateNode;return null!==a&&\"function\"==typeof a.componentDidCatch&&(t.callback=function(){\"function\"!=typeof r&&(null===Ki?Ki=new Set([this]):Ki.add(this),ii(0,n));var e=n.stack;this.componentDidCatch(n.value,{componentStack:null!==e?e:\"\"})}),t}var di=\"function\"==typeof WeakSet?WeakSet:Set;function fi(e){var n=e.ref;if(null!==n)if(\"function\"==typeof n)try{n(null)}catch(n){Hc(e,n)}else n.current=null}function pi(e,n){switch(n.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&n.flags&&null!==e){var t=e.memoizedProps,r=e.memoizedState;n=(e=n.stateNode).getSnapshotBeforeUpdate(n.elementType===n.type?t:Jo(n.type,t),r),e.__reactInternalSnapshotBeforeUpdate=n}return;case 3:return void(256&n.flags&&Yr(n.stateNode.containerInfo))}throw Error(l(163))}function gi(e,n,t){switch(t.tag){case 0:case 11:case 15:case 22:if(null!==(n=null!==(n=t.updateQueue)?n.lastEffect:null)){e=n=n.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==n)}if(null!==(n=null!==(n=t.updateQueue)?n.lastEffect:null)){e=n=n.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Mc(t,e),Lc(t,e)),e=r}while(e!==n)}return;case 1:return e=t.stateNode,4&t.flags&&(null===n?e.componentDidMount():(r=t.elementType===t.type?n.memoizedProps:Jo(t.type,n.memoizedProps),e.componentDidUpdate(r,n.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(n=t.updateQueue)&&ga(t,n,e));case 3:if(null!==(n=t.updateQueue)){if(e=null,null!==t.child)switch(t.child.tag){case 5:case 1:e=t.child.stateNode}ga(t,n,e)}return;case 5:return e=t.stateNode,void(null===n&&4&t.flags&&Ur(t.type,t.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===t.memoizedState&&(t=t.alternate,null!==t&&(t=t.memoizedState,null!==t&&(t=t.dehydrated,null!==t&&xn(t)))))}throw Error(l(163))}function hi(e,n){for(var t=e;;){if(5===t.tag){var r=t.stateNode;if(n)\"function\"==typeof(r=r.style).setProperty?r.setProperty(\"display\",\"none\",\"important\"):r.display=\"none\";else{r=t.stateNode;var o=t.memoizedProps.style;o=null!=o&&o.hasOwnProperty(\"display\")?o.display:null,r.style.display=we(\"display\",o)}}else if(6===t.tag)t.stateNode.nodeValue=n?\"\":t.memoizedProps;else if((23!==t.tag&&24!==t.tag||null===t.memoizedState||t===e)&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return;t=t.return}t.sibling.return=t.return,t=t.sibling}}function bi(e,n){if(Eo&&\"function\"==typeof Eo.onCommitFiberUnmount)try{Eo.onCommitFiberUnmount(ko,n)}catch(e){}switch(n.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=n.updateQueue)&&null!==(e=e.lastEffect)){var t=e=e.next;do{var r=t,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Mc(n,t);else{r=n;try{o()}catch(e){Hc(r,e)}}t=t.next}while(t!==e)}break;case 1:if(fi(n),\"function\"==typeof(e=n.stateNode).componentWillUnmount)try{e.props=n.memoizedProps,e.state=n.memoizedState,e.componentWillUnmount()}catch(e){Hc(n,e)}break;case 5:fi(n);break;case 4:xi(e,n)}}function mi(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function vi(e){return 5===e.tag||3===e.tag||4===e.tag}function yi(e){e:{for(var n=e.return;null!==n;){if(vi(n))break e;n=n.return}throw Error(l(160))}var t=n;switch(n=t.stateNode,t.tag){case 5:var r=!1;break;case 3:case 4:n=n.containerInfo,r=!0;break;default:throw Error(l(161))}16&t.flags&&(me(n,\"\"),t.flags&=-17);e:n:for(t=e;;){for(;null===t.sibling;){if(null===t.return||vi(t.return)){t=null;break e}t=t.return}for(t.sibling.return=t.return,t=t.sibling;5!==t.tag&&6!==t.tag&&18!==t.tag;){if(2&t.flags)continue n;if(null===t.child||4===t.tag)continue n;t.child.return=t,t=t.child}if(!(2&t.flags)){t=t.stateNode;break e}}r?wi(e,t,n):Ai(e,t,n)}function wi(e,n,t){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,n?8===t.nodeType?t.parentNode.insertBefore(e,n):t.insertBefore(e,n):(8===t.nodeType?(n=t.parentNode).insertBefore(e,t):(n=t).appendChild(e),null!=(t=t._reactRootContainer)||null!==n.onclick||(n.onclick=jr));else if(4!==r&&null!==(e=e.child))for(wi(e,n,t),e=e.sibling;null!==e;)wi(e,n,t),e=e.sibling}function Ai(e,n,t){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,n?t.insertBefore(e,n):t.appendChild(e);else if(4!==r&&null!==(e=e.child))for(Ai(e,n,t),e=e.sibling;null!==e;)Ai(e,n,t),e=e.sibling}function xi(e,n){for(var t,r,o=n,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(l(160));switch(t=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:t=t.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var i=e,c=o,s=c;;)if(bi(i,s),null!==s.child&&4!==s.tag)s.child.return=s,s=s.child;else{if(s===c)break e;for(;null===s.sibling;){if(null===s.return||s.return===c)break e;s=s.return}s.sibling.return=s.return,s=s.sibling}r?(i=t,c=o.stateNode,8===i.nodeType?i.parentNode.removeChild(c):i.removeChild(c)):t.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){t=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(bi(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===n)break;for(;null===o.sibling;){if(null===o.return||o.return===n)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function ki(e,n){switch(n.tag){case 0:case 11:case 14:case 15:case 22:var t=n.updateQueue;if(null!==(t=null!==t?t.lastEffect:null)){var r=t=t.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==t)}return;case 1:case 12:case 17:return;case 5:if(null!=(t=n.stateNode)){r=n.memoizedProps;var o=null!==e?e.memoizedProps:r;e=n.type;var a=n.updateQueue;if(n.updateQueue=null,null!==a){for(t[_r]=r,\"input\"===e&&\"radio\"===r.type&&null!=r.name&&ne(t,r),Ee(e,o),n=Ee(e,r),o=0;o<a.length;o+=2){var i=a[o],c=a[o+1];\"style\"===i?Ae(t,c):\"dangerouslySetInnerHTML\"===i?be(t,c):\"children\"===i?me(t,c):w(t,i,c,n)}switch(e){case\"input\":te(t,r);break;case\"textarea\":se(t,r);break;case\"select\":e=t._wrapperState.wasMultiple,t._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?le(t,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?le(t,!!r.multiple,r.defaultValue,!0):le(t,!!r.multiple,r.multiple?[]:\"\",!1))}}}return;case 6:if(null===n.stateNode)throw Error(l(162));return void(n.stateNode.nodeValue=n.memoizedProps);case 3:return void((t=n.stateNode).hydrate&&(t.hydrate=!1,xn(t.containerInfo)));case 13:return null!==n.memoizedState&&(Ui=qo(),hi(n.child,!0)),void Ei(n);case 19:return void Ei(n);case 23:case 24:return void hi(n,null!==n.memoizedState)}throw Error(l(163))}function Ei(e){var n=e.updateQueue;if(null!==n){e.updateQueue=null;var t=e.stateNode;null===t&&(t=e.stateNode=new di),n.forEach((function(n){var r=jc.bind(null,e,n);t.has(n)||(t.add(n),n.then(r,r))}))}}function Ci(e,n){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&null!==(n=n.memoizedState)&&null===n.dehydrated}var Si=Math.ceil,Ii=A.ReactCurrentDispatcher,Oi=A.ReactCurrentOwner,Pi=0,Ni=null,Ti=null,Di=0,Li=0,Mi=co(0),Ri=0,Bi=null,Hi=0,Qi=0,ji=0,Fi=0,zi=null,Ui=0,qi=1/0;function Vi(){qi=qo()+500}var Wi,Yi=null,Xi=!1,Gi=null,Ki=null,Zi=!1,Ji=null,_i=90,$i=[],ec=[],nc=null,tc=0,rc=null,oc=-1,ac=0,lc=0,ic=null,cc=!1;function sc(){return 0!=(48&Pi)?qo():-1!==oc?oc:oc=qo()}function uc(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Vo()?1:2;if(0===ac&&(ac=Hi),0!==Zo.transition){0!==lc&&(lc=null!==zi?zi.pendingLanes:0),e=ac;var n=4186112&~lc;return 0==(n&=-n)&&0==(n=(e=4186112&~e)&-e)&&(n=8192),n}return e=Vo(),e=Fn(0!=(4&Pi)&&98===e?12:e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ac)}function dc(e,n,t){if(50<tc)throw tc=0,rc=null,Error(l(185));if(null===(e=fc(e,n)))return null;qn(e,n,t),e===Ni&&(ji|=n,4===Ri&&hc(e,Di));var r=Vo();1===n?0!=(8&Pi)&&0==(48&Pi)?bc(e):(pc(e,t),0===Pi&&(Vi(),Go())):(0==(4&Pi)||98!==r&&99!==r||(null===nc?nc=new Set([e]):nc.add(e)),pc(e,t)),zi=e}function fc(e,n){e.lanes|=n;var t=e.alternate;for(null!==t&&(t.lanes|=n),t=e,e=e.return;null!==e;)e.childLanes|=n,null!==(t=e.alternate)&&(t.childLanes|=n),t=e,e=e.return;return 3===t.tag?t.stateNode:null}function pc(e,n){for(var t=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,i=e.pendingLanes;0<i;){var c=31-Vn(i),s=1<<c,u=a[c];if(-1===u){if(0==(s&r)||0!=(s&o)){u=n,Hn(s);var d=Bn;a[c]=10<=d?u+250:6<=d?u+5e3:-1}}else u<=n&&(e.expiredLanes|=s);i&=~s}if(r=Qn(e,e===Ni?Di:0),n=Bn,0===r)null!==t&&(t!==Ho&&Io(t),e.callbackNode=null,e.callbackPriority=0);else{if(null!==t){if(e.callbackPriority===n)return;t!==Ho&&Io(t)}15===n?(t=bc.bind(null,e),null===jo?(jo=[t],Fo=So(Do,Ko)):jo.push(t),t=Ho):14===n?t=Xo(99,bc.bind(null,e)):(t=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(l(358,e))}}(n),t=Xo(t,gc.bind(null,e))),e.callbackPriority=n,e.callbackNode=t}}function gc(e){if(oc=-1,lc=ac=0,0!=(48&Pi))throw Error(l(327));var n=e.callbackNode;if(Dc()&&e.callbackNode!==n)return null;var t=Qn(e,e===Ni?Di:0);if(0===t)return null;var r=t,o=Pi;Pi|=16;var a=kc();for(Ni===e&&Di===r||(Vi(),Ac(e,r));;)try{Sc();break}catch(n){xc(e,n)}if(ta(),Ii.current=a,Pi=o,null!==Ti?r=0:(Ni=null,Di=0,r=Ri),0!=(Hi&ji))Ac(e,0);else if(0!==r){if(2===r&&(Pi|=64,e.hydrate&&(e.hydrate=!1,Yr(e.containerInfo)),0!==(t=jn(e))&&(r=Ec(e,t))),1===r)throw n=Bi,Ac(e,0),hc(e,t),pc(e,qo()),n;switch(e.finishedWork=e.current.alternate,e.finishedLanes=t,r){case 0:case 1:throw Error(l(345));case 2:case 5:Pc(e);break;case 3:if(hc(e,t),(62914560&t)===t&&10<(r=Ui+500-qo())){if(0!==Qn(e,0))break;if(((o=e.suspendedLanes)&t)!==t){sc(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Vr(Pc.bind(null,e),r);break}Pc(e);break;case 4:if(hc(e,t),(4186112&t)===t)break;for(r=e.eventTimes,o=-1;0<t;){var i=31-Vn(t);a=1<<i,(i=r[i])>o&&(o=i),t&=~a}if(t=o,10<(t=(120>(t=qo()-t)?120:480>t?480:1080>t?1080:1920>t?1920:3e3>t?3e3:4320>t?4320:1960*Si(t/1960))-t)){e.timeoutHandle=Vr(Pc.bind(null,e),t);break}Pc(e);break;default:throw Error(l(329))}}return pc(e,qo()),e.callbackNode===n?gc.bind(null,e):null}function hc(e,n){for(n&=~Fi,n&=~ji,e.suspendedLanes|=n,e.pingedLanes&=~n,e=e.expirationTimes;0<n;){var t=31-Vn(n),r=1<<t;e[t]=-1,n&=~r}}function bc(e){if(0!=(48&Pi))throw Error(l(327));if(Dc(),e===Ni&&0!=(e.expiredLanes&Di)){var n=Di,t=Ec(e,n);0!=(Hi&ji)&&(t=Ec(e,n=Qn(e,n)))}else t=Ec(e,n=Qn(e,0));if(0!==e.tag&&2===t&&(Pi|=64,e.hydrate&&(e.hydrate=!1,Yr(e.containerInfo)),0!==(n=jn(e))&&(t=Ec(e,n))),1===t)throw t=Bi,Ac(e,0),hc(e,n),pc(e,qo()),t;return e.finishedWork=e.current.alternate,e.finishedLanes=n,Pc(e),pc(e,qo()),null}function mc(e,n){var t=Pi;Pi|=1;try{return e(n)}finally{0===(Pi=t)&&(Vi(),Go())}}function vc(e,n){var t=Pi;Pi&=-2,Pi|=8;try{return e(n)}finally{0===(Pi=t)&&(Vi(),Go())}}function yc(e,n){uo(Mi,Li),Li|=n,Hi|=n}function wc(){Li=Mi.current,so(Mi)}function Ac(e,n){e.finishedWork=null,e.finishedLanes=0;var t=e.timeoutHandle;if(-1!==t&&(e.timeoutHandle=-1,Wr(t)),null!==Ti)for(t=Ti.return;null!==t;){var r=t;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&vo();break;case 3:Ma(),so(go),so(po),Ka();break;case 5:Ba(r);break;case 4:Ma();break;case 13:case 19:so(Ha);break;case 10:ra(r);break;case 23:case 24:wc()}t=t.return}Ni=e,Ti=qc(e.current,null),Di=Li=Hi=n,Ri=0,Bi=null,Fi=ji=Qi=0}function xc(e,n){for(;;){var t=Ti;try{if(ta(),Za.current=Tl,tl){for(var r=$a.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}tl=!1}if(_a=0,nl=el=$a=null,rl=!1,Oi.current=null,null===t||null===t.return){Ri=1,Bi=n,Ti=null;break}e:{var a=e,l=t.return,i=t,c=n;if(n=Di,i.flags|=2048,i.firstEffect=i.lastEffect=null,null!==c&&\"object\"==typeof c&&\"function\"==typeof c.then){var s=c;if(0==(2&i.mode)){var u=i.alternate;u?(i.updateQueue=u.updateQueue,i.memoizedState=u.memoizedState,i.lanes=u.lanes):(i.updateQueue=null,i.memoizedState=null)}var d=0!=(1&Ha.current),f=l;do{var p;if(p=13===f.tag){var g=f.memoizedState;if(null!==g)p=null!==g.dehydrated;else{var h=f.memoizedProps;p=void 0!==h.fallback&&(!0!==h.unstable_avoidThisFallback||!d)}}if(p){var b=f.updateQueue;if(null===b){var m=new Set;m.add(s),f.updateQueue=m}else b.add(s);if(0==(2&f.mode)){if(f.flags|=64,i.flags|=16384,i.flags&=-2981,1===i.tag)if(null===i.alternate)i.tag=17;else{var v=ua(-1,1);v.tag=2,da(i,v)}i.lanes|=1;break e}c=void 0,i=n;var y=a.pingCache;if(null===y?(y=a.pingCache=new ci,c=new Set,y.set(s,c)):void 0===(c=y.get(s))&&(c=new Set,y.set(s,c)),!c.has(i)){c.add(i);var w=Qc.bind(null,a,s,i);s.then(w,w)}f.flags|=4096,f.lanes=n;break e}f=f.return}while(null!==f);c=Error((X(i.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\")}5!==Ri&&(Ri=2),c=li(c,i),f=l;do{switch(f.tag){case 3:a=c,f.flags|=4096,n&=-n,f.lanes|=n,fa(f,si(0,a,n));break e;case 1:a=c;var A=f.type,x=f.stateNode;if(0==(64&f.flags)&&(\"function\"==typeof A.getDerivedStateFromError||null!==x&&\"function\"==typeof x.componentDidCatch&&(null===Ki||!Ki.has(x)))){f.flags|=4096,n&=-n,f.lanes|=n,fa(f,ui(f,a,n));break e}}f=f.return}while(null!==f)}Oc(t)}catch(e){n=e,Ti===t&&null!==t&&(Ti=t=t.return);continue}break}}function kc(){var e=Ii.current;return Ii.current=Tl,null===e?Tl:e}function Ec(e,n){var t=Pi;Pi|=16;var r=kc();for(Ni===e&&Di===n||Ac(e,n);;)try{Cc();break}catch(n){xc(e,n)}if(ta(),Pi=t,Ii.current=r,null!==Ti)throw Error(l(261));return Ni=null,Di=0,Ri}function Cc(){for(;null!==Ti;)Ic(Ti)}function Sc(){for(;null!==Ti&&!Oo();)Ic(Ti)}function Ic(e){var n=Wi(e.alternate,e,Li);e.memoizedProps=e.pendingProps,null===n?Oc(e):Ti=n,Oi.current=null}function Oc(e){var n=e;do{var t=n.alternate;if(e=n.return,0==(2048&n.flags)){if(null!==(t=oi(t,n,Li)))return void(Ti=t);if(24!==(t=n).tag&&23!==t.tag||null===t.memoizedState||0!=(1073741824&Li)||0==(4&t.mode)){for(var r=0,o=t.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;t.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=n.firstEffect),null!==n.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=n.firstEffect),e.lastEffect=n.lastEffect),1<n.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=n:e.firstEffect=n,e.lastEffect=n))}else{if(null!==(t=ai(n)))return t.flags&=2047,void(Ti=t);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(n=n.sibling))return void(Ti=n);Ti=n=e}while(null!==n);0===Ri&&(Ri=5)}function Pc(e){var n=Vo();return Yo(99,Nc.bind(null,e,n)),null}function Nc(e,n){do{Dc()}while(null!==Ji);if(0!=(48&Pi))throw Error(l(327));var t=e.finishedWork;if(null===t)return null;if(e.finishedWork=null,e.finishedLanes=0,t===e.current)throw Error(l(177));e.callbackNode=null;var r=t.lanes|t.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var i=e.eventTimes,c=e.expirationTimes;0<a;){var s=31-Vn(a),u=1<<s;o[s]=0,i[s]=-1,c[s]=-1,a&=~u}if(null!==nc&&0==(24&r)&&nc.has(e)&&nc.delete(e),e===Ni&&(Ti=Ni=null,Di=0),1<t.flags?null!==t.lastEffect?(t.lastEffect.nextEffect=t,r=t.firstEffect):r=t:r=t.firstEffect,null!==r){if(o=Pi,Pi|=32,Oi.current=null,Fr=Kn,br(i=hr())){if(\"selectionStart\"in i)c={start:i.selectionStart,end:i.selectionEnd};else e:if(c=(c=i.ownerDocument)&&c.defaultView||window,(u=c.getSelection&&c.getSelection())&&0!==u.rangeCount){c=u.anchorNode,a=u.anchorOffset,s=u.focusNode,u=u.focusOffset;try{c.nodeType,s.nodeType}catch(e){c=null;break e}var d=0,f=-1,p=-1,g=0,h=0,b=i,m=null;n:for(;;){for(var v;b!==c||0!==a&&3!==b.nodeType||(f=d+a),b!==s||0!==u&&3!==b.nodeType||(p=d+u),3===b.nodeType&&(d+=b.nodeValue.length),null!==(v=b.firstChild);)m=b,b=v;for(;;){if(b===i)break n;if(m===c&&++g===a&&(f=d),m===s&&++h===u&&(p=d),null!==(v=b.nextSibling))break;m=(b=m).parentNode}b=v}c=-1===f||-1===p?null:{start:f,end:p}}else c=null;c=c||{start:0,end:0}}else c=null;zr={focusedElem:i,selectionRange:c},Kn=!1,ic=null,cc=!1,Yi=r;do{try{Tc()}catch(e){if(null===Yi)throw Error(l(330));Hc(Yi,e),Yi=Yi.nextEffect}}while(null!==Yi);ic=null,Yi=r;do{try{for(i=e;null!==Yi;){var y=Yi.flags;if(16&y&&me(Yi.stateNode,\"\"),128&y){var w=Yi.alternate;if(null!==w){var A=w.ref;null!==A&&(\"function\"==typeof A?A(null):A.current=null)}}switch(1038&y){case 2:yi(Yi),Yi.flags&=-3;break;case 6:yi(Yi),Yi.flags&=-3,ki(Yi.alternate,Yi);break;case 1024:Yi.flags&=-1025;break;case 1028:Yi.flags&=-1025,ki(Yi.alternate,Yi);break;case 4:ki(Yi.alternate,Yi);break;case 8:xi(i,c=Yi);var x=c.alternate;mi(c),null!==x&&mi(x)}Yi=Yi.nextEffect}}catch(e){if(null===Yi)throw Error(l(330));Hc(Yi,e),Yi=Yi.nextEffect}}while(null!==Yi);if(A=zr,w=hr(),y=A.focusedElem,i=A.selectionRange,w!==y&&y&&y.ownerDocument&&gr(y.ownerDocument.documentElement,y)){null!==i&&br(y)&&(w=i.start,void 0===(A=i.end)&&(A=w),\"selectionStart\"in y?(y.selectionStart=w,y.selectionEnd=Math.min(A,y.value.length)):(A=(w=y.ownerDocument||document)&&w.defaultView||window).getSelection&&(A=A.getSelection(),c=y.textContent.length,x=Math.min(i.start,c),i=void 0===i.end?x:Math.min(i.end,c),!A.extend&&x>i&&(c=i,i=x,x=c),c=pr(y,x),a=pr(y,i),c&&a&&(1!==A.rangeCount||A.anchorNode!==c.node||A.anchorOffset!==c.offset||A.focusNode!==a.node||A.focusOffset!==a.offset)&&((w=w.createRange()).setStart(c.node,c.offset),A.removeAllRanges(),x>i?(A.addRange(w),A.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),A.addRange(w))))),w=[];for(A=y;A=A.parentNode;)1===A.nodeType&&w.push({element:A,left:A.scrollLeft,top:A.scrollTop});for(\"function\"==typeof y.focus&&y.focus(),y=0;y<w.length;y++)(A=w[y]).element.scrollLeft=A.left,A.element.scrollTop=A.top}Kn=!!Fr,zr=Fr=null,e.current=t,Yi=r;do{try{for(y=e;null!==Yi;){var k=Yi.flags;if(36&k&&gi(y,Yi.alternate,Yi),128&k){w=void 0;var E=Yi.ref;if(null!==E){var C=Yi.stateNode;Yi.tag,w=C,\"function\"==typeof E?E(w):E.current=w}}Yi=Yi.nextEffect}}catch(e){if(null===Yi)throw Error(l(330));Hc(Yi,e),Yi=Yi.nextEffect}}while(null!==Yi);Yi=null,Qo(),Pi=o}else e.current=t;if(Zi)Zi=!1,Ji=e,_i=n;else for(Yi=r;null!==Yi;)n=Yi.nextEffect,Yi.nextEffect=null,8&Yi.flags&&((k=Yi).sibling=null,k.stateNode=null),Yi=n;if(0===(r=e.pendingLanes)&&(Ki=null),1===r?e===rc?tc++:(tc=0,rc=e):tc=0,t=t.stateNode,Eo&&\"function\"==typeof Eo.onCommitFiberRoot)try{Eo.onCommitFiberRoot(ko,t,void 0,64==(64&t.current.flags))}catch(e){}if(pc(e,qo()),Xi)throw Xi=!1,e=Gi,Gi=null,e;return 0!=(8&Pi)||Go(),null}function Tc(){for(;null!==Yi;){var e=Yi.alternate;cc||null===ic||(0!=(8&Yi.flags)?$e(Yi,ic)&&(cc=!0):13===Yi.tag&&Ci(e,Yi)&&$e(Yi,ic)&&(cc=!0));var n=Yi.flags;0!=(256&n)&&pi(e,Yi),0==(512&n)||Zi||(Zi=!0,Xo(97,(function(){return Dc(),null}))),Yi=Yi.nextEffect}}function Dc(){if(90!==_i){var e=97<_i?97:_i;return _i=90,Yo(e,Rc)}return!1}function Lc(e,n){$i.push(n,e),Zi||(Zi=!0,Xo(97,(function(){return Dc(),null})))}function Mc(e,n){ec.push(n,e),Zi||(Zi=!0,Xo(97,(function(){return Dc(),null})))}function Rc(){if(null===Ji)return!1;var e=Ji;if(Ji=null,0!=(48&Pi))throw Error(l(331));var n=Pi;Pi|=32;var t=ec;ec=[];for(var r=0;r<t.length;r+=2){var o=t[r],a=t[r+1],i=o.destroy;if(o.destroy=void 0,\"function\"==typeof i)try{i()}catch(e){if(null===a)throw Error(l(330));Hc(a,e)}}for(t=$i,$i=[],r=0;r<t.length;r+=2){o=t[r],a=t[r+1];try{var c=o.create;o.destroy=c()}catch(e){if(null===a)throw Error(l(330));Hc(a,e)}}for(c=e.current.firstEffect;null!==c;)e=c.nextEffect,c.nextEffect=null,8&c.flags&&(c.sibling=null,c.stateNode=null),c=e;return Pi=n,Go(),!0}function Bc(e,n,t){da(e,n=si(0,n=li(t,n),1)),n=sc(),null!==(e=fc(e,1))&&(qn(e,1,n),pc(e,n))}function Hc(e,n){if(3===e.tag)Bc(e,e,n);else for(var t=e.return;null!==t;){if(3===t.tag){Bc(t,e,n);break}if(1===t.tag){var r=t.stateNode;if(\"function\"==typeof t.type.getDerivedStateFromError||\"function\"==typeof r.componentDidCatch&&(null===Ki||!Ki.has(r))){var o=ui(t,e=li(n,e),1);if(da(t,o),o=sc(),null!==(t=fc(t,1)))qn(t,1,o),pc(t,o);else if(\"function\"==typeof r.componentDidCatch&&(null===Ki||!Ki.has(r)))try{r.componentDidCatch(n,e)}catch(e){}break}}t=t.return}}function Qc(e,n,t){var r=e.pingCache;null!==r&&r.delete(n),n=sc(),e.pingedLanes|=e.suspendedLanes&t,Ni===e&&(Di&t)===t&&(4===Ri||3===Ri&&(62914560&Di)===Di&&500>qo()-Ui?Ac(e,0):Fi|=t),pc(e,n)}function jc(e,n){var t=e.stateNode;null!==t&&t.delete(n),0==(n=0)&&(0==(2&(n=e.mode))?n=1:0==(4&n)?n=99===Vo()?1:2:(0===ac&&(ac=Hi),0===(n=zn(62914560&~ac))&&(n=4194304))),t=sc(),null!==(e=fc(e,n))&&(qn(e,n,t),pc(e,t))}function Fc(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function zc(e,n,t,r){return new Fc(e,n,t,r)}function Uc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function qc(e,n){var t=e.alternate;return null===t?((t=zc(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.nextEffect=null,t.firstEffect=null,t.lastEffect=null),t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Vc(e,n,t,r,o,a){var i=2;if(r=e,\"function\"==typeof e)Uc(e)&&(i=1);else if(\"string\"==typeof e)i=5;else e:switch(e){case E:return Wc(t.children,o,a,n);case B:i=8,o|=16;break;case C:i=8,o|=1;break;case S:return(e=zc(12,t,n,8|o)).elementType=S,e.type=S,e.lanes=a,e;case N:return(e=zc(13,t,n,o)).type=N,e.elementType=N,e.lanes=a,e;case T:return(e=zc(19,t,n,o)).elementType=T,e.lanes=a,e;case H:return Yc(t,o,a,n);case Q:return(e=zc(24,t,n,o)).elementType=Q,e.lanes=a,e;default:if(\"object\"==typeof e&&null!==e)switch(e.$$typeof){case I:i=10;break e;case O:i=9;break e;case P:i=11;break e;case D:i=14;break e;case L:i=16,r=null;break e;case M:i=22;break e}throw Error(l(130,null==e?e:typeof e,\"\"))}return(n=zc(i,t,n,o)).elementType=e,n.type=r,n.lanes=a,n}function Wc(e,n,t,r){return(e=zc(7,e,r,n)).lanes=t,e}function Yc(e,n,t,r){return(e=zc(23,e,r,n)).elementType=H,e.lanes=t,e}function Xc(e,n,t){return(e=zc(6,e,null,n)).lanes=t,e}function Gc(e,n,t){return(n=zc(4,null!==e.children?e.children:[],e.key,n)).lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function Kc(e,n,t){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=t,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Un(0),this.expirationTimes=Un(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Un(0),this.mutableSourceEagerHydrationData=null}function Zc(e,n,t){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:\"\"+r,children:e,containerInfo:n,implementation:t}}function Jc(e,n,t,r){var o=n.current,a=sc(),i=uc(o);e:if(t){n:{if(Ke(t=t._reactInternals)!==t||1!==t.tag)throw Error(l(170));var c=t;do{switch(c.tag){case 3:c=c.stateNode.context;break n;case 1:if(mo(c.type)){c=c.stateNode.__reactInternalMemoizedMergedChildContext;break n}}c=c.return}while(null!==c);throw Error(l(171))}if(1===t.tag){var s=t.type;if(mo(s)){t=wo(t,s,c);break e}}t=c}else t=fo;return null===n.context?n.context=t:n.pendingContext=t,(n=ua(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(n.callback=r),da(o,n),dc(o,i,a),i}function _c(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function $c(e,n){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var t=e.retryLane;e.retryLane=0!==t&&t<n?t:n}}function es(e,n){$c(e,n),(e=e.alternate)&&$c(e,n)}function ns(e,n,t){var r=null!=t&&null!=t.hydrationOptions&&t.hydrationOptions.mutableSources||null;if(t=new Kc(e,n,null!=t&&!0===t.hydrate),n=zc(3,null,null,2===n?7:1===n?3:0),t.current=n,n.stateNode=t,ca(n),e[$r]=t.current,Tr(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(n=r[e])._getVersion;o=o(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o)}this._internalRoot=t}function ts(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||\" react-mount-point-unstable \"!==e.nodeValue))}function rs(e,n,t,r,o){var a=t._reactRootContainer;if(a){var l=a._internalRoot;if(\"function\"==typeof o){var i=o;o=function(){var e=_c(l);i.call(e)}}Jc(n,l,e,o)}else{if(a=t._reactRootContainer=function(e,n){if(n||(n=!(!(n=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==n.nodeType||!n.hasAttribute(\"data-reactroot\"))),!n)for(var t;t=e.lastChild;)e.removeChild(t);return new ns(e,0,n?{hydrate:!0}:void 0)}(t,r),l=a._internalRoot,\"function\"==typeof o){var c=o;o=function(){var e=_c(l);c.call(e)}}vc((function(){Jc(n,l,e,o)}))}return _c(l)}function os(e,n){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ts(n))throw Error(l(200));return Zc(e,n,null,t)}Wi=function(e,n,t){var r=n.lanes;if(null!==e)if(e.memoizedProps!==n.pendingProps||go.current)Bl=!0;else{if(0==(t&r)){switch(Bl=!1,n.tag){case 3:Yl(n),Xa();break;case 5:Ra(n);break;case 1:mo(n.type)&&Ao(n);break;case 4:La(n,n.stateNode.containerInfo);break;case 10:r=n.memoizedProps.value;var o=n.type._context;uo(_o,o._currentValue),o._currentValue=r;break;case 13:if(null!==n.memoizedState)return 0!=(t&n.child.childLanes)?Jl(e,n,t):(uo(Ha,1&Ha.current),null!==(n=ti(e,n,t))?n.sibling:null);uo(Ha,1&Ha.current);break;case 19:if(r=0!=(t&n.childLanes),0!=(64&e.flags)){if(r)return ni(e,n,t);n.flags|=64}if(null!==(o=n.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),uo(Ha,Ha.current),r)break;return null;case 23:case 24:return n.lanes=0,zl(e,n,t)}return ti(e,n,t)}Bl=0!=(16384&e.flags)}else Bl=!1;switch(n.lanes=0,n.tag){case 2:if(r=n.type,null!==e&&(e.alternate=null,n.alternate=null,n.flags|=2),e=n.pendingProps,o=bo(n,po.current),aa(n,t),o=ll(null,n,r,e,o,t),n.flags|=1,\"object\"==typeof o&&null!==o&&\"function\"==typeof o.render&&void 0===o.$$typeof){if(n.tag=1,n.memoizedState=null,n.updateQueue=null,mo(r)){var a=!0;Ao(n)}else a=!1;n.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,ca(n);var i=r.getDerivedStateFromProps;\"function\"==typeof i&&ba(n,r,i,e),o.updater=ma,n.stateNode=o,o._reactInternals=n,Aa(n,r,e,t),n=Wl(null,n,r,!0,a,t)}else n.tag=0,Hl(null,n,o,t),n=n.child;return n;case 16:o=n.elementType;e:{switch(null!==e&&(e.alternate=null,n.alternate=null,n.flags|=2),e=n.pendingProps,o=(a=o._init)(o._payload),n.type=o,a=n.tag=function(e){if(\"function\"==typeof e)return Uc(e)?1:0;if(null!=e){if((e=e.$$typeof)===P)return 11;if(e===D)return 14}return 2}(o),e=Jo(o,e),a){case 0:n=ql(null,n,o,e,t);break e;case 1:n=Vl(null,n,o,e,t);break e;case 11:n=Ql(null,n,o,e,t);break e;case 14:n=jl(null,n,o,Jo(o.type,e),r,t);break e}throw Error(l(306,o,\"\"))}return n;case 0:return r=n.type,o=n.pendingProps,ql(e,n,r,o=n.elementType===r?o:Jo(r,o),t);case 1:return r=n.type,o=n.pendingProps,Vl(e,n,r,o=n.elementType===r?o:Jo(r,o),t);case 3:if(Yl(n),r=n.updateQueue,null===e||null===r)throw Error(l(282));if(r=n.pendingProps,o=null!==(o=n.memoizedState)?o.element:null,sa(e,n),pa(n,r,null,t),(r=n.memoizedState.element)===o)Xa(),n=ti(e,n,t);else{if((a=(o=n.stateNode).hydrate)&&(Fa=Xr(n.stateNode.containerInfo.firstChild),ja=n,a=za=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],Ga.push(a);for(t=Ia(n,null,r,t),n.child=t;t;)t.flags=-3&t.flags|1024,t=t.sibling}else Hl(e,n,r,t),Xa();n=n.child}return n;case 5:return Ra(n),null===e&&Va(n),r=n.type,o=n.pendingProps,a=null!==e?e.memoizedProps:null,i=o.children,qr(r,o)?i=null:null!==a&&qr(r,a)&&(n.flags|=16),Ul(e,n),Hl(e,n,i,t),n.child;case 6:return null===e&&Va(n),null;case 13:return Jl(e,n,t);case 4:return La(n,n.stateNode.containerInfo),r=n.pendingProps,null===e?n.child=Sa(n,null,r,t):Hl(e,n,r,t),n.child;case 11:return r=n.type,o=n.pendingProps,Ql(e,n,r,o=n.elementType===r?o:Jo(r,o),t);case 7:return Hl(e,n,n.pendingProps,t),n.child;case 8:case 12:return Hl(e,n,n.pendingProps.children,t),n.child;case 10:e:{r=n.type._context,o=n.pendingProps,i=n.memoizedProps,a=o.value;var c=n.type._context;if(uo(_o,c._currentValue),c._currentValue=a,null!==i)if(c=i.value,0==(a=sr(c,a)?0:0|(\"function\"==typeof r._calculateChangedBits?r._calculateChangedBits(c,a):1073741823))){if(i.children===o.children&&!go.current){n=ti(e,n,t);break e}}else for(null!==(c=n.child)&&(c.return=n);null!==c;){var s=c.dependencies;if(null!==s){i=c.child;for(var u=s.firstContext;null!==u;){if(u.context===r&&0!=(u.observedBits&a)){1===c.tag&&((u=ua(-1,t&-t)).tag=2,da(c,u)),c.lanes|=t,null!==(u=c.alternate)&&(u.lanes|=t),oa(c.return,t),s.lanes|=t;break}u=u.next}}else i=10===c.tag&&c.type===n.type?null:c.child;if(null!==i)i.return=c;else for(i=c;null!==i;){if(i===n){i=null;break}if(null!==(c=i.sibling)){c.return=i.return,i=c;break}i=i.return}c=i}Hl(e,n,o.children,t),n=n.child}return n;case 9:return o=n.type,r=(a=n.pendingProps).children,aa(n,t),r=r(o=la(o,a.unstable_observedBits)),n.flags|=1,Hl(e,n,r,t),n.child;case 14:return a=Jo(o=n.type,n.pendingProps),jl(e,n,o,a=Jo(o.type,a),r,t);case 15:return Fl(e,n,n.type,n.pendingProps,r,t);case 17:return r=n.type,o=n.pendingProps,o=n.elementType===r?o:Jo(r,o),null!==e&&(e.alternate=null,n.alternate=null,n.flags|=2),n.tag=1,mo(r)?(e=!0,Ao(n)):e=!1,aa(n,t),ya(n,r,o),Aa(n,r,o,t),Wl(null,n,r,!0,e,t);case 19:return ni(e,n,t);case 23:case 24:return zl(e,n,t)}throw Error(l(156,n.tag))},ns.prototype.render=function(e){Jc(e,this._internalRoot,null,null)},ns.prototype.unmount=function(){var e=this._internalRoot,n=e.containerInfo;Jc(null,e,null,(function(){n[$r]=null}))},en=function(e){13===e.tag&&(dc(e,4,sc()),es(e,4))},nn=function(e){13===e.tag&&(dc(e,67108864,sc()),es(e,67108864))},tn=function(e){if(13===e.tag){var n=sc(),t=uc(e);dc(e,t,n),es(e,t)}},rn=function(e,n){return n()},Se=function(e,n,t){switch(n){case\"input\":if(te(e,t),n=t.name,\"radio\"===t.type&&null!=n){for(t=e;t.parentNode;)t=t.parentNode;for(t=t.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+n)+'][type=\"radio\"]'),n=0;n<t.length;n++){var r=t[n];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(l(90));J(r),te(r,o)}}}break;case\"textarea\":se(e,t);break;case\"select\":null!=(n=t.value)&&le(e,!!t.multiple,n,!1)}},De=mc,Le=function(e,n,t,r,o){var a=Pi;Pi|=4;try{return Yo(98,e.bind(null,n,t,r,o))}finally{0===(Pi=a)&&(Vi(),Go())}},Me=function(){0==(49&Pi)&&(function(){if(null!==nc){var e=nc;nc=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,pc(e,qo())}))}Go()}(),Dc())},Re=function(e,n){var t=Pi;Pi|=2;try{return e(n)}finally{0===(Pi=t)&&(Vi(),Go())}};var as={Events:[to,ro,oo,Ne,Te,Dc,{current:!1}]},ls={findFiberByHostInstance:no,bundleType:0,version:\"17.0.2\",rendererPackageName:\"react-dom\"},is={bundleType:ls.bundleType,version:ls.version,rendererPackageName:ls.rendererPackageName,rendererConfig:ls.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:A.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=_e(e))?null:e.stateNode},findFiberByHostInstance:ls.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var cs=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!cs.isDisabled&&cs.supportsFiber)try{ko=cs.inject(is),Eo=cs}catch(he){}}n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=as,n.createPortal=os,n.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var n=e._reactInternals;if(void 0===n){if(\"function\"==typeof e.render)throw Error(l(188));throw Error(l(268,Object.keys(e)))}return null===(e=_e(n))?null:e.stateNode},n.flushSync=function(e,n){var t=Pi;if(0!=(48&t))return e(n);Pi|=1;try{if(e)return Yo(99,e.bind(null,n))}finally{Pi=t,Go()}},n.hydrate=function(e,n,t){if(!ts(n))throw Error(l(200));return rs(null,e,n,!0,t)},n.render=function(e,n,t){if(!ts(n))throw Error(l(200));return rs(null,e,n,!1,t)},n.unmountComponentAtNode=function(e){if(!ts(e))throw Error(l(40));return!!e._reactRootContainer&&(vc((function(){rs(null,null,e,!1,(function(){e._reactRootContainer=null,e[$r]=null}))})),!0)},n.unstable_batchedUpdates=mc,n.unstable_createPortal=function(e,n){return os(e,n,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},n.unstable_renderSubtreeIntoContainer=function(e,n,t,r){if(!ts(t))throw Error(l(200));if(null==e||void 0===e._reactInternals)throw Error(l(38));return rs(e,n,t,!1,r)},n.version=\"17.0.2\"},3935:(e,n,t)=>{!function e(){if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=t(4448)},2408:(e,n,t)=>{var r=t(7418),o=60103,a=60106;n.Fragment=60107,n.StrictMode=60108,n.Profiler=60114;var l=60109,i=60110,c=60112;n.Suspense=60113;var s=60115,u=60116;if(\"function\"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d(\"react.element\"),a=d(\"react.portal\"),n.Fragment=d(\"react.fragment\"),n.StrictMode=d(\"react.strict_mode\"),n.Profiler=d(\"react.profiler\"),l=d(\"react.provider\"),i=d(\"react.context\"),c=d(\"react.forward_ref\"),n.Suspense=d(\"react.suspense\"),s=d(\"react.memo\"),u=d(\"react.lazy\")}var f=\"function\"==typeof Symbol&&Symbol.iterator;function p(e){for(var n=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,t=1;t<arguments.length;t++)n+=\"&args[]=\"+encodeURIComponent(arguments[t]);return\"Minified React error #\"+e+\"; visit \"+n+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h={};function b(e,n,t){this.props=e,this.context=n,this.refs=h,this.updater=t||g}function m(){}function v(e,n,t){this.props=e,this.context=n,this.refs=h,this.updater=t||g}b.prototype.isReactComponent={},b.prototype.setState=function(e,n){if(\"object\"!=typeof e&&\"function\"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,n,\"setState\")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")},m.prototype=b.prototype;var y=v.prototype=new m;y.constructor=v,r(y,b.prototype),y.isPureReactComponent=!0;var w={current:null},A=Object.prototype.hasOwnProperty,x={key:!0,ref:!0,__self:!0,__source:!0};function k(e,n,t){var r,a={},l=null,i=null;if(null!=n)for(r in void 0!==n.ref&&(i=n.ref),void 0!==n.key&&(l=\"\"+n.key),n)A.call(n,r)&&!x.hasOwnProperty(r)&&(a[r]=n[r]);var c=arguments.length-2;if(1===c)a.children=t;else if(1<c){for(var s=Array(c),u=0;u<c;u++)s[u]=arguments[u+2];a.children=s}if(e&&e.defaultProps)for(r in c=e.defaultProps)void 0===a[r]&&(a[r]=c[r]);return{$$typeof:o,type:e,key:l,ref:i,props:a,_owner:w.current}}function E(e){return\"object\"==typeof e&&null!==e&&e.$$typeof===o}var C=/\\/+/g;function S(e,n){return\"object\"==typeof e&&null!==e&&null!=e.key?function(e){var n={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+e.replace(/[=:]/g,(function(e){return n[e]}))}(\"\"+e.key):n.toString(36)}function I(e,n,t,r,l){var i=typeof e;\"undefined\"!==i&&\"boolean\"!==i||(e=null);var c=!1;if(null===e)c=!0;else switch(i){case\"string\":case\"number\":c=!0;break;case\"object\":switch(e.$$typeof){case o:case a:c=!0}}if(c)return l=l(c=e),e=\"\"===r?\".\"+S(c,0):r,Array.isArray(l)?(t=\"\",null!=e&&(t=e.replace(C,\"$&/\")+\"/\"),I(l,n,t,\"\",(function(e){return e}))):null!=l&&(E(l)&&(l=function(e,n){return{$$typeof:o,type:e.type,key:n,ref:e.ref,props:e.props,_owner:e._owner}}(l,t+(!l.key||c&&c.key===l.key?\"\":(\"\"+l.key).replace(C,\"$&/\")+\"/\")+e)),n.push(l)),1;if(c=0,r=\"\"===r?\".\":r+\":\",Array.isArray(e))for(var s=0;s<e.length;s++){var u=r+S(i=e[s],s);c+=I(i,n,t,u,l)}else if(u=function(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=f&&e[f]||e[\"@@iterator\"])?e:null}(e),\"function\"==typeof u)for(e=u.call(e),s=0;!(i=e.next()).done;)c+=I(i=i.value,n,t,u=r+S(i,s++),l);else if(\"object\"===i)throw n=\"\"+e,Error(p(31,\"[object Object]\"===n?\"object with keys {\"+Object.keys(e).join(\", \")+\"}\":n));return c}function O(e,n,t){if(null==e)return e;var r=[],o=0;return I(e,r,\"\",\"\",(function(e){return n.call(t,e,o++)})),r}function P(e){if(-1===e._status){var n=e._result;n=n(),e._status=0,e._result=n,n.then((function(n){0===e._status&&(n=n.default,e._status=1,e._result=n)}),(function(n){0===e._status&&(e._status=2,e._result=n)}))}if(1===e._status)return e._result;throw e._result}var N={current:null};function T(){var e=N.current;if(null===e)throw Error(p(321));return e}var D={ReactCurrentDispatcher:N,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};n.Children={map:O,forEach:function(e,n,t){O(e,(function(){n.apply(this,arguments)}),t)},count:function(e){var n=0;return O(e,(function(){n++})),n},toArray:function(e){return O(e,(function(e){return e}))||[]},only:function(e){if(!E(e))throw Error(p(143));return e}},n.Component=b,n.PureComponent=v,n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=D,n.cloneElement=function(e,n,t){if(null==e)throw Error(p(267,e));var a=r({},e.props),l=e.key,i=e.ref,c=e._owner;if(null!=n){if(void 0!==n.ref&&(i=n.ref,c=w.current),void 0!==n.key&&(l=\"\"+n.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(u in n)A.call(n,u)&&!x.hasOwnProperty(u)&&(a[u]=void 0===n[u]&&void 0!==s?s[u]:n[u])}var u=arguments.length-2;if(1===u)a.children=t;else if(1<u){s=Array(u);for(var d=0;d<u;d++)s[d]=arguments[d+2];a.children=s}return{$$typeof:o,type:e.type,key:l,ref:i,props:a,_owner:c}},n.createContext=function(e,n){return void 0===n&&(n=null),(e={$$typeof:i,_calculateChangedBits:n,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:l,_context:e},e.Consumer=e},n.createElement=k,n.createFactory=function(e){var n=k.bind(null,e);return n.type=e,n},n.createRef=function(){return{current:null}},n.forwardRef=function(e){return{$$typeof:c,render:e}},n.isValidElement=E,n.lazy=function(e){return{$$typeof:u,_payload:{_status:-1,_result:e},_init:P}},n.memo=function(e,n){return{$$typeof:s,type:e,compare:void 0===n?null:n}},n.useCallback=function(e,n){return T().useCallback(e,n)},n.useContext=function(e,n){return T().useContext(e,n)},n.useDebugValue=function(){},n.useEffect=function(e,n){return T().useEffect(e,n)},n.useImperativeHandle=function(e,n,t){return T().useImperativeHandle(e,n,t)},n.useLayoutEffect=function(e,n){return T().useLayoutEffect(e,n)},n.useMemo=function(e,n){return T().useMemo(e,n)},n.useReducer=function(e,n,t){return T().useReducer(e,n,t)},n.useRef=function(e){return T().useRef(e)},n.useState=function(e){return T().useState(e)},n.version=\"17.0.2\"},7294:(e,n,t)=>{e.exports=t(2408)},53:(e,n)=>{var t,r,o,a;if(\"object\"==typeof performance&&\"function\"==typeof performance.now){var l=performance;n.unstable_now=function(){return l.now()}}else{var i=Date,c=i.now();n.unstable_now=function(){return i.now()-c}}if(\"undefined\"==typeof window||\"function\"!=typeof MessageChannel){var s=null,u=null,d=function(){if(null!==s)try{var e=n.unstable_now();s(!0,e),s=null}catch(e){throw setTimeout(d,0),e}};t=function(e){null!==s?setTimeout(t,0,e):(s=e,setTimeout(d,0))},r=function(e,n){u=setTimeout(e,n)},o=function(){clearTimeout(u)},n.unstable_shouldYield=function(){return!1},a=n.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if(\"undefined\"!=typeof console){var g=window.cancelAnimationFrame;\"function\"!=typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\"),\"function\"!=typeof g&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\")}var h=!1,b=null,m=-1,v=5,y=0;n.unstable_shouldYield=function(){return n.unstable_now()>=y},a=function(){},n.unstable_forceFrameRate=function(e){0>e||125<e?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):v=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,A=w.port2;w.port1.onmessage=function(){if(null!==b){var e=n.unstable_now();y=e+v;try{b(!0,e)?A.postMessage(null):(h=!1,b=null)}catch(e){throw A.postMessage(null),e}}else h=!1},t=function(e){b=e,h||(h=!0,A.postMessage(null))},r=function(e,t){m=f((function(){e(n.unstable_now())}),t)},o=function(){p(m),m=-1}}function x(e,n){var t=e.length;e.push(n);e:for(;;){var r=t-1>>>1,o=e[r];if(!(void 0!==o&&0<C(o,n)))break e;e[r]=n,e[t]=o,t=r}}function k(e){return void 0===(e=e[0])?null:e}function E(e){var n=e[0];if(void 0!==n){var t=e.pop();if(t!==n){e[0]=t;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,l=e[a],i=a+1,c=e[i];if(void 0!==l&&0>C(l,t))void 0!==c&&0>C(c,l)?(e[r]=c,e[i]=t,r=i):(e[r]=l,e[a]=t,r=a);else{if(!(void 0!==c&&0>C(c,t)))break e;e[r]=c,e[i]=t,r=i}}}return n}return null}function C(e,n){var t=e.sortIndex-n.sortIndex;return 0!==t?t:e.id-n.id}var S=[],I=[],O=1,P=null,N=3,T=!1,D=!1,L=!1;function M(e){for(var n=k(I);null!==n;){if(null===n.callback)E(I);else{if(!(n.startTime<=e))break;E(I),n.sortIndex=n.expirationTime,x(S,n)}n=k(I)}}function R(e){if(L=!1,M(e),!D)if(null!==k(S))D=!0,t(B);else{var n=k(I);null!==n&&r(R,n.startTime-e)}}function B(e,t){D=!1,L&&(L=!1,o()),T=!0;var a=N;try{for(M(t),P=k(S);null!==P&&(!(P.expirationTime>t)||e&&!n.unstable_shouldYield());){var l=P.callback;if(\"function\"==typeof l){P.callback=null,N=P.priorityLevel;var i=l(P.expirationTime<=t);t=n.unstable_now(),\"function\"==typeof i?P.callback=i:P===k(S)&&E(S),M(t)}else E(S);P=k(S)}if(null!==P)var c=!0;else{var s=k(I);null!==s&&r(R,s.startTime-t),c=!1}return c}finally{P=null,N=a,T=!1}}var H=a;n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(e){e.callback=null},n.unstable_continueExecution=function(){D||T||(D=!0,t(B))},n.unstable_getCurrentPriorityLevel=function(){return N},n.unstable_getFirstCallbackNode=function(){return k(S)},n.unstable_next=function(e){switch(N){case 1:case 2:case 3:var n=3;break;default:n=N}var t=N;N=n;try{return e()}finally{N=t}},n.unstable_pauseExecution=function(){},n.unstable_requestPaint=H,n.unstable_runWithPriority=function(e,n){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var t=N;N=e;try{return n()}finally{N=t}},n.unstable_scheduleCallback=function(e,a,l){var i=n.unstable_now();switch(l=\"object\"==typeof l&&null!==l&&\"number\"==typeof(l=l.delay)&&0<l?i+l:i,e){case 1:var c=-1;break;case 2:c=250;break;case 5:c=1073741823;break;case 4:c=1e4;break;default:c=5e3}return e={id:O++,callback:a,priorityLevel:e,startTime:l,expirationTime:c=l+c,sortIndex:-1},l>i?(e.sortIndex=l,x(I,e),null===k(S)&&e===k(I)&&(L?o():L=!0,r(R,l-i))):(e.sortIndex=c,x(S,e),D||T||(D=!0,t(B))),e},n.unstable_wrapCallback=function(e){var n=N;return function(){var t=N;N=n;try{return e.apply(this,arguments)}finally{N=t}}}},3840:(e,n,t)=>{e.exports=t(53)},3822:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var r=t(3379),o=t.n(r),a=t(7795),l=t.n(a),i=t(569),c=t.n(i),s=t(3565),u=t.n(s),d=t(9216),f=t.n(d),p=t(4589),g=t.n(p),h=t(2540),b={};b.styleTagTransform=g(),b.setAttributes=u(),b.insert=c().bind(null,\"head\"),b.domAPI=l(),b.insertStyleElement=f(),o()(h.Z,b);const m=h.Z&&h.Z.locals?h.Z.locals:void 0},6150:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var r=t(3379),o=t.n(r),a=t(7795),l=t.n(a),i=t(569),c=t.n(i),s=t(3565),u=t.n(s),d=t(9216),f=t.n(d),p=t(4589),g=t.n(p),h=t(7566),b={};b.styleTagTransform=g(),b.setAttributes=u(),b.insert=c().bind(null,\"head\"),b.domAPI=l(),b.insertStyleElement=f(),o()(h.Z,b);const m=h.Z&&h.Z.locals?h.Z.locals:void 0},7425:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var r=t(3379),o=t.n(r),a=t(7795),l=t.n(a),i=t(569),c=t.n(i),s=t(3565),u=t.n(s),d=t(9216),f=t.n(d),p=t(4589),g=t.n(p),h=t(3697),b={};b.styleTagTransform=g(),b.setAttributes=u(),b.insert=c().bind(null,\"head\"),b.domAPI=l(),b.insertStyleElement=f(),o()(h.Z,b);const m=h.Z&&h.Z.locals?h.Z.locals:void 0},3617:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var r=t(3379),o=t.n(r),a=t(7795),l=t.n(a),i=t(569),c=t.n(i),s=t(3565),u=t.n(s),d=t(9216),f=t.n(d),p=t(4589),g=t.n(p),h=t(8118),b={};b.styleTagTransform=g(),b.setAttributes=u(),b.insert=c().bind(null,\"head\"),b.domAPI=l(),b.insertStyleElement=f(),o()(h.Z,b);const m=h.Z&&h.Z.locals?h.Z.locals:void 0},4217:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var r=t(3379),o=t.n(r),a=t(7795),l=t.n(a),i=t(569),c=t.n(i),s=t(3565),u=t.n(s),d=t(9216),f=t.n(d),p=t(4589),g=t.n(p),h=t(74),b={};b.styleTagTransform=g(),b.setAttributes=u(),b.insert=c().bind(null,\"head\"),b.domAPI=l(),b.insertStyleElement=f(),o()(h.Z,b);const m=h.Z&&h.Z.locals?h.Z.locals:void 0},7298:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var r=t(3379),o=t.n(r),a=t(7795),l=t.n(a),i=t(569),c=t.n(i),s=t(3565),u=t.n(s),d=t(9216),f=t.n(d),p=t(4589),g=t.n(p),h=t(3510),b={};b.styleTagTransform=g(),b.setAttributes=u(),b.insert=c().bind(null,\"head\"),b.domAPI=l(),b.insertStyleElement=f(),o()(h.Z,b);const m=h.Z&&h.Z.locals?h.Z.locals:void 0},8405:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var r=t(3379),o=t.n(r),a=t(7795),l=t.n(a),i=t(569),c=t.n(i),s=t(3565),u=t.n(s),d=t(9216),f=t.n(d),p=t(4589),g=t.n(p),h=t(7557),b={};b.styleTagTransform=g(),b.setAttributes=u(),b.insert=c().bind(null,\"head\"),b.domAPI=l(),b.insertStyleElement=f(),o()(h.Z,b);const m=h.Z&&h.Z.locals?h.Z.locals:void 0},8798:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var r=t(3379),o=t.n(r),a=t(7795),l=t.n(a),i=t(569),c=t.n(i),s=t(3565),u=t.n(s),d=t(9216),f=t.n(d),p=t(4589),g=t.n(p),h=t(7302),b={};b.styleTagTransform=g(),b.setAttributes=u(),b.insert=c().bind(null,\"head\"),b.domAPI=l(),b.insertStyleElement=f(),o()(h.Z,b);const m=h.Z&&h.Z.locals?h.Z.locals:void 0},7421:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var r=t(3379),o=t.n(r),a=t(7795),l=t.n(a),i=t(569),c=t.n(i),s=t(3565),u=t.n(s),d=t(9216),f=t.n(d),p=t(4589),g=t.n(p),h=t(5664),b={};b.styleTagTransform=g(),b.setAttributes=u(),b.insert=c().bind(null,\"head\"),b.domAPI=l(),b.insertStyleElement=f(),o()(h.Z,b);const m=h.Z&&h.Z.locals?h.Z.locals:void 0},2296:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var r=t(3379),o=t.n(r),a=t(7795),l=t.n(a),i=t(569),c=t.n(i),s=t(3565),u=t.n(s),d=t(9216),f=t.n(d),p=t(4589),g=t.n(p),h=t(8710),b={};b.styleTagTransform=g(),b.setAttributes=u(),b.insert=c().bind(null,\"head\"),b.domAPI=l(),b.insertStyleElement=f(),o()(h.Z,b);const m=h.Z&&h.Z.locals?h.Z.locals:void 0},621:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var r=t(3379),o=t.n(r),a=t(7795),l=t.n(a),i=t(569),c=t.n(i),s=t(3565),u=t.n(s),d=t(9216),f=t.n(d),p=t(4589),g=t.n(p),h=t(191),b={};b.styleTagTransform=g(),b.setAttributes=u(),b.insert=c().bind(null,\"head\"),b.domAPI=l(),b.insertStyleElement=f(),o()(h.Z,b);const m=h.Z&&h.Z.locals?h.Z.locals:void 0},3921:(e,n,t)=>{t.r(n),t.d(n,{default:()=>m});var r=t(3379),o=t.n(r),a=t(7795),l=t.n(a),i=t(569),c=t.n(i),s=t(3565),u=t.n(s),d=t(9216),f=t.n(d),p=t(4589),g=t.n(p),h=t(2097),b={};b.styleTagTransform=g(),b.setAttributes=u(),b.insert=c().bind(null,\"head\"),b.domAPI=l(),b.insertStyleElement=f(),o()(h.Z,b);const m=h.Z&&h.Z.locals?h.Z.locals:void 0},3379:e=>{var n=[];function t(e){for(var t=-1,r=0;r<n.length;r++)if(n[r].identifier===e){t=r;break}return t}function r(e,r){for(var a={},l=[],i=0;i<e.length;i++){var c=e[i],s=r.base?c[0]+r.base:c[0],u=a[s]||0,d=\"\".concat(s,\" \").concat(u);a[s]=u+1;var f=t(d),p={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==f)n[f].references++,n[f].updater(p);else{var g=o(p,r);r.byIndex=i,n.splice(i,0,{identifier:d,updater:g,references:1})}l.push(d)}return l}function o(e,n){var t=n.domAPI(n);return t.update(e),function(n){if(n){if(n.css===e.css&&n.media===e.media&&n.sourceMap===e.sourceMap&&n.supports===e.supports&&n.layer===e.layer)return;t.update(e=n)}else t.remove()}}e.exports=function(e,o){var a=r(e=e||[],o=o||{});return function(e){e=e||[];for(var l=0;l<a.length;l++){var i=t(a[l]);n[i].references--}for(var c=r(e,o),s=0;s<a.length;s++){var u=t(a[s]);0===n[u].references&&(n[u].updater(),n.splice(u,1))}a=c}}},569:e=>{var n={};e.exports=function(e,t){var r=function(e){if(void 0===n[e]){var t=document.querySelector(e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(e){t=null}n[e]=t}return n[e]}(e);if(!r)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");r.appendChild(t)}},9216:e=>{e.exports=function(e){var n=document.createElement(\"style\");return e.setAttributes(n,e.attributes),e.insert(n,e.options),n}},3565:(e,n,t)=>{e.exports=function(e){var n=t.nc;n&&e.setAttribute(\"nonce\",n)}},7795:e=>{e.exports=function(e){var n=e.insertStyleElement(e);return{update:function(t){!function(e,n,t){var r=\"\";t.supports&&(r+=\"@supports (\".concat(t.supports,\") {\")),t.media&&(r+=\"@media \".concat(t.media,\" {\"));var o=void 0!==t.layer;o&&(r+=\"@layer\".concat(t.layer.length>0?\" \".concat(t.layer):\"\",\" {\")),r+=t.css,o&&(r+=\"}\"),t.media&&(r+=\"}\"),t.supports&&(r+=\"}\");var a=t.sourceMap;a&&\"undefined\"!=typeof btoa&&(r+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),\" */\")),n.styleTagTransform(r,e,n.options)}(n,e,t)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)}}}},4589:e=>{e.exports=function(e,n){if(n.styleSheet)n.styleSheet.cssText=e;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(e))}}},3600:e=>{e.exports=JSON.parse('{\"0\":65533,\"128\":8364,\"130\":8218,\"131\":402,\"132\":8222,\"133\":8230,\"134\":8224,\"135\":8225,\"136\":710,\"137\":8240,\"138\":352,\"139\":8249,\"140\":338,\"142\":381,\"145\":8216,\"146\":8217,\"147\":8220,\"148\":8221,\"149\":8226,\"150\":8211,\"151\":8212,\"152\":732,\"153\":8482,\"154\":353,\"155\":8250,\"156\":339,\"158\":382,\"159\":376}')},9323:e=>{e.exports=JSON.parse('{\"Aacute\":\"Á\",\"aacute\":\"á\",\"Abreve\":\"Ă\",\"abreve\":\"ă\",\"ac\":\"∾\",\"acd\":\"∿\",\"acE\":\"∾̳\",\"Acirc\":\"Â\",\"acirc\":\"â\",\"acute\":\"´\",\"Acy\":\"А\",\"acy\":\"а\",\"AElig\":\"Æ\",\"aelig\":\"æ\",\"af\":\"⁡\",\"Afr\":\"𝔄\",\"afr\":\"𝔞\",\"Agrave\":\"À\",\"agrave\":\"à\",\"alefsym\":\"ℵ\",\"aleph\":\"ℵ\",\"Alpha\":\"Α\",\"alpha\":\"α\",\"Amacr\":\"Ā\",\"amacr\":\"ā\",\"amalg\":\"⨿\",\"amp\":\"&\",\"AMP\":\"&\",\"andand\":\"⩕\",\"And\":\"⩓\",\"and\":\"∧\",\"andd\":\"⩜\",\"andslope\":\"⩘\",\"andv\":\"⩚\",\"ang\":\"∠\",\"ange\":\"⦤\",\"angle\":\"∠\",\"angmsdaa\":\"⦨\",\"angmsdab\":\"⦩\",\"angmsdac\":\"⦪\",\"angmsdad\":\"⦫\",\"angmsdae\":\"⦬\",\"angmsdaf\":\"⦭\",\"angmsdag\":\"⦮\",\"angmsdah\":\"⦯\",\"angmsd\":\"∡\",\"angrt\":\"∟\",\"angrtvb\":\"⊾\",\"angrtvbd\":\"⦝\",\"angsph\":\"∢\",\"angst\":\"Å\",\"angzarr\":\"⍼\",\"Aogon\":\"Ą\",\"aogon\":\"ą\",\"Aopf\":\"𝔸\",\"aopf\":\"𝕒\",\"apacir\":\"⩯\",\"ap\":\"≈\",\"apE\":\"⩰\",\"ape\":\"≊\",\"apid\":\"≋\",\"apos\":\"\\'\",\"ApplyFunction\":\"⁡\",\"approx\":\"≈\",\"approxeq\":\"≊\",\"Aring\":\"Å\",\"aring\":\"å\",\"Ascr\":\"𝒜\",\"ascr\":\"𝒶\",\"Assign\":\"≔\",\"ast\":\"*\",\"asymp\":\"≈\",\"asympeq\":\"≍\",\"Atilde\":\"Ã\",\"atilde\":\"ã\",\"Auml\":\"Ä\",\"auml\":\"ä\",\"awconint\":\"∳\",\"awint\":\"⨑\",\"backcong\":\"≌\",\"backepsilon\":\"϶\",\"backprime\":\"‵\",\"backsim\":\"∽\",\"backsimeq\":\"⋍\",\"Backslash\":\"∖\",\"Barv\":\"⫧\",\"barvee\":\"⊽\",\"barwed\":\"⌅\",\"Barwed\":\"⌆\",\"barwedge\":\"⌅\",\"bbrk\":\"⎵\",\"bbrktbrk\":\"⎶\",\"bcong\":\"≌\",\"Bcy\":\"Б\",\"bcy\":\"б\",\"bdquo\":\"„\",\"becaus\":\"∵\",\"because\":\"∵\",\"Because\":\"∵\",\"bemptyv\":\"⦰\",\"bepsi\":\"϶\",\"bernou\":\"ℬ\",\"Bernoullis\":\"ℬ\",\"Beta\":\"Β\",\"beta\":\"β\",\"beth\":\"ℶ\",\"between\":\"≬\",\"Bfr\":\"𝔅\",\"bfr\":\"𝔟\",\"bigcap\":\"⋂\",\"bigcirc\":\"◯\",\"bigcup\":\"⋃\",\"bigodot\":\"⨀\",\"bigoplus\":\"⨁\",\"bigotimes\":\"⨂\",\"bigsqcup\":\"⨆\",\"bigstar\":\"★\",\"bigtriangledown\":\"▽\",\"bigtriangleup\":\"△\",\"biguplus\":\"⨄\",\"bigvee\":\"⋁\",\"bigwedge\":\"⋀\",\"bkarow\":\"⤍\",\"blacklozenge\":\"⧫\",\"blacksquare\":\"▪\",\"blacktriangle\":\"▴\",\"blacktriangledown\":\"▾\",\"blacktriangleleft\":\"◂\",\"blacktriangleright\":\"▸\",\"blank\":\"␣\",\"blk12\":\"▒\",\"blk14\":\"░\",\"blk34\":\"▓\",\"block\":\"█\",\"bne\":\"=⃥\",\"bnequiv\":\"≡⃥\",\"bNot\":\"⫭\",\"bnot\":\"⌐\",\"Bopf\":\"𝔹\",\"bopf\":\"𝕓\",\"bot\":\"⊥\",\"bottom\":\"⊥\",\"bowtie\":\"⋈\",\"boxbox\":\"⧉\",\"boxdl\":\"┐\",\"boxdL\":\"╕\",\"boxDl\":\"╖\",\"boxDL\":\"╗\",\"boxdr\":\"┌\",\"boxdR\":\"╒\",\"boxDr\":\"╓\",\"boxDR\":\"╔\",\"boxh\":\"─\",\"boxH\":\"═\",\"boxhd\":\"┬\",\"boxHd\":\"╤\",\"boxhD\":\"╥\",\"boxHD\":\"╦\",\"boxhu\":\"┴\",\"boxHu\":\"╧\",\"boxhU\":\"╨\",\"boxHU\":\"╩\",\"boxminus\":\"⊟\",\"boxplus\":\"⊞\",\"boxtimes\":\"⊠\",\"boxul\":\"┘\",\"boxuL\":\"╛\",\"boxUl\":\"╜\",\"boxUL\":\"╝\",\"boxur\":\"└\",\"boxuR\":\"╘\",\"boxUr\":\"╙\",\"boxUR\":\"╚\",\"boxv\":\"│\",\"boxV\":\"║\",\"boxvh\":\"┼\",\"boxvH\":\"╪\",\"boxVh\":\"╫\",\"boxVH\":\"╬\",\"boxvl\":\"┤\",\"boxvL\":\"╡\",\"boxVl\":\"╢\",\"boxVL\":\"╣\",\"boxvr\":\"├\",\"boxvR\":\"╞\",\"boxVr\":\"╟\",\"boxVR\":\"╠\",\"bprime\":\"‵\",\"breve\":\"˘\",\"Breve\":\"˘\",\"brvbar\":\"¦\",\"bscr\":\"𝒷\",\"Bscr\":\"ℬ\",\"bsemi\":\"⁏\",\"bsim\":\"∽\",\"bsime\":\"⋍\",\"bsolb\":\"⧅\",\"bsol\":\"\\\\\\\\\",\"bsolhsub\":\"⟈\",\"bull\":\"•\",\"bullet\":\"•\",\"bump\":\"≎\",\"bumpE\":\"⪮\",\"bumpe\":\"≏\",\"Bumpeq\":\"≎\",\"bumpeq\":\"≏\",\"Cacute\":\"Ć\",\"cacute\":\"ć\",\"capand\":\"⩄\",\"capbrcup\":\"⩉\",\"capcap\":\"⩋\",\"cap\":\"∩\",\"Cap\":\"⋒\",\"capcup\":\"⩇\",\"capdot\":\"⩀\",\"CapitalDifferentialD\":\"ⅅ\",\"caps\":\"∩︀\",\"caret\":\"⁁\",\"caron\":\"ˇ\",\"Cayleys\":\"ℭ\",\"ccaps\":\"⩍\",\"Ccaron\":\"Č\",\"ccaron\":\"č\",\"Ccedil\":\"Ç\",\"ccedil\":\"ç\",\"Ccirc\":\"Ĉ\",\"ccirc\":\"ĉ\",\"Cconint\":\"∰\",\"ccups\":\"⩌\",\"ccupssm\":\"⩐\",\"Cdot\":\"Ċ\",\"cdot\":\"ċ\",\"cedil\":\"¸\",\"Cedilla\":\"¸\",\"cemptyv\":\"⦲\",\"cent\":\"¢\",\"centerdot\":\"·\",\"CenterDot\":\"·\",\"cfr\":\"𝔠\",\"Cfr\":\"ℭ\",\"CHcy\":\"Ч\",\"chcy\":\"ч\",\"check\":\"✓\",\"checkmark\":\"✓\",\"Chi\":\"Χ\",\"chi\":\"χ\",\"circ\":\"ˆ\",\"circeq\":\"≗\",\"circlearrowleft\":\"↺\",\"circlearrowright\":\"↻\",\"circledast\":\"⊛\",\"circledcirc\":\"⊚\",\"circleddash\":\"⊝\",\"CircleDot\":\"⊙\",\"circledR\":\"®\",\"circledS\":\"Ⓢ\",\"CircleMinus\":\"⊖\",\"CirclePlus\":\"⊕\",\"CircleTimes\":\"⊗\",\"cir\":\"○\",\"cirE\":\"⧃\",\"cire\":\"≗\",\"cirfnint\":\"⨐\",\"cirmid\":\"⫯\",\"cirscir\":\"⧂\",\"ClockwiseContourIntegral\":\"∲\",\"CloseCurlyDoubleQuote\":\"”\",\"CloseCurlyQuote\":\"’\",\"clubs\":\"♣\",\"clubsuit\":\"♣\",\"colon\":\":\",\"Colon\":\"∷\",\"Colone\":\"⩴\",\"colone\":\"≔\",\"coloneq\":\"≔\",\"comma\":\",\",\"commat\":\"@\",\"comp\":\"∁\",\"compfn\":\"∘\",\"complement\":\"∁\",\"complexes\":\"ℂ\",\"cong\":\"≅\",\"congdot\":\"⩭\",\"Congruent\":\"≡\",\"conint\":\"∮\",\"Conint\":\"∯\",\"ContourIntegral\":\"∮\",\"copf\":\"𝕔\",\"Copf\":\"ℂ\",\"coprod\":\"∐\",\"Coproduct\":\"∐\",\"copy\":\"©\",\"COPY\":\"©\",\"copysr\":\"℗\",\"CounterClockwiseContourIntegral\":\"∳\",\"crarr\":\"↵\",\"cross\":\"✗\",\"Cross\":\"⨯\",\"Cscr\":\"𝒞\",\"cscr\":\"𝒸\",\"csub\":\"⫏\",\"csube\":\"⫑\",\"csup\":\"⫐\",\"csupe\":\"⫒\",\"ctdot\":\"⋯\",\"cudarrl\":\"⤸\",\"cudarrr\":\"⤵\",\"cuepr\":\"⋞\",\"cuesc\":\"⋟\",\"cularr\":\"↶\",\"cularrp\":\"⤽\",\"cupbrcap\":\"⩈\",\"cupcap\":\"⩆\",\"CupCap\":\"≍\",\"cup\":\"∪\",\"Cup\":\"⋓\",\"cupcup\":\"⩊\",\"cupdot\":\"⊍\",\"cupor\":\"⩅\",\"cups\":\"∪︀\",\"curarr\":\"↷\",\"curarrm\":\"⤼\",\"curlyeqprec\":\"⋞\",\"curlyeqsucc\":\"⋟\",\"curlyvee\":\"⋎\",\"curlywedge\":\"⋏\",\"curren\":\"¤\",\"curvearrowleft\":\"↶\",\"curvearrowright\":\"↷\",\"cuvee\":\"⋎\",\"cuwed\":\"⋏\",\"cwconint\":\"∲\",\"cwint\":\"∱\",\"cylcty\":\"⌭\",\"dagger\":\"†\",\"Dagger\":\"‡\",\"daleth\":\"ℸ\",\"darr\":\"↓\",\"Darr\":\"↡\",\"dArr\":\"⇓\",\"dash\":\"‐\",\"Dashv\":\"⫤\",\"dashv\":\"⊣\",\"dbkarow\":\"⤏\",\"dblac\":\"˝\",\"Dcaron\":\"Ď\",\"dcaron\":\"ď\",\"Dcy\":\"Д\",\"dcy\":\"д\",\"ddagger\":\"‡\",\"ddarr\":\"⇊\",\"DD\":\"ⅅ\",\"dd\":\"ⅆ\",\"DDotrahd\":\"⤑\",\"ddotseq\":\"⩷\",\"deg\":\"°\",\"Del\":\"∇\",\"Delta\":\"Δ\",\"delta\":\"δ\",\"demptyv\":\"⦱\",\"dfisht\":\"⥿\",\"Dfr\":\"𝔇\",\"dfr\":\"𝔡\",\"dHar\":\"⥥\",\"dharl\":\"⇃\",\"dharr\":\"⇂\",\"DiacriticalAcute\":\"´\",\"DiacriticalDot\":\"˙\",\"DiacriticalDoubleAcute\":\"˝\",\"DiacriticalGrave\":\"`\",\"DiacriticalTilde\":\"˜\",\"diam\":\"⋄\",\"diamond\":\"⋄\",\"Diamond\":\"⋄\",\"diamondsuit\":\"♦\",\"diams\":\"♦\",\"die\":\"¨\",\"DifferentialD\":\"ⅆ\",\"digamma\":\"ϝ\",\"disin\":\"⋲\",\"div\":\"÷\",\"divide\":\"÷\",\"divideontimes\":\"⋇\",\"divonx\":\"⋇\",\"DJcy\":\"Ђ\",\"djcy\":\"ђ\",\"dlcorn\":\"⌞\",\"dlcrop\":\"⌍\",\"dollar\":\"$\",\"Dopf\":\"𝔻\",\"dopf\":\"𝕕\",\"Dot\":\"¨\",\"dot\":\"˙\",\"DotDot\":\"⃜\",\"doteq\":\"≐\",\"doteqdot\":\"≑\",\"DotEqual\":\"≐\",\"dotminus\":\"∸\",\"dotplus\":\"∔\",\"dotsquare\":\"⊡\",\"doublebarwedge\":\"⌆\",\"DoubleContourIntegral\":\"∯\",\"DoubleDot\":\"¨\",\"DoubleDownArrow\":\"⇓\",\"DoubleLeftArrow\":\"⇐\",\"DoubleLeftRightArrow\":\"⇔\",\"DoubleLeftTee\":\"⫤\",\"DoubleLongLeftArrow\":\"⟸\",\"DoubleLongLeftRightArrow\":\"⟺\",\"DoubleLongRightArrow\":\"⟹\",\"DoubleRightArrow\":\"⇒\",\"DoubleRightTee\":\"⊨\",\"DoubleUpArrow\":\"⇑\",\"DoubleUpDownArrow\":\"⇕\",\"DoubleVerticalBar\":\"∥\",\"DownArrowBar\":\"⤓\",\"downarrow\":\"↓\",\"DownArrow\":\"↓\",\"Downarrow\":\"⇓\",\"DownArrowUpArrow\":\"⇵\",\"DownBreve\":\"̑\",\"downdownarrows\":\"⇊\",\"downharpoonleft\":\"⇃\",\"downharpoonright\":\"⇂\",\"DownLeftRightVector\":\"⥐\",\"DownLeftTeeVector\":\"⥞\",\"DownLeftVectorBar\":\"⥖\",\"DownLeftVector\":\"↽\",\"DownRightTeeVector\":\"⥟\",\"DownRightVectorBar\":\"⥗\",\"DownRightVector\":\"⇁\",\"DownTeeArrow\":\"↧\",\"DownTee\":\"⊤\",\"drbkarow\":\"⤐\",\"drcorn\":\"⌟\",\"drcrop\":\"⌌\",\"Dscr\":\"𝒟\",\"dscr\":\"𝒹\",\"DScy\":\"Ѕ\",\"dscy\":\"ѕ\",\"dsol\":\"⧶\",\"Dstrok\":\"Đ\",\"dstrok\":\"đ\",\"dtdot\":\"⋱\",\"dtri\":\"▿\",\"dtrif\":\"▾\",\"duarr\":\"⇵\",\"duhar\":\"⥯\",\"dwangle\":\"⦦\",\"DZcy\":\"Џ\",\"dzcy\":\"џ\",\"dzigrarr\":\"⟿\",\"Eacute\":\"É\",\"eacute\":\"é\",\"easter\":\"⩮\",\"Ecaron\":\"Ě\",\"ecaron\":\"ě\",\"Ecirc\":\"Ê\",\"ecirc\":\"ê\",\"ecir\":\"≖\",\"ecolon\":\"≕\",\"Ecy\":\"Э\",\"ecy\":\"э\",\"eDDot\":\"⩷\",\"Edot\":\"Ė\",\"edot\":\"ė\",\"eDot\":\"≑\",\"ee\":\"ⅇ\",\"efDot\":\"≒\",\"Efr\":\"𝔈\",\"efr\":\"𝔢\",\"eg\":\"⪚\",\"Egrave\":\"È\",\"egrave\":\"è\",\"egs\":\"⪖\",\"egsdot\":\"⪘\",\"el\":\"⪙\",\"Element\":\"∈\",\"elinters\":\"⏧\",\"ell\":\"ℓ\",\"els\":\"⪕\",\"elsdot\":\"⪗\",\"Emacr\":\"Ē\",\"emacr\":\"ē\",\"empty\":\"∅\",\"emptyset\":\"∅\",\"EmptySmallSquare\":\"◻\",\"emptyv\":\"∅\",\"EmptyVerySmallSquare\":\"▫\",\"emsp13\":\" \",\"emsp14\":\" \",\"emsp\":\" \",\"ENG\":\"Ŋ\",\"eng\":\"ŋ\",\"ensp\":\" \",\"Eogon\":\"Ę\",\"eogon\":\"ę\",\"Eopf\":\"𝔼\",\"eopf\":\"𝕖\",\"epar\":\"⋕\",\"eparsl\":\"⧣\",\"eplus\":\"⩱\",\"epsi\":\"ε\",\"Epsilon\":\"Ε\",\"epsilon\":\"ε\",\"epsiv\":\"ϵ\",\"eqcirc\":\"≖\",\"eqcolon\":\"≕\",\"eqsim\":\"≂\",\"eqslantgtr\":\"⪖\",\"eqslantless\":\"⪕\",\"Equal\":\"⩵\",\"equals\":\"=\",\"EqualTilde\":\"≂\",\"equest\":\"≟\",\"Equilibrium\":\"⇌\",\"equiv\":\"≡\",\"equivDD\":\"⩸\",\"eqvparsl\":\"⧥\",\"erarr\":\"⥱\",\"erDot\":\"≓\",\"escr\":\"ℯ\",\"Escr\":\"ℰ\",\"esdot\":\"≐\",\"Esim\":\"⩳\",\"esim\":\"≂\",\"Eta\":\"Η\",\"eta\":\"η\",\"ETH\":\"Ð\",\"eth\":\"ð\",\"Euml\":\"Ë\",\"euml\":\"ë\",\"euro\":\"€\",\"excl\":\"!\",\"exist\":\"∃\",\"Exists\":\"∃\",\"expectation\":\"ℰ\",\"exponentiale\":\"ⅇ\",\"ExponentialE\":\"ⅇ\",\"fallingdotseq\":\"≒\",\"Fcy\":\"Ф\",\"fcy\":\"ф\",\"female\":\"♀\",\"ffilig\":\"ﬃ\",\"fflig\":\"ﬀ\",\"ffllig\":\"ﬄ\",\"Ffr\":\"𝔉\",\"ffr\":\"𝔣\",\"filig\":\"ﬁ\",\"FilledSmallSquare\":\"◼\",\"FilledVerySmallSquare\":\"▪\",\"fjlig\":\"fj\",\"flat\":\"♭\",\"fllig\":\"ﬂ\",\"fltns\":\"▱\",\"fnof\":\"ƒ\",\"Fopf\":\"𝔽\",\"fopf\":\"𝕗\",\"forall\":\"∀\",\"ForAll\":\"∀\",\"fork\":\"⋔\",\"forkv\":\"⫙\",\"Fouriertrf\":\"ℱ\",\"fpartint\":\"⨍\",\"frac12\":\"½\",\"frac13\":\"⅓\",\"frac14\":\"¼\",\"frac15\":\"⅕\",\"frac16\":\"⅙\",\"frac18\":\"⅛\",\"frac23\":\"⅔\",\"frac25\":\"⅖\",\"frac34\":\"¾\",\"frac35\":\"⅗\",\"frac38\":\"⅜\",\"frac45\":\"⅘\",\"frac56\":\"⅚\",\"frac58\":\"⅝\",\"frac78\":\"⅞\",\"frasl\":\"⁄\",\"frown\":\"⌢\",\"fscr\":\"𝒻\",\"Fscr\":\"ℱ\",\"gacute\":\"ǵ\",\"Gamma\":\"Γ\",\"gamma\":\"γ\",\"Gammad\":\"Ϝ\",\"gammad\":\"ϝ\",\"gap\":\"⪆\",\"Gbreve\":\"Ğ\",\"gbreve\":\"ğ\",\"Gcedil\":\"Ģ\",\"Gcirc\":\"Ĝ\",\"gcirc\":\"ĝ\",\"Gcy\":\"Г\",\"gcy\":\"г\",\"Gdot\":\"Ġ\",\"gdot\":\"ġ\",\"ge\":\"≥\",\"gE\":\"≧\",\"gEl\":\"⪌\",\"gel\":\"⋛\",\"geq\":\"≥\",\"geqq\":\"≧\",\"geqslant\":\"⩾\",\"gescc\":\"⪩\",\"ges\":\"⩾\",\"gesdot\":\"⪀\",\"gesdoto\":\"⪂\",\"gesdotol\":\"⪄\",\"gesl\":\"⋛︀\",\"gesles\":\"⪔\",\"Gfr\":\"𝔊\",\"gfr\":\"𝔤\",\"gg\":\"≫\",\"Gg\":\"⋙\",\"ggg\":\"⋙\",\"gimel\":\"ℷ\",\"GJcy\":\"Ѓ\",\"gjcy\":\"ѓ\",\"gla\":\"⪥\",\"gl\":\"≷\",\"glE\":\"⪒\",\"glj\":\"⪤\",\"gnap\":\"⪊\",\"gnapprox\":\"⪊\",\"gne\":\"⪈\",\"gnE\":\"≩\",\"gneq\":\"⪈\",\"gneqq\":\"≩\",\"gnsim\":\"⋧\",\"Gopf\":\"𝔾\",\"gopf\":\"𝕘\",\"grave\":\"`\",\"GreaterEqual\":\"≥\",\"GreaterEqualLess\":\"⋛\",\"GreaterFullEqual\":\"≧\",\"GreaterGreater\":\"⪢\",\"GreaterLess\":\"≷\",\"GreaterSlantEqual\":\"⩾\",\"GreaterTilde\":\"≳\",\"Gscr\":\"𝒢\",\"gscr\":\"ℊ\",\"gsim\":\"≳\",\"gsime\":\"⪎\",\"gsiml\":\"⪐\",\"gtcc\":\"⪧\",\"gtcir\":\"⩺\",\"gt\":\">\",\"GT\":\">\",\"Gt\":\"≫\",\"gtdot\":\"⋗\",\"gtlPar\":\"⦕\",\"gtquest\":\"⩼\",\"gtrapprox\":\"⪆\",\"gtrarr\":\"⥸\",\"gtrdot\":\"⋗\",\"gtreqless\":\"⋛\",\"gtreqqless\":\"⪌\",\"gtrless\":\"≷\",\"gtrsim\":\"≳\",\"gvertneqq\":\"≩︀\",\"gvnE\":\"≩︀\",\"Hacek\":\"ˇ\",\"hairsp\":\" \",\"half\":\"½\",\"hamilt\":\"ℋ\",\"HARDcy\":\"Ъ\",\"hardcy\":\"ъ\",\"harrcir\":\"⥈\",\"harr\":\"↔\",\"hArr\":\"⇔\",\"harrw\":\"↭\",\"Hat\":\"^\",\"hbar\":\"ℏ\",\"Hcirc\":\"Ĥ\",\"hcirc\":\"ĥ\",\"hearts\":\"♥\",\"heartsuit\":\"♥\",\"hellip\":\"…\",\"hercon\":\"⊹\",\"hfr\":\"𝔥\",\"Hfr\":\"ℌ\",\"HilbertSpace\":\"ℋ\",\"hksearow\":\"⤥\",\"hkswarow\":\"⤦\",\"hoarr\":\"⇿\",\"homtht\":\"∻\",\"hookleftarrow\":\"↩\",\"hookrightarrow\":\"↪\",\"hopf\":\"𝕙\",\"Hopf\":\"ℍ\",\"horbar\":\"―\",\"HorizontalLine\":\"─\",\"hscr\":\"𝒽\",\"Hscr\":\"ℋ\",\"hslash\":\"ℏ\",\"Hstrok\":\"Ħ\",\"hstrok\":\"ħ\",\"HumpDownHump\":\"≎\",\"HumpEqual\":\"≏\",\"hybull\":\"⁃\",\"hyphen\":\"‐\",\"Iacute\":\"Í\",\"iacute\":\"í\",\"ic\":\"⁣\",\"Icirc\":\"Î\",\"icirc\":\"î\",\"Icy\":\"И\",\"icy\":\"и\",\"Idot\":\"İ\",\"IEcy\":\"Е\",\"iecy\":\"е\",\"iexcl\":\"¡\",\"iff\":\"⇔\",\"ifr\":\"𝔦\",\"Ifr\":\"ℑ\",\"Igrave\":\"Ì\",\"igrave\":\"ì\",\"ii\":\"ⅈ\",\"iiiint\":\"⨌\",\"iiint\":\"∭\",\"iinfin\":\"⧜\",\"iiota\":\"℩\",\"IJlig\":\"Ĳ\",\"ijlig\":\"ĳ\",\"Imacr\":\"Ī\",\"imacr\":\"ī\",\"image\":\"ℑ\",\"ImaginaryI\":\"ⅈ\",\"imagline\":\"ℐ\",\"imagpart\":\"ℑ\",\"imath\":\"ı\",\"Im\":\"ℑ\",\"imof\":\"⊷\",\"imped\":\"Ƶ\",\"Implies\":\"⇒\",\"incare\":\"℅\",\"in\":\"∈\",\"infin\":\"∞\",\"infintie\":\"⧝\",\"inodot\":\"ı\",\"intcal\":\"⊺\",\"int\":\"∫\",\"Int\":\"∬\",\"integers\":\"ℤ\",\"Integral\":\"∫\",\"intercal\":\"⊺\",\"Intersection\":\"⋂\",\"intlarhk\":\"⨗\",\"intprod\":\"⨼\",\"InvisibleComma\":\"⁣\",\"InvisibleTimes\":\"⁢\",\"IOcy\":\"Ё\",\"iocy\":\"ё\",\"Iogon\":\"Į\",\"iogon\":\"į\",\"Iopf\":\"𝕀\",\"iopf\":\"𝕚\",\"Iota\":\"Ι\",\"iota\":\"ι\",\"iprod\":\"⨼\",\"iquest\":\"¿\",\"iscr\":\"𝒾\",\"Iscr\":\"ℐ\",\"isin\":\"∈\",\"isindot\":\"⋵\",\"isinE\":\"⋹\",\"isins\":\"⋴\",\"isinsv\":\"⋳\",\"isinv\":\"∈\",\"it\":\"⁢\",\"Itilde\":\"Ĩ\",\"itilde\":\"ĩ\",\"Iukcy\":\"І\",\"iukcy\":\"і\",\"Iuml\":\"Ï\",\"iuml\":\"ï\",\"Jcirc\":\"Ĵ\",\"jcirc\":\"ĵ\",\"Jcy\":\"Й\",\"jcy\":\"й\",\"Jfr\":\"𝔍\",\"jfr\":\"𝔧\",\"jmath\":\"ȷ\",\"Jopf\":\"𝕁\",\"jopf\":\"𝕛\",\"Jscr\":\"𝒥\",\"jscr\":\"𝒿\",\"Jsercy\":\"Ј\",\"jsercy\":\"ј\",\"Jukcy\":\"Є\",\"jukcy\":\"є\",\"Kappa\":\"Κ\",\"kappa\":\"κ\",\"kappav\":\"ϰ\",\"Kcedil\":\"Ķ\",\"kcedil\":\"ķ\",\"Kcy\":\"К\",\"kcy\":\"к\",\"Kfr\":\"𝔎\",\"kfr\":\"𝔨\",\"kgreen\":\"ĸ\",\"KHcy\":\"Х\",\"khcy\":\"х\",\"KJcy\":\"Ќ\",\"kjcy\":\"ќ\",\"Kopf\":\"𝕂\",\"kopf\":\"𝕜\",\"Kscr\":\"𝒦\",\"kscr\":\"𝓀\",\"lAarr\":\"⇚\",\"Lacute\":\"Ĺ\",\"lacute\":\"ĺ\",\"laemptyv\":\"⦴\",\"lagran\":\"ℒ\",\"Lambda\":\"Λ\",\"lambda\":\"λ\",\"lang\":\"⟨\",\"Lang\":\"⟪\",\"langd\":\"⦑\",\"langle\":\"⟨\",\"lap\":\"⪅\",\"Laplacetrf\":\"ℒ\",\"laquo\":\"«\",\"larrb\":\"⇤\",\"larrbfs\":\"⤟\",\"larr\":\"←\",\"Larr\":\"↞\",\"lArr\":\"⇐\",\"larrfs\":\"⤝\",\"larrhk\":\"↩\",\"larrlp\":\"↫\",\"larrpl\":\"⤹\",\"larrsim\":\"⥳\",\"larrtl\":\"↢\",\"latail\":\"⤙\",\"lAtail\":\"⤛\",\"lat\":\"⪫\",\"late\":\"⪭\",\"lates\":\"⪭︀\",\"lbarr\":\"⤌\",\"lBarr\":\"⤎\",\"lbbrk\":\"❲\",\"lbrace\":\"{\",\"lbrack\":\"[\",\"lbrke\":\"⦋\",\"lbrksld\":\"⦏\",\"lbrkslu\":\"⦍\",\"Lcaron\":\"Ľ\",\"lcaron\":\"ľ\",\"Lcedil\":\"Ļ\",\"lcedil\":\"ļ\",\"lceil\":\"⌈\",\"lcub\":\"{\",\"Lcy\":\"Л\",\"lcy\":\"л\",\"ldca\":\"⤶\",\"ldquo\":\"“\",\"ldquor\":\"„\",\"ldrdhar\":\"⥧\",\"ldrushar\":\"⥋\",\"ldsh\":\"↲\",\"le\":\"≤\",\"lE\":\"≦\",\"LeftAngleBracket\":\"⟨\",\"LeftArrowBar\":\"⇤\",\"leftarrow\":\"←\",\"LeftArrow\":\"←\",\"Leftarrow\":\"⇐\",\"LeftArrowRightArrow\":\"⇆\",\"leftarrowtail\":\"↢\",\"LeftCeiling\":\"⌈\",\"LeftDoubleBracket\":\"⟦\",\"LeftDownTeeVector\":\"⥡\",\"LeftDownVectorBar\":\"⥙\",\"LeftDownVector\":\"⇃\",\"LeftFloor\":\"⌊\",\"leftharpoondown\":\"↽\",\"leftharpoonup\":\"↼\",\"leftleftarrows\":\"⇇\",\"leftrightarrow\":\"↔\",\"LeftRightArrow\":\"↔\",\"Leftrightarrow\":\"⇔\",\"leftrightarrows\":\"⇆\",\"leftrightharpoons\":\"⇋\",\"leftrightsquigarrow\":\"↭\",\"LeftRightVector\":\"⥎\",\"LeftTeeArrow\":\"↤\",\"LeftTee\":\"⊣\",\"LeftTeeVector\":\"⥚\",\"leftthreetimes\":\"⋋\",\"LeftTriangleBar\":\"⧏\",\"LeftTriangle\":\"⊲\",\"LeftTriangleEqual\":\"⊴\",\"LeftUpDownVector\":\"⥑\",\"LeftUpTeeVector\":\"⥠\",\"LeftUpVectorBar\":\"⥘\",\"LeftUpVector\":\"↿\",\"LeftVectorBar\":\"⥒\",\"LeftVector\":\"↼\",\"lEg\":\"⪋\",\"leg\":\"⋚\",\"leq\":\"≤\",\"leqq\":\"≦\",\"leqslant\":\"⩽\",\"lescc\":\"⪨\",\"les\":\"⩽\",\"lesdot\":\"⩿\",\"lesdoto\":\"⪁\",\"lesdotor\":\"⪃\",\"lesg\":\"⋚︀\",\"lesges\":\"⪓\",\"lessapprox\":\"⪅\",\"lessdot\":\"⋖\",\"lesseqgtr\":\"⋚\",\"lesseqqgtr\":\"⪋\",\"LessEqualGreater\":\"⋚\",\"LessFullEqual\":\"≦\",\"LessGreater\":\"≶\",\"lessgtr\":\"≶\",\"LessLess\":\"⪡\",\"lesssim\":\"≲\",\"LessSlantEqual\":\"⩽\",\"LessTilde\":\"≲\",\"lfisht\":\"⥼\",\"lfloor\":\"⌊\",\"Lfr\":\"𝔏\",\"lfr\":\"𝔩\",\"lg\":\"≶\",\"lgE\":\"⪑\",\"lHar\":\"⥢\",\"lhard\":\"↽\",\"lharu\":\"↼\",\"lharul\":\"⥪\",\"lhblk\":\"▄\",\"LJcy\":\"Љ\",\"ljcy\":\"љ\",\"llarr\":\"⇇\",\"ll\":\"≪\",\"Ll\":\"⋘\",\"llcorner\":\"⌞\",\"Lleftarrow\":\"⇚\",\"llhard\":\"⥫\",\"lltri\":\"◺\",\"Lmidot\":\"Ŀ\",\"lmidot\":\"ŀ\",\"lmoustache\":\"⎰\",\"lmoust\":\"⎰\",\"lnap\":\"⪉\",\"lnapprox\":\"⪉\",\"lne\":\"⪇\",\"lnE\":\"≨\",\"lneq\":\"⪇\",\"lneqq\":\"≨\",\"lnsim\":\"⋦\",\"loang\":\"⟬\",\"loarr\":\"⇽\",\"lobrk\":\"⟦\",\"longleftarrow\":\"⟵\",\"LongLeftArrow\":\"⟵\",\"Longleftarrow\":\"⟸\",\"longleftrightarrow\":\"⟷\",\"LongLeftRightArrow\":\"⟷\",\"Longleftrightarrow\":\"⟺\",\"longmapsto\":\"⟼\",\"longrightarrow\":\"⟶\",\"LongRightArrow\":\"⟶\",\"Longrightarrow\":\"⟹\",\"looparrowleft\":\"↫\",\"looparrowright\":\"↬\",\"lopar\":\"⦅\",\"Lopf\":\"𝕃\",\"lopf\":\"𝕝\",\"loplus\":\"⨭\",\"lotimes\":\"⨴\",\"lowast\":\"∗\",\"lowbar\":\"_\",\"LowerLeftArrow\":\"↙\",\"LowerRightArrow\":\"↘\",\"loz\":\"◊\",\"lozenge\":\"◊\",\"lozf\":\"⧫\",\"lpar\":\"(\",\"lparlt\":\"⦓\",\"lrarr\":\"⇆\",\"lrcorner\":\"⌟\",\"lrhar\":\"⇋\",\"lrhard\":\"⥭\",\"lrm\":\"‎\",\"lrtri\":\"⊿\",\"lsaquo\":\"‹\",\"lscr\":\"𝓁\",\"Lscr\":\"ℒ\",\"lsh\":\"↰\",\"Lsh\":\"↰\",\"lsim\":\"≲\",\"lsime\":\"⪍\",\"lsimg\":\"⪏\",\"lsqb\":\"[\",\"lsquo\":\"‘\",\"lsquor\":\"‚\",\"Lstrok\":\"Ł\",\"lstrok\":\"ł\",\"ltcc\":\"⪦\",\"ltcir\":\"⩹\",\"lt\":\"<\",\"LT\":\"<\",\"Lt\":\"≪\",\"ltdot\":\"⋖\",\"lthree\":\"⋋\",\"ltimes\":\"⋉\",\"ltlarr\":\"⥶\",\"ltquest\":\"⩻\",\"ltri\":\"◃\",\"ltrie\":\"⊴\",\"ltrif\":\"◂\",\"ltrPar\":\"⦖\",\"lurdshar\":\"⥊\",\"luruhar\":\"⥦\",\"lvertneqq\":\"≨︀\",\"lvnE\":\"≨︀\",\"macr\":\"¯\",\"male\":\"♂\",\"malt\":\"✠\",\"maltese\":\"✠\",\"Map\":\"⤅\",\"map\":\"↦\",\"mapsto\":\"↦\",\"mapstodown\":\"↧\",\"mapstoleft\":\"↤\",\"mapstoup\":\"↥\",\"marker\":\"▮\",\"mcomma\":\"⨩\",\"Mcy\":\"М\",\"mcy\":\"м\",\"mdash\":\"—\",\"mDDot\":\"∺\",\"measuredangle\":\"∡\",\"MediumSpace\":\" \",\"Mellintrf\":\"ℳ\",\"Mfr\":\"𝔐\",\"mfr\":\"𝔪\",\"mho\":\"℧\",\"micro\":\"µ\",\"midast\":\"*\",\"midcir\":\"⫰\",\"mid\":\"∣\",\"middot\":\"·\",\"minusb\":\"⊟\",\"minus\":\"−\",\"minusd\":\"∸\",\"minusdu\":\"⨪\",\"MinusPlus\":\"∓\",\"mlcp\":\"⫛\",\"mldr\":\"…\",\"mnplus\":\"∓\",\"models\":\"⊧\",\"Mopf\":\"𝕄\",\"mopf\":\"𝕞\",\"mp\":\"∓\",\"mscr\":\"𝓂\",\"Mscr\":\"ℳ\",\"mstpos\":\"∾\",\"Mu\":\"Μ\",\"mu\":\"μ\",\"multimap\":\"⊸\",\"mumap\":\"⊸\",\"nabla\":\"∇\",\"Nacute\":\"Ń\",\"nacute\":\"ń\",\"nang\":\"∠⃒\",\"nap\":\"≉\",\"napE\":\"⩰̸\",\"napid\":\"≋̸\",\"napos\":\"ŉ\",\"napprox\":\"≉\",\"natural\":\"♮\",\"naturals\":\"ℕ\",\"natur\":\"♮\",\"nbsp\":\" \",\"nbump\":\"≎̸\",\"nbumpe\":\"≏̸\",\"ncap\":\"⩃\",\"Ncaron\":\"Ň\",\"ncaron\":\"ň\",\"Ncedil\":\"Ņ\",\"ncedil\":\"ņ\",\"ncong\":\"≇\",\"ncongdot\":\"⩭̸\",\"ncup\":\"⩂\",\"Ncy\":\"Н\",\"ncy\":\"н\",\"ndash\":\"–\",\"nearhk\":\"⤤\",\"nearr\":\"↗\",\"neArr\":\"⇗\",\"nearrow\":\"↗\",\"ne\":\"≠\",\"nedot\":\"≐̸\",\"NegativeMediumSpace\":\"​\",\"NegativeThickSpace\":\"​\",\"NegativeThinSpace\":\"​\",\"NegativeVeryThinSpace\":\"​\",\"nequiv\":\"≢\",\"nesear\":\"⤨\",\"nesim\":\"≂̸\",\"NestedGreaterGreater\":\"≫\",\"NestedLessLess\":\"≪\",\"NewLine\":\"\\\\n\",\"nexist\":\"∄\",\"nexists\":\"∄\",\"Nfr\":\"𝔑\",\"nfr\":\"𝔫\",\"ngE\":\"≧̸\",\"nge\":\"≱\",\"ngeq\":\"≱\",\"ngeqq\":\"≧̸\",\"ngeqslant\":\"⩾̸\",\"nges\":\"⩾̸\",\"nGg\":\"⋙̸\",\"ngsim\":\"≵\",\"nGt\":\"≫⃒\",\"ngt\":\"≯\",\"ngtr\":\"≯\",\"nGtv\":\"≫̸\",\"nharr\":\"↮\",\"nhArr\":\"⇎\",\"nhpar\":\"⫲\",\"ni\":\"∋\",\"nis\":\"⋼\",\"nisd\":\"⋺\",\"niv\":\"∋\",\"NJcy\":\"Њ\",\"njcy\":\"њ\",\"nlarr\":\"↚\",\"nlArr\":\"⇍\",\"nldr\":\"‥\",\"nlE\":\"≦̸\",\"nle\":\"≰\",\"nleftarrow\":\"↚\",\"nLeftarrow\":\"⇍\",\"nleftrightarrow\":\"↮\",\"nLeftrightarrow\":\"⇎\",\"nleq\":\"≰\",\"nleqq\":\"≦̸\",\"nleqslant\":\"⩽̸\",\"nles\":\"⩽̸\",\"nless\":\"≮\",\"nLl\":\"⋘̸\",\"nlsim\":\"≴\",\"nLt\":\"≪⃒\",\"nlt\":\"≮\",\"nltri\":\"⋪\",\"nltrie\":\"⋬\",\"nLtv\":\"≪̸\",\"nmid\":\"∤\",\"NoBreak\":\"⁠\",\"NonBreakingSpace\":\" \",\"nopf\":\"𝕟\",\"Nopf\":\"ℕ\",\"Not\":\"⫬\",\"not\":\"¬\",\"NotCongruent\":\"≢\",\"NotCupCap\":\"≭\",\"NotDoubleVerticalBar\":\"∦\",\"NotElement\":\"∉\",\"NotEqual\":\"≠\",\"NotEqualTilde\":\"≂̸\",\"NotExists\":\"∄\",\"NotGreater\":\"≯\",\"NotGreaterEqual\":\"≱\",\"NotGreaterFullEqual\":\"≧̸\",\"NotGreaterGreater\":\"≫̸\",\"NotGreaterLess\":\"≹\",\"NotGreaterSlantEqual\":\"⩾̸\",\"NotGreaterTilde\":\"≵\",\"NotHumpDownHump\":\"≎̸\",\"NotHumpEqual\":\"≏̸\",\"notin\":\"∉\",\"notindot\":\"⋵̸\",\"notinE\":\"⋹̸\",\"notinva\":\"∉\",\"notinvb\":\"⋷\",\"notinvc\":\"⋶\",\"NotLeftTriangleBar\":\"⧏̸\",\"NotLeftTriangle\":\"⋪\",\"NotLeftTriangleEqual\":\"⋬\",\"NotLess\":\"≮\",\"NotLessEqual\":\"≰\",\"NotLessGreater\":\"≸\",\"NotLessLess\":\"≪̸\",\"NotLessSlantEqual\":\"⩽̸\",\"NotLessTilde\":\"≴\",\"NotNestedGreaterGreater\":\"⪢̸\",\"NotNestedLessLess\":\"⪡̸\",\"notni\":\"∌\",\"notniva\":\"∌\",\"notnivb\":\"⋾\",\"notnivc\":\"⋽\",\"NotPrecedes\":\"⊀\",\"NotPrecedesEqual\":\"⪯̸\",\"NotPrecedesSlantEqual\":\"⋠\",\"NotReverseElement\":\"∌\",\"NotRightTriangleBar\":\"⧐̸\",\"NotRightTriangle\":\"⋫\",\"NotRightTriangleEqual\":\"⋭\",\"NotSquareSubset\":\"⊏̸\",\"NotSquareSubsetEqual\":\"⋢\",\"NotSquareSuperset\":\"⊐̸\",\"NotSquareSupersetEqual\":\"⋣\",\"NotSubset\":\"⊂⃒\",\"NotSubsetEqual\":\"⊈\",\"NotSucceeds\":\"⊁\",\"NotSucceedsEqual\":\"⪰̸\",\"NotSucceedsSlantEqual\":\"⋡\",\"NotSucceedsTilde\":\"≿̸\",\"NotSuperset\":\"⊃⃒\",\"NotSupersetEqual\":\"⊉\",\"NotTilde\":\"≁\",\"NotTildeEqual\":\"≄\",\"NotTildeFullEqual\":\"≇\",\"NotTildeTilde\":\"≉\",\"NotVerticalBar\":\"∤\",\"nparallel\":\"∦\",\"npar\":\"∦\",\"nparsl\":\"⫽⃥\",\"npart\":\"∂̸\",\"npolint\":\"⨔\",\"npr\":\"⊀\",\"nprcue\":\"⋠\",\"nprec\":\"⊀\",\"npreceq\":\"⪯̸\",\"npre\":\"⪯̸\",\"nrarrc\":\"⤳̸\",\"nrarr\":\"↛\",\"nrArr\":\"⇏\",\"nrarrw\":\"↝̸\",\"nrightarrow\":\"↛\",\"nRightarrow\":\"⇏\",\"nrtri\":\"⋫\",\"nrtrie\":\"⋭\",\"nsc\":\"⊁\",\"nsccue\":\"⋡\",\"nsce\":\"⪰̸\",\"Nscr\":\"𝒩\",\"nscr\":\"𝓃\",\"nshortmid\":\"∤\",\"nshortparallel\":\"∦\",\"nsim\":\"≁\",\"nsime\":\"≄\",\"nsimeq\":\"≄\",\"nsmid\":\"∤\",\"nspar\":\"∦\",\"nsqsube\":\"⋢\",\"nsqsupe\":\"⋣\",\"nsub\":\"⊄\",\"nsubE\":\"⫅̸\",\"nsube\":\"⊈\",\"nsubset\":\"⊂⃒\",\"nsubseteq\":\"⊈\",\"nsubseteqq\":\"⫅̸\",\"nsucc\":\"⊁\",\"nsucceq\":\"⪰̸\",\"nsup\":\"⊅\",\"nsupE\":\"⫆̸\",\"nsupe\":\"⊉\",\"nsupset\":\"⊃⃒\",\"nsupseteq\":\"⊉\",\"nsupseteqq\":\"⫆̸\",\"ntgl\":\"≹\",\"Ntilde\":\"Ñ\",\"ntilde\":\"ñ\",\"ntlg\":\"≸\",\"ntriangleleft\":\"⋪\",\"ntrianglelefteq\":\"⋬\",\"ntriangleright\":\"⋫\",\"ntrianglerighteq\":\"⋭\",\"Nu\":\"Ν\",\"nu\":\"ν\",\"num\":\"#\",\"numero\":\"№\",\"numsp\":\" \",\"nvap\":\"≍⃒\",\"nvdash\":\"⊬\",\"nvDash\":\"⊭\",\"nVdash\":\"⊮\",\"nVDash\":\"⊯\",\"nvge\":\"≥⃒\",\"nvgt\":\">⃒\",\"nvHarr\":\"⤄\",\"nvinfin\":\"⧞\",\"nvlArr\":\"⤂\",\"nvle\":\"≤⃒\",\"nvlt\":\"<⃒\",\"nvltrie\":\"⊴⃒\",\"nvrArr\":\"⤃\",\"nvrtrie\":\"⊵⃒\",\"nvsim\":\"∼⃒\",\"nwarhk\":\"⤣\",\"nwarr\":\"↖\",\"nwArr\":\"⇖\",\"nwarrow\":\"↖\",\"nwnear\":\"⤧\",\"Oacute\":\"Ó\",\"oacute\":\"ó\",\"oast\":\"⊛\",\"Ocirc\":\"Ô\",\"ocirc\":\"ô\",\"ocir\":\"⊚\",\"Ocy\":\"О\",\"ocy\":\"о\",\"odash\":\"⊝\",\"Odblac\":\"Ő\",\"odblac\":\"ő\",\"odiv\":\"⨸\",\"odot\":\"⊙\",\"odsold\":\"⦼\",\"OElig\":\"Œ\",\"oelig\":\"œ\",\"ofcir\":\"⦿\",\"Ofr\":\"𝔒\",\"ofr\":\"𝔬\",\"ogon\":\"˛\",\"Ograve\":\"Ò\",\"ograve\":\"ò\",\"ogt\":\"⧁\",\"ohbar\":\"⦵\",\"ohm\":\"Ω\",\"oint\":\"∮\",\"olarr\":\"↺\",\"olcir\":\"⦾\",\"olcross\":\"⦻\",\"oline\":\"‾\",\"olt\":\"⧀\",\"Omacr\":\"Ō\",\"omacr\":\"ō\",\"Omega\":\"Ω\",\"omega\":\"ω\",\"Omicron\":\"Ο\",\"omicron\":\"ο\",\"omid\":\"⦶\",\"ominus\":\"⊖\",\"Oopf\":\"𝕆\",\"oopf\":\"𝕠\",\"opar\":\"⦷\",\"OpenCurlyDoubleQuote\":\"“\",\"OpenCurlyQuote\":\"‘\",\"operp\":\"⦹\",\"oplus\":\"⊕\",\"orarr\":\"↻\",\"Or\":\"⩔\",\"or\":\"∨\",\"ord\":\"⩝\",\"order\":\"ℴ\",\"orderof\":\"ℴ\",\"ordf\":\"ª\",\"ordm\":\"º\",\"origof\":\"⊶\",\"oror\":\"⩖\",\"orslope\":\"⩗\",\"orv\":\"⩛\",\"oS\":\"Ⓢ\",\"Oscr\":\"𝒪\",\"oscr\":\"ℴ\",\"Oslash\":\"Ø\",\"oslash\":\"ø\",\"osol\":\"⊘\",\"Otilde\":\"Õ\",\"otilde\":\"õ\",\"otimesas\":\"⨶\",\"Otimes\":\"⨷\",\"otimes\":\"⊗\",\"Ouml\":\"Ö\",\"ouml\":\"ö\",\"ovbar\":\"⌽\",\"OverBar\":\"‾\",\"OverBrace\":\"⏞\",\"OverBracket\":\"⎴\",\"OverParenthesis\":\"⏜\",\"para\":\"¶\",\"parallel\":\"∥\",\"par\":\"∥\",\"parsim\":\"⫳\",\"parsl\":\"⫽\",\"part\":\"∂\",\"PartialD\":\"∂\",\"Pcy\":\"П\",\"pcy\":\"п\",\"percnt\":\"%\",\"period\":\".\",\"permil\":\"‰\",\"perp\":\"⊥\",\"pertenk\":\"‱\",\"Pfr\":\"𝔓\",\"pfr\":\"𝔭\",\"Phi\":\"Φ\",\"phi\":\"φ\",\"phiv\":\"ϕ\",\"phmmat\":\"ℳ\",\"phone\":\"☎\",\"Pi\":\"Π\",\"pi\":\"π\",\"pitchfork\":\"⋔\",\"piv\":\"ϖ\",\"planck\":\"ℏ\",\"planckh\":\"ℎ\",\"plankv\":\"ℏ\",\"plusacir\":\"⨣\",\"plusb\":\"⊞\",\"pluscir\":\"⨢\",\"plus\":\"+\",\"plusdo\":\"∔\",\"plusdu\":\"⨥\",\"pluse\":\"⩲\",\"PlusMinus\":\"±\",\"plusmn\":\"±\",\"plussim\":\"⨦\",\"plustwo\":\"⨧\",\"pm\":\"±\",\"Poincareplane\":\"ℌ\",\"pointint\":\"⨕\",\"popf\":\"𝕡\",\"Popf\":\"ℙ\",\"pound\":\"£\",\"prap\":\"⪷\",\"Pr\":\"⪻\",\"pr\":\"≺\",\"prcue\":\"≼\",\"precapprox\":\"⪷\",\"prec\":\"≺\",\"preccurlyeq\":\"≼\",\"Precedes\":\"≺\",\"PrecedesEqual\":\"⪯\",\"PrecedesSlantEqual\":\"≼\",\"PrecedesTilde\":\"≾\",\"preceq\":\"⪯\",\"precnapprox\":\"⪹\",\"precneqq\":\"⪵\",\"precnsim\":\"⋨\",\"pre\":\"⪯\",\"prE\":\"⪳\",\"precsim\":\"≾\",\"prime\":\"′\",\"Prime\":\"″\",\"primes\":\"ℙ\",\"prnap\":\"⪹\",\"prnE\":\"⪵\",\"prnsim\":\"⋨\",\"prod\":\"∏\",\"Product\":\"∏\",\"profalar\":\"⌮\",\"profline\":\"⌒\",\"profsurf\":\"⌓\",\"prop\":\"∝\",\"Proportional\":\"∝\",\"Proportion\":\"∷\",\"propto\":\"∝\",\"prsim\":\"≾\",\"prurel\":\"⊰\",\"Pscr\":\"𝒫\",\"pscr\":\"𝓅\",\"Psi\":\"Ψ\",\"psi\":\"ψ\",\"puncsp\":\" \",\"Qfr\":\"𝔔\",\"qfr\":\"𝔮\",\"qint\":\"⨌\",\"qopf\":\"𝕢\",\"Qopf\":\"ℚ\",\"qprime\":\"⁗\",\"Qscr\":\"𝒬\",\"qscr\":\"𝓆\",\"quaternions\":\"ℍ\",\"quatint\":\"⨖\",\"quest\":\"?\",\"questeq\":\"≟\",\"quot\":\"\\\\\"\",\"QUOT\":\"\\\\\"\",\"rAarr\":\"⇛\",\"race\":\"∽̱\",\"Racute\":\"Ŕ\",\"racute\":\"ŕ\",\"radic\":\"√\",\"raemptyv\":\"⦳\",\"rang\":\"⟩\",\"Rang\":\"⟫\",\"rangd\":\"⦒\",\"range\":\"⦥\",\"rangle\":\"⟩\",\"raquo\":\"»\",\"rarrap\":\"⥵\",\"rarrb\":\"⇥\",\"rarrbfs\":\"⤠\",\"rarrc\":\"⤳\",\"rarr\":\"→\",\"Rarr\":\"↠\",\"rArr\":\"⇒\",\"rarrfs\":\"⤞\",\"rarrhk\":\"↪\",\"rarrlp\":\"↬\",\"rarrpl\":\"⥅\",\"rarrsim\":\"⥴\",\"Rarrtl\":\"⤖\",\"rarrtl\":\"↣\",\"rarrw\":\"↝\",\"ratail\":\"⤚\",\"rAtail\":\"⤜\",\"ratio\":\"∶\",\"rationals\":\"ℚ\",\"rbarr\":\"⤍\",\"rBarr\":\"⤏\",\"RBarr\":\"⤐\",\"rbbrk\":\"❳\",\"rbrace\":\"}\",\"rbrack\":\"]\",\"rbrke\":\"⦌\",\"rbrksld\":\"⦎\",\"rbrkslu\":\"⦐\",\"Rcaron\":\"Ř\",\"rcaron\":\"ř\",\"Rcedil\":\"Ŗ\",\"rcedil\":\"ŗ\",\"rceil\":\"⌉\",\"rcub\":\"}\",\"Rcy\":\"Р\",\"rcy\":\"р\",\"rdca\":\"⤷\",\"rdldhar\":\"⥩\",\"rdquo\":\"”\",\"rdquor\":\"”\",\"rdsh\":\"↳\",\"real\":\"ℜ\",\"realine\":\"ℛ\",\"realpart\":\"ℜ\",\"reals\":\"ℝ\",\"Re\":\"ℜ\",\"rect\":\"▭\",\"reg\":\"®\",\"REG\":\"®\",\"ReverseElement\":\"∋\",\"ReverseEquilibrium\":\"⇋\",\"ReverseUpEquilibrium\":\"⥯\",\"rfisht\":\"⥽\",\"rfloor\":\"⌋\",\"rfr\":\"𝔯\",\"Rfr\":\"ℜ\",\"rHar\":\"⥤\",\"rhard\":\"⇁\",\"rharu\":\"⇀\",\"rharul\":\"⥬\",\"Rho\":\"Ρ\",\"rho\":\"ρ\",\"rhov\":\"ϱ\",\"RightAngleBracket\":\"⟩\",\"RightArrowBar\":\"⇥\",\"rightarrow\":\"→\",\"RightArrow\":\"→\",\"Rightarrow\":\"⇒\",\"RightArrowLeftArrow\":\"⇄\",\"rightarrowtail\":\"↣\",\"RightCeiling\":\"⌉\",\"RightDoubleBracket\":\"⟧\",\"RightDownTeeVector\":\"⥝\",\"RightDownVectorBar\":\"⥕\",\"RightDownVector\":\"⇂\",\"RightFloor\":\"⌋\",\"rightharpoondown\":\"⇁\",\"rightharpoonup\":\"⇀\",\"rightleftarrows\":\"⇄\",\"rightleftharpoons\":\"⇌\",\"rightrightarrows\":\"⇉\",\"rightsquigarrow\":\"↝\",\"RightTeeArrow\":\"↦\",\"RightTee\":\"⊢\",\"RightTeeVector\":\"⥛\",\"rightthreetimes\":\"⋌\",\"RightTriangleBar\":\"⧐\",\"RightTriangle\":\"⊳\",\"RightTriangleEqual\":\"⊵\",\"RightUpDownVector\":\"⥏\",\"RightUpTeeVector\":\"⥜\",\"RightUpVectorBar\":\"⥔\",\"RightUpVector\":\"↾\",\"RightVectorBar\":\"⥓\",\"RightVector\":\"⇀\",\"ring\":\"˚\",\"risingdotseq\":\"≓\",\"rlarr\":\"⇄\",\"rlhar\":\"⇌\",\"rlm\":\"‏\",\"rmoustache\":\"⎱\",\"rmoust\":\"⎱\",\"rnmid\":\"⫮\",\"roang\":\"⟭\",\"roarr\":\"⇾\",\"robrk\":\"⟧\",\"ropar\":\"⦆\",\"ropf\":\"𝕣\",\"Ropf\":\"ℝ\",\"roplus\":\"⨮\",\"rotimes\":\"⨵\",\"RoundImplies\":\"⥰\",\"rpar\":\")\",\"rpargt\":\"⦔\",\"rppolint\":\"⨒\",\"rrarr\":\"⇉\",\"Rrightarrow\":\"⇛\",\"rsaquo\":\"›\",\"rscr\":\"𝓇\",\"Rscr\":\"ℛ\",\"rsh\":\"↱\",\"Rsh\":\"↱\",\"rsqb\":\"]\",\"rsquo\":\"’\",\"rsquor\":\"’\",\"rthree\":\"⋌\",\"rtimes\":\"⋊\",\"rtri\":\"▹\",\"rtrie\":\"⊵\",\"rtrif\":\"▸\",\"rtriltri\":\"⧎\",\"RuleDelayed\":\"⧴\",\"ruluhar\":\"⥨\",\"rx\":\"℞\",\"Sacute\":\"Ś\",\"sacute\":\"ś\",\"sbquo\":\"‚\",\"scap\":\"⪸\",\"Scaron\":\"Š\",\"scaron\":\"š\",\"Sc\":\"⪼\",\"sc\":\"≻\",\"sccue\":\"≽\",\"sce\":\"⪰\",\"scE\":\"⪴\",\"Scedil\":\"Ş\",\"scedil\":\"ş\",\"Scirc\":\"Ŝ\",\"scirc\":\"ŝ\",\"scnap\":\"⪺\",\"scnE\":\"⪶\",\"scnsim\":\"⋩\",\"scpolint\":\"⨓\",\"scsim\":\"≿\",\"Scy\":\"С\",\"scy\":\"с\",\"sdotb\":\"⊡\",\"sdot\":\"⋅\",\"sdote\":\"⩦\",\"searhk\":\"⤥\",\"searr\":\"↘\",\"seArr\":\"⇘\",\"searrow\":\"↘\",\"sect\":\"§\",\"semi\":\";\",\"seswar\":\"⤩\",\"setminus\":\"∖\",\"setmn\":\"∖\",\"sext\":\"✶\",\"Sfr\":\"𝔖\",\"sfr\":\"𝔰\",\"sfrown\":\"⌢\",\"sharp\":\"♯\",\"SHCHcy\":\"Щ\",\"shchcy\":\"щ\",\"SHcy\":\"Ш\",\"shcy\":\"ш\",\"ShortDownArrow\":\"↓\",\"ShortLeftArrow\":\"←\",\"shortmid\":\"∣\",\"shortparallel\":\"∥\",\"ShortRightArrow\":\"→\",\"ShortUpArrow\":\"↑\",\"shy\":\"­\",\"Sigma\":\"Σ\",\"sigma\":\"σ\",\"sigmaf\":\"ς\",\"sigmav\":\"ς\",\"sim\":\"∼\",\"simdot\":\"⩪\",\"sime\":\"≃\",\"simeq\":\"≃\",\"simg\":\"⪞\",\"simgE\":\"⪠\",\"siml\":\"⪝\",\"simlE\":\"⪟\",\"simne\":\"≆\",\"simplus\":\"⨤\",\"simrarr\":\"⥲\",\"slarr\":\"←\",\"SmallCircle\":\"∘\",\"smallsetminus\":\"∖\",\"smashp\":\"⨳\",\"smeparsl\":\"⧤\",\"smid\":\"∣\",\"smile\":\"⌣\",\"smt\":\"⪪\",\"smte\":\"⪬\",\"smtes\":\"⪬︀\",\"SOFTcy\":\"Ь\",\"softcy\":\"ь\",\"solbar\":\"⌿\",\"solb\":\"⧄\",\"sol\":\"/\",\"Sopf\":\"𝕊\",\"sopf\":\"𝕤\",\"spades\":\"♠\",\"spadesuit\":\"♠\",\"spar\":\"∥\",\"sqcap\":\"⊓\",\"sqcaps\":\"⊓︀\",\"sqcup\":\"⊔\",\"sqcups\":\"⊔︀\",\"Sqrt\":\"√\",\"sqsub\":\"⊏\",\"sqsube\":\"⊑\",\"sqsubset\":\"⊏\",\"sqsubseteq\":\"⊑\",\"sqsup\":\"⊐\",\"sqsupe\":\"⊒\",\"sqsupset\":\"⊐\",\"sqsupseteq\":\"⊒\",\"square\":\"□\",\"Square\":\"□\",\"SquareIntersection\":\"⊓\",\"SquareSubset\":\"⊏\",\"SquareSubsetEqual\":\"⊑\",\"SquareSuperset\":\"⊐\",\"SquareSupersetEqual\":\"⊒\",\"SquareUnion\":\"⊔\",\"squarf\":\"▪\",\"squ\":\"□\",\"squf\":\"▪\",\"srarr\":\"→\",\"Sscr\":\"𝒮\",\"sscr\":\"𝓈\",\"ssetmn\":\"∖\",\"ssmile\":\"⌣\",\"sstarf\":\"⋆\",\"Star\":\"⋆\",\"star\":\"☆\",\"starf\":\"★\",\"straightepsilon\":\"ϵ\",\"straightphi\":\"ϕ\",\"strns\":\"¯\",\"sub\":\"⊂\",\"Sub\":\"⋐\",\"subdot\":\"⪽\",\"subE\":\"⫅\",\"sube\":\"⊆\",\"subedot\":\"⫃\",\"submult\":\"⫁\",\"subnE\":\"⫋\",\"subne\":\"⊊\",\"subplus\":\"⪿\",\"subrarr\":\"⥹\",\"subset\":\"⊂\",\"Subset\":\"⋐\",\"subseteq\":\"⊆\",\"subseteqq\":\"⫅\",\"SubsetEqual\":\"⊆\",\"subsetneq\":\"⊊\",\"subsetneqq\":\"⫋\",\"subsim\":\"⫇\",\"subsub\":\"⫕\",\"subsup\":\"⫓\",\"succapprox\":\"⪸\",\"succ\":\"≻\",\"succcurlyeq\":\"≽\",\"Succeeds\":\"≻\",\"SucceedsEqual\":\"⪰\",\"SucceedsSlantEqual\":\"≽\",\"SucceedsTilde\":\"≿\",\"succeq\":\"⪰\",\"succnapprox\":\"⪺\",\"succneqq\":\"⪶\",\"succnsim\":\"⋩\",\"succsim\":\"≿\",\"SuchThat\":\"∋\",\"sum\":\"∑\",\"Sum\":\"∑\",\"sung\":\"♪\",\"sup1\":\"¹\",\"sup2\":\"²\",\"sup3\":\"³\",\"sup\":\"⊃\",\"Sup\":\"⋑\",\"supdot\":\"⪾\",\"supdsub\":\"⫘\",\"supE\":\"⫆\",\"supe\":\"⊇\",\"supedot\":\"⫄\",\"Superset\":\"⊃\",\"SupersetEqual\":\"⊇\",\"suphsol\":\"⟉\",\"suphsub\":\"⫗\",\"suplarr\":\"⥻\",\"supmult\":\"⫂\",\"supnE\":\"⫌\",\"supne\":\"⊋\",\"supplus\":\"⫀\",\"supset\":\"⊃\",\"Supset\":\"⋑\",\"supseteq\":\"⊇\",\"supseteqq\":\"⫆\",\"supsetneq\":\"⊋\",\"supsetneqq\":\"⫌\",\"supsim\":\"⫈\",\"supsub\":\"⫔\",\"supsup\":\"⫖\",\"swarhk\":\"⤦\",\"swarr\":\"↙\",\"swArr\":\"⇙\",\"swarrow\":\"↙\",\"swnwar\":\"⤪\",\"szlig\":\"ß\",\"Tab\":\"\\\\t\",\"target\":\"⌖\",\"Tau\":\"Τ\",\"tau\":\"τ\",\"tbrk\":\"⎴\",\"Tcaron\":\"Ť\",\"tcaron\":\"ť\",\"Tcedil\":\"Ţ\",\"tcedil\":\"ţ\",\"Tcy\":\"Т\",\"tcy\":\"т\",\"tdot\":\"⃛\",\"telrec\":\"⌕\",\"Tfr\":\"𝔗\",\"tfr\":\"𝔱\",\"there4\":\"∴\",\"therefore\":\"∴\",\"Therefore\":\"∴\",\"Theta\":\"Θ\",\"theta\":\"θ\",\"thetasym\":\"ϑ\",\"thetav\":\"ϑ\",\"thickapprox\":\"≈\",\"thicksim\":\"∼\",\"ThickSpace\":\"  \",\"ThinSpace\":\" \",\"thinsp\":\" \",\"thkap\":\"≈\",\"thksim\":\"∼\",\"THORN\":\"Þ\",\"thorn\":\"þ\",\"tilde\":\"˜\",\"Tilde\":\"∼\",\"TildeEqual\":\"≃\",\"TildeFullEqual\":\"≅\",\"TildeTilde\":\"≈\",\"timesbar\":\"⨱\",\"timesb\":\"⊠\",\"times\":\"×\",\"timesd\":\"⨰\",\"tint\":\"∭\",\"toea\":\"⤨\",\"topbot\":\"⌶\",\"topcir\":\"⫱\",\"top\":\"⊤\",\"Topf\":\"𝕋\",\"topf\":\"𝕥\",\"topfork\":\"⫚\",\"tosa\":\"⤩\",\"tprime\":\"‴\",\"trade\":\"™\",\"TRADE\":\"™\",\"triangle\":\"▵\",\"triangledown\":\"▿\",\"triangleleft\":\"◃\",\"trianglelefteq\":\"⊴\",\"triangleq\":\"≜\",\"triangleright\":\"▹\",\"trianglerighteq\":\"⊵\",\"tridot\":\"◬\",\"trie\":\"≜\",\"triminus\":\"⨺\",\"TripleDot\":\"⃛\",\"triplus\":\"⨹\",\"trisb\":\"⧍\",\"tritime\":\"⨻\",\"trpezium\":\"⏢\",\"Tscr\":\"𝒯\",\"tscr\":\"𝓉\",\"TScy\":\"Ц\",\"tscy\":\"ц\",\"TSHcy\":\"Ћ\",\"tshcy\":\"ћ\",\"Tstrok\":\"Ŧ\",\"tstrok\":\"ŧ\",\"twixt\":\"≬\",\"twoheadleftarrow\":\"↞\",\"twoheadrightarrow\":\"↠\",\"Uacute\":\"Ú\",\"uacute\":\"ú\",\"uarr\":\"↑\",\"Uarr\":\"↟\",\"uArr\":\"⇑\",\"Uarrocir\":\"⥉\",\"Ubrcy\":\"Ў\",\"ubrcy\":\"ў\",\"Ubreve\":\"Ŭ\",\"ubreve\":\"ŭ\",\"Ucirc\":\"Û\",\"ucirc\":\"û\",\"Ucy\":\"У\",\"ucy\":\"у\",\"udarr\":\"⇅\",\"Udblac\":\"Ű\",\"udblac\":\"ű\",\"udhar\":\"⥮\",\"ufisht\":\"⥾\",\"Ufr\":\"𝔘\",\"ufr\":\"𝔲\",\"Ugrave\":\"Ù\",\"ugrave\":\"ù\",\"uHar\":\"⥣\",\"uharl\":\"↿\",\"uharr\":\"↾\",\"uhblk\":\"▀\",\"ulcorn\":\"⌜\",\"ulcorner\":\"⌜\",\"ulcrop\":\"⌏\",\"ultri\":\"◸\",\"Umacr\":\"Ū\",\"umacr\":\"ū\",\"uml\":\"¨\",\"UnderBar\":\"_\",\"UnderBrace\":\"⏟\",\"UnderBracket\":\"⎵\",\"UnderParenthesis\":\"⏝\",\"Union\":\"⋃\",\"UnionPlus\":\"⊎\",\"Uogon\":\"Ų\",\"uogon\":\"ų\",\"Uopf\":\"𝕌\",\"uopf\":\"𝕦\",\"UpArrowBar\":\"⤒\",\"uparrow\":\"↑\",\"UpArrow\":\"↑\",\"Uparrow\":\"⇑\",\"UpArrowDownArrow\":\"⇅\",\"updownarrow\":\"↕\",\"UpDownArrow\":\"↕\",\"Updownarrow\":\"⇕\",\"UpEquilibrium\":\"⥮\",\"upharpoonleft\":\"↿\",\"upharpoonright\":\"↾\",\"uplus\":\"⊎\",\"UpperLeftArrow\":\"↖\",\"UpperRightArrow\":\"↗\",\"upsi\":\"υ\",\"Upsi\":\"ϒ\",\"upsih\":\"ϒ\",\"Upsilon\":\"Υ\",\"upsilon\":\"υ\",\"UpTeeArrow\":\"↥\",\"UpTee\":\"⊥\",\"upuparrows\":\"⇈\",\"urcorn\":\"⌝\",\"urcorner\":\"⌝\",\"urcrop\":\"⌎\",\"Uring\":\"Ů\",\"uring\":\"ů\",\"urtri\":\"◹\",\"Uscr\":\"𝒰\",\"uscr\":\"𝓊\",\"utdot\":\"⋰\",\"Utilde\":\"Ũ\",\"utilde\":\"ũ\",\"utri\":\"▵\",\"utrif\":\"▴\",\"uuarr\":\"⇈\",\"Uuml\":\"Ü\",\"uuml\":\"ü\",\"uwangle\":\"⦧\",\"vangrt\":\"⦜\",\"varepsilon\":\"ϵ\",\"varkappa\":\"ϰ\",\"varnothing\":\"∅\",\"varphi\":\"ϕ\",\"varpi\":\"ϖ\",\"varpropto\":\"∝\",\"varr\":\"↕\",\"vArr\":\"⇕\",\"varrho\":\"ϱ\",\"varsigma\":\"ς\",\"varsubsetneq\":\"⊊︀\",\"varsubsetneqq\":\"⫋︀\",\"varsupsetneq\":\"⊋︀\",\"varsupsetneqq\":\"⫌︀\",\"vartheta\":\"ϑ\",\"vartriangleleft\":\"⊲\",\"vartriangleright\":\"⊳\",\"vBar\":\"⫨\",\"Vbar\":\"⫫\",\"vBarv\":\"⫩\",\"Vcy\":\"В\",\"vcy\":\"в\",\"vdash\":\"⊢\",\"vDash\":\"⊨\",\"Vdash\":\"⊩\",\"VDash\":\"⊫\",\"Vdashl\":\"⫦\",\"veebar\":\"⊻\",\"vee\":\"∨\",\"Vee\":\"⋁\",\"veeeq\":\"≚\",\"vellip\":\"⋮\",\"verbar\":\"|\",\"Verbar\":\"‖\",\"vert\":\"|\",\"Vert\":\"‖\",\"VerticalBar\":\"∣\",\"VerticalLine\":\"|\",\"VerticalSeparator\":\"❘\",\"VerticalTilde\":\"≀\",\"VeryThinSpace\":\" \",\"Vfr\":\"𝔙\",\"vfr\":\"𝔳\",\"vltri\":\"⊲\",\"vnsub\":\"⊂⃒\",\"vnsup\":\"⊃⃒\",\"Vopf\":\"𝕍\",\"vopf\":\"𝕧\",\"vprop\":\"∝\",\"vrtri\":\"⊳\",\"Vscr\":\"𝒱\",\"vscr\":\"𝓋\",\"vsubnE\":\"⫋︀\",\"vsubne\":\"⊊︀\",\"vsupnE\":\"⫌︀\",\"vsupne\":\"⊋︀\",\"Vvdash\":\"⊪\",\"vzigzag\":\"⦚\",\"Wcirc\":\"Ŵ\",\"wcirc\":\"ŵ\",\"wedbar\":\"⩟\",\"wedge\":\"∧\",\"Wedge\":\"⋀\",\"wedgeq\":\"≙\",\"weierp\":\"℘\",\"Wfr\":\"𝔚\",\"wfr\":\"𝔴\",\"Wopf\":\"𝕎\",\"wopf\":\"𝕨\",\"wp\":\"℘\",\"wr\":\"≀\",\"wreath\":\"≀\",\"Wscr\":\"𝒲\",\"wscr\":\"𝓌\",\"xcap\":\"⋂\",\"xcirc\":\"◯\",\"xcup\":\"⋃\",\"xdtri\":\"▽\",\"Xfr\":\"𝔛\",\"xfr\":\"𝔵\",\"xharr\":\"⟷\",\"xhArr\":\"⟺\",\"Xi\":\"Ξ\",\"xi\":\"ξ\",\"xlarr\":\"⟵\",\"xlArr\":\"⟸\",\"xmap\":\"⟼\",\"xnis\":\"⋻\",\"xodot\":\"⨀\",\"Xopf\":\"𝕏\",\"xopf\":\"𝕩\",\"xoplus\":\"⨁\",\"xotime\":\"⨂\",\"xrarr\":\"⟶\",\"xrArr\":\"⟹\",\"Xscr\":\"𝒳\",\"xscr\":\"𝓍\",\"xsqcup\":\"⨆\",\"xuplus\":\"⨄\",\"xutri\":\"△\",\"xvee\":\"⋁\",\"xwedge\":\"⋀\",\"Yacute\":\"Ý\",\"yacute\":\"ý\",\"YAcy\":\"Я\",\"yacy\":\"я\",\"Ycirc\":\"Ŷ\",\"ycirc\":\"ŷ\",\"Ycy\":\"Ы\",\"ycy\":\"ы\",\"yen\":\"¥\",\"Yfr\":\"𝔜\",\"yfr\":\"𝔶\",\"YIcy\":\"Ї\",\"yicy\":\"ї\",\"Yopf\":\"𝕐\",\"yopf\":\"𝕪\",\"Yscr\":\"𝒴\",\"yscr\":\"𝓎\",\"YUcy\":\"Ю\",\"yucy\":\"ю\",\"yuml\":\"ÿ\",\"Yuml\":\"Ÿ\",\"Zacute\":\"Ź\",\"zacute\":\"ź\",\"Zcaron\":\"Ž\",\"zcaron\":\"ž\",\"Zcy\":\"З\",\"zcy\":\"з\",\"Zdot\":\"Ż\",\"zdot\":\"ż\",\"zeetrf\":\"ℨ\",\"ZeroWidthSpace\":\"​\",\"Zeta\":\"Ζ\",\"zeta\":\"ζ\",\"zfr\":\"𝔷\",\"Zfr\":\"ℨ\",\"ZHcy\":\"Ж\",\"zhcy\":\"ж\",\"zigrarr\":\"⇝\",\"zopf\":\"𝕫\",\"Zopf\":\"ℤ\",\"Zscr\":\"𝒵\",\"zscr\":\"𝓏\",\"zwj\":\"‍\",\"zwnj\":\"‌\"}')},9591:e=>{e.exports=JSON.parse('{\"Aacute\":\"Á\",\"aacute\":\"á\",\"Acirc\":\"Â\",\"acirc\":\"â\",\"acute\":\"´\",\"AElig\":\"Æ\",\"aelig\":\"æ\",\"Agrave\":\"À\",\"agrave\":\"à\",\"amp\":\"&\",\"AMP\":\"&\",\"Aring\":\"Å\",\"aring\":\"å\",\"Atilde\":\"Ã\",\"atilde\":\"ã\",\"Auml\":\"Ä\",\"auml\":\"ä\",\"brvbar\":\"¦\",\"Ccedil\":\"Ç\",\"ccedil\":\"ç\",\"cedil\":\"¸\",\"cent\":\"¢\",\"copy\":\"©\",\"COPY\":\"©\",\"curren\":\"¤\",\"deg\":\"°\",\"divide\":\"÷\",\"Eacute\":\"É\",\"eacute\":\"é\",\"Ecirc\":\"Ê\",\"ecirc\":\"ê\",\"Egrave\":\"È\",\"egrave\":\"è\",\"ETH\":\"Ð\",\"eth\":\"ð\",\"Euml\":\"Ë\",\"euml\":\"ë\",\"frac12\":\"½\",\"frac14\":\"¼\",\"frac34\":\"¾\",\"gt\":\">\",\"GT\":\">\",\"Iacute\":\"Í\",\"iacute\":\"í\",\"Icirc\":\"Î\",\"icirc\":\"î\",\"iexcl\":\"¡\",\"Igrave\":\"Ì\",\"igrave\":\"ì\",\"iquest\":\"¿\",\"Iuml\":\"Ï\",\"iuml\":\"ï\",\"laquo\":\"«\",\"lt\":\"<\",\"LT\":\"<\",\"macr\":\"¯\",\"micro\":\"µ\",\"middot\":\"·\",\"nbsp\":\" \",\"not\":\"¬\",\"Ntilde\":\"Ñ\",\"ntilde\":\"ñ\",\"Oacute\":\"Ó\",\"oacute\":\"ó\",\"Ocirc\":\"Ô\",\"ocirc\":\"ô\",\"Ograve\":\"Ò\",\"ograve\":\"ò\",\"ordf\":\"ª\",\"ordm\":\"º\",\"Oslash\":\"Ø\",\"oslash\":\"ø\",\"Otilde\":\"Õ\",\"otilde\":\"õ\",\"Ouml\":\"Ö\",\"ouml\":\"ö\",\"para\":\"¶\",\"plusmn\":\"±\",\"pound\":\"£\",\"quot\":\"\\\\\"\",\"QUOT\":\"\\\\\"\",\"raquo\":\"»\",\"reg\":\"®\",\"REG\":\"®\",\"sect\":\"§\",\"shy\":\"­\",\"sup1\":\"¹\",\"sup2\":\"²\",\"sup3\":\"³\",\"szlig\":\"ß\",\"THORN\":\"Þ\",\"thorn\":\"þ\",\"times\":\"×\",\"Uacute\":\"Ú\",\"uacute\":\"ú\",\"Ucirc\":\"Û\",\"ucirc\":\"û\",\"Ugrave\":\"Ù\",\"ugrave\":\"ù\",\"uml\":\"¨\",\"Uuml\":\"Ü\",\"uuml\":\"ü\",\"Yacute\":\"Ý\",\"yacute\":\"ý\",\"yen\":\"¥\",\"yuml\":\"ÿ\"}')},2586:e=>{e.exports=JSON.parse('{\"amp\":\"&\",\"apos\":\"\\'\",\"gt\":\">\",\"lt\":\"<\",\"quot\":\"\\\\\"\"}')}},n={};function t(r){var o=n[r];if(void 0!==o)return o.exports;var a=n[r]={id:r,exports:{}};return e[r].call(a.exports,a,a.exports,t),a.exports}t.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},t.d=(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},t.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),t.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},(()=>{var e=a(t(7294)),n=a(t(3935));t(6150);var r=t(1715);function o(e){if(\"function\"!=typeof WeakMap)return null;var n=new WeakMap,t=new WeakMap;return(o=function(e){return e?t:n})(e)}function a(e,n){if(!n&&e&&e.__esModule)return e;if(null===e||\"object\"!=typeof e&&\"function\"!=typeof e)return{default:e};var t=o(n);if(t&&t.has(e))return t.get(e);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if(\"default\"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var i=a?Object.getOwnPropertyDescriptor(e,l):null;i&&(i.get||i.set)?Object.defineProperty(r,l,i):r[l]=e[l]}return r.default=e,t&&t.set(e,r),r}const l=self.zip,i=()=>{const[n,t]=e.useState();return e.useEffect((()=>{if(n)return;const e=new c;e.load().then((()=>t(e)))}),[n]),e.createElement(r.ReportView,{report:n})};window.onload=()=>{n.render(e.createElement(i,null),document.querySelector(\"#root\"))};class c{constructor(){this._entries=new Map,this._json=void 0}async load(){const e=new l.ZipReader(new l.Data64URIReader(window.playwrightReportBase64),{useWebWorkers:!1});for(const n of await e.getEntries())this._entries.set(n.filename,n);this._json=await this.entry(\"report.json\")}json(){return this._json}async entry(e){const n=this._entries.get(e),t=new l.TextWriter;return await n.getData(t),JSON.parse(await t.getData())}}})()})();</script></head><body><div id=\"root\"></div></body></html><script>\nwindow.playwrightReportBase64 = \"data:application/zip;base64,UEsDBBQAAAgIAFQQXFQdOnsqDgMAADENAAAtAAAANjIyY2M3YjIzMGE4NmZmNWRmMjJlZDlmZDc0NGZjNmQxYjA0MWU3Zi5qc29urZffb5swEMf/FeSnVksIton5IbXSOk3qHrb1odOkNXkwYAILwcgca7uq//tsFikJahqgfQv+cff5ns++yxNK80J8SVCIGCFx7EWEOtxnaTpPUkJEEqSJ57ppzBIcOS4WXoom7Z5vfCP0LhA11DM+47YgwoZaz7ZDKLx7an8Nsj31E4+zKHF9nGBPMN9PSORFMfF47HCqNwU0IDhNjJscCkPwo0zkTIlE6rFKyd8ihi1bnCm5yZuNnihkzCGXJQqfWvqXyYu81DPBBMWyaDZ6MX2eoKRR263OBPGylNB+GoXLCZINxLL11pTiodLOhYGrOGR6AUoFh0YJK5US6dVK1E2xDc6B3Rq4gtu8NUQcQqYOmRLvltDQmYdOYGOCfyGzH9TjdoOotkHexuFKpFJ7upZybbT0tLijmBP6ktlIyftaqE+yBPEAdinub/hK9HBAPefQAQ7cnYOlCXJTgh5+nuy8Vdq2vZIgzzKAKpzNzMEVmawh9B3fmW0P7byH/zmbH/r3ggP3Q1KC7VICs+c99NdkVLyp+wSKud4hKB3NiZ1joHtwrUGp7LjI4/XZXcKBT43FPLlYoO8NGFM3vBTF9Fblq5VQVw2ALBdo2SfsbI67YSfj9ZCdHs/ppaeueBlmvJ6adD1boJpvqkJYMjIPwwKdW5eXVgnZhXNSDHZs13UPxbD5eC3uTgvrdzZ5WTVwB4+V0Cdj9OgzGMQ/x507SNh4fm/HT8gJfm2seAd8yjq5NJ4+GEBf6Xe6fh1/Yn3WD6LqpaKbRONVEDxAxekcwr3wuxeauuP59+4AoW/NoX74fqcMjL8BhA2gP51DeEgOBd1XdbwKf7CKSCaPE+urAP7hbz9av9NbjKalexWNHsv4/42XDfKa/xEfAVQeNXCy9GpQ5rjvVXrp3tWkx0rVG0D9dwPdq6kUDz3/OstT6JcFDHdydorHQ9NjaaANCaWkMkbRT6nWQln6b0CsuS3xkOt23Np15sWj6cI1ODR6PUq5dmvadQ7A42wjyrY3Xxqjco3ClBe1MB9Z21SbmX9QSwMEFAAACAgAVBBcVCa35VEfAQAAagIAAAsAAAByZXBvcnQuanNvbrVQvW6EMAx+lcozvYNACfAGXbp1qjqYxNFRAkYkSK1O9+5NUnS9Sl06dLP9+fuxz2AGSw66l3OqHjV0UAuhlOxFmWNTG/OgjRCkW6NlVRlV66LPq4KkgSxxnnCiwPLkvDviEQ8k6OBdQNMoacfqT9r3jZZY97pqCl1IqptGi172SkhUOZaB1JatKIyONoO3McHzrPm4kuYwW1Z+I+X3bOq08jRsUwAsK/QDz9B9Xfx7cjvMAWkzUGy3KSyXlwz0tu7UPAOcZ/apjRe+ZsCbV5zctpnel2BOMdyC/hQWwBD6baU7wwxxe4TOoHV0Cc2JedxVXNB0MZsP6ha6IoOrWLS90Y6YsTh+JMCNw7LsS1fxH5kv0ermL9Hx+zP/7f0JUEsBAj8DFAAACAgAVBBcVB06eyoOAwAAMQ0AAC0AAAAAAAAAAAAAALSBAAAAADYyMmNjN2IyMzBhODZmZjVkZjIyZWQ5ZmQ3NDRmYzZkMWIwNDFlN2YuanNvblBLAQI/AxQAAAgIAFQQXFQmt+VRHwEAAGoCAAALAAAAAAAAAAAAAAC0gVkDAAByZXBvcnQuanNvblBLBQYAAAAAAgACAJQAAAChBAAAAAA=\";</script>"
  },
  {
    "path": "packages/playground/devEnv/playwright.config.ts",
    "content": "import type {PlaywrightTestConfig} from '@playwright/test'\nimport {devices} from '@playwright/test'\n\nconst port = 8082\nconst url = `http://localhost:${port}`\n\n/**\n * Read environment variables from file.\n * https://github.com/motdotla/dotenv\n */\n// require('dotenv').config();\n\n/**\n * See https://playwright.dev/docs/test-configuration.\n */\nconst config: PlaywrightTestConfig = {\n  testDir: '../src',\n  testMatch: /.*\\.e2e\\.ts/,\n  /* Maximum time one test can run for. */\n  timeout: 4000,\n  expect: {\n    // maximum timeout for expect assertions. If longer than the test timeout above, it'll still fail.\n    timeout: 10000,\n  },\n  /* Fail the build on CI if you accidentally left test.only in the source code. */\n  forbidOnly: !!process.env.CI,\n  /* Retry on CI only */\n  retries: process.env.CI ? 0 : 0,\n  /* Opt out of parallel tests on CI. */\n  workers: process.env.CI ? 1 : undefined,\n  /* Reporter to use. See https://playwright.dev/docs/test-reporters */\n  reporter: process.env.CI ? 'github' : 'html',\n  /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */\n  use: {\n    /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */\n    // actionTimeout: 200,\n    /* Base URL to use in actions like `await page.goto('/')`. */\n    // baseURL: 'http://localhost:3000',\n\n    /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */\n    trace: 'on-first-retry',\n    baseURL: url,\n  },\n\n  /* Configure projects for major browsers */\n  projects: [\n    {\n      name: 'chromium',\n      use: {\n        ...devices['Desktop Chrome'],\n        launchOptions: {\n          // args: [\"--headless\",\"--no-sandbox\",\"--use-angle=gl\"]\n          args: ['--no-sandbox'],\n        },\n      },\n    },\n\n    // {\n    //   name: 'firefox',\n    //   use: {\n    //     ...devices['Desktop Firefox'],\n    //   },\n    // },\n  ],\n\n  /* Folder for test artifacts such as screenshots, videos, traces, etc. */\n  outputDir: '../test-results/',\n\n  /*\n  This will serve the playground before running the tests, unless the playground is already running.\n\n  Note that if the playground is not running but some other server is serving at port 8080, this will fail.\n  TODO 👆\n  */\n  webServer: {\n    command: `yarn run serve:ci --port ${port}`,\n    reuseExistingServer: !process.env.CI,\n    url: url,\n  },\n}\n\nexport default config\n"
  },
  {
    "path": "packages/playground/package.json",
    "content": "{\n  \"name\": \"playground\",\n  \"version\": \"1.0.0-dev\",\n  \"license\": \"Apache-2.0\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"files\": [\n    \"dist/**/*\"\n  ],\n  \"scripts\": {\n    \"serve\": \"vite\",\n    \"serve:ci\": \"vite build && vite preview\",\n    \"build\": \"vite build --force\",\n    \"build:static\": \"echo 'building for vercel' && yarn run build\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"test\": \"playwright test --config=devEnv/playwright.config.ts\",\n    \"test:ci\": \"playwright test --reporter=dot --config=devEnv/playwright.config.ts --project=chromium\"\n  },\n  \"devDependencies\": {\n    \"@playwright/test\": \"^1.36.2\",\n    \"@react-three/drei\": \"^9.80.1\",\n    \"@react-three/fiber\": \"^8.13.6\",\n    \"@theatre/core\": \"workspace:*\",\n    \"@theatre/dataverse\": \"workspace:*\",\n    \"@theatre/r3f\": \"workspace:*\",\n    \"@theatre/react\": \"workspace:*\",\n    \"@theatre/studio\": \"workspace:*\",\n    \"@types/jest\": \"^26.0.23\",\n    \"@types/lodash-es\": \"^4.17.4\",\n    \"@types/node\": \"^15.6.2\",\n    \"@types/react\": \"^18.2.18\",\n    \"@types/react-dom\": \"^18.2.7\",\n    \"@types/styled-components\": \"^5.1.26\",\n    \"@vitejs/plugin-react\": \"^4.0.0\",\n    \"@vitejs/plugin-react-swc\": \"^3.3.2\",\n    \"dotenv\": \"^16.3.1\",\n    \"fast-glob\": \"^3.3.0\",\n    \"lodash-es\": \"^4.17.21\",\n    \"maath\": \"^0.10.7\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"styled-components\": \"^5.3.11\",\n    \"theatric\": \"workspace:*\",\n    \"three\": \"^0.155.0\",\n    \"typescript\": \"5.1.6\",\n    \"vite\": \"^4.3.9\"\n  }\n}\n"
  },
  {
    "path": "packages/playground/src/.gitignore",
    "content": "personal"
  },
  {
    "path": "packages/playground/src/home/ItemSectionWithPreviews.tsx",
    "content": "import React from 'react'\nimport styled from 'styled-components'\n\nexport const ItemSectionWithPreviews = (props: {\n  groupName: string\n  modules: string[]\n  collapsedByDefault: boolean\n  collapsible: boolean\n}) => {\n  const {groupName, modules, collapsedByDefault, collapsible} = props\n  console.log(groupName)\n\n  const [collapsed, setCollapsed] = React.useState(\n    collapsible && collapsedByDefault,\n  )\n\n  const toggleCollapse = () => {\n    if (!collapsible) return\n    setCollapsed(!collapsed)\n  }\n\n  return (\n    <section>\n      <SectionHeader collapsible={collapsible} onClick={toggleCollapse}>\n        {groupName}\n      </SectionHeader>\n\n      {!collapsed && (\n        <ItemListContainer>\n          {modules.map((moduleName) => {\n            const href = `/${groupName}/${moduleName}/`\n            return (\n              <ItemContainer key={`li-${moduleName}`}>\n                <ItemLink href={href}>\n                  <ItemDesc>\n                    <h3>{moduleName}</h3>\n                    <p>{href}</p>\n                  </ItemDesc>\n                </ItemLink>\n              </ItemContainer>\n            )\n          })}\n        </ItemListContainer>\n      )}\n    </section>\n  )\n}\n\nconst SectionHeader = styled.h3<{collapsible: boolean}>`\n  font-family: 'Inter', sans-serif;\n  font-style: normal;\n  font-weight: 400;\n  font-size: 16px;\n  line-height: 19px;\n\n  text-transform: capitalize;\n\n  /* White/White50 */\n  color: rgba(255, 255, 255, 0.5);\n\n  text-decoration: ${({collapsible}) => (collapsible ? 'underline' : 'none')};\n  cursor: ${({collapsible}) => (collapsible ? 'pointer' : 'default')};\n  user-select: none;\n`\n\nconst ItemDesc = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  padding: 8px 12px;\n  gap: 4px;\n\n  & > h3 {\n    margin: 0;\n\n    font-family: 'Inter', sans-serif;\n    font-style: normal;\n    font-weight: 600;\n    font-size: 15px;\n    line-height: 18px;\n\n    /* White/White80 */\n    color: rgba(255, 255, 255, 0.8);\n  }\n\n  & > p {\n    margin: 0;\n    font-weight: 400;\n    font-size: 13px;\n    line-height: 16px;\n    /* identical to box height, or 123% */\n    /* White/White60 */\n    color: rgba(255, 255, 255, 0.6);\n  }\n`\n\nconst ItemContainer = styled.div`\n  /* display: inline-flex; */\n`\n\nconst ItemListContainer = styled.div`\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n  gap: 1rem;\n\n  margin-bottom: 2rem;\n`\n\nconst PreviewContainer = styled.div`\n  --previewHeight: 450px;\n  --previewWidth: 800px;\n  --previewScale: 0.3;\n  position: relative;\n  overflow: hidden;\n  height: calc(var(--previewHeight) * var(--previewScale));\n  width: calc(var(--previewWidth) * var(--previewScale));\n\n  /* Neutral/Neutral800 */\n  background: rgba(33, 35, 39, 0.9);\n\n  &::after {\n    content: '';\n    position: absolute;\n    display: block;\n    z-index: 1;\n    top: 0;\n    left: 0;\n    height: calc(var(--previewHeight) * var(--previewScale));\n    width: calc(var(--previewWidth) * var(--previewScale));\n  }\n\n  iframe {\n    /* don't want original size of iframe affecting layout */\n    position: absolute;\n    transform-origin: top left;\n    transform: scale(var(--previewScale));\n    height: var(--previewHeight);\n    width: var(--previewWidth);\n  }\n`\nconst ItemLink = styled.a`\n  border: 1px solid rgba(255, 255, 255, 0.08);\n  border-radius: 4px;\n  text-decoration: none;\n  overflow: hidden;\n\n  display: flex;\n  flex-direction: column;\n`\n"
  },
  {
    "path": "packages/playground/src/home/PlaygroundHeader.tsx",
    "content": "import React from 'react'\nimport styled from 'styled-components'\n\nconst PlaygroundHeaderContainer = styled.div`\n  /* Auto layout */\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  flex-wrap: wrap;\n\n  padding: 1rem;\n\n  /* White/White8 */\n  border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n`\nconst PlaygroundHeaderVersion = styled.div`\n  padding: 6px 16px;\n\n  background: rgba(34, 103, 99, 0.38);\n  border-radius: 30px;\n\n  font-family: 'Source Code Pro', 'Monaco', monospace;\n  font-style: normal;\n  font-weight: 400;\n  font-size: 13px;\n  line-height: 17px;\n\n  /* Teal/Teal300 */\n  color: #64c4bf;\n`\n\nconst HeaderGroup = styled.div`\n  /* Auto layout */\n  display: flex;\n  flex-direction: row;\n  align-items: flex-start;\n\n  gap: 12px;\n`\n\nconst HeaderLink = styled.a`\n  font-family: 'Inter', sans-serif;\n  font-style: normal;\n  font-weight: 400;\n  font-size: 16px;\n  line-height: 1;\n\n  text-decoration: none;\n  display: inline-flex;\n  padding: 0.5rem;\n\n  /* identical to box height, or 169% */\n\n  /* White/White100 */\n  color: #ffffff;\n\n  transition: color 0.2s ease-in;\n\n  &:hover,\n  &:focus {\n    /* Teal/Teal300 */\n    color: #64c4bf;\n  }\n`\n\nexport function PlaygroundHeader(props: {\n  version?: {\n    displayText: string\n    linkHref?: string\n  }\n  links: {\n    label: string\n    href: string\n  }[]\n}) {\n  return (\n    <PlaygroundHeaderContainer>\n      <HeaderGroup>\n        <TheatreLogo />\n        {props.version && (\n          <PlaygroundHeaderVersion>\n            {props.version.displayText}\n          </PlaygroundHeaderVersion>\n        )}\n      </HeaderGroup>\n      <HeaderGroup>\n        {props.links.map((link) => (\n          <HeaderLink href={link.href} key={link.label} role=\"button\">\n            {link.label}\n          </HeaderLink>\n        ))}\n      </HeaderGroup>\n    </PlaygroundHeaderContainer>\n  )\n}\n\nconst TheatreLogo = () => (\n  <svg\n    width=\"100\"\n    height=\"25\"\n    viewBox=\"0 0 100 25\"\n    fill=\"currentColor\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M97.9139 15.1557L93.3534 8.16702L93.3508 8.16288C92.6058 6.99457 92.2281 5.8335 92.2281 4.71175C92.2281 3.88544 92.4299 3.13727 92.7957 2.60433C93.2044 2.00879 93.7927 1.70714 94.544 1.70714C95.1235 1.70714 95.63 1.8722 96.0481 2.19713C96.4403 2.50189 96.7668 2.95203 97.0188 3.53516L97.0695 3.65364C97.0954 3.71366 97.1455 3.75971 97.2076 3.77989C97.2697 3.80007 97.3375 3.79283 97.3939 3.76023L97.5041 3.69555H97.5051L98.4556 3.13778L98.4572 3.13675L98.557 3.07776C98.6098 3.04672 98.6476 2.99601 98.6626 2.93703C98.6776 2.87804 98.6678 2.81544 98.6362 2.76318L98.5782 2.66797L98.5762 2.66487C97.7551 1.31029 96.3234 0.564697 94.544 0.564697C93.2515 0.564697 92.0842 1.00036 91.2564 1.79148C90.4264 2.58467 89.9696 3.70332 89.9696 4.94252C89.9696 6.51286 90.325 7.67755 91.2377 9.09733C91.2393 9.09992 91.2408 9.1025 91.2429 9.10509L95.7961 16.115L95.8008 16.1227C96.7564 17.5715 97.2211 18.8619 97.2211 20.0685C97.2211 21.0961 97.0022 21.955 96.5883 22.5521C96.1376 23.2025 95.4608 23.5326 94.5766 23.5326C93.6923 23.5326 92.969 23.1989 92.4749 22.5412C92.0195 21.9348 91.7686 21.0568 91.7686 20.068V19.2981C91.7686 19.1724 91.6667 19.0704 91.5409 19.0704H89.64C89.5142 19.0704 89.4123 19.1724 89.4123 19.2981V20.232C89.4123 22.7653 91.6325 24.675 94.5771 24.675C96.0409 24.675 97.2894 24.2104 98.1876 23.3308C99.0755 22.46 99.5453 21.2637 99.5453 19.8709C99.5453 18.3787 99.0118 16.8363 97.9149 15.1562L97.9139 15.1557Z\" />\n    <path\n      fillRule=\"evenodd\"\n      clipRule=\"evenodd\"\n      d=\"M42.6037 23.9087L42.7273 24.0842C42.7765 24.154 42.7827 24.2451 42.7434 24.3206C42.704 24.3962 42.6264 24.4438 42.541 24.4438H39.8872C39.8112 24.4438 39.7403 24.406 39.6979 24.3429C39.656 24.2797 39.6477 24.1995 39.6767 24.1292L39.7413 23.9714C39.9447 23.4772 39.9385 23.1528 39.8541 22.7301C39.8532 22.7273 39.8527 22.7242 39.8522 22.7213L39.8521 22.7203L39.0175 18.1774H33.6493L33.1418 21.0128V21.0143L33.1252 21.107C33.1061 21.2156 33.0114 21.2948 32.9012 21.2948H32.2114C32.1437 21.2948 32.08 21.2653 32.0366 21.2136C31.9931 21.1618 31.975 21.0935 31.9869 21.0273L32.0107 20.8938L35.1607 3.04517C35.1612 3.04362 35.1617 3.04206 35.1617 3.04051C35.243 2.56811 35.2678 2.27371 35.2471 2.02535C35.2274 1.78941 35.1633 1.57417 35.0241 1.28183V1.28028L34.9475 1.11885C34.9139 1.04848 34.9191 0.965691 34.961 0.899463C35.0029 0.833234 35.0753 0.793393 35.1534 0.793393H36.8428C37.5548 0.793393 38.1896 1.34599 38.3252 2.08071C38.3262 2.08382 38.3267 2.08692 38.3273 2.09003L42.1328 22.5945C42.133 22.5953 42.1332 22.5961 42.1334 22.597C42.1339 22.5989 42.1344 22.601 42.1344 22.6028L42.1437 22.6592C42.2037 23.0245 42.272 23.4389 42.6016 23.9056L42.6037 23.9087ZM36.2902 3.49014L33.8713 17.0349H38.7945L36.2902 3.49014Z\"\n    />\n    <path d=\"M0.227661 0.793911H9.643C9.76873 0.793911 9.87066 0.895841 9.87066 1.02157V1.70921C9.87066 1.83494 9.76873 1.93687 9.643 1.93687H6.0651V22.6928C6.0651 22.9422 6.07286 23.1218 6.11115 23.3023C6.15099 23.4907 6.22705 23.6904 6.35743 23.9512L6.4397 24.1162C6.47489 24.1866 6.47075 24.2704 6.42935 24.3377C6.38796 24.4044 6.31449 24.4453 6.23584 24.4453H3.63585C3.55669 24.4453 3.48321 24.4044 3.44182 24.3372C3.40043 24.2699 3.39681 24.1861 3.43199 24.1152L3.51426 23.9501C3.64465 23.6899 3.72019 23.4902 3.76003 23.3023C3.79832 23.1212 3.80608 22.9417 3.80608 22.6923V1.93635H0.227661C0.10193 1.93635 0 1.83442 0 1.70869V1.02157C0 0.895841 0.10193 0.793911 0.227661 0.793911Z\" />\n    <path d=\"M65.972 1.28856C66.1029 1.55037 66.179 1.75009 66.2183 1.93687C66.2566 2.11745 66.2644 2.29751 66.2644 2.54638V19.4921C66.2644 19.6179 66.3663 19.7198 66.492 19.7198H73.7415C73.8672 19.7198 73.9691 19.6179 73.9691 19.4921V18.8055C73.9691 18.6798 73.8672 18.5779 73.7415 18.5779H68.5229V9.05645H73.7415C73.8672 9.05645 73.9691 8.95452 73.9691 8.82879V8.14219C73.9691 8.01646 73.8672 7.91453 73.7415 7.91453H68.5229V1.93687H73.7415C73.8672 1.93687 73.9691 1.83494 73.9691 1.70921V1.02209C73.9691 0.896358 73.8672 0.794428 73.7415 0.794428H66.0936C66.0145 0.794428 65.9415 0.835304 65.8996 0.902567C65.8582 0.969831 65.8541 1.05365 65.8898 1.12402L65.972 1.28907V1.28856Z\" />\n    <path\n      fillRule=\"evenodd\"\n      clipRule=\"evenodd\"\n      d=\"M74.7985 22.7648L75.0609 23.159L75.0603 23.1595L75.124 23.2558C75.1571 23.3065 75.1695 23.3686 75.1571 23.4281C75.1447 23.4876 75.1095 23.5398 75.0583 23.5729L74.9615 23.6356C74.961 23.6358 74.9604 23.6362 74.9597 23.6366L74.9589 23.6371C74.9585 23.6373 74.9582 23.6375 74.9579 23.6376C73.728 24.4344 72.2203 24.8385 70.4771 24.8385C68.5943 24.8385 67.1067 24.5074 65.7945 23.7965C64.5269 23.1099 63.3839 22.0419 62.1965 20.4359V20.4348C61.5859 19.6127 61.0851 18.8671 60.6432 18.2089L60.5169 18.0211C60.059 17.3397 59.6461 16.7369 59.2348 16.2588C58.8095 15.7652 58.408 15.4341 57.9728 15.2178C57.5154 14.9901 57.0074 14.8773 56.3823 14.8654V24.2171C56.3823 24.3429 56.2804 24.4448 56.1547 24.4448H54.352C54.2263 24.4448 54.1243 24.3429 54.1243 24.2171V2.54638C54.1243 2.29699 54.1166 2.11745 54.0783 1.93687C54.039 1.75009 53.9629 1.55037 53.832 1.28856L53.7497 1.1235C53.714 1.05313 53.7182 0.969313 53.7596 0.90205C53.8015 0.834786 53.8744 0.793911 53.9536 0.793911H56.9929C58.958 0.793911 60.594 1.44947 61.7241 2.68971C62.8448 3.92011 63.4372 5.69742 63.4372 7.82915C63.4372 11.019 61.9393 13.4539 59.464 14.4086C61.1699 15.2752 62.4759 16.9511 64.1559 19.2707L64.1606 19.2769C66.0993 21.9643 67.8709 23.6299 70.7079 23.6299C72.2498 23.6299 73.3307 23.3432 74.3225 22.6711H74.3236L74.4172 22.6075C74.4674 22.5733 74.5285 22.5609 74.5885 22.5723C74.648 22.5837 74.7008 22.6188 74.7344 22.669L74.7975 22.7632L74.7985 22.7648ZM56.5986 1.93687H56.3823V13.7214H56.5981C58.0701 13.7214 59.1965 13.1963 59.9468 12.1604C60.6768 11.1535 61.0468 9.78704 61.0468 7.82915C61.0468 5.87127 60.726 4.45201 60.0653 3.49066C59.3476 2.44497 58.2134 1.93687 56.5986 1.93687Z\"\n    />\n    <path d=\"M85.4277 0.793911H87.2314C87.3572 0.793911 87.4591 0.895841 87.4591 1.02157V19.7389C87.4591 21.1892 86.995 22.4202 86.1164 23.2987C85.2161 24.1985 83.9283 24.674 82.3926 24.674C80.6132 24.674 79.181 23.9284 78.3599 22.5738L78.2999 22.475C78.2683 22.4227 78.2585 22.3601 78.2735 22.3011C78.2885 22.2422 78.3263 22.1915 78.379 22.1604L78.4789 22.1014L78.481 22.1004L79.5417 21.4785C79.5981 21.4454 79.6658 21.4381 79.7279 21.4583C79.79 21.4785 79.8402 21.5245 79.8661 21.5845L79.9152 21.6989C79.9155 21.6997 79.9157 21.7003 79.916 21.701C79.9163 21.7016 79.9165 21.7022 79.9168 21.703C80.1693 22.2872 80.4963 22.7373 80.8875 23.0416C81.306 23.3665 81.8126 23.5316 82.3921 23.5316C83.4098 23.5316 84.1342 23.1373 84.6066 22.327C84.9947 21.6611 85.2001 20.7091 85.2001 19.5749V1.02157C85.2001 0.895841 85.302 0.793911 85.4277 0.793911Z\" />\n    <path d=\"M35.5441 23.41H35.5436L35.2818 23.0493L35.2181 22.9608C35.1462 22.862 35.0091 22.8377 34.9072 22.9055L34.8187 22.9645L34.8166 22.966C34.472 23.1958 34.115 23.3023 33.6933 23.3023H26.4889V12.0098H31.9703C32.0961 12.0098 32.198 11.9079 32.198 11.7822V11.0951C32.198 10.9693 32.0961 10.8674 31.9703 10.8674H26.4889V1.93687H31.9703C32.0961 1.93687 32.198 1.83494 32.198 1.70921V1.02157C32.198 0.895841 32.0961 0.793911 31.9703 0.793911H24.0602C23.981 0.793911 23.908 0.834786 23.8661 0.90205C23.8242 0.969313 23.8206 1.05313 23.8563 1.1235L23.938 1.287V1.28856C24.0695 1.55037 24.1455 1.75009 24.1849 1.93635C24.2231 2.11745 24.2304 2.29751 24.2304 2.54638V24.2171C24.2304 24.3429 24.3323 24.4448 24.458 24.4448H33.8247C34.4808 24.4448 34.976 24.2756 35.4799 23.8798L35.5658 23.8115C35.6621 23.7359 35.6812 23.5973 35.6088 23.4984L35.5441 23.4094V23.41Z\" />\n    <path d=\"M75.4334 23.2827C75.4334 22.5697 76.0134 21.9897 76.7264 21.9897C77.4399 21.9897 78.0199 22.5692 78.0199 23.2827C78.0199 23.9962 77.4394 24.5762 76.7264 24.5762C76.0134 24.5762 75.4334 23.9957 75.4334 23.2827Z\" />\n    <path d=\"M21.4426 23.9501C21.3122 23.6899 21.2366 23.4896 21.1963 23.3023C21.158 23.1212 21.1507 22.9412 21.1507 22.6923V1.02157C21.1507 0.895841 21.0488 0.793911 20.9231 0.793911H19.1204C18.9947 0.793911 18.8928 0.895841 18.8928 1.02157V13.7214H13.4082V1.02157C13.4082 0.895841 13.3063 0.793911 13.1805 0.793911H11.3779C11.2521 0.793911 11.1502 0.895841 11.1502 1.02157V24.2171C11.1502 24.3429 11.2521 24.4448 11.3779 24.4448H13.1805C13.3063 24.4448 13.4082 24.3429 13.4082 24.2171V14.8644H18.8928V24.2171C18.8928 24.3429 18.9947 24.4448 19.1204 24.4448H21.3215C21.4007 24.4448 21.4736 24.4039 21.5155 24.3366C21.5569 24.2694 21.5611 24.1856 21.5253 24.1147L21.4431 23.9496L21.4426 23.9501Z\" />\n    <path d=\"M42.8753 0.793911H52.2906C52.4164 0.793911 52.5183 0.895841 52.5183 1.02157V1.70921C52.5183 1.83494 52.4164 1.93687 52.2906 1.93687H48.7122V22.6923C48.7122 22.9412 48.72 23.1212 48.7583 23.3018C48.7981 23.4896 48.8742 23.6894 49.0046 23.9496L49.0056 23.9517L49.0868 24.1152C49.122 24.1856 49.1179 24.2694 49.0765 24.3366C49.0351 24.4034 48.9616 24.4443 48.883 24.4443H46.283C46.2038 24.4443 46.1303 24.4034 46.0889 24.3361C46.0475 24.2694 46.0439 24.1856 46.0791 24.1147L46.1614 23.9496C46.2918 23.6894 46.3678 23.4902 46.4071 23.3023C46.4454 23.1212 46.4532 22.9417 46.4532 22.6923V1.93635H42.8753C42.7496 1.93635 42.6476 1.83442 42.6476 1.70869V1.02157C42.6476 0.895841 42.7496 0.793911 42.8753 0.793911Z\" />\n  </svg>\n)\n"
  },
  {
    "path": "packages/playground/src/home/PlaygroundPage.tsx",
    "content": "import React from 'react'\nimport styled, {StyleSheetManager} from 'styled-components'\nimport {ItemSectionWithPreviews} from './ItemSectionWithPreviews'\nimport {PlaygroundHeader} from './PlaygroundHeader'\n// @ts-ignore\nimport {version} from '../../../studio/package.json'\n\nconst HomeContainer = styled.div`\n  position: fixed;\n  inset: 0;\n  background: #1b1c1e;\n  overflow: auto;\n`\nconst ContentContainer = styled.div`\n  padding: 0 5rem;\n\n  @media screen and (max-width: 920px) {\n    padding: 0 2rem;\n  }\n`\n\n// const {version} = require('')\n\nconst PageTitleH1 = styled.h1`\n  padding: 1rem 0;\n`\n\nexport const PlaygroundPage = ({\n  groups,\n}: {\n  groups: {[groupName: string]: string[]}\n}) => {\n  return (\n    <StyleSheetManager disableVendorPrefixes>\n      <HomeContainer>\n        <PlaygroundHeader\n          version={{\n            displayText: version,\n          }}\n          links={[\n            {\n              label: 'Docs',\n              href: 'https://www.theatrejs.com/docs/latest',\n            },\n            {\n              label: 'Github',\n              href: 'https://github.com/theatre-js/theatre',\n            },\n          ]}\n        />\n        <ContentContainer>\n          <PageTitleH1>Playground</PageTitleH1>\n          {Object.entries(groups).map(([groupName, modules]) => (\n            <ItemSectionWithPreviews\n              key={`group-${groupName}`}\n              groupName={groupName}\n              modules={modules}\n              collapsedByDefault={groupName === 'tests'}\n              collapsible={groupName === 'tests'}\n            />\n          ))}\n        </ContentContainer>\n      </HomeContainer>\n    </StyleSheetManager>\n  )\n}\n"
  },
  {
    "path": "packages/playground/src/index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Playground – Theatre.js</title>\n    <script type=\"module\" src=\"./index.tsx\"></script>\n\n    <style>\n      body {\n        margin: 0;\n        padding: 0;\n        height: 100%;\n        background: black;\n        color: white;\n        font-family: sans-serif;\n        font-size: 12px;\n      }\n\n      a {\n        color: inherit;\n      }\n    </style>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/index.tsx",
    "content": "import {PlaygroundPage} from './home/PlaygroundPage'\nimport ReactDom from 'react-dom/client'\nimport React from 'react'\n\n// like [{'./shared/hello/index.html': () => import('./shared/hello/index.html')}]\nconst modules: Record<string, () => Promise<unknown>> = (\n  import.meta as any\n).glob('./(shared|personal|tests)/*/index.html')\n\nconst groups = (Object.keys(modules) as string[]).reduce((acc, path) => {\n  const [_, groupName, moduleName] = path.split('/')\n  if (!acc[groupName]) {\n    acc[groupName] = []\n  }\n  acc[groupName].push(moduleName)\n  return acc\n}, {} as {[groupName: string]: string[]})\n\nReactDom.createRoot(document.getElementById('root')!).render(\n  <PlaygroundPage groups={groups} />,\n)\n"
  },
  {
    "path": "packages/playground/src/playground-globals.d.ts",
    "content": "declare module '*.png' {\n  export default string\n}\n\ndeclare module '*.glb' {\n  export default string\n}\n\ndeclare module '*.gltf' {\n  export default string\n}\n\ndeclare module '*.mp3' {\n  export default string\n}\n\ndeclare module '*.ogg' {\n  export default string\n}\n"
  },
  {
    "path": "packages/playground/src/public/_redirects",
    "content": "/*    /index.html   200"
  },
  {
    "path": "packages/playground/src/shared/camera/App.tsx",
    "content": "import {\n  editable as e,\n  RefreshSnapshot,\n  SheetProvider,\n  PerspectiveCamera,\n} from '@theatre/r3f'\nimport {Stars} from '@react-three/drei'\nimport {getProject} from '@theatre/core'\nimport React, {Suspense, useRef, useState} from 'react'\nimport {Canvas} from '@react-three/fiber'\nimport {useGLTF} from '@react-three/drei'\nimport sceneGLB from './scene.glb'\nimport type {Mesh} from 'three'\n\ndocument.body.style.backgroundColor = '#171717'\n\nfunction Model({url}: {url: string}) {\n  const {nodes} = useGLTF(url) as any\n\n  return (\n    <group rotation={[-Math.PI / 2, 0, 0]} position={[0, -7, 0]} scale={7}>\n      <group rotation={[Math.PI / 13.5, -Math.PI / 5.8, Math.PI / 5.6]}>\n        <e.mesh\n          theatreKey=\"Example Namespace / Thingy\"\n          receiveShadow\n          castShadow\n          geometry={nodes.planet001.geometry}\n          material={nodes.planet001.material}\n        />\n        <e.mesh\n          theatreKey=\"Example Namespace / Debris 2\"\n          receiveShadow\n          castShadow\n          geometry={nodes.planet002.geometry}\n          material={nodes.planet002.material}\n        />\n        <e.mesh\n          theatreKey=\"Debris 1\"\n          geometry={nodes.planet003.geometry}\n          material={nodes.planet003.material}\n        />\n      </group>\n    </group>\n  )\n}\n\nfunction App() {\n  const bgs = ['#272730', '#b7c5d1']\n  const [bgIndex, setBgIndex] = useState(0)\n  const bg = bgs[bgIndex]\n  const cameraTargetRef = useRef<Mesh>(null!)\n\n  return (\n    <div\n      onClick={() => {\n        // return setBgIndex((bgIndex) => (bgIndex + 1) % bgs.length)\n      }}\n      style={{\n        height: '100vh',\n      }}\n    >\n      <Canvas\n        dpr={[1.5, 2]}\n        linear\n        shadows\n        gl={{preserveDrawingBuffer: true}}\n        frameloop=\"demand\"\n      >\n        <SheetProvider sheet={getProject('Space').sheet('Scene')}>\n          <fog attach=\"fog\" args={[bg, 16, 30]} />\n          <color attach=\"background\" args={[bg]} />\n          <ambientLight intensity={0.75} />\n          <PerspectiveCamera\n            theatreKey=\"Camera / Camera\"\n            makeDefault\n            position={[0, 0, 16]}\n            fov={75}\n            lookAt={cameraTargetRef}\n          >\n            <e.pointLight\n              theatreKey=\"Light 1\"\n              intensity={1}\n              position={[-10, -25, -10]}\n            />\n            <e.spotLight\n              theatreKey=\"Light 2\"\n              castShadow\n              intensity={2.25}\n              angle={0.2}\n              penumbra={1}\n              position={[-25, 20, -15]}\n              shadow-mapSize={[1024, 1024]}\n              shadow-bias={-0.0001}\n            />\n            <e.directionalLight theatreKey=\"Light 3\" />\n          </PerspectiveCamera>\n          <e.mesh\n            ref={cameraTargetRef}\n            theatreKey=\"Camera / Target\"\n            position={[0, 0, 0]}\n            visible=\"editor\"\n          >\n            <boxBufferGeometry attach=\"geometry\" />\n            <meshPhongMaterial attach=\"material\" color=\"red\" />\n          </e.mesh>\n          <Suspense fallback={null}>\n            <RefreshSnapshot />\n            <Model url={sceneGLB} />\n          </Suspense>\n          <Stars radius={500} depth={50} count={1000} factor={10} />\n        </SheetProvider>\n      </Canvas>\n    </div>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "packages/playground/src/shared/camera/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/camera/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport theatre from '@theatre/core'\nimport extension from '@theatre/r3f/dist/extension'\n\nvoid theatre.getStudio().then((studio) => {\n  studio.extend(extension)\n})\nvoid theatre.init({serverUrl: 'http://localhost:3000'})\n\nReactDOM.createRoot(document.getElementById('root')!).render(<App />)\n"
  },
  {
    "path": "packages/playground/src/shared/custom-editable-components/App.tsx",
    "content": "import {editable as e, SheetProvider} from '@theatre/r3f'\nimport {getProject} from '@theatre/core'\nimport React from 'react'\nimport {Canvas} from '@react-three/fiber'\n\nconst EditablePoints = e('points', 'mesh')\n\nfunction App() {\n  return (\n    <div\n      style={{\n        height: '100vh',\n      }}\n    >\n      <Canvas\n        dpr={[1.5, 2]}\n        linear\n        gl={{preserveDrawingBuffer: true}}\n        frameloop=\"demand\"\n      >\n        <SheetProvider sheet={getProject('Space').sheet('Scene')}>\n          <ambientLight intensity={0.75} />\n          <EditablePoints theatreKey=\"points\">\n            <torusKnotGeometry args={[1, 0.3, 128, 64]} />\n            <meshNormalMaterial />\n          </EditablePoints>\n        </SheetProvider>\n      </Canvas>\n    </div>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "packages/playground/src/shared/custom-editable-components/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/custom-editable-components/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport theatre from '@theatre/core'\nimport extension from '@theatre/r3f/dist/extension'\n\nvoid theatre.getStudio().then((studio) => studio.extend(extension))\nvoid theatre.init({studio: true, serverUrl: 'http://localhost:3000'})\n\nReactDOM.createRoot(document.getElementById('root')!).render(<App />)\n"
  },
  {
    "path": "packages/playground/src/shared/custom-raf-driver/App.tsx",
    "content": "import {editable as e, RafDriverProvider, SheetProvider} from '@theatre/r3f'\nimport type {IRafDriver} from '@theatre/core'\nimport {getProject} from '@theatre/core'\nimport React from 'react'\nimport {Canvas} from '@react-three/fiber'\n\nconst EditablePoints = e('points', 'mesh')\n\nfunction App(props: {rafDriver: IRafDriver}) {\n  return (\n    <div\n      style={{\n        height: '100vh',\n      }}\n    >\n      <Canvas\n        dpr={[1.5, 2]}\n        linear\n        gl={{preserveDrawingBuffer: true}}\n        frameloop=\"demand\"\n      >\n        <SheetProvider sheet={getProject('Space').sheet('Scene')}>\n          <RafDriverProvider driver={props.rafDriver}>\n            <ambientLight intensity={0.75} />\n            <EditablePoints theatreKey=\"points\">\n              <torusKnotGeometry args={[1, 0.3, 128, 64]} />\n              <meshNormalMaterial />\n            </EditablePoints>\n          </RafDriverProvider>\n        </SheetProvider>\n      </Canvas>\n    </div>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "packages/playground/src/shared/custom-raf-driver/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/custom-raf-driver/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport theatre from '@theatre/core'\nimport extension from '@theatre/r3f/dist/extension'\nimport {createRafDriver} from '@theatre/core'\n\nconst rafDriver = createRafDriver({name: 'a custom 5fps raf driver'})\nsetInterval(() => {\n  rafDriver.tick(performance.now())\n}, 200)\n\nvoid theatre.getStudio().then((studio) => studio.extend(extension))\nvoid theatre.init({studio: true, __experimental_rafDriver: rafDriver})\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n  <App rafDriver={rafDriver} />,\n)\n"
  },
  {
    "path": "packages/playground/src/shared/dom/Scene.tsx",
    "content": "import { getStudioSync} from '@theatre/core'\nimport type {UseDragOpts} from './useDrag'\nimport useDrag from './useDrag'\nimport React, {useLayoutEffect, useMemo, useRef, useState} from 'react'\nimport type {\n  IProject,\n  ISheet,\n  ShorthandCompoundPropsToInitialValue,\n} from '@theatre/core'\nimport {onChange, types} from '@theatre/core'\nimport type {IScrub, IStudio} from '@theatre/core'\n\nconst textInterpolate = (left: string, right: string, progression: number) => {\n  if (!left || right.startsWith(left)) {\n    const length = Math.floor(\n      Math.max(0, (right.length - left.length) * progression),\n    )\n    return left + right.slice(left.length, left.length + length)\n  }\n  return left\n}\n\nconst globalConfig = {\n  background: {\n    type: types.stringLiteral('black', {\n      black: 'black',\n      white: 'white',\n      dynamic: 'dynamic',\n    }),\n    dynamic: types.rgba(),\n  },\n}\n\nconst boxObjectConfig = {\n  test: types.string('Hello?', {interpolate: textInterpolate}),\n  testLiteral: types.stringLiteral('a', {a: 'Option A', b: 'Option B'}),\n  bool: types.boolean(false),\n  favoriteFood: types.compound({\n    name: types.string('Pie'),\n    // if needing more compounds, consider adding weight with different units\n    price: types.compound({\n      currency: types.stringLiteral('USD', {USD: 'USD', EUR: 'EUR'}),\n      amount: types.number(10, {range: [0, 1000], label: '$'}),\n    }),\n  }),\n  pos: {\n    x: types.number(200),\n    y: types.number(200),\n  },\n  color: types.rgba({r: 1, g: 0, b: 0, a: 1}),\n}\n\n// this can also be inferred with\ntype _State = ShorthandCompoundPropsToInitialValue<typeof boxObjectConfig>\ntype State = {\n  pos: {\n    x: number\n    y: number\n  }\n  test: string\n  testLiteral: string\n  bool: boolean\n  // a compound compound prop\n  favoriteFood: {\n    name: string\n    price: {\n      amount: number\n      currency: string\n    }\n  }\n  color: {\n    r: number\n    g: number\n    b: number\n    a: number\n  }\n}\n\nconst Box: React.FC<{\n  id: string\n  sheet: ISheet\n  selection: IStudio['selection']\n}> = ({id, sheet, selection}) => {\n  const defaultConfig = useMemo(\n    () =>\n      Object.assign({}, boxObjectConfig, {\n        // give the box initial values offset from each other\n        pos: {\n          x: ((id.codePointAt(0) ?? 0) % 15) * 100,\n          y: ((id.codePointAt(0) ?? 0) % 15) * 100,\n        },\n      }),\n    [id],\n  )\n\n  // This is cheap to call and always returns the same value, so no need for useMemo()\n  const obj = sheet.object(id, defaultConfig)\n\n  const isSelected = selection.includes(obj)\n\n  const boxRef = useRef<HTMLDivElement>(null!)\n  const preRef = useRef<HTMLPreElement>(null!)\n  const colorRef = useRef<HTMLDivElement>(null!)\n\n  useLayoutEffect(() => {\n    const unsubscribeFromChanges = onChange(obj.props, (newValues) => {\n      boxRef.current.style.transform = `translate(${newValues.pos.x}px, ${newValues.pos.y}px)`\n      preRef.current.innerText = JSON.stringify(newValues, null, 2)\n      colorRef.current.style.background = newValues.color.toString()\n    })\n    return unsubscribeFromChanges\n  }, [])\n\n  const dragOpts = useMemo((): UseDragOpts => {\n    let scrub: IScrub | undefined\n    let initial: typeof obj.value.pos\n    let firstOnDragCalled = false\n    return {\n      onDragStart() {\n        scrub = getStudioSync()!.scrub()\n        initial = obj.value.pos\n        firstOnDragCalled = false\n      },\n      onDrag(x, y) {\n        if (!firstOnDragCalled) {\n          getStudioSync()!.setSelection([obj])\n          firstOnDragCalled = true\n        }\n        scrub!.capture(({set}) => {\n          set(obj.props.pos, {\n            ...initial,\n            x: x + initial.x,\n            y: y + initial.y,\n          })\n        })\n      },\n      onDragEnd(dragHappened) {\n        if (dragHappened) {\n          scrub!.commit()\n        } else {\n          scrub!.discard()\n        }\n      },\n      lockCursorTo: 'move',\n    }\n  }, [])\n\n  useDrag(boxRef.current, dragOpts)\n\n  return (\n    <div\n      onClick={() => {\n        getStudioSync()!.setSelection([obj])\n      }}\n      ref={boxRef}\n      style={{\n        width: 300,\n        height: 300,\n        color: 'white',\n        position: 'absolute',\n        boxSizing: 'border-box',\n        border: isSelected ? '1px solid #5a92fa' : '1px solid white',\n      }}\n    >\n      <pre style={{margin: 0, padding: '1rem'}} ref={preRef}></pre>\n      <div\n        ref={colorRef}\n        style={{\n          height: 50,\n        }}\n      />\n    </div>\n  )\n}\n\nlet lastBoxId = 1\n\nexport const Scene: React.FC<{project: IProject}> = ({project}) => {\n  const [boxes, setBoxes] = useState<Array<string>>(['0', '1'])\n\n  // This is cheap to call and always returns the same value, so no need for useMemo()\n  const sheet = project.sheet('Scene', 'default')\n  const [selection, setSelection] = useState<IStudio['selection']>()\n\n  useLayoutEffect(() => {\n    return getStudioSync()!.onSelectionChange((newState) => {\n      setSelection(newState)\n    })\n  }, [])\n\n  const containerRef = useRef<HTMLDivElement>(null!)\n\n  const globalObj = sheet.object('global', globalConfig)\n\n  useLayoutEffect(() => {\n    const unsubscribeFromChanges = onChange(globalObj.props, (newValues) => {\n      containerRef.current.style.background =\n        newValues.background.type !== 'dynamic'\n          ? newValues.background.type\n          : newValues.background.dynamic.toString()\n    })\n    return unsubscribeFromChanges\n  }, [globalObj])\n\n  return (\n    <div\n      ref={containerRef}\n      style={{\n        position: 'absolute',\n        left: '0',\n        right: '0',\n        top: 0,\n        bottom: '0',\n        background: '#333',\n      }}\n    >\n      <button\n        style={{\n          top: '16px',\n          left: '60px',\n          position: 'absolute',\n          padding: '.25rem .5rem',\n        }}\n        onClick={() => {\n          setBoxes((boxes) => [...boxes, String(++lastBoxId)])\n        }}\n      >\n        Add\n      </button>\n      {boxes.map((id) => (\n        <Box\n          key={'box' + id}\n          id={`Box / ${id}`}\n          sheet={sheet}\n          selection={selection ?? []}\n        />\n      ))}\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/playground/src/shared/dom/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/dom/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport theatre from '@theatre/core'\nimport {getProject} from '@theatre/core'\nimport {Scene} from './Scene'\n\n/**\n * This is a basic example of using Theatre.js for manipulating the DOM.\n *\n * It also uses {@link IStudio.selection | studio.selection} to customize\n * the selection behavior.\n */\n\nvoid theatre.init({studio: true})\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n  <Scene\n    project={getProject('Sample project', {\n      // experiments: {\n      //   logging: {\n      //     internal: true,\n      //     dev: true,\n      //     min: TheatreLoggerLevel.TRACE,\n      //   },\n      // },\n    })}\n  />,\n)\n"
  },
  {
    "path": "packages/playground/src/shared/dom/useDrag.ts",
    "content": "import {useLayoutEffect, useRef} from 'react'\n\nconst noop = () => {}\n\nfunction createCursorLock(cursor: string) {\n  const el = document.createElement('div')\n  el.style.cssText = `\n    position: fixed;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 9999999;`\n\n  el.style.cursor = cursor\n  document.body.appendChild(el)\n  const relinquish = () => {\n    document.body.removeChild(el)\n  }\n\n  return relinquish\n}\n\nexport type UseDragOpts = {\n  disabled?: boolean\n  dontBlockMouseDown?: boolean\n  lockCursorTo?: string\n  onDragStart?: (event: MouseEvent) => void | false\n  onDragEnd?: (dragHappened: boolean) => void\n  onDrag: (dx: number, dy: number, event: MouseEvent) => void\n}\n\nexport default function useDrag(\n  target: HTMLElement | undefined | null,\n  opts: UseDragOpts,\n) {\n  const optsRef = useRef<typeof opts>(opts)\n  optsRef.current = opts\n\n  const modeRef = useRef<'dragStartCalled' | 'dragging' | 'notDragging'>(\n    'notDragging',\n  )\n\n  const stateRef = useRef<{\n    dragHappened: boolean\n    startPos: {\n      x: number\n      y: number\n    }\n  }>({dragHappened: false, startPos: {x: 0, y: 0}})\n\n  useLayoutEffect(() => {\n    if (!target) return\n\n    const getDistances = (event: MouseEvent): [number, number] => {\n      const {startPos} = stateRef.current\n      return [event.screenX - startPos.x, event.screenY - startPos.y]\n    }\n\n    let relinquishCursorLock = noop\n\n    const dragHandler = (event: MouseEvent) => {\n      if (!stateRef.current.dragHappened && optsRef.current.lockCursorTo) {\n        relinquishCursorLock = createCursorLock(optsRef.current.lockCursorTo)\n      }\n      if (!stateRef.current.dragHappened) stateRef.current.dragHappened = true\n      modeRef.current = 'dragging'\n\n      const deltas = getDistances(event)\n      optsRef.current.onDrag(deltas[0], deltas[1], event)\n    }\n\n    const dragEndHandler = () => {\n      removeDragListeners()\n      modeRef.current = 'notDragging'\n\n      optsRef.current.onDragEnd &&\n        optsRef.current.onDragEnd(stateRef.current.dragHappened)\n      relinquishCursorLock()\n      relinquishCursorLock = noop\n    }\n\n    const addDragListeners = () => {\n      document.addEventListener('mousemove', dragHandler)\n      document.addEventListener('mouseup', dragEndHandler)\n    }\n\n    const removeDragListeners = () => {\n      document.removeEventListener('mousemove', dragHandler)\n      document.removeEventListener('mouseup', dragEndHandler)\n    }\n\n    const preventUnwantedClick = (event: MouseEvent) => {\n      if (optsRef.current.disabled) return\n      if (stateRef.current.dragHappened) {\n        if (\n          !optsRef.current.dontBlockMouseDown &&\n          modeRef.current !== 'notDragging'\n        ) {\n          event.stopPropagation()\n          event.preventDefault()\n        }\n        stateRef.current.dragHappened = false\n      }\n    }\n\n    const dragStartHandler = (event: MouseEvent) => {\n      const opts = optsRef.current\n      if (opts.disabled === true) return\n\n      if (event.button !== 0) return\n      const resultOfStart = opts.onDragStart && opts.onDragStart(event)\n\n      if (resultOfStart === false) return\n\n      if (!opts.dontBlockMouseDown) {\n        event.stopPropagation()\n        event.preventDefault()\n      }\n\n      modeRef.current = 'dragStartCalled'\n\n      const {screenX, screenY} = event\n      stateRef.current.startPos = {x: screenX, y: screenY}\n      stateRef.current.dragHappened = false\n\n      addDragListeners()\n    }\n\n    const onMouseDown = (e: MouseEvent) => {\n      dragStartHandler(e)\n    }\n\n    target.addEventListener('mousedown', onMouseDown)\n    target.addEventListener('click', preventUnwantedClick)\n\n    return () => {\n      removeDragListeners()\n      target.removeEventListener('mousedown', onMouseDown)\n      target.removeEventListener('click', preventUnwantedClick)\n      relinquishCursorLock()\n\n      if (modeRef.current !== 'notDragging') {\n        optsRef.current.onDragEnd &&\n          optsRef.current.onDragEnd(modeRef.current === 'dragging')\n      }\n      modeRef.current = 'notDragging'\n    }\n  }, [target])\n}\n"
  },
  {
    "path": "packages/playground/src/shared/dom-basic/Box3D.tsx",
    "content": "import React, {useEffect, useRef} from 'react'\nimport type {CSSProperties} from 'react'\nimport {types} from '@theatre/core'\nimport type {ISheet} from '@theatre/core'\n\n// Box element\nexport const BoxSize = 100\n\nconst Box3DCSS: CSSProperties = {\n  border: '1px solid #999',\n  position: 'absolute',\n  width: `${BoxSize}px`,\n  height: `${BoxSize}px`,\n}\n\nconst Box3DTextCSS: CSSProperties = {\n  margin: '0',\n  padding: '0',\n  position: 'absolute',\n  left: '50%',\n  top: '50%',\n  transform: 'translate(-50%, -50%)',\n  textAlign: 'center',\n  width: '100%',\n}\n\nexport const Box3D: React.FC<{\n  sheet: ISheet\n  name: string\n  x: number\n  y: number\n}> = ({sheet, name, x, y}) => {\n  const elementRef = useRef<HTMLDivElement>(null)\n\n  // Animation\n  useEffect(() => {\n    const element = elementRef.current!\n    const sheetObj = sheet.object(`Box - ${name}`, {\n      background: types.rgba({r: 16 / 255, g: 16 / 255, b: 16 / 255, a: 1}),\n      opacity: types.number(1, {range: [0, 1]}),\n      position: {\n        x: x,\n        y: y,\n        z: 0,\n      },\n      rotation: {\n        x: types.number(0, {range: [-360, 360]}),\n        y: types.number(0, {range: [-360, 360]}),\n        z: types.number(0, {range: [-360, 360]}),\n      },\n      scale: {\n        x: 1,\n        y: 1,\n        z: 1,\n      },\n    })\n    const unsubscribe = sheetObj.onValuesChange((values: any) => {\n      const {background, opacity, position, rotation, scale} = values\n      element.style.backgroundColor = `rgba(${background.r * 255}, ${\n        background.g * 255\n      }, ${background.b * 255}, 1)`\n      element.style.opacity = opacity\n      const translate3D = `translate3d(${position.x}px, ${position.y}px, ${position.z}px)`\n      const rotate3D = `rotateX(${rotation.x}deg) rotateY(${rotation.y}deg) rotateZ(${rotation.z}deg)`\n      const scale3D = `scaleX(${scale.x}) scaleY(${scale.y}) scaleZ(${scale.z})`\n      const transform = `${scale3D} ${translate3D} ${rotate3D}`\n      element.style.transform = transform\n    })\n    return () => {\n      unsubscribe()\n    }\n  }, [])\n\n  return (\n    <div ref={elementRef} style={Box3DCSS}>\n      <span style={Box3DTextCSS}>{name}</span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/playground/src/shared/dom-basic/Scene.tsx",
    "content": "import React, {useEffect, useRef} from 'react'\nimport type {CSSProperties} from 'react'\nimport {types} from '@theatre/core'\nimport type {IProject} from '@theatre/core'\nimport {Box3D, BoxSize} from './Box3D'\n\n// Scene\n\nconst SceneCSS: CSSProperties = {\n  overflow: 'hidden',\n  position: 'absolute',\n  left: '0',\n  right: '0',\n  top: '0',\n  bottom: '0',\n}\n\nexport const Scene: React.FC<{project: IProject}> = ({project}) => {\n  const containerRef = useRef<HTMLDivElement>(null!)\n  const sheet = project.sheet('DOM')\n\n  useEffect(() => {\n    const container = containerRef.current!\n    const sheetObj = sheet.object('Container', {\n      perspective: types.number(\n        Math.max(window.innerWidth, window.innerHeight),\n        {range: [0, 2000]},\n      ),\n      originX: types.number(50, {range: [0, 100]}),\n      originY: types.number(50, {range: [0, 100]}),\n    })\n    const unsubscribe = sheetObj.onValuesChange((values: any) => {\n      container.style.perspective = `${values.perspective}px`\n      container.style.perspectiveOrigin = `${values.originX}% ${values.originY}%`\n    })\n    return () => {\n      unsubscribe()\n    }\n  }, [])\n\n  const padding = 100\n  const right = window.innerWidth - padding - BoxSize\n  const bottom = window.innerHeight - padding - BoxSize\n\n  return (\n    <div ref={containerRef} style={SceneCSS}>\n      <Box3D sheet={sheet} name=\"Top Left\" x={padding} y={padding} />\n      <Box3D sheet={sheet} name=\"Top Right\" x={right} y={padding} />\n      <Box3D sheet={sheet} name=\"Bottom Left\" x={padding} y={bottom} />\n      <Box3D sheet={sheet} name=\"Bottom Right\" x={right} y={bottom} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/playground/src/shared/dom-basic/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/dom-basic/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport theatre from '@theatre/core'\nimport {getProject} from '@theatre/core'\nimport {Scene} from './Scene'\n/**\n * This is a basic example of using Theatre.js for manipulating the DOM.\n */\n\nvoid theatre.init({studio: true})\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n  <Scene project={getProject('Sample project')} />,\n)\n"
  },
  {
    "path": "packages/playground/src/shared/file/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/file/index.tsx",
    "content": "import {getProject, types} from '@theatre/core'\nimport theatre from '@theatre/core'\nimport React, {useEffect, useState} from 'react'\nimport ReactDom from 'react-dom/client'\nimport styled from 'styled-components'\n\nconst project = getProject('Image type playground', {\n  assets: {\n    baseUrl: '/',\n  },\n})\nvoid theatre.init({studio: true})\nconst sheet = project.sheet('Image type')\n\nconst Wrapper = styled.div`\n  position: absolute;\n  inset: 0;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`\n\nconst FileTypeExample: React.FC<{}> = (props) => {\n  const [fileUrl, setFileUrl] = useState<string>()\n\n  useEffect(() => {\n    const object = sheet.object('File holder', {\n      f: types.file('', {\n        label: 'The OBJ',\n      }),\n    })\n    object.onValuesChange(({f}) => {\n      setFileUrl(project.getAssetUrl(f))\n    })\n\n    return () => {\n      sheet.detachObject('canvas')\n    }\n  }, [])\n\n  return <Wrapper>File url is: {fileUrl}</Wrapper>\n}\n\nproject.ready\n  .then(() => {\n    ReactDom.createRoot(document.getElementById('root')!).render(\n      <FileTypeExample />,\n    )\n  })\n  .catch((err) => {\n    console.error(err)\n  })\n"
  },
  {
    "path": "packages/playground/src/shared/hello-world-extension/App.tsx",
    "content": "import {editable as e, SheetProvider} from '@theatre/r3f'\nimport {Stars, TorusKnot} from '@react-three/drei'\nimport {getProject, onChange} from '@theatre/core'\nimport React from 'react'\nimport {Canvas} from '@react-three/fiber'\n\nfunction App() {\n  const sheet = getProject('Space').sheet('Scene')\n  onChange(sheet.sequence.pointer, (a) => {\n    console.log('gasp!!', a)\n  })\n  return (\n    <div\n      onClick={() => {\n        // return setBgIndex((bgIndex) => (bgIndex + 1) % bgs.length)\n      }}\n      style={{\n        height: '100vh',\n      }}\n    >\n      <Canvas\n        dpr={[1.5, 2]}\n        linear\n        gl={{preserveDrawingBuffer: true}}\n        frameloop=\"demand\"\n      >\n        <SheetProvider sheet={sheet}>\n          <ambientLight intensity={0.75} />\n          <e.group theatreKey=\"trefoil\">\n            <TorusKnot scale={[1, 1, 1]} args={[1, 0.3, 128, 64]}>\n              <meshNormalMaterial />\n            </TorusKnot>\n          </e.group>\n          <Stars radius={500} depth={50} count={1000} factor={10} />\n        </SheetProvider>\n      </Canvas>\n    </div>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "packages/playground/src/shared/hello-world-extension/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/hello-world-extension/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport theatre from '@theatre/core'\nimport extension from '@theatre/r3f/dist/extension'\n\nvoid theatre.getStudio().then((studio) => {\n  studio.extend(extension)\n  studio.extend({\n    id: '@theatre/hello-world-extension',\n    toolbars: {\n      global(set, studio) {\n        let switchValue = 'mobile'\n        const updateToolset = () =>\n          set([\n            {\n              type: 'Switch',\n              value: switchValue,\n              onChange: (value) => {\n                switchValue = value\n                updateToolset()\n              },\n              options: [\n                {\n                  value: 'mobile',\n                  label: 'view mobile version',\n                  svgSource: '😀',\n                },\n                {\n                  value: 'desktop',\n                  label: 'view desktop version',\n                  svgSource: '🪢',\n                },\n              ],\n            },\n            {\n              type: 'Icon',\n              title: 'Example Icon',\n              svgSource: '👁‍🗨',\n              onClick: () => {\n                studio.createPane('example')\n              },\n            },\n            {\n              type: 'Flyout',\n              label: '🫠',\n              items: [\n                {\n                  label: 'Item 1',\n                  onClick: () => {\n                    console.log('Item 1 clicked')\n                  },\n                },\n                {\n                  label: 'Item 2',\n                  onClick: () => {\n                    console.log('Item 2 clicked')\n                  },\n                },\n                {\n                  label: 'Item 3',\n                  onClick: () => {\n                    console.log('Item 3 clicked')\n                  },\n                },\n                {\n                  label: 'Item 4',\n                  onClick: () => {\n                    console.log('Item 4 clicked')\n                  },\n                },\n              ],\n            },\n          ])\n\n        updateToolset()\n\n        return () => {\n          // remove any listeners if necessary when the extension is unloaded\n        }\n      },\n    },\n    panes: [\n      {\n        class: 'example',\n        mount: ({paneId, node}) => {\n          studio.ui.renderToolset('global', node)\n\n          return () => {}\n        },\n      },\n    ],\n  })\n})\nvoid theatre.init({studio: true})\n\nReactDOM.createRoot(document.getElementById('root')!).render(<App />)\n"
  },
  {
    "path": "packages/playground/src/shared/hello-world-extension-dataverse/App.tsx",
    "content": "import {editable as e, SheetProvider} from '@theatre/r3f'\nimport {Stars, TorusKnot} from '@react-three/drei'\nimport {getProject} from '@theatre/core'\nimport React from 'react'\nimport {Canvas} from '@react-three/fiber'\n\nfunction App() {\n  return (\n    <div\n      onClick={() => {\n        // return setBgIndex((bgIndex) => (bgIndex + 1) % bgs.length)\n      }}\n      style={{\n        height: '100vh',\n      }}\n    >\n      <Canvas\n        dpr={[1.5, 2]}\n        linear\n        gl={{preserveDrawingBuffer: true}}\n        frameloop=\"demand\"\n      >\n        <SheetProvider sheet={getProject('Space').sheet('Scene')}>\n          <ambientLight intensity={0.75} />\n          <e.group theatreKey=\"trefoil\">\n            <TorusKnot scale={[1, 1, 1]} args={[1, 0.3, 128, 64]}>\n              <meshNormalMaterial />\n            </TorusKnot>\n          </e.group>\n          <Stars radius={500} depth={50} count={1000} factor={10} />\n        </SheetProvider>\n      </Canvas>\n    </div>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "packages/playground/src/shared/hello-world-extension-dataverse/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/hello-world-extension-dataverse/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport type {ToolsetConfig} from '@theatre/core'\nimport theatre from '@theatre/core'\nimport extension from '@theatre/r3f/dist/extension'\nimport {Atom, prism, val} from '@theatre/dataverse'\nimport {onChange} from '@theatre/core'\n\n/**\n * Let's take a look at how we can use `prism`, `Ticker`, and `val` from Theatre.js's Dataverse library\n * to create a switch with state that is updated automatically,\n * and is even stored in a Theatre.js object.\n *\n * Without going into the details of `prism`, `Ticker`, and `val`, note that by wrapping our `ToolsetConfig` in a prism, our\n * ```ts\n * ... .onChange(Ticker.raf, (toolset) => {\n *       set(toolset)\n *     }, true)\n * ```\n * code will be called whenever `val(obj.props.exampleProp)` changes (whenever the user clicks the switch and the `onChange` callback is called).\n * This will ensure that our switch's value matches its state and is reflected in the UI via `set(toolset)`.\n */\n\nvoid theatre.getStudio().then((studio) => {\n  studio.extend(extension)\n  studio.extend({\n    id: '@theatre/hello-world-extension',\n    toolbars: {\n      global(set, studio) {\n        const exampleBox = new Atom('mobile')\n\n        const untapFn = onChange(\n          prism<ToolsetConfig>(() => [\n            {\n              type: 'Switch',\n              value: val(exampleBox.prism),\n              onChange: (value) => exampleBox.set(value),\n              options: [\n                {\n                  value: 'mobile',\n                  label: 'view mobile version',\n                  svgSource: '😀',\n                },\n                {\n                  value: 'desktop',\n                  label: 'view desktop version',\n                  svgSource: '🪢',\n                },\n              ],\n            },\n            {\n              type: 'Icon',\n              title: 'Example Icon',\n              svgSource: '👁‍🗨',\n              onClick: () => {\n                console.log('hello')\n              },\n            },\n          ]),\n          (value) => {\n            set(value)\n          },\n        )\n        // listen to changes to this prism using the requestAnimationFrame shared ticker\n\n        return untapFn\n      },\n    },\n    panes: [],\n  })\n})\nvoid theatre.init({studio: true})\n\nReactDOM.createRoot(document.getElementById('root')!).render(<App />)\n"
  },
  {
    "path": "packages/playground/src/shared/hello-world-extension-using-sheet-object/App.tsx",
    "content": "import {editable as e, SheetProvider} from '@theatre/r3f'\nimport {Stars, TorusKnot} from '@react-three/drei'\nimport {getProject} from '@theatre/core'\nimport React from 'react'\nimport {Canvas} from '@react-three/fiber'\n\nfunction App() {\n  return (\n    <div\n      onClick={() => {\n        // return setBgIndex((bgIndex) => (bgIndex + 1) % bgs.length)\n      }}\n      style={{\n        height: '100vh',\n      }}\n    >\n      <Canvas\n        dpr={[1.5, 2]}\n        linear\n        gl={{preserveDrawingBuffer: true}}\n        frameloop=\"demand\"\n      >\n        <SheetProvider sheet={getProject('Space').sheet('Scene')}>\n          <ambientLight intensity={0.75} />\n          <e.group theatreKey=\"trefoil\">\n            <TorusKnot scale={[1, 1, 1]} args={[1, 0.3, 128, 64]}>\n              <meshNormalMaterial />\n            </TorusKnot>\n          </e.group>\n          <Stars radius={500} depth={50} count={1000} factor={10} />\n        </SheetProvider>\n      </Canvas>\n    </div>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "packages/playground/src/shared/hello-world-extension-using-sheet-object/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/hello-world-extension-using-sheet-object/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport type {ISheetObject} from '@theatre/core'\nimport {onChange, types, val} from '@theatre/core'\nimport theatre from '@theatre/core'\nimport extension from '@theatre/r3f/dist/extension'\n\nconst dataConfig = {\n  exampleProp: types.stringLiteral('yes', {\n    no: 'no',\n    yes: 'yes',\n  }),\n}\n\nvoid theatre.getStudio().then((studio) => {\n  studio.extend(extension)\n  studio.extend({\n    id: '@theatre/hello-world-extension',\n    toolbars: {\n      global(set, studio) {\n        // A sheet object used by this extension\n        const obj: ISheetObject<typeof dataConfig> = studio\n          .getStudioProject()\n          .sheet('example extension UI')\n          .object('editor', dataConfig)\n\n        const updateToolset = () =>\n          set([\n            {\n              type: 'Switch',\n              value: val(obj.props.exampleProp),\n              onChange: (value) =>\n                studio.transaction(({set}) =>\n                  set(obj.props.exampleProp, value),\n                ),\n              options: [\n                {\n                  value: 'no',\n                  label: 'say no',\n                  svgSource: '👎',\n                },\n                {\n                  value: 'yes',\n                  label: 'say yes',\n                  svgSource: '👍',\n                },\n              ],\n            },\n          ])\n\n        const untapFn = onChange(obj.props.exampleProp, () => {\n          updateToolset()\n        })\n\n        // initial update\n        updateToolset()\n\n        return untapFn\n      },\n    },\n    panes: [],\n  })\n})\nvoid theatre.init({studio: true})\n\nReactDOM.createRoot(document.getElementById('root')!).render(<App />)\n"
  },
  {
    "path": "packages/playground/src/shared/image/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/image/index.tsx",
    "content": "import {getProject, types} from '@theatre/core'\nimport theatre from '@theatre/core'\nimport React, {useEffect, useState} from 'react'\nimport ReactDom from 'react-dom/client'\nimport styled from 'styled-components'\n\nconst project = getProject('Image type playground', {\n  assets: {\n    baseUrl: '/',\n  },\n})\nvoid theatre.init({studio: true})\nconst sheet = project.sheet('Image type')\n\nconst Wrapper = styled.div`\n  position: absolute;\n  inset: 0;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`\n\nconst ImageTypeExample: React.FC<{}> = (props) => {\n  const [imageUrl, setImageUrl] = useState<string>()\n\n  useEffect(() => {\n    const object = sheet.object('image', {\n      image: types.image('', {\n        label: 'texture',\n      }),\n      image2: types.image('', {\n        label: 'another texture',\n      }),\n      // audio: types.__genericAsset(''),\n      something: 'asdf',\n      color: types.rgba(),\n    })\n    object.onValuesChange(({image}) => {\n      setImageUrl(project.getAssetUrl(image))\n    })\n\n    return () => {\n      sheet.detachObject('canvas')\n    }\n  }, [])\n\n  return (\n    <Wrapper\n      onClick={() => {\n        if (sheet.sequence.position === 0) {\n          sheet.sequence.position = 0\n          void sheet.sequence.play()\n        } else {\n          sheet.sequence.position = 0\n        }\n      }}\n    >\n      <img src={imageUrl} />\n    </Wrapper>\n  )\n}\n\nproject.ready\n  .then(() => {\n    ReactDom.createRoot(document.getElementById('root')!).render(\n      <ImageTypeExample />,\n    )\n  })\n  .catch((err) => {\n    console.error(err)\n  })\n"
  },
  {
    "path": "packages/playground/src/shared/instances/App.tsx",
    "content": "import {editable as e, RefreshSnapshot, SheetProvider} from '@theatre/r3f'\nimport {Stars} from '@react-three/drei'\nimport {getProject} from '@theatre/core'\nimport React, {Suspense, useState} from 'react'\nimport {Canvas} from '@react-three/fiber'\nimport {useGLTF, PerspectiveCamera} from '@react-three/drei'\nimport sceneGLB from './scene.glb'\n\ndocument.body.style.backgroundColor = '#171717'\n\nconst EditableCamera = e(PerspectiveCamera, 'perspectiveCamera')\n\nfunction Model({\n  url,\n  instance,\n  ...props\n}: {url: string; instance?: string} & JSX.IntrinsicElements['group']) {\n  const {nodes} = useGLTF(url) as any\n\n  return (\n    <e.group\n      theatreKey={`Transforms for Rocket: ${instance ?? 'default'}`}\n      {...props}\n    >\n      <SheetProvider sheet={getProject('Space').sheet('Rocket', instance)}>\n        <group rotation={[-Math.PI / 2, 0, 0]} position={[0, -7, 0]} scale={7}>\n          <group rotation={[Math.PI / 13.5, -Math.PI / 5.8, Math.PI / 5.6]}>\n            <e.mesh\n              theatreKey=\"Thingy\"\n              receiveShadow\n              castShadow\n              geometry={nodes.planet001.geometry}\n              material={nodes.planet001.material}\n            />\n            <e.mesh\n              theatreKey=\"Debris 2\"\n              receiveShadow\n              castShadow\n              geometry={nodes.planet002.geometry}\n              material={nodes.planet002.material}\n            />\n            <e.mesh\n              theatreKey=\"Debris 1\"\n              geometry={nodes.planet003.geometry}\n              material={nodes.planet003.material}\n            />\n          </group>\n        </group>\n      </SheetProvider>\n    </e.group>\n  )\n}\n\nfunction App() {\n  const bgs = ['#272730', '#b7c5d1']\n  const [bgIndex, setBgIndex] = useState(0)\n  const bg = bgs[bgIndex]\n  return (\n    <div\n      onClick={() => {\n        // return setBgIndex((bgIndex) => (bgIndex + 1) % bgs.length)\n      }}\n      style={{\n        height: '100vh',\n      }}\n    >\n      <Canvas dpr={[1.5, 2]} linear shadows frameloop=\"demand\">\n        <SheetProvider sheet={getProject('Space').sheet('Scene')}>\n          <fog attach=\"fog\" args={[bg, 16, 70]} />\n          <color attach=\"background\" args={[bg]} />\n          <ambientLight intensity={0.75} />\n          <EditableCamera\n            theatreKey=\"Camera\"\n            makeDefault\n            position={[0, 0, 0]}\n            fov={75}\n            near={20}\n            far={70}\n          >\n            <e.pointLight\n              theatreKey=\"Light 1\"\n              intensity={1}\n              position={[-10, -25, -10]}\n            />\n            <e.spotLight\n              theatreKey=\"Light 2\"\n              castShadow\n              intensity={2.25}\n              angle={0.2}\n              penumbra={1}\n              position={[-25, 20, -15]}\n              shadow-mapSize={[1024, 1024]}\n              shadow-bias={-0.0001}\n            />\n            <e.directionalLight theatreKey=\"Light 3\" />\n          </EditableCamera>\n          <Suspense fallback={null}>\n            <RefreshSnapshot />\n            <Model url={sceneGLB} instance=\"Apollo\" position={[18, 5, -42]} />\n            <Model url={sceneGLB} instance=\"Sputnik\" position={[-18, 5, -42]} />\n          </Suspense>\n          <Stars radius={500} depth={50} count={1000} factor={10} />\n        </SheetProvider>\n      </Canvas>\n    </div>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "packages/playground/src/shared/instances/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/instances/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport theatre from '@theatre/core'\nimport extension from '@theatre/r3f/dist/extension'\n\nvoid theatre.getStudio().then((studio) => studio.extend(extension))\nvoid theatre.init({studio: true})\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "packages/playground/src/shared/notifications/Scene.tsx",
    "content": "import React, {useLayoutEffect, useRef} from 'react'\nimport type {IProject} from '@theatre/core'\nimport {onChange, types} from '@theatre/core'\n\nconst globalConfig = {\n  background: {\n    type: types.stringLiteral('black', {\n      black: 'black',\n      white: 'white',\n      dynamic: 'dynamic',\n    }),\n    dynamic: types.rgba(),\n  },\n}\n\nexport const Scene: React.FC<{project: IProject}> = ({project}) => {\n  // This is cheap to call and always returns the same value, so no need for useMemo()\n  const sheet = project.sheet('Scene', 'default')\n  const containerRef = useRef<HTMLDivElement>(null!)\n  const globalObj = sheet.object('global', globalConfig)\n\n  useLayoutEffect(() => {\n    const unsubscribeFromChanges = onChange(globalObj.props, (newValues) => {\n      containerRef.current.style.background =\n        newValues.background.type !== 'dynamic'\n          ? newValues.background.type\n          : newValues.background.dynamic.toString()\n    })\n    return unsubscribeFromChanges\n  }, [globalObj])\n\n  return (\n    <div\n      ref={containerRef}\n      style={{\n        position: 'absolute',\n        left: '0',\n        right: '0',\n        top: 0,\n        bottom: '0',\n        background: '#333',\n      }}\n    ></div>\n  )\n}\n"
  },
  {
    "path": "packages/playground/src/shared/notifications/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/notifications/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport theatre from '@theatre/core'\nimport {getProject, notify} from '@theatre/core'\nimport {Scene} from './Scene'\n\nvoid theatre.init({studio: true})\n\n// trigger warning notification\nvoid getProject('Sample project').sheet('Scene').sequence.play()\n\n// fire an info notification\nnotify.info(\n  'Welcome to the notifications playground!',\n  'This is a basic example of a notification! You can see the code for this notification ' +\n    '(and all others) at the start of index.tsx. You can also see examples of success and warnign notifications.',\n)\n\nvoid getProject('Sample project').ready.then(() => {\n  // fire a success notification on project load\n  notify.success(\n    'Project loaded!',\n    'Now you can start calling `sequence.play()` to trigger animations. ;)',\n  )\n})\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n  <Scene\n    project={getProject('Sample project', {\n      // experiments: {\n      //   logging: {\n      //     internal: true,\n      //     dev: true,\n      //     min: TheatreLoggerLevel.TRACE,\n      //   },\n      // },\n    })}\n  />,\n)\n"
  },
  {
    "path": "packages/playground/src/shared/notifications/useDrag.ts",
    "content": "import {useLayoutEffect, useRef} from 'react'\n\nconst noop = () => {}\n\nfunction createCursorLock(cursor: string) {\n  const el = document.createElement('div')\n  el.style.cssText = `\n    position: fixed;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 9999999;`\n\n  el.style.cursor = cursor\n  document.body.appendChild(el)\n  const relinquish = () => {\n    document.body.removeChild(el)\n  }\n\n  return relinquish\n}\n\nexport type UseDragOpts = {\n  disabled?: boolean\n  dontBlockMouseDown?: boolean\n  lockCursorTo?: string\n  onDragStart?: (event: MouseEvent) => void | false\n  onDragEnd?: (dragHappened: boolean) => void\n  onDrag: (dx: number, dy: number, event: MouseEvent) => void\n}\n\nexport default function useDrag(\n  target: HTMLElement | undefined | null,\n  opts: UseDragOpts,\n) {\n  const optsRef = useRef<typeof opts>(opts)\n  optsRef.current = opts\n\n  const modeRef = useRef<'dragStartCalled' | 'dragging' | 'notDragging'>(\n    'notDragging',\n  )\n\n  const stateRef = useRef<{\n    dragHappened: boolean\n    startPos: {\n      x: number\n      y: number\n    }\n  }>({dragHappened: false, startPos: {x: 0, y: 0}})\n\n  useLayoutEffect(() => {\n    if (!target) return\n\n    const getDistances = (event: MouseEvent): [number, number] => {\n      const {startPos} = stateRef.current\n      return [event.screenX - startPos.x, event.screenY - startPos.y]\n    }\n\n    let relinquishCursorLock = noop\n\n    const dragHandler = (event: MouseEvent) => {\n      if (!stateRef.current.dragHappened && optsRef.current.lockCursorTo) {\n        relinquishCursorLock = createCursorLock(optsRef.current.lockCursorTo)\n      }\n      if (!stateRef.current.dragHappened) stateRef.current.dragHappened = true\n      modeRef.current = 'dragging'\n\n      const deltas = getDistances(event)\n      optsRef.current.onDrag(deltas[0], deltas[1], event)\n    }\n\n    const dragEndHandler = () => {\n      removeDragListeners()\n      modeRef.current = 'notDragging'\n\n      optsRef.current.onDragEnd &&\n        optsRef.current.onDragEnd(stateRef.current.dragHappened)\n      relinquishCursorLock()\n      relinquishCursorLock = noop\n    }\n\n    const addDragListeners = () => {\n      document.addEventListener('mousemove', dragHandler)\n      document.addEventListener('mouseup', dragEndHandler)\n    }\n\n    const removeDragListeners = () => {\n      document.removeEventListener('mousemove', dragHandler)\n      document.removeEventListener('mouseup', dragEndHandler)\n    }\n\n    const preventUnwantedClick = (event: MouseEvent) => {\n      if (optsRef.current.disabled) return\n      if (stateRef.current.dragHappened) {\n        if (\n          !optsRef.current.dontBlockMouseDown &&\n          modeRef.current !== 'notDragging'\n        ) {\n          event.stopPropagation()\n          event.preventDefault()\n        }\n        stateRef.current.dragHappened = false\n      }\n    }\n\n    const dragStartHandler = (event: MouseEvent) => {\n      const opts = optsRef.current\n      if (opts.disabled === true) return\n\n      if (event.button !== 0) return\n      const resultOfStart = opts.onDragStart && opts.onDragStart(event)\n\n      if (resultOfStart === false) return\n\n      if (!opts.dontBlockMouseDown) {\n        event.stopPropagation()\n        event.preventDefault()\n      }\n\n      modeRef.current = 'dragStartCalled'\n\n      const {screenX, screenY} = event\n      stateRef.current.startPos = {x: screenX, y: screenY}\n      stateRef.current.dragHappened = false\n\n      addDragListeners()\n    }\n\n    const onMouseDown = (e: MouseEvent) => {\n      dragStartHandler(e)\n    }\n\n    target.addEventListener('mousedown', onMouseDown)\n    target.addEventListener('click', preventUnwantedClick)\n\n    return () => {\n      removeDragListeners()\n      target.removeEventListener('mousedown', onMouseDown)\n      target.removeEventListener('click', preventUnwantedClick)\n      relinquishCursorLock()\n\n      if (modeRef.current !== 'notDragging') {\n        optsRef.current.onDragEnd &&\n          optsRef.current.onDragEnd(modeRef.current === 'dragging')\n      }\n      modeRef.current = 'notDragging'\n    }\n  }, [target])\n}\n"
  },
  {
    "path": "packages/playground/src/shared/r3f-rocket/App.tsx",
    "content": "import {editable as e, RefreshSnapshot, SheetProvider} from '@theatre/r3f'\nimport {Stars} from '@react-three/drei'\nimport {getProject} from '@theatre/core'\nimport React, {Suspense, useState} from 'react'\nimport {Canvas} from '@react-three/fiber'\nimport {useGLTF, PerspectiveCamera} from '@react-three/drei'\nimport sceneGLB from './scene.glb'\n\ndocument.body.style.backgroundColor = '#171717'\n\nconst EditableCamera = e(PerspectiveCamera, 'perspectiveCamera')\n\nfunction Model({url}: {url: string}) {\n  const {nodes} = useGLTF(url) as any\n\n  return (\n    <group rotation={[-Math.PI / 2, 0, 0]} position={[0, -7, 0]} scale={7}>\n      <group rotation={[Math.PI / 13.5, -Math.PI / 5.8, Math.PI / 5.6]}>\n        <e.mesh\n          theatreKey=\"Example Namespace / Thingy\"\n          receiveShadow\n          castShadow\n          geometry={nodes.planet001.geometry}\n          material={nodes.planet001.material}\n        />\n        <e.mesh\n          theatreKey=\"Example Namespace / Debris 2\"\n          receiveShadow\n          castShadow\n          geometry={nodes.planet002.geometry}\n          material={nodes.planet002.material}\n        />\n        <e.mesh\n          theatreKey=\"Debris 1\"\n          geometry={nodes.planet003.geometry}\n          material={nodes.planet003.material}\n        />\n      </group>\n    </group>\n  )\n}\n\nfunction App() {\n  const bgs = ['#272730', '#b7c5d1']\n  const [bgIndex, setBgIndex] = useState(0)\n  const bg = bgs[bgIndex]\n  return (\n    <div\n      onClick={() => {\n        // return setBgIndex((bgIndex) => (bgIndex + 1) % bgs.length)\n      }}\n      style={{\n        height: '100vh',\n      }}\n    >\n      <Canvas\n        dpr={[1.5, 2]}\n        linear\n        shadows\n        gl={{preserveDrawingBuffer: true}}\n        frameloop=\"demand\"\n      >\n        <SheetProvider sheet={getProject('Space').sheet('Scene')}>\n          <fog attach=\"fog\" args={[bg, 16, 30]} />\n          <color attach=\"background\" args={[bg]} />\n          <ambientLight intensity={0.75} />\n          <EditableCamera\n            theatreKey=\"Camera\"\n            makeDefault\n            position={[0, 0, 16]}\n            fov={75}\n          >\n            <e.pointLight\n              theatreKey=\"Light 1\"\n              intensity={1}\n              position={[-10, -25, -10]}\n            />\n            <e.spotLight\n              theatreKey=\"Light 2\"\n              castShadow\n              intensity={2.25}\n              angle={0.2}\n              penumbra={1}\n              position={[-25, 20, -15]}\n              shadow-mapSize={[1024, 1024]}\n              shadow-bias={-0.0001}\n            />\n            <e.directionalLight theatreKey=\"Light 3\" />\n          </EditableCamera>\n          <Suspense fallback={null}>\n            <RefreshSnapshot />\n            <Model url={sceneGLB} />\n          </Suspense>\n          <Stars radius={500} depth={50} count={1000} factor={10} />\n        </SheetProvider>\n      </Canvas>\n    </div>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "packages/playground/src/shared/r3f-rocket/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/r3f-rocket/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport theatre from '@theatre/core'\nimport extension from '@theatre/r3f/dist/extension'\n\nvoid theatre.getStudio().then((studio) => studio.extend(extension))\nvoid theatre.init({studio: true})\n\nReactDOM.createRoot(document.getElementById('root')!).render(<App />)\n"
  },
  {
    "path": "packages/playground/src/shared/remote/Box3D.tsx",
    "content": "import React, {useEffect, useRef} from 'react'\nimport type {CSSProperties} from 'react'\nimport {types} from '@theatre/core'\nimport type {ISheet} from '@theatre/core'\nimport {remote} from './Remote'\n\n// Box element\nexport const BoxSize = 100\n\nconst Box3DCSS: CSSProperties = {\n  border: '1px solid #999',\n  position: 'absolute',\n  width: `${BoxSize}px`,\n  height: `${BoxSize}px`,\n}\n\nconst Box3DTextCSS: CSSProperties = {\n  margin: '0',\n  padding: '0',\n  position: 'absolute',\n  left: '50%',\n  top: '50%',\n  transform: 'translate(-50%, -50%)',\n  textAlign: 'center',\n  width: '100%',\n}\n\nexport const Box3D: React.FC<{\n  sheet: ISheet\n  name: string\n  x: number\n  y: number\n}> = ({sheet, name, x, y}) => {\n  const elementRef = useRef<HTMLDivElement>(null)\n\n  // Animation\n  useEffect(() => {\n    const element = elementRef.current!\n    const id = `Box - ${name}`\n    const sheetObj = remote.sheetObject(\n      sheet.address.sheetId,\n      id,\n      {\n        background: types.rgba({r: 16 / 255, g: 16 / 255, b: 16 / 255, a: 1}),\n        opacity: types.number(1, {range: [0, 1]}),\n        position: {\n          x: x,\n          y: y,\n          z: 0,\n        },\n        rotation: {\n          x: types.number(0, {range: [-360, 360]}),\n          y: types.number(0, {range: [-360, 360]}),\n          z: types.number(0, {range: [-360, 360]}),\n        },\n        scale: {\n          x: 1,\n          y: 1,\n          z: 1,\n        },\n      },\n      (values: any) => {\n        const {background, opacity, position, rotation, scale} = values\n        element.style.backgroundColor = `rgba(${background.r * 255}, ${\n          background.g * 255\n        }, ${background.b * 255}, 1)`\n        element.style.opacity = opacity\n        const translate3D = `translate3d(${position.x}px, ${position.y}px, ${position.z}px)`\n        const rotate3D = `rotateX(${rotation.x}deg) rotateY(${rotation.y}deg) rotateZ(${rotation.z}deg)`\n        const scale3D = `scaleX(${scale.x}) scaleY(${scale.y}) scaleZ(${scale.z})`\n        const transform = `${scale3D} ${translate3D} ${rotate3D}`\n        element.style.transform = transform\n      },\n    )\n    return () => {\n      if (sheetObj !== undefined) remote.unsubscribe(sheetObj)\n    }\n  }, [])\n\n  return (\n    <div ref={elementRef} style={Box3DCSS}>\n      <span style={Box3DTextCSS}>{name}</span>\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/playground/src/shared/remote/Remote.ts",
    "content": "import type {IProject, ISheet, ISheetObject} from '@theatre/core'\nimport type {VoidFn} from '@theatre/dataverse/src/types'\n\nexport type TheatreUpdateCallback = (data: any) => void\n\nexport type BroadcastDataEvent =\n  | 'setSheet'\n  | 'setSheetObject'\n  | 'updateSheetObject'\n  | 'updateTimeline'\n\nexport interface BroadcastData {\n  event: BroadcastDataEvent\n  data: any\n}\n\nexport type BroadcastCallback = (data: BroadcastData) => void\n\n// Default SheetObject.onValuesChange callback\nconst noop: TheatreUpdateCallback = (values: any) => {}\n\nfunction isColor(obj: any) {\n  return (\n    obj.r !== undefined &&\n    obj.g !== undefined &&\n    obj.b !== undefined &&\n    obj.a !== undefined\n  )\n}\n\n// Which hashtag to add to the URL\nconst hashtag = 'editor'\n\nclass RemoteSingleton {\n  // Remote\n  mode = 'listener'\n  channel: BroadcastChannel\n\n  // Theatre\n  project!: IProject\n  sheets: Map<string, ISheet> = new Map()\n  sheetObjects: Map<string, ISheetObject> = new Map()\n  sheetObjectCBs: Map<string, TheatreUpdateCallback> = new Map()\n  sheetObjectUnsubscribe: Map<string, VoidFn> = new Map()\n\n  constructor() {\n    this.channel = new BroadcastChannel('theatre')\n    this.showTheatre = document.location.hash.search(hashtag) > -1\n  }\n\n  // Remote\n\n  send(data: BroadcastData) {\n    if (this.mode === 'theatre') {\n      this.channel.postMessage(data)\n    }\n  }\n\n  listen(callback: BroadcastCallback) {\n    if (this.mode === 'listener') {\n      this.channel.onmessage = (event: MessageEvent<any>) => {\n        callback(event.data)\n      }\n    }\n  }\n\n  // Theatre\n\n  sheet(name: string): ISheet {\n    let sheet: any = this.sheets.get(name)\n    if (sheet !== undefined) return sheet\n\n    sheet = this.project.sheet(name)\n    this.sheets.set(name, sheet)\n    return sheet\n  }\n\n  sheetObject(\n    sheetName: string,\n    key: string,\n    props: any,\n    onUpdate?: TheatreUpdateCallback,\n  ): ISheetObject | undefined {\n    const sheet = this.sheets.get(sheetName)\n    if (sheet === undefined) return undefined\n\n    const objName = `${sheetName}_${key}`\n    let obj = this.sheetObjects.get(objName)\n    if (obj !== undefined) {\n      obj = sheet.object(key, {...props, ...obj.value}, {reconfigure: true})\n      return obj\n    }\n\n    obj = sheet.object(key, props)\n    this.sheetObjects.set(objName, obj)\n    this.sheetObjectCBs.set(objName, onUpdate !== undefined ? onUpdate : noop)\n\n    const unsubscribe = obj.onValuesChange((values: any) => {\n      if (this.showTheatre) {\n        for (let i in values) {\n          const value = values[i]\n          if (typeof value === 'object') {\n            if (isColor(value)) {\n              values[i] = {\n                r: value.r,\n                g: value.g,\n                b: value.b,\n                a: value.a,\n              }\n            }\n          }\n        }\n        this.send({\n          event: 'updateSheetObject',\n          data: {\n            sheetObject: objName,\n            values: values,\n          },\n        })\n      } else {\n        const callback = this.sheetObjectCBs.get(objName)\n        if (callback !== undefined) callback(values)\n      }\n    })\n    this.sheetObjectUnsubscribe.set(objName, unsubscribe)\n\n    return obj\n  }\n\n  unsubscribe(sheet: ISheetObject) {\n    const id = `${sheet.address.sheetId}_${sheet.address.objectKey}`\n    const unsubscribe = this.sheetObjectUnsubscribe.get(id)\n    if (unsubscribe !== undefined) {\n      unsubscribe()\n    }\n  }\n\n  // Getters / Setters\n\n  get showTheatre(): boolean {\n    return this.mode === 'theatre'\n  }\n\n  set showTheatre(value: boolean) {\n    if (value) {\n      this.mode = 'theatre'\n      document.title += ' - Editor'\n    }\n  }\n}\n\nexport const remote = new RemoteSingleton()\n"
  },
  {
    "path": "packages/playground/src/shared/remote/RemoteController.ts",
    "content": "import type {IProject, ISheet} from '@theatre/core'\nimport {getStudioSync} from '@theatre/core'\nimport {remote} from './Remote'\nimport type {BroadcastData, BroadcastDataEvent} from './Remote'\n\n/**\n * Handles the communication between windows\n */\nexport default function RemoteController(project: IProject) {\n  let activeSheet: ISheet | undefined = undefined\n  remote.project = project\n\n  /**\n   * Editor is hidden, this window receives updates\n   */\n  const receiveRemote = () => {\n    const studio = getStudioSync()!\n    studio.ui.hide()\n\n    remote.listen((msg: BroadcastData) => {\n      switch (msg.event) {\n        case 'setSheet':\n          const sheet = remote.sheets.get(msg.data.sheet)\n          if (sheet !== undefined) {\n            activeSheet = sheet\n            studio.setSelection([sheet])\n          }\n          break\n\n        case 'setSheetObject':\n          const sheetObj = remote.sheetObjects.get(\n            `${msg.data.sheet}_${msg.data.key}`,\n          )\n          if (sheetObj !== undefined) {\n            studio.setSelection([sheetObj])\n          }\n          break\n\n        case 'updateSheetObject':\n          const sheetObjCB = remote.sheetObjectCBs.get(msg.data.sheetObject)\n          if (sheetObjCB !== undefined) sheetObjCB(msg.data.values)\n          break\n\n        case 'updateTimeline':\n          activeSheet = remote.sheets.get(msg.data.sheet)\n          if (activeSheet !== undefined) {\n            activeSheet.sequence.position = msg.data.position\n          }\n          break\n      }\n    })\n  }\n\n  /**\n   * Editor is visible, this window sends updates\n   */\n  const sendRemote = () => {\n    const studio = getStudioSync()!\n    studio.ui.restore()\n\n    studio.onSelectionChange((value: any[]) => {\n      if (value.length < 1) return\n\n      value.forEach((obj: any) => {\n        let id = obj.address.sheetId\n        let type: BroadcastDataEvent = 'setSheet'\n        let data = {}\n        switch (obj.type) {\n          case 'Theatre_Sheet_PublicAPI':\n            type = 'setSheet'\n            data = {\n              sheet: obj.address.sheetId,\n            }\n            activeSheet = remote.sheets.get(obj.address.sheetId)\n            break\n\n          case 'Theatre_SheetObject_PublicAPI':\n            type = 'setSheetObject'\n            id += `_${obj.address.objectKey}`\n            data = {\n              sheet: obj.address.sheetId,\n              key: obj.address.objectKey,\n            }\n            break\n        }\n        remote.send({event: type, data: data})\n      })\n    })\n\n    // Timeline\n    let position = 0\n    const onRafUpdate = () => {\n      if (\n        activeSheet !== undefined &&\n        position !== activeSheet.sequence.position\n      ) {\n        position = activeSheet.sequence.position\n        const t = activeSheet as ISheet\n        remote.send({\n          event: 'updateTimeline',\n          data: {\n            position: position,\n            sheet: t.address.sheetId,\n          },\n        })\n      }\n    }\n    const onRaf = () => {\n      onRafUpdate()\n      requestAnimationFrame(onRaf)\n    }\n    onRafUpdate() // Initial position\n    onRaf()\n  }\n\n  if (remote.showTheatre) {\n    sendRemote()\n  } else {\n    receiveRemote()\n  }\n}\n"
  },
  {
    "path": "packages/playground/src/shared/remote/Scene.tsx",
    "content": "import React, {useEffect, useRef} from 'react'\nimport type {CSSProperties} from 'react'\nimport {types} from '@theatre/core'\nimport {Box3D} from './Box3D'\nimport {remote} from './Remote'\n\n// Scene\n\nconst SceneCSS: CSSProperties = {\n  overflow: 'hidden',\n  position: 'absolute',\n  left: '0',\n  right: '0',\n  top: '0',\n  bottom: '0',\n}\n\nexport const Scene: React.FC<{}> = ({}) => {\n  const containerRef = useRef<HTMLDivElement>(null!)\n  const sheet = remote.sheet('DOM')\n\n  useEffect(() => {\n    const container = containerRef.current!\n    const sheetObj = remote.sheetObject(\n      'DOM',\n      'Container',\n      {\n        perspective: types.number(\n          Math.max(window.innerWidth, window.innerHeight),\n          {range: [0, 2000]},\n        ),\n        originX: types.number(50, {range: [0, 100]}),\n        originY: types.number(50, {range: [0, 100]}),\n      },\n      (values: any) => {\n        container.style.perspective = `${values.perspective}px`\n        container.style.perspectiveOrigin = `${values.originX}% ${values.originY}%`\n      },\n    )\n    return () => {\n      if (sheetObj !== undefined) remote.unsubscribe(sheetObj)\n    }\n  }, [])\n\n  if (remote.showTheatre) {\n    SceneCSS.display = 'none'\n    SceneCSS.visibility = 'hidden'\n  }\n\n  return (\n    <div ref={containerRef} style={SceneCSS}>\n      <Box3D sheet={sheet} name=\"Box\" x={100} y={100} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/playground/src/shared/remote/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/remote/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport theatre from '@theatre/core'\nimport {getProject} from '@theatre/core'\nimport {Scene} from './Scene'\nimport RemoteController from './RemoteController'\n\nconst project = getProject('Sample project')\nvoid theatre.init({studio: true})\nRemoteController(project)\n\nReactDOM.createRoot(document.getElementById('root')!).render(<Scene />)\n"
  },
  {
    "path": "packages/playground/src/shared/sync/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n    <style>\n      body {\n        background: #000;\n      }\n    </style>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/sync/index.tsx",
    "content": "import theatre from '@theatre/core'\nimport {getProject} from '@theatre/core'\n\nvoid theatre.init({\n  studio: true,\n  // __experimental_syncServer: 'wss://syncserver-kspg.onrender.com',\n  serverUrl: 'http://localhost:3000',\n  // usePersistentStorage: false,\n})\n\nconst project = getProject('Syncing project')\nconst sheet = project.sheet('sheet')\nconst obj = sheet.object('obj', {x: 0, a: ''})\n\n// onChange(obj.props, (props) => {})\n"
  },
  {
    "path": "packages/playground/src/shared/theatric/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/theatric/index.tsx",
    "content": "import {button, initialize, types, useControls} from 'theatric'\nimport ReactDom from 'react-dom/client'\nimport React, {useState} from 'react'\nimport state from './state.json'\n\nvoid initialize({state})\n\nfunction SomeComponent({id}: {id: string}) {\n  const {foo, $get, $set} = useControls(\n    {\n      foo: 0,\n      bar: 0,\n      bez: button(() => {\n        $set((p) => p.foo, 2)\n        $set((p) => p.bar, 3)\n        console.log($get((p) => p.foo))\n      }),\n    },\n    {folder: id},\n  )\n\n  return (\n    <div>\n      {id}: {foo}\n    </div>\n  )\n}\n\nfunction App() {\n  const {bar, $set, $get} = useControls({\n    bar: {foo: 'bar'},\n    baz: button(() => console.log($get((p) => p.bar))),\n  })\n\n  const {another, panel, col, yo} = useControls(\n    {\n      another: '',\n      panel: '',\n      yo: types.number(0),\n      col: types.rgba(),\n    },\n    {panel: 'My panel'},\n  )\n\n  const {} = useControls({})\n\n  const [showComponent, setShowComponent] = useState(false)\n\n  return (\n    <div\n      style={{\n        display: 'flex',\n        flexDirection: 'column',\n        alignItems: 'center',\n        justifyContent: 'center',\n      }}\n    >\n      {/* <div>{JSON.stringify(bar)}</div> */}\n      <SomeComponent id=\"first\" />\n      <SomeComponent id=\"second\" />\n      <button\n        onClick={() => {\n          setShowComponent(!showComponent)\n        }}\n      >\n        Show another component\n      </button>\n      <button\n        onClick={() => {\n          $set((p) => p.bar.foo, $get((p) => p.bar.foo) + 1)\n        }}\n      >\n        Increment stuff\n      </button>\n      {showComponent && <SomeComponent id=\"hidden\" />}\n      {yo}\n      {JSON.stringify(col)}\n    </div>\n  )\n}\n\nReactDom.createRoot(document.getElementById('root')!).render(<App />)\n"
  },
  {
    "path": "packages/playground/src/shared/theatric/state.json",
    "content": "{\n  \"sheetsById\": {\n    \"Panels\": {\n      \"staticOverrides\": {\n        \"byObject\": {\n          \"Default panel\": {\n            \"first\": {\n              \"foo\": 73\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitionVersion\": \"0.4.0\",\n  \"revisionHistory\": [\n    \"cfRereBjMbBNLzC3\"\n  ]\n}"
  },
  {
    "path": "packages/playground/src/shared/three-basic/ThreeScene.tsx",
    "content": "import React, {useEffect, useRef} from 'react'\nimport {types} from '@theatre/core'\nimport type {ISheetObject, IProject} from '@theatre/core'\nimport {\n  Color,\n  DirectionalLight,\n  Mesh,\n  MeshPhongMaterial,\n  PerspectiveCamera,\n  RawShaderMaterial,\n  Scene,\n  ShaderMaterial,\n  SphereGeometry,\n  Vector2,\n  Vector3,\n  WebGLRenderer,\n} from 'three'\n\ntype ThreeSceneProps = {\n  project: IProject\n}\n\nexport default function ThreeScene(props: ThreeSceneProps) {\n  const canvasRef = useRef<HTMLCanvasElement>(null)\n  const sheet = props.project.sheet('Sphere')\n\n  // Animation\n  let sheetObj: ISheetObject | undefined = undefined\n  let mesh: Mesh | undefined = undefined\n\n  function animate(key: string, props: any) {\n    if (sheetObj === undefined) {\n      sheetObj = sheet.object(key, props)\n    } else {\n      sheetObj = sheet.object(\n        key,\n        {...props, ...sheetObj.value},\n        {reconfigure: true},\n      )\n    }\n    return sheetObj\n  }\n\n  function animateMaterial() {\n    if (mesh === undefined) return\n    const keys = {}\n    // Cycle through props\n    for (const i in mesh.material) {\n      // @ts-ignore\n      const value = mesh.material[i]\n      if (typeof value === 'number') {\n        // @ts-ignore\n        keys[i] = value\n      } else if (value instanceof Vector2) {\n        // @ts-ignore\n        keys[i] = {x: value.x, y: value.y}\n      } else if (value instanceof Vector3) {\n        // @ts-ignore\n        keys[i] = {x: value.x, y: value.y, z: value.z}\n      } else if (value instanceof Color) {\n        // @ts-ignore\n        keys[i] = types.rgba({\n          r: value.r * 255,\n          g: value.g * 255,\n          b: value.b * 255,\n          a: 1,\n        })\n      }\n    }\n\n    // Uniforms\n    if (\n      mesh.material instanceof ShaderMaterial ||\n      mesh.material instanceof RawShaderMaterial\n    ) {\n      const uniforms = mesh.material.uniforms\n      // @ts-ignore\n      keys.uniforms = {}\n      for (const i in uniforms) {\n        const uniform = uniforms[i].value\n        if (typeof uniform === 'number') {\n          // @ts-ignore\n          keys.uniforms[i] = uniform\n        } else if (uniform instanceof Vector2) {\n          const value = uniform as Vector2\n          // @ts-ignore\n          keys.uniforms[i] = {x: value.x, y: value.y}\n        } else if (uniform instanceof Vector3) {\n          const value = uniform as Vector3\n          // @ts-ignore\n          keys.uniforms[i] = {x: value.x, y: value.y, z: value.z}\n        } else if (uniform instanceof Color) {\n          const value = uniform as Color\n          // @ts-ignore\n          keys.uniforms[i] = {r: value.r, g: value.g, b: value.b}\n        }\n      }\n    }\n\n    // Animate\n    animate('Material', {material: keys}).onValuesChange((values: any) => {\n      const {material} = values\n      for (const key in material) {\n        if (key === 'uniforms') {\n          const uniforms = material[key]\n          for (const uniKey in uniforms) {\n            const uniform = uniforms[uniKey]\n            if (typeof uniform === 'number') {\n              // @ts-ignore\n              mesh.material.uniforms[uniKey].value = uniform\n            } else {\n              // @ts-ignore\n              mesh.material.uniforms[uniKey].value.copy(uniform)\n            }\n          }\n        } else {\n          const value = material[key]\n          if (typeof value === 'number') {\n            // @ts-ignore\n            mesh.material[key] = value\n          } else if (value.r !== undefined) {\n            // color\n            // @ts-ignore\n            mesh.material[key].copy(value)\n          } else if (value.x !== undefined) {\n            // vector\n            // @ts-ignore\n            mesh.material[key].copy(value)\n          }\n        }\n      }\n    })\n  }\n\n  function animateTransform() {\n    if (mesh === undefined) return\n    animate('Transform', {\n      transform: {\n        position: {\n          x: mesh.position.x,\n          y: mesh.position.y,\n          z: mesh.position.z,\n        },\n        rotation: {\n          x: mesh.rotation.x,\n          y: mesh.rotation.y,\n          z: mesh.rotation.z,\n        },\n        scale: {\n          x: mesh.scale.x,\n          y: mesh.scale.y,\n          z: mesh.scale.z,\n        },\n        visible: mesh.visible,\n      },\n    }).onValuesChange((values: any) => {\n      if (mesh === undefined) return\n      const {transform} = values\n      mesh.position.set(\n        transform.position.x,\n        transform.position.y,\n        transform.position.z,\n      )\n      mesh.rotation.set(\n        transform.rotation.x,\n        transform.rotation.y,\n        transform.rotation.z,\n      )\n      mesh.scale.set(transform.scale.x, transform.scale.y, transform.scale.z)\n      mesh.visible = transform.visible\n    })\n  }\n\n  useEffect(() => {\n    // Basic Three\n    let raf = -1\n    const width = window.innerWidth\n    const height = window.innerHeight\n    const renderer = new WebGLRenderer({\n      antialias: true,\n      canvas: canvasRef.current!,\n    })\n    renderer.setPixelRatio(devicePixelRatio)\n    renderer.setSize(width, height)\n    const scene = new Scene()\n    const camera = new PerspectiveCamera(60, width / height)\n    camera.position.z = 10\n\n    const light = new DirectionalLight()\n    light.position.set(1, 5, 4)\n    scene.add(light)\n\n    mesh = new Mesh(new SphereGeometry(3), new MeshPhongMaterial())\n    scene.add(mesh)\n\n    // RAF\n    function render() {\n      raf = requestAnimationFrame(render)\n      renderer.render(scene, camera)\n    }\n    render()\n    return () => {\n      cancelAnimationFrame(raf)\n      renderer.dispose()\n    }\n  }, [])\n\n  return (\n    <div style={{overflow: 'hidden'}}>\n      <canvas ref={canvasRef} />\n      <div\n        style={{\n          position: 'absolute',\n          left: '100px',\n          top: '0',\n        }}\n      >\n        <button onClick={animateMaterial}>Animate Material</button>\n        <button onClick={animateTransform}>Animate Transform</button>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/playground/src/shared/three-basic/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/three-basic/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport theatre from '@theatre/core'\nimport {getProject} from '@theatre/core'\nimport ThreeScene from './ThreeScene'\n\nvoid theatre.init({studio: true})\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n  <ThreeScene project={getProject('Three Basic')} />,\n)\n"
  },
  {
    "path": "packages/playground/src/shared/turtle/TurtleRenderer.tsx",
    "content": "import type {MutableRefObject} from 'react'\nimport React, {\n  useCallback,\n  useEffect,\n  useLayoutEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport theatre, {getStudioSync} from '@theatre/core'\nimport type {ISheet} from '@theatre/core'\nimport {types} from '@theatre/core'\nimport type {ITurtle} from './turtle'\nimport {drawTurtlePlan, makeTurtlePlan} from './turtle'\n\nvoid theatre.init({studio: true})\n\nconst objConfig = {\n  startingPoint: {\n    x: types.number(0.5, {range: [0, 1]}),\n    y: types.number(0.5, {range: [0, 1]}),\n  },\n  scale: types.number(1, {range: [0.1, 1000]}),\n}\n\nconst TurtleRenderer: React.FC<{\n  sheet: ISheet\n  objKey: string\n  width: number\n  height: number\n  programFn: (t: ITurtle) => void\n}> = (props) => {\n  const [canvas, setCanvas] = useState<HTMLCanvasElement | null>(null)\n\n  const context = useMemo(() => {\n    if (canvas) {\n      return canvas.getContext('2d')!\n    }\n  }, [canvas])\n\n  const dimsRef = useRef({width: props.width, height: props.height})\n  dimsRef.current = {width: props.width, height: props.height}\n\n  const obj = useMemo(() => {\n    return props.sheet.object(props.objKey, objConfig)\n  }, [props.sheet, props.objKey])\n\n  useEffect(() => {\n    obj.onValuesChange((v) => {\n      setTransforms(v)\n    })\n  }, [obj])\n\n  const [transforms, transformsRef, setTransforms] = useStateAndRef<\n    typeof obj.value\n  >({scale: 1, startingPoint: {x: 0.5, y: 0.5}})\n\n  const bounds = useMemo(() => canvas?.getBoundingClientRect(), [canvas])\n\n  useLayoutEffect(() => {\n    if (!canvas) return\n\n    const receiveWheelEvent = (event: WheelEvent) => {\n      event.preventDefault()\n      event.stopPropagation()\n      const oldTransform = transformsRef.current\n      const newTransform: typeof oldTransform = {\n        ...oldTransform,\n        startingPoint: {...oldTransform.startingPoint},\n      }\n\n      if (event.ctrlKey) {\n        const scaleFactor = 1 - (event.deltaY / dimsRef.current.height) * 1.2\n        newTransform.scale *= scaleFactor\n\n        // const bounds = canvas.getBoundingClientRect()\n\n        const anchorPoint = {\n          x: (event.clientX - bounds!.left) / dimsRef.current.width,\n          y: (event.clientY - bounds!.top) / dimsRef.current.height,\n        }\n\n        newTransform.startingPoint.x =\n          anchorPoint.x -\n          (anchorPoint.x - newTransform.startingPoint.x) * scaleFactor\n\n        newTransform.startingPoint.y =\n          anchorPoint.y -\n          (anchorPoint.y - newTransform.startingPoint.y) * scaleFactor\n      } else {\n        newTransform.startingPoint.x =\n          oldTransform.startingPoint.x - event.deltaX / dimsRef.current.width\n        newTransform.startingPoint.y =\n          oldTransform.startingPoint.y - event.deltaY / dimsRef.current.height\n      }\n      const studio = getStudioSync()!\n      studio.transaction((api) => {\n        api.set(obj.props, newTransform)\n      })\n      // setTransforms(newTransform)\n    }\n\n    const listenerOptions = {\n      capture: true,\n      passive: false,\n    }\n    canvas.addEventListener('wheel', receiveWheelEvent, listenerOptions)\n\n    return () => {\n      canvas.removeEventListener('wheel', receiveWheelEvent, listenerOptions)\n    }\n  }, [canvas])\n\n  const plan = useMemo(() => makeTurtlePlan(props.programFn), [props.programFn])\n\n  useEffect(() => {\n    if (!context) return\n\n    drawTurtlePlan(\n      plan,\n      context,\n      {\n        width: props.width,\n        height: props.height,\n        scale: transforms.scale,\n        startFrom: {\n          x: transforms.startingPoint.x * props.width,\n          y: transforms.startingPoint.y * props.height,\n        },\n      },\n      1,\n    )\n  }, [props.width, props.height, plan, context, transforms])\n\n  return (\n    <canvas width={props.width} height={props.height} ref={setCanvas}></canvas>\n  )\n}\n\nfunction useStateAndRef<S>(\n  initial: S,\n): [S, MutableRefObject<S>, (s: S) => void] {\n  const [state, setState] = useState(initial)\n  const stateRef = useRef(state)\n  const set = useCallback((s: S) => {\n    stateRef.current = s\n    setState(s)\n  }, [])\n\n  return [state, stateRef, set]\n}\n\nexport default TurtleRenderer\n"
  },
  {
    "path": "packages/playground/src/shared/turtle/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/shared/turtle/index.tsx",
    "content": "/**\n * A super basic Turtle geometry renderer hooked up to Theatre, so the parameters\n * can be tweaked and animated.\n */\nimport React, {useMemo, useState} from 'react'\nimport ReactDom from 'react-dom/client'\nimport {getProject} from '@theatre/core'\nimport type {ITurtle} from './turtle'\nimport TurtleRenderer from './TurtleRenderer'\nimport {useBoundingClientRect} from './utils'\n\nconst project = getProject('Turtle Playground')\n\nconst sheet = project.sheet('Turtle', 'The only one')\n\nconst TurtleExample: React.FC<{}> = (props) => {\n  const [container, setContainer] = useState<HTMLDivElement | null>(null)\n  const programFn = useMemo(() => {\n    return ({forward, backward, left, right, repeat}: ITurtle) => {\n      const steps = 10\n      repeat(steps, () => {\n        forward(steps * 2)\n        right(360 / steps)\n      })\n    }\n  }, [])\n\n  const bounds = useBoundingClientRect(container)\n\n  return (\n    <div\n      ref={setContainer}\n      style={{\n        position: 'fixed',\n        top: '0',\n        right: '0',\n        bottom: '0',\n        left: '0',\n        background: 'black',\n      }}\n    >\n      {bounds && (\n        <TurtleRenderer\n          sheet={sheet}\n          objKey=\"Renderer\"\n          width={bounds.width}\n          height={bounds.height}\n          programFn={programFn}\n        />\n      )}\n    </div>\n  )\n}\n\nReactDom.createRoot(document.getElementById('root')!).render(<TurtleExample />)\n"
  },
  {
    "path": "packages/playground/src/shared/turtle/turtle.ts",
    "content": "import clamp from 'lodash-es/clamp'\n\ntype Op_Move = {\n  type: 'Move'\n  amount: number\n  angle: number\n  penDown: boolean\n}\n\ntype Op_ModifyContext = {\n  type: 'ContextModifier'\n  fn: (ctx: CanvasRenderingContext2D) => void\n}\n\ntype Op = Op_ModifyContext | Op_Move\n\ntype IPlan = {\n  totalTravel: number\n  ops: Op[]\n}\n\nexport function makeTurtlePlan(fn: (turtle: Turtle) => void): IPlan {\n  const plan: IPlan = {\n    totalTravel: 0,\n    ops: [],\n  }\n\n  const turtle = new Turtle(plan)\n  fn(turtle)\n  return plan\n}\n\nexport function drawTurtlePlan(\n  plan: IPlan,\n  ctx: CanvasRenderingContext2D,\n  {\n    width,\n    height,\n    scale,\n    startFrom,\n  }: {\n    width: number\n    height: number\n    scale: number\n    startFrom: {x: number; y: number}\n  },\n  tilProgression: number,\n): void {\n  const {ops} = plan\n  if (ops.length === 0) return\n\n  const targetDistance = clamp(tilProgression, 0, 1) * plan.totalTravel\n\n  ctx.clearRect(0, 0, width, height)\n\n  let traveledSoFar = 0\n  let pos = {...startFrom}\n  ctx.beginPath()\n  ctx.lineWidth = 2\n  ctx.strokeStyle = 'white'\n  ctx.moveTo(pos.x, pos.y)\n\n  for (const op of ops) {\n    if (traveledSoFar >= targetDistance) return\n\n    if (op.type === 'ContextModifier') {\n      op.fn(ctx)\n    } else {\n      let amount = Math.abs(op.amount)\n      const sign = op.amount < 0 ? -1 : 1\n      const {angle} = op\n\n      const roomTilTarget = targetDistance - traveledSoFar\n\n      const distanceInThisStep = roomTilTarget < amount ? roomTilTarget : amount\n\n      traveledSoFar += distanceInThisStep\n\n      pos = move(pos, angle, distanceInThisStep * sign, scale, op.penDown, ctx)\n      ctx.stroke()\n    }\n  }\n}\n\nfunction move(\n  pointA: {x: number; y: number},\n  _angle: number,\n  amount: number,\n  scale: number,\n  penIsDown: boolean,\n  ctx: CanvasRenderingContext2D,\n): {x: number; y: number} {\n  const angle = (_angle * Math.PI) / 180\n\n  const unrotatedTarget = {\n    x: pointA.x + amount * scale,\n    y: pointA.y,\n  }\n\n  const pointB = {\n    x:\n      pointA.x +\n      Math.cos(angle) * (unrotatedTarget.x - pointA.x) -\n      Math.sin(angle) * (unrotatedTarget.y - pointA.y),\n    y:\n      pointA.y +\n      Math.sin(angle) * (unrotatedTarget.x - pointA.x) -\n      Math.sin(angle) * (unrotatedTarget.y - pointA.y),\n  }\n\n  if (penIsDown) {\n    ctx.lineTo(pointB.x, pointB.y)\n  } else {\n    ctx.moveTo(pointB.x, pointB.y)\n  }\n\n  return pointB\n}\n\nclass Turtle {\n  private _state = {\n    penIsDown: true,\n    angle: -90,\n  }\n\n  constructor(private _plan: IPlan) {}\n\n  fn = (innerFn: () => void) => {\n    return innerFn\n  }\n\n  private _pushContextModifier(fn: (ctx: CanvasRenderingContext2D) => void) {\n    this._plan.ops.push({type: 'ContextModifier', fn})\n  }\n\n  press = (n: number) => {\n    this._pushContextModifier((ctx) => {\n      ctx.lineWidth = n\n    })\n  }\n\n  forward = (amount: number) => {\n    this._plan.ops.push({\n      type: 'Move',\n      amount,\n      penDown: this._state.penIsDown,\n      angle: this._state.angle,\n    })\n    this._plan.totalTravel += Math.abs(amount)\n    return this\n  }\n\n  backward = (amount: number) => {\n    return this.forward(amount)\n  }\n\n  right = (deg: number) => {\n    this._rotate(deg)\n    return this\n  }\n\n  left = (deg: number) => {\n    this._rotate(-deg)\n    return this\n  }\n\n  private _rotate(deg: number) {\n    this._state.angle += deg\n  }\n\n  penup = () => {\n    this._state.penIsDown = false\n    return this\n  }\n\n  pendown = () => {\n    this._state.penIsDown = true\n    return this\n  }\n\n  repeat = (n: number, fn: (i: number) => void) => {\n    for (let i = 0; i < n; i++) {\n      fn(i)\n    }\n    return this\n  }\n}\n\nexport type ITurtle = Turtle\n"
  },
  {
    "path": "packages/playground/src/shared/turtle/utils.ts",
    "content": "import {useLayoutEffect, useState} from 'react'\n\nexport function useBoundingClientRect(\n  node: HTMLElement | null,\n): null | DOMRect {\n  const [bounds, set] = useState<null | DOMRect>(null)\n\n  useLayoutEffect(() => {\n    if (node) {\n      set(node.getBoundingClientRect())\n    }\n\n    return () => {\n      set(null)\n    }\n  }, [node])\n\n  return bounds\n}\n"
  },
  {
    "path": "packages/playground/src/shared/utils/useExtensionButton.ts",
    "content": "import theatre from '@theatre/core'\nimport {useEffect, useMemo, useRef} from 'react'\n\nlet idCounter = 0\n\nexport function useExtensionButton(\n  title: string,\n  callback: () => void,\n  svgSource: string = stepForward,\n) {\n  const refs = useRef({callback, svgSource})\n  const id = useMemo(() => 'useExtensionButton#' + idCounter++, [])\n  useEffect(() => {\n    const studio = theatre.getStudioSync()!\n    studio.extend({\n      id: id,\n      toolbars: {\n        global(set) {\n          set([\n            {\n              type: 'Icon',\n              title,\n              onClick() {\n                refs.current.callback()\n              },\n              svgSource: refs.current.svgSource,\n            },\n          ])\n          return () => {}\n        },\n      },\n    })\n  }, [id])\n}\n\nexport function extensionButton(\n  title: string,\n  callback: () => void,\n  svgSource?: string,\n) {\n  const id = 'useExtensionButton#' + idCounter++\n  const studio = theatre.getStudioSync()!\n  studio.extend({\n    id: id,\n    toolbars: {\n      global(set) {\n        set([\n          {\n            type: 'Icon',\n            title,\n            onClick() {\n              callback()\n            },\n            svgSource: svgSource ?? stepForward,\n          },\n        ])\n        return () => {}\n      },\n    },\n  })\n}\n\n// FontAwesome FaStepForward\nconst stepForward = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 448 512\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z\"></path></svg>`\n"
  },
  {
    "path": "packages/playground/src/tests/hot-reload-extension-pane/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/tests/hot-reload-extension-pane/index.tsx",
    "content": "import type {IExtension} from '@theatre/core'\nimport theatre from '@theatre/core'\nimport '@theatre/core'\nimport {extensionButton} from '../../shared/utils/useExtensionButton'\n\nconst ext1: IExtension = {\n  id: '@theatre/hello-world-extension',\n  toolbars: {},\n  panes: [],\n}\n\nvoid theatre.init({studio: true, usePersistentStorage: false})\n\nlet currentStep = -1\n\nextensionButton(\n  'Forward',\n  () => {\n    if (currentStep < steps.length - 1) {\n      currentStep++\n      steps[currentStep]()\n    }\n  },\n  '>',\n)\n\nconst steps = [\n  function step0() {\n    const studio = theatre.getStudioSync()!\n    studio.extend(\n      {\n        ...ext1,\n        panes: [\n          {\n            class: 'pane1',\n            mount: ({paneId, node}) => {\n              const el = document.createElement('div')\n              el.innerHTML = 'pane1-config1'\n              node.appendChild(el)\n              return function unmount() {\n                node.removeChild(el)\n                console.log('unmount pane1-config1')\n              }\n            },\n          },\n        ],\n      },\n\n      {__experimental_reconfigure: true},\n    )\n    studio.createPane('pane1')\n  },\n  function step1() {\n    const studio = theatre.getStudioSync()!\n    studio.extend(\n      {\n        ...ext1,\n        panes: [\n          {\n            class: 'pane1',\n            mount: ({paneId, node}) => {\n              const el = document.createElement('div')\n              el.innerHTML = 'pane1-config2'\n              node.appendChild(el)\n              return function unmount() {\n                node.removeChild(el)\n                console.log('unmount pane1-config2')\n              }\n            },\n          },\n        ],\n      },\n\n      {__experimental_reconfigure: true},\n    )\n  },\n  function step2() {\n    const studio = theatre.getStudioSync()!\n    studio.extend(\n      {\n        ...ext1,\n        panes: [],\n      },\n\n      {__experimental_reconfigure: true},\n    )\n  },\n  function step3() {\n    steps[1]()\n  },\n]\n"
  },
  {
    "path": "packages/playground/src/tests/hot-reload-extension-pane/test.e2e.ts",
    "content": "import {test, expect} from '@playwright/test'\n\ntest.describe('hot-reload-extension-pane', () => {\n  test('works', async ({page}) => {\n    await page.goto('./tests/hot-reload-extension-pane/')\n\n    const toolbar = page.locator(\n      '[data-testid=\"theatre-extensionToolbar-global\"]',\n    )\n\n    const forwardButton = toolbar.getByRole('button', {name: '>'})\n    await forwardButton.click()\n\n    const pane = page.locator('[data-testid=\"theatre-pane-content-pane1 \\\\#1\"]')\n\n    expect(await pane.textContent()).toEqual('pane1-config1')\n    await forwardButton.click()\n    expect(await pane.textContent()).toEqual('pane1-config2')\n    await forwardButton.click()\n    await expect(pane).not.toBeAttached()\n    await forwardButton.click()\n    expect(await pane.textContent()).toEqual('pane1-config2')\n  })\n})\n"
  },
  {
    "path": "packages/playground/src/tests/hot-reload-extension-toolbar/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/tests/hot-reload-extension-toolbar/index.tsx",
    "content": "import type {IExtension} from '@theatre/core'\nimport theatre from '@theatre/core'\nimport '@theatre/core'\nimport {extensionButton} from '../../shared/utils/useExtensionButton'\n\nconst ext1: IExtension = {\n  id: '@theatre/hello-world-extension',\n  toolbars: {\n    global(set, studio) {\n      console.log('mount 1')\n\n      set([\n        {\n          type: 'Icon',\n          title: 'Icon 1',\n          svgSource: '1',\n          onClick: () => {\n            console.log('Icon 1')\n          },\n        },\n      ])\n\n      return () => {\n        console.log('unmount 1')\n      }\n    },\n  },\n  panes: [],\n}\n\nvoid theatre.init({studio: true, usePersistentStorage: false})\n\nlet currentStep = -1\n\nextensionButton(\n  'Forward',\n  () => {\n    if (currentStep < steps.length - 1) {\n      currentStep++\n      steps[currentStep]()\n    }\n  },\n  '>',\n)\n\nconst steps = [\n  function step1() {\n    const studio = theatre.getStudioSync()!\n    studio.extend(ext1)\n  },\n  function step2() {\n    const studio = theatre.getStudioSync()!\n    studio.extend(\n      {\n        ...ext1,\n        toolbars: {\n          global(set, studio) {\n            console.log('mount 2')\n\n            set([\n              {\n                type: 'Icon',\n                title: 'Icon 2',\n                svgSource: '2',\n                onClick: () => {\n                  console.log('Icon 2')\n                },\n              },\n            ])\n            return () => {\n              console.log('unmount 2')\n            }\n          },\n        },\n      },\n      {__experimental_reconfigure: true},\n    )\n  },\n  function step3() {\n    const studio = theatre.getStudioSync()!\n    studio.extend(\n      {\n        ...ext1,\n        toolbars: {},\n      },\n      {__experimental_reconfigure: true},\n    )\n  },\n]\n"
  },
  {
    "path": "packages/playground/src/tests/hot-reload-extension-toolbar/test.e2e.ts",
    "content": "import {test, expect} from '@playwright/test'\n\ntest.describe('hot-reload-extension-toolbar', () => {\n  test('works', async ({page}) => {\n    await page.goto('./tests/hot-reload-extension-toolbar/')\n\n    const toolbar = page.locator(\n      '[data-testid=\"theatre-extensionToolbar-global\"]',\n    )\n\n    const forwardButton = toolbar.getByRole('button', {name: '>'})\n    await forwardButton.click()\n\n    const otherButton = toolbar.getByRole('button').nth(1)\n\n    expect(await otherButton.textContent()).toEqual('1')\n\n    await forwardButton.click()\n    expect(await otherButton.textContent()).toEqual('2')\n    await forwardButton.click()\n\n    // expect otherButton not to exist\n    await expect(otherButton).not.toBeAttached()\n  })\n})\n"
  },
  {
    "path": "packages/playground/src/tests/r3f-dynamic-tree/App.tsx",
    "content": "import {editable as e, SheetProvider} from '@theatre/r3f'\nimport {getProject} from '@theatre/core'\nimport React, {useEffect, useState} from 'react'\nimport {Canvas} from '@react-three/fiber'\nimport {PerspectiveCamera} from '@react-three/drei'\nimport {useExtensionButton} from '../../shared/utils/useExtensionButton'\n\ndocument.body.style.backgroundColor = '#171717'\n\nconst EditableCamera = e(PerspectiveCamera, 'perspectiveCamera')\n\nfunction App() {\n  const project = getProject('R3F Hot Reload Test')\n  const sheet = project.sheet('Scene')\n\n  return (\n    <div\n      style={{\n        height: '100vh',\n      }}\n    >\n      <Canvas\n        dpr={[1.5, 2]}\n        linear\n        shadows\n        gl={{preserveDrawingBuffer: true}}\n        frameloop=\"demand\"\n      >\n        <SheetProvider sheet={sheet}>\n          <EditableCamera\n            theatreKey=\"Camera\"\n            makeDefault\n            position={[0, 0, 16]}\n            fov={75}\n          >\n            <Scene />\n          </EditableCamera>\n        </SheetProvider>\n      </Canvas>\n    </div>\n  )\n}\n\n// initial config of \"Cube 1\"\nconst cube1Config1 = {a: 1}\n// we change the default value of a, and add a new prop\nconst cube1Config2 = {a: 2, b: 2}\n// we re-use the previous config\nconst cube1Config3 = cube1Config2\n\nfunction Scene() {\n  const [state, setState] = useState(1)\n\n  useExtensionButton(\n    'Step forward',\n    () => {\n      setState((s) => s + 1)\n    },\n    '>',\n  )\n\n  useEffect(() => {}, [])\n\n  if (state === 1) {\n    return (\n      <e.mesh theatreKey=\"Cube 1\" additionalProps={cube1Config1}>\n        <boxGeometry args={[10, 10, 10]} />\n      </e.mesh>\n    )\n  } else if (state === 2) {\n    return (\n      <>\n        <e.mesh theatreKey=\"Cube 1\" additionalProps={cube1Config2}>\n          <boxGeometry args={[10, 10, 10]} />\n        </e.mesh>\n        <e.mesh theatreKey=\"Cube 2\">\n          <boxGeometry args={[20, 20, 10]} />\n        </e.mesh>\n      </>\n    )\n  } else if (state === 3) {\n    return (\n      <e.mesh theatreKey=\"Cube 1\" additionalProps={cube1Config3}>\n        <boxGeometry args={[10, 10, 10]} />\n      </e.mesh>\n    )\n  } else {\n    return null\n  }\n}\n\nexport default App\n"
  },
  {
    "path": "packages/playground/src/tests/r3f-dynamic-tree/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/tests/r3f-dynamic-tree/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport theatre from '@theatre/core'\nimport extension from '@theatre/r3f/dist/extension'\n\nvoid theatre.getStudio().then((studio) => studio.extend(extension))\nvoid theatre.init({studio: true, usePersistentStorage: false})\n\nReactDOM.createRoot(document.getElementById('root')!).render(<App />)\n"
  },
  {
    "path": "packages/playground/src/tests/r3f-dynamic-tree/test.e2e.ts",
    "content": "import {test, expect} from '@playwright/test'\n\ntest.describe('r3f-dynamic-tree', () => {\n  test('works', async ({page}) => {\n    test.setTimeout(30000)\n    await page.goto('./tests/r3f-dynamic-tree/')\n\n    const toolbar = page.locator(\n      '[data-testid=\"theatre-extensionToolbar-global\"]',\n    )\n\n    const snapshotButton = toolbar.getByRole('button').nth(0)\n    await snapshotButton.click()\n\n    const pane = page.getByTestId('theatre-pane-content-snapshot #1')\n    await expect(pane).toHaveScreenshot({})\n\n    const forwardButton = toolbar.getByRole('button', {name: '>'})\n    await forwardButton.click()\n    await forwardButton.click()\n    await forwardButton.click()\n    await expect(pane).toHaveScreenshot({})\n  })\n})\n"
  },
  {
    "path": "packages/playground/src/tests/r3f-stress-test/App.tsx",
    "content": "import {editable as e, RefreshSnapshot, SheetProvider} from '@theatre/r3f'\nimport {Stars} from '@react-three/drei'\nimport {getProject, types} from '@theatre/core'\nimport React, {Suspense, useState} from 'react'\nimport {Canvas} from '@react-three/fiber'\nimport {useGLTF, PerspectiveCamera} from '@react-three/drei'\nimport sceneGLB from './scene.glb'\n\nimport state from './SpaceStress.theatre-project-state.json'\n\ndocument.body.style.backgroundColor = '#171717'\n\nconst EditableCamera = e(PerspectiveCamera, 'perspectiveCamera')\n\nfunction Model({url}: {url: string}) {\n  const {nodes} = useGLTF(url) as any\n\n  return (\n    <group rotation={[-Math.PI / 2, 0, 0]} position={[0, -7, 0]} scale={7}>\n      <group rotation={[Math.PI / 13.5, -Math.PI / 5.8, Math.PI / 5.6]}>\n        <e.mesh\n          theatreKey=\"Example Namespace / Thingy\"\n          receiveShadow\n          castShadow\n          geometry={nodes.planet001.geometry}\n          material={nodes.planet001.material}\n        />\n        <e.mesh\n          theatreKey=\"Example Namespace / Debris 2\"\n          receiveShadow\n          castShadow\n          geometry={nodes.planet002.geometry}\n          material={nodes.planet002.material}\n        />\n        <e.mesh\n          theatreKey=\"Debris 1\"\n          geometry={nodes.planet003.geometry}\n          material={nodes.planet003.material}\n        />\n      </group>\n    </group>\n  )\n}\n\n// Initially, just copied from the shared/dom example\nconst textInterpolate = (left: string, right: string, progression: number) => {\n  if (!left || right.startsWith(left)) {\n    const length = Math.floor(\n      Math.max(0, (right.length - left.length) * progression),\n    )\n    return left + right.slice(left.length, left.length + length)\n  }\n  return left\n}\n\nconst allPropsObjectConfig = {\n  test: types.string('Typing', {interpolate: textInterpolate}),\n  testLiteral: types.stringLiteral('a', {a: 'Option A', b: 'Option B'}),\n  bool: types.boolean(false),\n  favoriteFood: types.compound({\n    name: types.string('Pie'),\n    // if needing more compounds, consider adding weight with different units\n    price: types.compound({\n      currency: types.stringLiteral('USD', {USD: 'USD', EUR: 'EUR'}),\n      amount: types.number(10, {range: [0, 1000], label: '$'}),\n    }),\n  }),\n  x: types.number(200),\n  y: types.number(200),\n  color: types.rgba({r: 1, g: 0, b: 0, a: 1}),\n}\n\nfunction App() {\n  const bgs = ['#272730', '#b7c5d1']\n  const [bgIndex, setBgIndex] = useState(0)\n  const bg = bgs[bgIndex]\n  const project = getProject('SpaceStress', {state})\n  const sheet = project.sheet('Scene')\n  void project.ready.then(() => sheet.sequence.play({iterationCount: Infinity}))\n\n  const allPropsObj = sheet.object('All Props Tester', allPropsObjectConfig)\n  console.log('allPropsObj', allPropsObj)\n\n  return (\n    <div\n      onClick={() => {\n        // return setBgIndex((bgIndex) => (bgIndex + 1) % bgs.length)\n      }}\n      style={{\n        height: '100vh',\n      }}\n    >\n      <Canvas\n        dpr={[1.5, 2]}\n        linear\n        shadows\n        gl={{preserveDrawingBuffer: true}}\n        frameloop=\"demand\"\n      >\n        <SheetProvider sheet={sheet}>\n          <fog attach=\"fog\" args={[bg, 16, 30]} />\n          <color attach=\"background\" args={[bg]} />\n          <ambientLight intensity={0.75} />\n          <EditableCamera\n            theatreKey=\"Camera\"\n            makeDefault\n            position={[0, 0, 16]}\n            fov={75}\n          >\n            <e.pointLight\n              theatreKey=\"Light 1\"\n              intensity={1}\n              position={[-10, -25, -10]}\n            />\n            <e.spotLight\n              theatreKey=\"Light 2\"\n              castShadow\n              intensity={2.25}\n              angle={0.2}\n              penumbra={1}\n              position={[-25, 20, -15]}\n              shadow-mapSize={[1024, 1024]}\n              shadow-bias={-0.0001}\n            />\n            <e.directionalLight theatreKey=\"Light 3\" />\n          </EditableCamera>\n          <Suspense fallback={null}>\n            <RefreshSnapshot />\n            <Model url={sceneGLB} />\n          </Suspense>\n          <Stars radius={500} depth={50} count={1000} factor={10} />\n        </SheetProvider>\n      </Canvas>\n    </div>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "packages/playground/src/tests/r3f-stress-test/SpaceStress.theatre-project-state.json",
    "content": "{\n  \"sheetsById\": {\n    \"Scene\": {\n      \"staticOverrides\": {\n        \"byObject\": {\n          \"Example Namespace / Debris 2\": {\n            \"position\": {\n              \"x\": -0.41416894961196427,\n              \"y\": 0.05418979316853111,\n              \"z\": -0.6307631253507592\n            },\n            \"rotation\": {\n              \"x\": -0.28479242226491835,\n              \"y\": 0.10635706958376893,\n              \"z\": -0.4508041396948808\n            },\n            \"scale\": {\n              \"x\": 1,\n              \"y\": 1,\n              \"z\": 1\n            }\n          },\n          \"Camera\": {\n            \"position\": {\n              \"z\": 16.000930185092166\n            },\n            \"rotation\": {\n              \"x\": 0,\n              \"y\": 0,\n              \"z\": 0\n            },\n            \"scale\": {\n              \"x\": 1,\n              \"y\": 1,\n              \"z\": 1\n            },\n            \"near\": 0.1,\n            \"far\": 2000,\n            \"fov\": 75,\n            \"zoom\": 1\n          },\n          \"Example Namespace / Thingy\": {\n            \"position\": {\n              \"x\": -0.4019278546805294,\n              \"y\": 0.05258817044159253,\n              \"z\": -0.6121204161281066\n            },\n            \"rotation\": {\n              \"x\": 0,\n              \"y\": 0,\n              \"z\": 0\n            },\n            \"scale\": {\n              \"x\": 1,\n              \"y\": 1,\n              \"z\": 1\n            }\n          },\n          \"Light 3\": {\n            \"scale\": {\n              \"x\": 1,\n              \"y\": 1,\n              \"z\": 1\n            },\n            \"intensity\": 1\n          },\n          \"Light 1\": {\n            \"rotation\": {\n              \"x\": 0,\n              \"y\": 0,\n              \"z\": 0\n            },\n            \"scale\": {\n              \"x\": 1,\n              \"y\": 1,\n              \"z\": 1\n            },\n            \"distance\": 0,\n            \"decay\": 0\n          }\n        }\n      },\n      \"sequence\": {\n        \"subUnitsPerUnit\": 30,\n        \"length\": 10,\n        \"type\": \"PositionalSequence\",\n        \"tracksByObject\": {\n          \"Camera\": {\n            \"trackData\": {\n              \"8bGG2wTnH3\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Camera:[\\\"position\\\",\\\"x\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"lYjaxYA49k\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"pD7z50G6KN\",\n                    \"position\": 4.1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 5.612978002902869\n                  },\n                  {\n                    \"id\": \"JVYh0YShNX\",\n                    \"position\": 4.5,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 5.679999999999999\n                  },\n                  {\n                    \"id\": \"0wFEq_6Nfn\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 8.944223985920669\n                  },\n                  {\n                    \"id\": \"1BuwkmWcWV\",\n                    \"position\": 7.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -5.162845587908198\n                  },\n                  {\n                    \"id\": \"BZL8yHn_Xs\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.2971937537323752\n                  },\n                  {\n                    \"id\": \"oVcDPNRlQ7\",\n                    \"position\": 10.5,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"8Fgrl6pszk\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Camera:[\\\"position\\\",\\\"y\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"cuTuWmf384\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 5.762709938174263\n                  },\n                  {\n                    \"id\": \"x0Oy5PcUAf\",\n                    \"position\": 4.1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 3.8429232922248016\n                  },\n                  {\n                    \"id\": \"b06BUhE2r4\",\n                    \"position\": 4.5,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 3.819999999999999\n                  },\n                  {\n                    \"id\": \"kCcZk3u5AS\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 3.7514667068203535\n                  },\n                  {\n                    \"id\": \"_epso83yxl\",\n                    \"position\": 7.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.09121846016466982\n                  },\n                  {\n                    \"id\": \"EEfNDpDccl\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"kTfZnzd2Wq\",\n                    \"position\": 10.5,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"66OlLrjm5i\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Camera:[\\\"rotation\\\",\\\"x\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"kbqPSD6gyD\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"m3QhEagzQL\",\n                    \"position\": 4.1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.634700286412289\n                  },\n                  {\n                    \"id\": \"b1-ACYPwOt\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.6185566084664134\n                  },\n                  {\n                    \"id\": \"RIsIF2mwMW\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"ab1K51U9Ru\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Camera:[\\\"rotation\\\",\\\"y\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"_eNjR3KQZY\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0.3122263362371538\n                  },\n                  {\n                    \"id\": \"LfmuQ751y_\",\n                    \"position\": 4.1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0.12170199514666553\n                  },\n                  {\n                    \"id\": \"oQDr2JbDeN\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0.1116576445180289\n                  },\n                  {\n                    \"id\": \"5ot5uuiFY4\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.27319885967680496\n                  }\n                ]\n              },\n              \"N2KCxPTdhe\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Camera:[\\\"rotation\\\",\\\"z\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"qUyj8pwdYB\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"jYt_GSQTi7\",\n                    \"position\": 4.1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6.990600239440247e-18\n                  },\n                  {\n                    \"id\": \"PKznC75gKj\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6.812793483511706e-18\n                  },\n                  {\n                    \"id\": \"uRerrV8Wvc\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              }\n            },\n            \"trackIdByPropPath\": {\n              \"[\\\"position\\\",\\\"x\\\"]\": \"8bGG2wTnH3\",\n              \"[\\\"position\\\",\\\"y\\\"]\": \"8Fgrl6pszk\",\n              \"[\\\"rotation\\\",\\\"x\\\"]\": \"66OlLrjm5i\",\n              \"[\\\"rotation\\\",\\\"y\\\"]\": \"ab1K51U9Ru\",\n              \"[\\\"rotation\\\",\\\"z\\\"]\": \"N2KCxPTdhe\"\n            }\n          },\n          \"Example Namespace / Debris 2\": {\n            \"trackData\": {\n              \"lIbSozvAt9\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Example Namespace / Debris 2:[\\\"position\\\",\\\"y\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Oxuiu3NGpi\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.13382142277468495\n                  },\n                  {\n                    \"id\": \"5EOkGetIzj\",\n                    \"position\": 5.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.0718956778318585\n                  },\n                  {\n                    \"id\": \"8HTEX9vP2s\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.10315674062798819\n                  }\n                ]\n              },\n              \"Dzh9nGps1E\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Example Namespace / Debris 2:[\\\"position\\\",\\\"x\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"alO_55vxU7\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0.06843989016124558\n                  },\n                  {\n                    \"id\": \"4K5GtQjYrM\",\n                    \"position\": 5.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.4048544192882112\n                  },\n                  {\n                    \"id\": \"8F8LNtzSaK\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.16592821593917476\n                  }\n                ]\n              },\n              \"q-0uBvC1xm\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Example Namespace / Debris 2:[\\\"position\\\",\\\"z\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"W0sEFD1zmk\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0.21464398477965263\n                  },\n                  {\n                    \"id\": \"9VmCX-KaDO\",\n                    \"position\": 5.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.50616475310079\n                  },\n                  {\n                    \"id\": \"1j11jf9H5W\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.142289482166487\n                  }\n                ]\n              },\n              \"Vz3jGxL2Zs\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Example Namespace / Debris 2:[\\\"rotation\\\",\\\"x\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"RFeOWD-WKR\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.7627888195445028\n                  },\n                  {\n                    \"id\": \"siVdf2zPKN\",\n                    \"position\": 5.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.09553015695204622\n                  },\n                  {\n                    \"id\": \"uXHx7HMjwG\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0.7084430674128276\n                  }\n                ]\n              },\n              \"MhTQTImxQ8\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Example Namespace / Debris 2:[\\\"rotation\\\",\\\"y\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"_NoYnBU5De\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0.1851909123865111\n                  },\n                  {\n                    \"id\": \"mXUULi87zO\",\n                    \"position\": 5.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0.019640469054676018\n                  },\n                  {\n                    \"id\": \"uWMpLQSrJN\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 1.072695780791852\n                  }\n                ]\n              },\n              \"3uezjGiONv\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Example Namespace / Debris 2:[\\\"rotation\\\",\\\"z\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"PGnAc7EhbA\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.06326767198149798\n                  },\n                  {\n                    \"id\": \"cFu4iE-Wfp\",\n                    \"position\": 5.167,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -0.5974796207743504\n                  },\n                  {\n                    \"id\": \"Z3DgKA58ki\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 2.5772222890936374\n                  }\n                ]\n              }\n            },\n            \"trackIdByPropPath\": {\n              \"[\\\"position\\\",\\\"y\\\"]\": \"lIbSozvAt9\",\n              \"[\\\"position\\\",\\\"x\\\"]\": \"Dzh9nGps1E\",\n              \"[\\\"position\\\",\\\"z\\\"]\": \"q-0uBvC1xm\",\n              \"[\\\"rotation\\\",\\\"x\\\"]\": \"Vz3jGxL2Zs\",\n              \"[\\\"rotation\\\",\\\"y\\\"]\": \"MhTQTImxQ8\",\n              \"[\\\"rotation\\\",\\\"z\\\"]\": \"3uezjGiONv\"\n            }\n          },\n          \"Light 3\": {\n            \"trackData\": {\n              \"F_zGYMlJnJ\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Light 3:[\\\"rotation\\\",\\\"x\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"qNipvSYpNq\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"q0qtixduGx\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"JsR6BTDzzI\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"9XT3gt5Z5K\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Light 3:[\\\"rotation\\\",\\\"y\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"32VxUAOdAt\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VgzYEEDWlO\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VVPFYd6aXA\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"pDLaY7cXQP\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Light 3:[\\\"rotation\\\",\\\"z\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"MLKw1ZZHIR\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"VBAFfx0C81\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  },\n                  {\n                    \"id\": \"mVM-MhZKIQ\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 0\n                  }\n                ]\n              },\n              \"4Sumy-DYPM\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Light 3:[\\\"position\\\",\\\"x\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"257acl7t3r\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 2.1160344001512037\n                  },\n                  {\n                    \"id\": \"T0yROMmEBf\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 5.130306777135816\n                  },\n                  {\n                    \"id\": \"iovRaYG3OI\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 10.280226555296956\n                  }\n                ]\n              },\n              \"U3G7sYTGDm\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Light 3:[\\\"position\\\",\\\"y\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"of52BiNAK6\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 2.737755043250702\n                  },\n                  {\n                    \"id\": \"V7KF6oZr8R\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 11.735225307221182\n                  },\n                  {\n                    \"id\": \"9im5esO-bk\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 6.229532917807006\n                  }\n                ]\n              },\n              \"dJ_oFOfKY_\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Light 3:[\\\"position\\\",\\\"z\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"V1BVrhTyV7\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -10.215152660100808\n                  },\n                  {\n                    \"id\": \"htIzuh6GLJ\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -7.959406158801434\n                  },\n                  {\n                    \"id\": \"qmyDaISgo7\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -21.47891083288782\n                  }\n                ]\n              }\n            },\n            \"trackIdByPropPath\": {\n              \"[\\\"rotation\\\",\\\"x\\\"]\": \"F_zGYMlJnJ\",\n              \"[\\\"rotation\\\",\\\"y\\\"]\": \"9XT3gt5Z5K\",\n              \"[\\\"rotation\\\",\\\"z\\\"]\": \"pDLaY7cXQP\",\n              \"[\\\"position\\\",\\\"x\\\"]\": \"4Sumy-DYPM\",\n              \"[\\\"position\\\",\\\"y\\\"]\": \"U3G7sYTGDm\",\n              \"[\\\"position\\\",\\\"z\\\"]\": \"dJ_oFOfKY_\"\n            }\n          },\n          \"Light 1\": {\n            \"trackData\": {\n              \"Eb6N5K-NHK\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Light 1:[\\\"position\\\",\\\"x\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Ittwa--FbM\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -10.00980876514102\n                  },\n                  {\n                    \"id\": \"edt3gnbQg-\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -17.867044246638432\n                  },\n                  {\n                    \"id\": \"MgpxfOdTcu\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 1.0979985208214078\n                  }\n                ]\n              },\n              \"xl7ucQ72mO\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Light 1:[\\\"position\\\",\\\"y\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"YFblyWrExK\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -18.963006327076492\n                  },\n                  {\n                    \"id\": \"h9G6P5GFR0\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 1.1014291847928668\n                  },\n                  {\n                    \"id\": \"yxgqyijJp4\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -8.16442444739367\n                  }\n                ]\n              },\n              \"krnG46oHdk\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Light 1:[\\\"position\\\",\\\"z\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"HyjmyM_ehV\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -9.969611988526236\n                  },\n                  {\n                    \"id\": \"1crYou7EUl\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -36.92029081302925\n                  },\n                  {\n                    \"id\": \"7Rpa4BCmiD\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": -19.1221872093312\n                  }\n                ]\n              },\n              \"oKQV1ruUQi\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"Light 1:[\\\"intensity\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"nzR42CL7U1\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 1\n                  },\n                  {\n                    \"id\": \"H-1ffXJK-9\",\n                    \"position\": 4.867,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 1.4260784907802817\n                  },\n                  {\n                    \"id\": \"6QhF5itoDw\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 1.9\n                  }\n                ]\n              }\n            },\n            \"trackIdByPropPath\": {\n              \"[\\\"position\\\",\\\"x\\\"]\": \"Eb6N5K-NHK\",\n              \"[\\\"position\\\",\\\"y\\\"]\": \"xl7ucQ72mO\",\n              \"[\\\"position\\\",\\\"z\\\"]\": \"krnG46oHdk\",\n              \"[\\\"intensity\\\"]\": \"oKQV1ruUQi\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitionVersion\": \"0.4.0\",\n  \"revisionHistory\": [\n    \"C3YuIxAoFMCH3bLq\"\n  ]\n}"
  },
  {
    "path": "packages/playground/src/tests/r3f-stress-test/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/tests/r3f-stress-test/index.tsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport theatre from '@theatre/core'\nimport extension from '@theatre/r3f/dist/extension'\nimport getStudio from '@theatre/studio/getStudio'\n\nconst studioPrivate = getStudio()\n\nvoid theatre.getStudio().then((studio) => studio.extend(extension))\nvoid theatre.init({studio: true})\n\nReactDOM.createRoot(document.getElementById('root')!).render(<App />)\n\nconst raf = studioPrivate.ticker\n\n// Show \"ticks per second\" information in performance measurements using the User Timing API\n// See https://developer.mozilla.org/en-US/docs/Web/API/User_Timing_API\n// See https://web.dev/user-timings/\nsetInterval(() => {\n  const start = {\n    ticks: raf.__ticks,\n    now: Date.now(),\n  }\n  const id = start.now.toString(36) + 'fps'\n  performance.mark(id)\n  setTimeout(() => {\n    const ticksPerSec =\n      ((raf.__ticks - start.ticks) * 1000) / (Date.now() - start.now)\n    // This shows up in the performance tab of devtools if you record!\n    performance.measure(\n      `${ticksPerSec.toFixed(0)}t/1s - ${(ticksPerSec * 0.5).toFixed(\n        0,\n      )}t/500ms`,\n      id,\n    )\n  }, 2000)\n}, 500)\n"
  },
  {
    "path": "packages/playground/src/tests/reading-obj-value/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/tests/reading-obj-value/index.tsx",
    "content": "import theatre from '@theatre/core'\nimport {getProject, types} from '@theatre/core'\nimport state from './reading obj value.theatre-project-state.json'\n\nvoid theatre.init({studio: true, usePersistentStorage: false})\n\nconst project = getProject('reading obj value', {state})\nconst TOTAL_ELEMENTS = 300\nconst TOTAL_ELEMENTS_R = 1 / TOTAL_ELEMENTS\nconst playbackControlObj = project\n  .sheet('controls sheet')\n  .object('playback control', {\n    interval: types.number(50, {\n      range: [1, 20000],\n    }),\n  })\nconst elements = new Array(TOTAL_ELEMENTS).fill(0).map((_, idx) => {\n  const sheet = project.sheet('sample sheet', `#${idx}`)\n  const obj = sheet.object('sample object', {\n    position: {\n      x: 0,\n      y: 0,\n    },\n  })\n\n  const el = document.createElement('div')\n\n  Object.assign(el.style, {\n    position: 'absolute',\n    height: '2rem',\n    width: '2rem',\n    borderRadius: '50%',\n    background: `hsl(${idx * 360 * TOTAL_ELEMENTS_R}, 100%, 80%)`,\n    left: 'var(--x)',\n    top: 'var(--y)',\n  })\n\n  document.body.appendChild(el)\n\n  return {el, sheet, obj}\n})\n\nvoid project.ready.then(() => {\n  const studio = theatre.getStudioSync()!\n  // select the playback controls obj so it shows as a tweakable control\n  studio.setSelection([playbackControlObj])\n  for (let i = 0; i < elements.length; i++) {\n    const sheet = elements[i].sheet\n    sheet.sequence.position = i * TOTAL_ELEMENTS_R * 5\n    void sheet.sequence.play({\n      iterationCount: Infinity,\n    })\n  }\n})\n\nfunction render() {\n  for (let i = 0; i < elements.length; i++) {\n    const element = elements[i]\n    // read directly from value to test keepHot from https://linear.app/theatre/issue/P-217/if-objvalue-is-read-make-sure-its-derivation-remains-hot-for-a-while\n    const value = element.obj.value\n    element.el.style.setProperty('--x', value.position.x + 'px')\n    element.el.style.setProperty('--y', value.position.y + 'px')\n  }\n\n  setTimeout(render, playbackControlObj.value.interval)\n}\n\nrender()\n"
  },
  {
    "path": "packages/playground/src/tests/reading-obj-value/reading obj value.theatre-project-state.json",
    "content": "{\n  \"sheetsById\": {\n    \"sample sheet\": {\n      \"staticOverrides\": {\n        \"byObject\": {\n          \"sample object\": {\n            \"position\": {\n              \"x\": 303,\n              \"y\": 268\n            },\n            \"interval\": 50\n          }\n        }\n      },\n      \"sequence\": {\n        \"subUnitsPerUnit\": 30,\n        \"length\": 10,\n        \"type\": \"PositionalSequence\",\n        \"tracksByObject\": {\n          \"sample object\": {\n            \"trackData\": {\n              \"2LcFioJysu\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"sample object:[\\\"position\\\",\\\"x\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"Kxy5pUojNt\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 303\n                  },\n                  {\n                    \"id\": \"Gw4Mws7OD9\",\n                    \"position\": 1.833,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 30.799745441261848\n                  },\n                  {\n                    \"id\": \"Hf8yST9Wh5\",\n                    \"position\": 8,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 414\n                  },\n                  {\n                    \"id\": \"yVYv4gA4oO\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 303\n                  }\n                ]\n              },\n              \"oWt_kxiglj\": {\n                \"type\": \"BasicKeyframedTrack\",\n                \"__debugName\": \"sample object:[\\\"position\\\",\\\"y\\\"]\",\n                \"keyframes\": [\n                  {\n                    \"id\": \"idPYVcMMFV\",\n                    \"position\": 0,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 268\n                  },\n                  {\n                    \"id\": \"DkaWGJJs5y\",\n                    \"position\": 3.1,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 136.76766033714398\n                  },\n                  {\n                    \"id\": \"wSMOxRFOHI\",\n                    \"position\": 5,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 518\n                  },\n                  {\n                    \"id\": \"iurvWeyPBD\",\n                    \"position\": 7.3,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 274.6142665912034\n                  },\n                  {\n                    \"id\": \"9IRlJBphrf\",\n                    \"position\": 10,\n                    \"connectedRight\": true,\n                    \"handles\": [\n                      0.5,\n                      1,\n                      0.5,\n                      0\n                    ],\n                    \"value\": 268\n                  }\n                ]\n              }\n            },\n            \"trackIdByPropPath\": {\n              \"[\\\"position\\\",\\\"x\\\"]\": \"2LcFioJysu\",\n              \"[\\\"position\\\",\\\"y\\\"]\": \"oWt_kxiglj\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitionVersion\": \"0.4.0\",\n  \"revisionHistory\": [\n    \"B_AcNZ7EnqbSzdJj\"\n  ]\n}"
  },
  {
    "path": "packages/playground/src/tests/setting-static-props/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Theatre.js Playground</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "packages/playground/src/tests/setting-static-props/index.tsx",
    "content": "import theatre from '@theatre/core'\nimport {getProject} from '@theatre/core'\n\nvoid theatre.init({studio: true, usePersistentStorage: false})\n\nconst project = getProject('sample project')\nconst sheet = project.sheet('sample sheet')\nconst obj = sheet.object('sample object', {\n  position: {\n    x: 0,\n    y: 0,\n  },\n})\n"
  },
  {
    "path": "packages/playground/src/tests/setting-static-props/test.e2e.ts",
    "content": "import {test, expect} from '@playwright/test'\n\nconst isMac = process.platform === 'darwin'\n\nconst delay = (dur: number) =>\n  new Promise((resolve) => setTimeout(resolve, dur))\n\ntest.describe('setting-static-props', () => {\n  // temporarily skipping this test until undo/redo is implemented in Saaz\n  test.skip('Undo/redo', async ({page}) => {\n    await page.goto('./tests/setting-static-props/')\n    // https://github.com/microsoft/playwright/issues/12298\n    // The div does in fact intercept pointer events, but it is meant to 🤦‍\n    await page\n      .locator('span:has-text(\"sample object\")')\n      .first()\n      .click({force: true})\n\n    const detailPanel = page.locator('[data-testid=\"DetailPanel-Object\"]')\n\n    const firstInput = detailPanel.locator('input[type=\"text\"]').first()\n    // Click input[type=\"text\"] >> nth=0\n    await firstInput.click()\n    // Fill input[type=\"text\"] >> nth=0\n    await firstInput.fill('1')\n    // Press Enter\n    await firstInput.press('Enter')\n    const secondInput = detailPanel.locator('input[type=\"text\"]').nth(1)\n    // Click input[type=\"text\"] >> nth=1\n    await secondInput.click()\n    // Fill input[type=\"text\"] >> nth=1\n    await secondInput.fill('2')\n    // Press Enter\n    await secondInput.press('Enter')\n\n    const metaKey = isMac ? 'Meta' : 'Control'\n\n    // Press z with modifiers\n    await page.locator('body').press(`${metaKey}+z`)\n    await expect(firstInput).toHaveAttribute('value', '1')\n    await expect(secondInput).toHaveAttribute('value', '0')\n    await page.locator('body').press(`${metaKey}+Shift+z`)\n    await expect(firstInput).toHaveAttribute('value', '1')\n    await expect(secondInput).toHaveAttribute('value', '2')\n\n    await expect(page).toHaveScreenshot()\n  })\n})\n"
  },
  {
    "path": "packages/playground/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \".\",\n    \"types\": [\"jest\", \"node\"],\n    \"emitDeclarationOnly\": false,\n    \"composite\": true,\n    \"resolveJsonModule\": true\n  },\n  \"references\": [\n    {\"path\": \"../core\"},\n    {\"path\": \"../studio\"},\n    {\"path\": \"../dataverse\"},\n    {\"path\": \"../r3f\"},\n    {\"path\": \"../theatric\"}\n  ],\n  \"include\": [\n    \"./src/**/*\",\n    \"./src/**/*.json\",\n    \"./devEnv/**/*\",\n    \"./vite.config.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/playground/vite.config.ts",
    "content": "import {defineConfig} from 'vite'\nimport react from '@vitejs/plugin-react-swc'\nimport path from 'path'\nimport fg from 'fast-glob'\nimport {getAliasesFromTsConfigForRollup} from '../../devEnv/getAliasesFromTsConfig'\nimport {definedGlobals} from '../core/devEnv/definedGlobals'\nimport * as dotenv from 'dotenv'\nimport * as fs from 'fs'\n\nconst fromPlaygroundDir = (folder: string) => path.resolve(__dirname, folder)\nconst srcDir = fromPlaygroundDir('src')\nconst sharedDir = fromPlaygroundDir('src/shared')\nconst personalDir = fromPlaygroundDir('src/personal')\nconst testDir = fromPlaygroundDir('src/tests')\n\nconst repoRoot = path.resolve(__dirname, '../..')\n\nfunction findAppUrl() {\n  const defaultUrl = 'https://app.theatrejs.com'\n\n  function validateURL(url: string) {\n    const pattern = new RegExp('^https?:\\\\/\\\\/[^\\\\s/$.?#].[^\\\\s]*$', 'i')\n    return pattern.test(url)\n  }\n\n  const pathToAppEnv = path.resolve(repoRoot, 'packages/app/.env')\n\n  const relativePath = path.relative(repoRoot, pathToAppEnv)\n\n  if (!fs.existsSync(pathToAppEnv)) {\n    console.warn(\n      `WARNING: the .env file at ${relativePath} does not exist, so we'll assume the web app's url is at https://app.theatrejs.com`,\n    )\n  } else {\n    const envFileContent = fs.readFileSync(pathToAppEnv, {encoding: 'utf-8'})\n    try {\n      const webAppEnv = dotenv.parse(envFileContent)\n      const url = 'http://' + webAppEnv.HOST + ':' + webAppEnv.PORT\n      if (validateURL(url)) {\n        console.info(`Using ${url} as the app url, read from ${relativePath}`)\n        return url\n      } else {\n        console.warn(\n          `WARNING: HOST/PORT values in ${relativePath} don't form a correct URL. Defaulting to ${defaultUrl}`,\n        )\n        return defaultUrl\n      }\n    } catch (err) {\n      console.warn(`WARNING: Could not read ${relativePath}`)\n    }\n  }\n\n  return defaultUrl\n}\n\n// https://vitejs.dev/config/\nconst config = defineConfig(async ({command}) => {\n  const dev = command === 'serve'\n  console.log('dev', dev)\n\n  const groups = {\n    shared: await fg(path.join(sharedDir, '*/index.html')),\n    personal: await fg(path.join(personalDir, '*/index.html')),\n    test: await fg(path.join(testDir, '*/index.html')),\n  }\n\n  const rollupInputs = (() => {\n    // eg ['path/to/src/group/playground/index.html']\n    const paths = ([] as string[]).concat(...Object.values(groups))\n\n    // eg ['group/playground']\n    const names = paths.map((entry) => {\n      // convert \"/path/to/src/group/playground/index.html\" to \"group/playground\"\n      const relativePath = path.relative(srcDir, entry)\n      const entryName = relativePath.replace(/\\/index\\.html$/, '')\n      return entryName\n    })\n\n    // eg { 'group/playground': 'path/to/src/group/playground/index.html' }\n    return Object.fromEntries(names.map((name, index) => [name, paths[index]]))\n  })()\n\n  return {\n    root: srcDir,\n    plugins: [react()],\n    appType: 'mpa',\n    server: {\n      port: 8082,\n      // base: '/playground/',\n    },\n\n    assetsInclude: ['**/*.gltf', '**/*.glb'],\n\n    resolve: {\n      /*\n    This will alias paths like `@theatre/core` to `path/to/theatre/core/src/index.ts` and so on,\n    so vite won't treat the monorepo's packages as externals and won't pre-bundle them.\n    */\n      alias: [...getAliasesFromTsConfigForRollup()],\n    },\n    define: {\n      ...definedGlobals,\n      'window.__IS_VISUAL_REGRESSION_TESTING': 'false',\n      'process.env.BACKEND_URL': JSON.stringify(findAppUrl()),\n    },\n    optimizeDeps: {\n      exclude: dev ? ['@theatre/core', '@theatre/studio'] : [],\n      // include: !dev ? ['@theatre/core', '@theatre/studio'] : [],\n      // needsInterop: ['@theatre/core', '@theatre/studio'],\n    },\n    build: {\n      outDir: '../build',\n      minify: false,\n      sourcemap: true,\n\n      rollupOptions: {\n        input: {\n          ...rollupInputs,\n          main: fromPlaygroundDir('src/index.html'),\n        },\n      },\n    },\n  }\n})\n\nexport default config\n"
  },
  {
    "path": "packages/r3f/.gitignore",
    "content": "/dist"
  },
  {
    "path": "packages/r3f/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "packages/r3f/README.md",
    "content": "# @theatre/r3f\n\nA [Theatre.js](https://github.com/AriaMinaei/theatre) extension for [THREE.js](https://threejs.org/) with [React Three Fiber](https://github.com/pmndrs/react-three-fiber).\n\n**Here be dragons! 🐉** `@theatre/r3f` is pre-release software, the API, the internal logic, and even the package name can and will drastically change at any time, without warning.\n\n## Quickstart\n\n```bash\n# r3f and its deps\nyarn add react\nyarn add three\nyarn add @react-three/fiber\n\n# Theatre.js\nyarn add @theatre/core\nyarn add @theatre/studio\n\nyarn add @theatre/r3f\n```\n\n```tsx\nimport React from 'react';\nimport { Canvas } from 'react-three-fiber';\nimport {editable as e, SheetProvider, extension} from '@theatre/r3f';\nimport studio from '@theatre/studio';\n\nstudio.extend(extension)\nstudio.initialize()\n\nexport default function App() {\n  return (\n    <Canvas>\n      <SheetProvider\n        sheet={getProject('Playground - R3F').sheet('R3F-Canvas')}\n      >\n          <ambientLight intensity={0.5} />\n          {/* Mark objects as editable. */}\n          {/* Properties in the code are used as initial values and reset points in the editor. */}\n          <e.spotLight\n            position={[10, 10, 10]}\n            angle={0.15}\n            penumbra={1}\n            theatreKey=\"Spotlight\"\n          />\n          <e.pointLight theatreKey=\"PointLight\" />\n          <e.mesh theatreKey=\"Box\">\n            <boxBufferGeometry />\n            <meshStandardMaterial color=\"orange\" />\n          </e.mesh>\n      </SheetProvider>\n    </Canvas>\n  );\n}\n```\n\n## Why\n\nWhen creating a 3D scene for react-three-fiber, you can choose two routes: you can either code it in r3f, which gives you reactivity, and the flexibility that comes with it, or you can use a 3D software like Blender and export it, but then if you want to dynamically modify that scene at runtime, you'll have to fall back to imperative code.\n\nThe best middle ground so far has been *gltfjsx*, which generates JSX from your exported scene, however it still involves a lot of manual work if you want to split your scene into components, and any modifications you make will have to be reapplied if you make changes to the scene.\n\n`@theatre/r3f` aims to fill this gap by allowing you to set up your scene in JSX, giving you reactivity, while allowing you to tweak the properties of these objects in a visual editor, including their transforms, which you can then bake into a json file to be used by the runtime in production. An explicit goal of the project is to mirror regular react-three-fiber code as much as possible. This lets you add it to an existing project with ease, take it out when you don't need it, and generally use it as little or as much as you want, without feeling locked in.\n\n## API\n\n### `editable`\n\nUse it to make objects editable. The properties on `editable` mirror the intrinsic elements of react-three-fiber, however there's no full parity yet. E.g. if you want to create an editable `<mesh>`, you do it by using `<editable.mesh>` instead. These elements have the same interface as the normal ones, with the addition of the below props. Any editable property you set in the code (like `position`) will be used as an initial value/reset point in the editor.\n\n`editable` is also a function, which allows you to make your custom components editable. Your component does have to be compatible with the interface of the editable object type it is meant to represent. You need to pass it the component you want to wrap, and the object type it represents (see object types).\n\n```ts\nimport { editable } from '@theatre/r3f';\nimport { PerspectiveCamera } from '@react-three/drei';\n\nconst EditableCamera = editable(PerspectiveCamera, 'perspectiveCamera');\n```\n\n#### Props\n\n`theatreKey: string`: a unique name used to identify the object in the editor.\n\n### `<SheetProvider sheet={...} />`\n\nProvider component you need to wrap any scene with that you use editable components in.\n\n#### Props\n\n`sheet: TheatreSheetObject`: A function that returns the Theatre.js sheet associated with the scene.\n\n## Object types\n\nReact Three Editable currently supports the following object types:\n\n- group\n- mesh\n- spotLight\n- directionalLight\n- pointLight\n- perspectiveCamera\n- orthographicCamera\n\nThese are available as properties of `editable`, and you need to pass them as the second parameter when wrapping custom components.\n"
  },
  {
    "path": "packages/r3f/devEnv/bundle.ts",
    "content": "import path = require('path')\nimport {build} from 'esbuild'\n\nconst definedGlobals = {\n  'process.env.NODE_ENV': JSON.stringify('production'),\n}\n\nvoid createBundles()\n\nasync function createBundles() {\n  await Promise.all([createMainBundle(), createExtensionBundle()])\n\n  async function createMainBundle() {\n    const pathToEntry = path.join(__dirname, '../src/index.ts')\n    const esbuildConfig: Parameters<typeof build>[0] = {\n      entryPoints: [pathToEntry],\n      target: ['es6'],\n      loader: {'.svg': 'text', '.png': 'dataurl'},\n      bundle: true,\n      sourcemap: true,\n      define: {...definedGlobals},\n      external: [\n        '@theatre/core',\n        '@theatre/dataverse',\n        '@theatre/react',\n        '@theatre/studio',\n        'react',\n        'react-dom',\n        'three',\n        '@react-three/fiber',\n      ],\n      platform: 'browser',\n      mainFields: ['browser', 'module', 'main'],\n      conditions: ['browser', 'node'],\n      outfile: path.join(__dirname, '../dist/index.js'),\n      format: 'cjs',\n      metafile: true,\n    }\n\n    const result = await Promise.all([\n      build(esbuildConfig),\n      build({\n        ...esbuildConfig,\n        outfile: path.join(__dirname, '../dist/index.esm.js'),\n        format: 'esm',\n      }),\n    ])\n  }\n\n  /**\n   * We were initially externalizing react+fiber+drei+stdlib and having them as peer deps. Once we started to test this setup with different\n   * versions of each, we realized that:\n   *\n   * 1. It can be confusing for npm users to satisfy the peer dep ranges. I (Aria) struggled to get the peer deps right in a sample project.\n   * 2. More importantly, some permutations of these deps ended up not necessarily working together even though they satisfied the peer dep\n   *    ranges.\n   * 3. Also, since react 17 and 18 have subtly different behaviors (useEffect, suspend, etc), we thought that us having to support both of\n   *    those behaviors in the snapshot editor is probably not that useful to the user. So we thought removing that surface area by bundling\n   *    react into the snapshot editor would reduce the chance of running into bugs caused by the differences between react 17 and 18.\n   *\n   * So we made the call to bundle all of these libraries in the `/extension` bundle.\n   *\n   * The downsides we thought about:\n   *\n   * 1. The bundle size of the snapshot editor increases, but since users don't ship the snapshot editor to their end users, we thought this\n   *    should be tolerable (let us know if it's not).\n   * 2. Another downside we thought of is that having two versions of react and fiber on the same page may cause issues, but we haven't ran\n   *   into any yet, so don't know if those issues couldn't be worked around.\n   */\n  async function createExtensionBundle() {\n    const pathToEntry = path.join(__dirname, '../src/extension/index.ts')\n    const esbuildConfig: Parameters<typeof build>[0] = {\n      entryPoints: [pathToEntry],\n      target: 'es6',\n      loader: {'.svg': 'text', '.png': 'dataurl'},\n      bundle: true,\n      sourcemap: true,\n      define: {...definedGlobals},\n      external: [\n        '@theatre/core',\n        '@theatre/studio',\n        '@theatre/dataverse',\n        '@theatre/r3f',\n        'three',\n        // '@react-three/fiber',\n        // '@react-three/drei',\n        // 'three-stdlib',\n      ],\n      platform: 'browser',\n      mainFields: ['browser', 'module', 'main'],\n      conditions: ['browser'],\n      outfile: path.join(__dirname, '../dist/extension/index.js'),\n      format: 'cjs',\n      metafile: true,\n\n      /**\n       * Don't minify the extension bundle because it'll eventually get minified by the bundler of the user's project.\n       * However, we do want to tree shake the bundle and minify the syntax, so at least all the `if (false) {...}` blocks\n       * are removed. This also removes React's error that says \"react is running in production mode but dead code elimination has not been applied...\".\n       */\n      minifyIdentifiers: false,\n      minifySyntax: true,\n      minifyWhitespace: false,\n      treeShaking: true,\n    }\n\n    const result = await Promise.all([\n      build(esbuildConfig),\n      build({\n        ...esbuildConfig,\n        outfile: path.join(__dirname, '../dist/extension/index.esm.js'),\n        format: 'esm',\n      }),\n    ])\n  }\n}\n"
  },
  {
    "path": "packages/r3f/devEnv/tsconfig.json",
    "content": "{\n  \n}"
  },
  {
    "path": "packages/r3f/package.json",
    "content": "{\n  \"name\": \"@theatre/r3f\",\n  \"version\": \"0.7.0\",\n  \"license\": \"Apache-2.0\",\n  \"authors\": [\n    {\n      \"name\": \"Andrew Prifer\",\n      \"email\": \"andrew.prifer@gmail.com\",\n      \"url\": \"https://github.com/AndrewPrifer\"\n    },\n    {\n      \"name\": \"Aria Minaei\",\n      \"email\": \"aria@theatrejs.com\",\n      \"url\": \"https://github.com/AriaMinaei\"\n    }\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/AriaMinaei/theatre\",\n    \"directory\": \"packages/r3f\"\n  },\n  \"main\": \"dist/index.js\",\n  \"module\": \"dist/index.esm.js\",\n  \"sideEffects\": false,\n  \"files\": [\n    \"dist/**/*\"\n  ],\n  \"exports\": {\n    \".\": {\n      \"import\": \"./dist/index.esm.js\",\n      \"require\": \"./dist/index.js\",\n      \"types\": \"./dist/index.d.ts\"\n    },\n    \"./dist/extension\": {\n      \"import\": \"./dist/extension/index.esm.js\",\n      \"require\": \"./dist/extension/index.js\",\n      \"types\": \"./dist/extension/index.d.ts\"\n    }\n  },\n  \"scripts\": {\n    \"prepack\": \"yarn run build\",\n    \"typecheck\": \"yarn run build\",\n    \"build\": \"run-s build:ts build:js\",\n    \"build:js\": \"tsx devEnv/bundle.ts\",\n    \"build:ts\": \"tsc --build ./tsconfig.json\",\n    \"prepublish\": \"yarn run build\",\n    \"clean\": \"rm -rf ./dist && rm -f tsconfig.tsbuildinfo\"\n  },\n  \"devDependencies\": {\n    \"@react-three/drei\": \"^9.80.1\",\n    \"@react-three/fiber\": \"^8.13.6\",\n    \"@theatre/dataverse\": \"workspace:*\",\n    \"@theatre/react\": \"workspace:*\",\n    \"@types/jest\": \"^26.0.23\",\n    \"@types/lodash-es\": \"^4.17.4\",\n    \"@types/node\": \"^15.6.2\",\n    \"@types/react\": \"^18.2.18\",\n    \"@types/react-dom\": \"^18.2.7\",\n    \"@types/styled-components\": \"^5.1.26\",\n    \"@types/three\": \"0.155.0\",\n    \"esbuild\": \"^0.18.17\",\n    \"lodash-es\": \"^4.17.21\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"polished\": \"^4.1.3\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-icons\": \"^4.2.0\",\n    \"react-merge-refs\": \"^2.0.2\",\n    \"react-shadow\": \"^20.4.0\",\n    \"react-use-measure\": \"^2.1.1\",\n    \"reakit\": \"^1.3.8\",\n    \"styled-components\": \"^5.3.11\",\n    \"three\": \"0.155.0\",\n    \"three-stdlib\": \"^2.24.1\",\n    \"tsx\": \"4.7.0\",\n    \"typescript\": \"5.1.6\",\n    \"zustand\": \"^3.5.1\"\n  },\n  \"peerDependencies\": {\n    \"@react-three/fiber\": \"^8.13.6\",\n    \"@theatre/core\": \"*\",\n    \"@theatre/studio\": \"*\",\n    \"react\": \">=17.0.2\",\n    \"react-dom\": \">=17.0.2\",\n    \"three\": \">=0.155.0\"\n  }\n}\n"
  },
  {
    "path": "packages/r3f/src/.eslintrc.js",
    "content": "module.exports = {\n  rules: {\n    'no-restricted-syntax': [\n      'error',\n      {\n        selector: `ImportDeclaration[source.value=/@theatre\\\\u002F(studio|core)\\\\u002F/]`,\n        message: `Importing Theatre's submodules would not work in the production build.`,\n      },\n    ],\n  },\n}\n"
  },
  {
    "path": "packages/r3f/src/drei/OrthographicCamera.tsx",
    "content": "import * as React from 'react'\nimport type {\n  OrthographicCamera as OrthographicCameraImpl,\n  Object3D,\n} from 'three'\nimport {useFrame, useThree} from '@react-three/fiber'\nimport {mergeRefs} from 'react-merge-refs'\nimport {editable} from '../index'\nimport {Vector3} from 'three'\nimport type {MutableRefObject} from 'react'\nimport {editorStore} from '../main/store'\n\nexport type OrthographicCameraProps = Omit<\n  JSX.IntrinsicElements['orthographicCamera'],\n  'lookAt'\n> & {\n  lookAt?:\n    | [number, number, number]\n    | Vector3\n    | MutableRefObject<Object3D | null | undefined>\n  makeDefault?: boolean\n  manual?: boolean\n  children?: React.ReactNode\n}\n\nexport const OrthographicCamera = editable(\n  React.forwardRef(\n    ({makeDefault, lookAt, ...props}: OrthographicCameraProps, ref) => {\n      const set = useThree(({set}) => set)\n      const camera = useThree(({camera}) => camera)\n      const size = useThree(({size}) => size)\n      const cameraRef = React.useRef<OrthographicCameraImpl>(null!)\n\n      React.useLayoutEffect(() => {\n        if (!props.manual) {\n          cameraRef.current.updateProjectionMatrix()\n        }\n      }, [size, props])\n\n      React.useLayoutEffect(() => {\n        cameraRef.current.updateProjectionMatrix()\n      })\n\n      React.useLayoutEffect(() => {\n        if (makeDefault) {\n          const oldCam = camera\n          set(() => ({camera: cameraRef.current!}))\n          return () => set(() => ({camera: oldCam}))\n        }\n        // The camera should not be part of the dependency list because this components camera is a stable reference\n        // that must exchange the default, and clean up after itself on unmount.\n      }, [cameraRef, makeDefault, set])\n\n      useFrame(() => {\n        if (lookAt && cameraRef.current) {\n          cameraRef.current.lookAt(\n            Array.isArray(lookAt)\n              ? new Vector3(...lookAt)\n              : (lookAt as MutableRefObject<Object3D>).current\n              ? (lookAt as MutableRefObject<Object3D>).current.position\n              : (lookAt as Vector3),\n          )\n\n          // how could we make it possible for users to do something like this too?\n          const snapshot = editorStore.getState().editablesSnapshot\n          if (snapshot) {\n            snapshot[\n              cameraRef.current.userData.__storeKey\n            ].proxyObject?.rotation.copy(cameraRef.current.rotation)\n          }\n        }\n      })\n\n      return (\n        <orthographicCamera\n          left={size.width / -2}\n          right={size.width / 2}\n          top={size.height / 2}\n          bottom={size.height / -2}\n          ref={mergeRefs([cameraRef, ref])}\n          {...props}\n        />\n      )\n    },\n  ),\n  'orthographicCamera',\n)\n"
  },
  {
    "path": "packages/r3f/src/drei/PerspectiveCamera.tsx",
    "content": "import * as React from 'react'\nimport type {PerspectiveCamera as PerspectiveCameraImpl, Object3D} from 'three'\nimport {useFrame, useThree} from '@react-three/fiber'\nimport {mergeRefs} from 'react-merge-refs'\nimport {editable} from '../index'\nimport {Vector3} from 'three'\nimport {editorStore} from '../main/store'\nimport type {MutableRefObject} from 'react'\n\nexport type PerspectiveCameraProps = Omit<\n  JSX.IntrinsicElements['perspectiveCamera'],\n  'lookAt'\n> & {\n  lookAt?:\n    | [number, number, number]\n    | Vector3\n    | MutableRefObject<Object3D | null | undefined>\n  makeDefault?: boolean\n  manual?: boolean\n  children?: React.ReactNode\n}\n\nexport const PerspectiveCamera = editable(\n  React.forwardRef(\n    ({makeDefault, lookAt, ...props}: PerspectiveCameraProps, ref) => {\n      const set = useThree(({set}) => set)\n      const camera = useThree(({camera}) => camera)\n      const size = useThree(({size}) => size)\n      const cameraRef = React.useRef<PerspectiveCameraImpl>(null!)\n\n      React.useLayoutEffect(() => {\n        if (!props.manual) {\n          cameraRef.current.aspect = size.width / size.height\n        }\n      }, [size, props])\n\n      React.useLayoutEffect(() => {\n        cameraRef.current.updateProjectionMatrix()\n      })\n\n      React.useLayoutEffect(() => {\n        if (makeDefault) {\n          const oldCam = camera\n          set(() => ({camera: cameraRef.current!}))\n          return () => set(() => ({camera: oldCam}))\n        }\n        // The camera should not be part of the dependency list because this components camera is a stable reference\n        // that must exchange the default, and clean up after itself on unmount.\n      }, [cameraRef, makeDefault, set])\n\n      useFrame(() => {\n        if (lookAt && cameraRef.current) {\n          cameraRef.current.lookAt(\n            Array.isArray(lookAt)\n              ? new Vector3(...lookAt)\n              : (lookAt as MutableRefObject<Object3D>).current\n              ? (lookAt as MutableRefObject<Object3D>).current.position\n              : (lookAt as Vector3),\n          )\n\n          // how could we make it possible for users to do something like this too?\n          const snapshot = editorStore.getState().editablesSnapshot\n          if (snapshot) {\n            snapshot[\n              cameraRef.current.userData.__storeKey\n            ].proxyObject?.rotation.copy(cameraRef.current.rotation)\n          }\n        }\n      })\n\n      return <perspectiveCamera ref={mergeRefs([cameraRef, ref])} {...props} />\n    },\n  ),\n  'perspectiveCamera',\n)\n"
  },
  {
    "path": "packages/r3f/src/drei/index.ts",
    "content": "export * from './PerspectiveCamera'\nexport * from './OrthographicCamera'\n"
  },
  {
    "path": "packages/r3f/src/extension/.eslintrc.js",
    "content": "module.exports = {\n  rules: {\n    'no-restricted-syntax': [\n      'error',\n      {\n        selector: `ImportDeclaration[importKind!='type'][source.value=/\\\\u002Fmain\\\\u002F/]`,\n        message: `The extension should not be able to import the internals of main. If you need to use this API, expose it as __private_api from @theatre/r3f/src/index.ts`,\n      },\n    ],\n  },\n}\n"
  },
  {
    "path": "packages/r3f/src/extension/InfiniteGridHelper/index.ts",
    "content": "// Inspired by https://github.com/Fyrestar/THREE.InfiniteGridHelper\nimport {\n  Color,\n  DoubleSide,\n  GLSL3,\n  Mesh,\n  PlaneGeometry,\n  ShaderMaterial,\n} from 'three'\n\nexport class InfiniteGridHelper extends Mesh {\n  constructor({\n    divisions = 10,\n    scale = 0.1,\n    color = new Color('white'),\n    distance = 8000,\n    subgridOpacity = 0.05,\n    gridOpacity = 0.15,\n  } = {}) {\n    const geometry = new PlaneGeometry(2, 2, 1, 1)\n\n    const material = new ShaderMaterial({\n      // Needs to be set so threejs doesn't mess things up in glsl3 code by trying to make glsl1 forward compatible\n      glslVersion: GLSL3,\n      side: DoubleSide,\n      uniforms: {\n        uScale: {\n          value: scale,\n        },\n        uDivisions: {\n          value: divisions,\n        },\n        uColor: {\n          value: color,\n        },\n        uDistance: {\n          value: distance,\n        },\n        uSubgridOpacity: {\n          value: subgridOpacity,\n        },\n        uGridOpacity: {\n          value: gridOpacity,\n        },\n      },\n      transparent: true,\n      // language=GLSL\n      vertexShader: `\n          out vec3 worldPosition;\n          uniform float uDistance;\n\n          void main() {\n              // Scale the plane by the drawing distance\n              worldPosition = position.xzy * uDistance;\n              worldPosition.xz += cameraPosition.xz;\n\n              gl_Position = projectionMatrix * modelViewMatrix * vec4(worldPosition, 1.0);\n          }\n      `,\n      // language=GLSL\n      fragmentShader: `\n          out vec4 fragColor;\n          in vec3 worldPosition;\n\n          uniform float uDivisions;\n          uniform float uScale;\n          uniform vec3 uColor;\n          uniform float uDistance;\n          uniform float uSubgridOpacity;\n          uniform float uGridOpacity;\n\n          float getGrid(float gapSize) {\n              vec2 worldPositionByDivision = worldPosition.xz / gapSize;\n\n              // Inverted, 0 where line, >1 where there's no line\n              // We use the worldPosition (which in this case we use similarly to UVs) differential to control the anti-aliasing\n              // We need to do the -0.5)-0.5 trick because the result fades out from 0 to 1, and we want both\n              // worldPositionByDivision == 0.3 and worldPositionByDivision == 0.7 to result in the same fade, i.e. 0.3,\n              // otherwise only one side of the line will be anti-aliased\n              vec2 grid = abs(fract(worldPositionByDivision-0.5)-0.5) / fwidth(worldPositionByDivision) / 2.0;\n              float gridLine = min(grid.x, grid.y);\n\n              // Uninvert and clamp\n              return 1.0 - min(gridLine, 1.0);\n          }\n\n          void main() {\n              float cameraDistanceToGridPlane = distance(cameraPosition.y, worldPosition.y);\n              float cameraDistanceToFragmentOnGridPlane = distance(cameraPosition.xz, worldPosition.xz);\n\n              // The size of the grid and subgrid are powers of each other and they are determined based on camera distance.\n              // The current grid will become the next subgrid when it becomes too small, and its next power becomes the new grid.\n              float subGridPower = pow(uDivisions, floor(log(cameraDistanceToGridPlane) / log(uDivisions)));\n              float gridPower = subGridPower * uDivisions;\n\n              // If we want to fade both the grid and its subgrid, we need to displays 3 different opacities, with the next grid being the third\n              float nextGridPower = gridPower * uDivisions;\n\n              // 1 where grid, 0 where no grid\n              float subgrid = getGrid(subGridPower * uScale);\n              float grid = getGrid(gridPower * uScale);\n              float nextGrid = getGrid(nextGridPower * uScale);\n\n              // Where we are between the introduction of the current grid power and when we switch to the next grid power\n              float stepPercentage = (cameraDistanceToGridPlane - subGridPower)/(gridPower - subGridPower);\n\n              // The last x percentage of the current step over which we want to fade\n              float fadeRange = 0.3;\n\n              // We calculate the fade percentage from the step percentage and the fade range\n              float fadePercentage = max(stepPercentage - 1.0 + fadeRange, 0.0) / fadeRange;\n\n              // Set base opacity based on how close we are to the drawing distance, with a cubic falloff\n              float baseOpacity = subgrid * pow(1.0 - min(cameraDistanceToFragmentOnGridPlane / uDistance, 1.0), 3.0);\n\n              // Shade the subgrid\n              fragColor = vec4(uColor.rgb, (baseOpacity - fadePercentage) * uSubgridOpacity);\n\n              // Somewhat arbitrary additional fade coefficient to counter anti-aliasing popping when switching between grid powers\n              float fadeCoefficient = 0.5;\n\n              // Shade the grid\n              fragColor.a = mix(fragColor.a, baseOpacity * uGridOpacity - fadePercentage * (uGridOpacity - uSubgridOpacity) * fadeCoefficient, grid);\n\n              // Shade the next grid\n              fragColor.a = mix(fragColor.a, baseOpacity * uGridOpacity, nextGrid);\n\n              if (fragColor.a <= 0.0) discard;\n          }\n      `,\n\n      extensions: {\n        derivatives: true,\n      },\n    })\n\n    super(geometry, material)\n\n    this.frustumCulled = false\n  }\n}\n"
  },
  {
    "path": "packages/r3f/src/extension/components/DragDetector.tsx",
    "content": "import type {FC, ReactNode} from 'react'\nimport React, {\n  createContext,\n  useContext,\n  useEffect,\n  useRef,\n  useState,\n} from 'react'\n\nconst dragDetectorContext = createContext(false)\n\ninterface DragDetectorProviderProps {\n  children: ReactNode\n}\n\nexport const DragDetectorProvider: FC<DragDetectorProviderProps> = ({\n  children,\n}) => {\n  const mouseDownRef = useRef(false)\n  const [dragging, setDragging] = useState(false)\n\n  useEffect(() => {\n    document.addEventListener('mousedown', () => (mouseDownRef.current = true))\n    document.addEventListener('mousemove', () => {\n      if (mouseDownRef.current) {\n        setDragging(true)\n      }\n    })\n    document.addEventListener('mouseup', () => {\n      mouseDownRef.current = false\n      setDragging(false)\n    })\n  }, [])\n\n  return (\n    <dragDetectorContext.Provider value={dragging}>\n      {children}\n    </dragDetectorContext.Provider>\n  )\n}\n\nexport const useDragDetector = () => useContext(dragDetectorContext)\n"
  },
  {
    "path": "packages/r3f/src/extension/components/EditableProxy.tsx",
    "content": "import type {Object3D} from 'three'\nimport React, {useEffect, useLayoutEffect, useMemo, useState} from 'react'\nimport {Sphere, Html} from '@react-three/drei'\nimport shallow from 'zustand/shallow'\nimport {useSelected} from './useSelected'\nimport {useVal} from '@theatre/react'\nimport {getEditorSheetObject} from '../editorStuff'\nimport type {IconID} from '../icons'\nimport icons from '../icons'\nimport type {Helper} from '../../main/editableFactoryConfigUtils'\nimport {invalidate, useFrame, useThree} from '@react-three/fiber'\nimport {useDragDetector} from './DragDetector'\nimport useExtensionStore from '../useExtensionStore'\nimport {getStudioSync} from '@theatre/core'\n\nexport interface EditableProxyProps {\n  storeKey: string\n  object: Object3D\n}\n\nconst EditableProxy: React.FC<EditableProxyProps> = ({storeKey, object}) => {\n  const editorObject = getEditorSheetObject()\n  const [setSnapshotProxyObject, editables] = useExtensionStore(\n    (state) => [state.setSnapshotProxyObject, state.editables],\n    shallow,\n  )\n\n  const dragging = useDragDetector()\n\n  const editable = editables[storeKey]\n\n  const selected = useSelected()\n  const showOverlayIcons =\n    useVal(editorObject?.props.viewport.showOverlayIcons) ?? false\n\n  useEffect(() => {\n    setSnapshotProxyObject(object, storeKey)\n\n    return () => setSnapshotProxyObject(null, storeKey)\n  }, [storeKey, object, setSnapshotProxyObject])\n\n  useLayoutEffect(() => {\n    const originalVisibility = object.visible\n\n    if (editable?.visibleOnlyInEditor) {\n      object.visible = true\n    }\n\n    return () => {\n      object.visible = originalVisibility\n    }\n  }, [editable?.visibleOnlyInEditor, object.visible])\n\n  const [hovered, setHovered] = useState(false)\n\n  // Helpers\n  const scene = useThree((state) => state.scene)\n  const helper = useMemo<Helper | undefined>(\n    () => editable?.objectConfig.createHelper?.(object),\n    [object],\n  )\n  useEffect(() => {\n    if (helper == undefined) {\n      return\n    }\n\n    if (selected === storeKey || hovered) {\n      scene.add(helper)\n      invalidate()\n    }\n\n    return () => {\n      scene.remove(helper)\n      invalidate()\n    }\n  }, [selected, hovered, helper, scene])\n  useFrame(() => {\n    if (helper == undefined) {\n      return\n    }\n\n    if (helper.update) {\n      helper.update()\n    }\n  })\n  useEffect(() => {\n    if (dragging) {\n      setHovered(false)\n    }\n  }, [dragging])\n\n  // subscribe to external changes\n  useEffect(() => {\n    if (!editable) return\n    const sheetObject = editable.sheetObject\n    const objectConfig = editable.objectConfig\n\n    const setFromTheatre = (newValues: any) => {\n      // @ts-ignore\n      Object.entries(objectConfig.props).forEach(([key, value]) => {\n        // @ts-ignore\n        return value.apply(newValues[key], object)\n      })\n      objectConfig.updateObject?.(object)\n      invalidate()\n    }\n\n    setFromTheatre(sheetObject.value)\n\n    const untap = sheetObject.onValuesChange(setFromTheatre)\n\n    return () => {\n      untap()\n    }\n  }, [editable])\n\n  if (!editable) return null\n\n  return (\n    <>\n      <group\n        onClick={(e) => {\n          if (e.delta < 2) {\n            e.stopPropagation()\n\n            const theatreObject =\n              useExtensionStore.getState().editables[storeKey].sheetObject\n\n            if (!theatreObject) {\n              console.log('no Theatre.js object for', storeKey)\n            } else {\n              const studio = getStudioSync(true)!\n              studio.setSelection([theatreObject])\n            }\n          }\n        }}\n        onPointerOver={\n          !dragging\n            ? (e) => {\n                e.stopPropagation()\n                setHovered(true)\n              }\n            : undefined\n        }\n        onPointerOut={\n          !dragging\n            ? (e) => {\n                e.stopPropagation()\n                setHovered(false)\n              }\n            : undefined\n        }\n      >\n        <primitive object={object}>\n          {(showOverlayIcons ||\n            (editable.objectConfig.dimensionless && selected !== storeKey)) && (\n            <Html\n              center\n              style={{\n                pointerEvents: 'none',\n                transform: 'scale(2)',\n                opacity: hovered ? 0.3 : 1,\n              }}\n            >\n              <div>{icons[editable.objectConfig.icon as IconID]}</div>\n            </Html>\n          )}\n          {editable.objectConfig.dimensionless && (\n            <Sphere\n              args={[2, 4, 2]}\n              onClick={(e) => {\n                if (e.delta < 2) {\n                  e.stopPropagation()\n                  const theatreObject =\n                    useExtensionStore.getState().editables[storeKey].sheetObject\n\n                  if (!theatreObject) {\n                    console.log('no Theatre.js object for', storeKey)\n                  } else {\n                    const studio = getStudioSync(true)!\n                    studio.setSelection([theatreObject])\n                  }\n                }\n              }}\n              userData={{helper: true}}\n            >\n              <meshBasicMaterial visible={false} />\n            </Sphere>\n          )}\n        </primitive>\n      </group>\n    </>\n  )\n}\n\nexport default EditableProxy\n"
  },
  {
    "path": "packages/r3f/src/extension/components/OrbitControls/OrbitControlsImpl.ts",
    "content": "import type {Matrix4} from 'three'\nimport {\n  EventDispatcher,\n  MOUSE,\n  OrthographicCamera,\n  PerspectiveCamera,\n  Quaternion,\n  Spherical,\n  TOUCH,\n  Vector2,\n  Vector3,\n} from 'three'\n\n// Almost an exact copy of https://github.com/pmndrs/three-stdlib/blob/4c04593ee49bb0b022025718844f3ce2b21f67bf/src/controls/OrbitControls.ts\n// The only change is that we added `(if (altKey)` at line 866 to only rotate if alt key is pressed\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n//    Orbit - left mouse / touch: one-finger move\n//    Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n//    Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nconst moduloWrapAround = (offset: number, capacity: number) =>\n  ((offset % capacity) + capacity) % capacity\n\nclass OrbitControls extends EventDispatcher {\n  object: PerspectiveCamera | OrthographicCamera\n  domElement: HTMLElement | undefined\n  // Set to false to disable this control\n  enabled = true\n  // \"target\" sets the location of focus, where the object orbits around\n  target = new Vector3()\n  // How far you can dolly in and out ( PerspectiveCamera only )\n  minDistance = 0\n  maxDistance = Infinity\n  // How far you can zoom in and out ( OrthographicCamera only )\n  minZoom = 0\n  maxZoom = Infinity\n  // How far you can orbit vertically, upper and lower limits.\n  // Range is 0 to Math.PI radians.\n  minPolarAngle = 0 // radians\n  maxPolarAngle = Math.PI // radians\n  // How far you can orbit horizontally, upper and lower limits.\n  // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n  minAzimuthAngle = -Infinity // radians\n  maxAzimuthAngle = Infinity // radians\n  // Set to true to enable damping (inertia)\n  // If damping is enabled, you must call controls.update() in your animation loop\n  enableDamping = false\n  dampingFactor = 0.05\n  // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n  // Set to false to disable zooming\n  enableZoom = true\n  zoomSpeed = 1.0\n  // Set to false to disable rotating\n  enableRotate = true\n  rotateSpeed = 1.0\n  // Set to false to disable panning\n  enablePan = true\n  panSpeed = 1.0\n  screenSpacePanning = true // if false, pan orthogonal to world-space direction camera.up\n  keyPanSpeed = 7.0 // pixels moved per arrow key push\n  // Set to true to automatically rotate around the target\n  // If auto-rotate is enabled, you must call controls.update() in your animation loop\n  autoRotate = false\n  autoRotateSpeed = 2.0 // 30 seconds per orbit when fps is 60\n  reverseOrbit = false // true if you want to reverse the orbit to mouse drag from left to right = orbits left\n  // The four arrow keys\n  keys = {\n    LEFT: 'ArrowLeft',\n    UP: 'ArrowUp',\n    RIGHT: 'ArrowRight',\n    BOTTOM: 'ArrowDown',\n  }\n  // Mouse buttons\n  mouseButtons: Partial<{\n    LEFT: MOUSE\n    MIDDLE: MOUSE\n    RIGHT: MOUSE\n  }> = {\n    LEFT: MOUSE.ROTATE,\n    MIDDLE: MOUSE.DOLLY,\n    RIGHT: MOUSE.PAN,\n  }\n  // Touch fingers\n  touches: Partial<{\n    ONE: TOUCH\n    TWO: TOUCH\n  }> = {ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN}\n  target0: Vector3\n  position0: Vector3\n  zoom0: number\n  // the target DOM element for key events\n  _domElementKeyEvents: any = null\n\n  getPolarAngle: () => number\n  getAzimuthalAngle: () => number\n  setPolarAngle: (x: number) => void\n  setAzimuthalAngle: (x: number) => void\n  getDistance: () => number\n\n  listenToKeyEvents: (domElement: HTMLElement) => void\n  stopListenToKeyEvents: () => void\n  saveState: () => void\n  reset: () => void\n  update: () => void\n  connect: (domElement: HTMLElement) => void\n  dispose: () => void\n\n  constructor(\n    object: PerspectiveCamera | OrthographicCamera,\n    domElement?: HTMLElement,\n  ) {\n    super()\n\n    this.object = object\n    this.domElement = domElement\n\n    // for reset\n    this.target0 = this.target.clone()\n    this.position0 = this.object.position.clone()\n    this.zoom0 = this.object.zoom\n\n    //\n    // public methods\n    //\n\n    this.getPolarAngle = (): number => spherical.phi\n\n    this.getAzimuthalAngle = (): number => spherical.theta\n\n    this.setPolarAngle = (value: number): void => {\n      // use modulo wrapping to safeguard value\n      let phi = moduloWrapAround(value, 2 * Math.PI)\n      let currentPhi = spherical.phi\n\n      // convert to the equivalent shortest angle\n      if (currentPhi < 0) currentPhi += 2 * Math.PI\n      if (phi < 0) phi += 2 * Math.PI\n      let phiDist = Math.abs(phi - currentPhi)\n      if (2 * Math.PI - phiDist < phiDist) {\n        if (phi < currentPhi) {\n          phi += 2 * Math.PI\n        } else {\n          currentPhi += 2 * Math.PI\n        }\n      }\n      sphericalDelta.phi = phi - currentPhi\n      scope.update()\n    }\n\n    this.setAzimuthalAngle = (value: number): void => {\n      // use modulo wrapping to safeguard value\n      let theta = moduloWrapAround(value, 2 * Math.PI)\n      let currentTheta = spherical.theta\n\n      // convert to the equivalent shortest angle\n      if (currentTheta < 0) currentTheta += 2 * Math.PI\n      if (theta < 0) theta += 2 * Math.PI\n      let thetaDist = Math.abs(theta - currentTheta)\n      if (2 * Math.PI - thetaDist < thetaDist) {\n        if (theta < currentTheta) {\n          theta += 2 * Math.PI\n        } else {\n          currentTheta += 2 * Math.PI\n        }\n      }\n      sphericalDelta.theta = theta - currentTheta\n      scope.update()\n    }\n\n    this.getDistance = (): number =>\n      scope.object.position.distanceTo(scope.target)\n\n    this.listenToKeyEvents = (domElement: HTMLElement): void => {\n      domElement.addEventListener('keydown', onKeyDown)\n      this._domElementKeyEvents = domElement\n    }\n\n    this.stopListenToKeyEvents = (): void => {\n      this._domElementKeyEvents.removeEventListener('keydown', onKeyDown)\n      this._domElementKeyEvents = null\n    }\n\n    this.saveState = (): void => {\n      scope.target0.copy(scope.target)\n      scope.position0.copy(scope.object.position)\n      scope.zoom0 = scope.object.zoom\n    }\n\n    this.reset = (): void => {\n      scope.target.copy(scope.target0)\n      scope.object.position.copy(scope.position0)\n      scope.object.zoom = scope.zoom0\n      scope.object.updateProjectionMatrix()\n\n      scope.dispatchEvent(changeEvent)\n\n      scope.update()\n\n      state = STATE.NONE\n    }\n\n    // this method is exposed, but perhaps it would be better if we can make it private...\n    this.update = ((): (() => void) => {\n      const offset = new Vector3()\n      const up = new Vector3(0, 1, 0)\n\n      // so camera.up is the orbit axis\n      const quat = new Quaternion().setFromUnitVectors(object.up, up)\n      const quatInverse = quat.clone().invert()\n\n      const lastPosition = new Vector3()\n      const lastQuaternion = new Quaternion()\n\n      const twoPI = 2 * Math.PI\n\n      return function update(): boolean {\n        const position = scope.object.position\n\n        // update new up direction\n        quat.setFromUnitVectors(object.up, up)\n        quatInverse.copy(quat).invert()\n\n        offset.copy(position).sub(scope.target)\n\n        // rotate offset to \"y-axis-is-up\" space\n        offset.applyQuaternion(quat)\n\n        // angle from z-axis around y-axis\n        spherical.setFromVector3(offset)\n\n        if (scope.autoRotate && state === STATE.NONE) {\n          rotateLeft(getAutoRotationAngle())\n        }\n\n        if (scope.enableDamping) {\n          spherical.theta += sphericalDelta.theta * scope.dampingFactor\n          spherical.phi += sphericalDelta.phi * scope.dampingFactor\n        } else {\n          spherical.theta += sphericalDelta.theta\n          spherical.phi += sphericalDelta.phi\n        }\n\n        // restrict theta to be between desired limits\n\n        let min = scope.minAzimuthAngle\n        let max = scope.maxAzimuthAngle\n\n        if (isFinite(min) && isFinite(max)) {\n          if (min < -Math.PI) min += twoPI\n          else if (min > Math.PI) min -= twoPI\n\n          if (max < -Math.PI) max += twoPI\n          else if (max > Math.PI) max -= twoPI\n\n          if (min <= max) {\n            spherical.theta = Math.max(min, Math.min(max, spherical.theta))\n          } else {\n            spherical.theta =\n              spherical.theta > (min + max) / 2\n                ? Math.max(min, spherical.theta)\n                : Math.min(max, spherical.theta)\n          }\n        }\n\n        // restrict phi to be between desired limits\n        spherical.phi = Math.max(\n          scope.minPolarAngle,\n          Math.min(scope.maxPolarAngle, spherical.phi),\n        )\n        spherical.makeSafe()\n        spherical.radius *= scale\n\n        // restrict radius to be between desired limits\n        spherical.radius = Math.max(\n          scope.minDistance,\n          Math.min(scope.maxDistance, spherical.radius),\n        )\n\n        // move target to panned location\n\n        if (scope.enableDamping === true) {\n          scope.target.addScaledVector(panOffset, scope.dampingFactor)\n        } else {\n          scope.target.add(panOffset)\n        }\n\n        offset.setFromSpherical(spherical)\n\n        // rotate offset back to \"camera-up-vector-is-up\" space\n        offset.applyQuaternion(quatInverse)\n\n        position.copy(scope.target).add(offset)\n\n        scope.object.lookAt(scope.target)\n\n        if (scope.enableDamping === true) {\n          sphericalDelta.theta *= 1 - scope.dampingFactor\n          sphericalDelta.phi *= 1 - scope.dampingFactor\n\n          panOffset.multiplyScalar(1 - scope.dampingFactor)\n        } else {\n          sphericalDelta.set(0, 0, 0)\n\n          panOffset.set(0, 0, 0)\n        }\n\n        scale = 1\n\n        // update condition is:\n        // min(camera displacement, camera rotation in radians)^2 > EPS\n        // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n        if (\n          zoomChanged ||\n          lastPosition.distanceToSquared(scope.object.position) > EPS ||\n          8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS\n        ) {\n          scope.dispatchEvent(changeEvent)\n\n          lastPosition.copy(scope.object.position)\n          lastQuaternion.copy(scope.object.quaternion)\n          zoomChanged = false\n\n          return true\n        }\n\n        return false\n      }\n    })()\n\n    // https://github.com/mrdoob/three.js/issues/20575\n    this.connect = (domElement: HTMLElement): void => {\n      if ((domElement as any) === document) {\n        console.error(\n          'THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.',\n        )\n      }\n      scope.domElement = domElement\n      // disables touch scroll\n      // touch-action needs to be defined for pointer events to work on mobile\n      // https://stackoverflow.com/a/48254578\n      scope.domElement.style.touchAction = 'none'\n      scope.domElement.addEventListener('contextmenu', onContextMenu)\n      scope.domElement.addEventListener('pointerdown', onPointerDown)\n      scope.domElement.addEventListener('pointercancel', onPointerCancel)\n      scope.domElement.addEventListener('wheel', onMouseWheel)\n    }\n\n    this.dispose = (): void => {\n      scope.domElement?.removeEventListener('contextmenu', onContextMenu)\n      scope.domElement?.removeEventListener('pointerdown', onPointerDown)\n      scope.domElement?.removeEventListener('pointercancel', onPointerCancel)\n      scope.domElement?.removeEventListener('wheel', onMouseWheel)\n      scope.domElement?.ownerDocument.removeEventListener(\n        'pointermove',\n        onPointerMove,\n      )\n      scope.domElement?.ownerDocument.removeEventListener(\n        'pointerup',\n        onPointerUp,\n      )\n      if (scope._domElementKeyEvents !== null) {\n        scope._domElementKeyEvents.removeEventListener('keydown', onKeyDown)\n      }\n      //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n    }\n\n    //\n    // internals\n    //\n\n    const scope = this\n\n    const changeEvent = {type: 'change'}\n    const startEvent = {type: 'start'}\n    const endEvent = {type: 'end'}\n\n    const STATE = {\n      NONE: -1,\n      ROTATE: 0,\n      DOLLY: 1,\n      PAN: 2,\n      TOUCH_ROTATE: 3,\n      TOUCH_PAN: 4,\n      TOUCH_DOLLY_PAN: 5,\n      TOUCH_DOLLY_ROTATE: 6,\n    }\n\n    let state = STATE.NONE\n\n    const EPS = 0.000001\n\n    // current position in spherical coordinates\n    const spherical = new Spherical()\n    const sphericalDelta = new Spherical()\n\n    let scale = 1\n    const panOffset = new Vector3()\n    let zoomChanged = false\n\n    const rotateStart = new Vector2()\n    const rotateEnd = new Vector2()\n    const rotateDelta = new Vector2()\n\n    const panStart = new Vector2()\n    const panEnd = new Vector2()\n    const panDelta = new Vector2()\n\n    const dollyStart = new Vector2()\n    const dollyEnd = new Vector2()\n    const dollyDelta = new Vector2()\n\n    const pointers: PointerEvent[] = []\n    const pointerPositions: {[key: string]: Vector2} = {}\n\n    function getAutoRotationAngle(): number {\n      return ((2 * Math.PI) / 60 / 60) * scope.autoRotateSpeed\n    }\n\n    function getZoomScale(): number {\n      return Math.pow(0.95, scope.zoomSpeed)\n    }\n\n    function rotateLeft(angle: number): void {\n      if (scope.reverseOrbit) {\n        sphericalDelta.theta += angle\n      } else {\n        sphericalDelta.theta -= angle\n      }\n    }\n\n    function rotateUp(angle: number): void {\n      if (scope.reverseOrbit) {\n        sphericalDelta.phi += angle\n      } else {\n        sphericalDelta.phi -= angle\n      }\n    }\n\n    const panLeft = (() => {\n      const v = new Vector3()\n\n      return function panLeft(distance: number, objectMatrix: Matrix4) {\n        v.setFromMatrixColumn(objectMatrix, 0) // get X column of objectMatrix\n        v.multiplyScalar(-distance)\n\n        panOffset.add(v)\n      }\n    })()\n\n    const panUp = (() => {\n      const v = new Vector3()\n\n      return function panUp(distance: number, objectMatrix: Matrix4) {\n        if (scope.screenSpacePanning === true) {\n          v.setFromMatrixColumn(objectMatrix, 1)\n        } else {\n          v.setFromMatrixColumn(objectMatrix, 0)\n          v.crossVectors(scope.object.up, v)\n        }\n\n        v.multiplyScalar(distance)\n\n        panOffset.add(v)\n      }\n    })()\n\n    // deltaX and deltaY are in pixels; right and down are positive\n    const pan = (() => {\n      const offset = new Vector3()\n\n      return function pan(deltaX: number, deltaY: number) {\n        const element = scope.domElement\n\n        if (\n          element &&\n          scope.object instanceof PerspectiveCamera &&\n          scope.object.isPerspectiveCamera\n        ) {\n          // perspective\n          const position = scope.object.position\n          offset.copy(position).sub(scope.target)\n          let targetDistance = offset.length()\n\n          // half of the fov is center to top of screen\n          targetDistance *= Math.tan(((scope.object.fov / 2) * Math.PI) / 180.0)\n\n          // we use only clientHeight here so aspect ratio does not distort speed\n          panLeft(\n            (2 * deltaX * targetDistance) / element.clientHeight,\n            scope.object.matrix,\n          )\n          panUp(\n            (2 * deltaY * targetDistance) / element.clientHeight,\n            scope.object.matrix,\n          )\n        } else if (\n          element &&\n          scope.object instanceof OrthographicCamera &&\n          scope.object.isOrthographicCamera\n        ) {\n          // orthographic\n          panLeft(\n            (deltaX * (scope.object.right - scope.object.left)) /\n              scope.object.zoom /\n              element.clientWidth,\n            scope.object.matrix,\n          )\n          panUp(\n            (deltaY * (scope.object.top - scope.object.bottom)) /\n              scope.object.zoom /\n              element.clientHeight,\n            scope.object.matrix,\n          )\n        } else {\n          // camera neither orthographic nor perspective\n          console.warn(\n            'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.',\n          )\n          scope.enablePan = false\n        }\n      }\n    })()\n\n    function dollyOut(dollyScale: number) {\n      if (\n        scope.object instanceof PerspectiveCamera &&\n        scope.object.isPerspectiveCamera\n      ) {\n        scale /= dollyScale\n      } else if (\n        scope.object instanceof OrthographicCamera &&\n        scope.object.isOrthographicCamera\n      ) {\n        scope.object.zoom = Math.max(\n          scope.minZoom,\n          Math.min(scope.maxZoom, scope.object.zoom * dollyScale),\n        )\n        scope.object.updateProjectionMatrix()\n        zoomChanged = true\n      } else {\n        console.warn(\n          'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.',\n        )\n        scope.enableZoom = false\n      }\n    }\n\n    function dollyIn(dollyScale: number) {\n      if (\n        scope.object instanceof PerspectiveCamera &&\n        scope.object.isPerspectiveCamera\n      ) {\n        scale *= dollyScale\n      } else if (\n        scope.object instanceof OrthographicCamera &&\n        scope.object.isOrthographicCamera\n      ) {\n        scope.object.zoom = Math.max(\n          scope.minZoom,\n          Math.min(scope.maxZoom, scope.object.zoom / dollyScale),\n        )\n        scope.object.updateProjectionMatrix()\n        zoomChanged = true\n      } else {\n        console.warn(\n          'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.',\n        )\n        scope.enableZoom = false\n      }\n    }\n\n    //\n    // event callbacks - update the object state\n    //\n\n    function handleMouseDownRotate(event: MouseEvent) {\n      rotateStart.set(event.clientX, event.clientY)\n    }\n\n    function handleMouseDownDolly(event: MouseEvent) {\n      dollyStart.set(event.clientX, event.clientY)\n    }\n\n    function handleMouseDownPan(event: MouseEvent) {\n      panStart.set(event.clientX, event.clientY)\n    }\n\n    function handleMouseMoveRotate(event: MouseEvent) {\n      rotateEnd.set(event.clientX, event.clientY)\n      rotateDelta\n        .subVectors(rotateEnd, rotateStart)\n        .multiplyScalar(scope.rotateSpeed)\n\n      const element = scope.domElement\n\n      if (element) {\n        rotateLeft((2 * Math.PI * rotateDelta.x) / element.clientHeight) // yes, height\n        rotateUp((2 * Math.PI * rotateDelta.y) / element.clientHeight)\n      }\n      rotateStart.copy(rotateEnd)\n      scope.update()\n    }\n\n    function handleMouseMoveDolly(event: MouseEvent) {\n      dollyEnd.set(event.clientX, event.clientY)\n      dollyDelta.subVectors(dollyEnd, dollyStart)\n\n      if (dollyDelta.y > 0) {\n        dollyOut(getZoomScale())\n      } else if (dollyDelta.y < 0) {\n        dollyIn(getZoomScale())\n      }\n\n      dollyStart.copy(dollyEnd)\n      scope.update()\n    }\n\n    function handleMouseMovePan(event: MouseEvent) {\n      panEnd.set(event.clientX, event.clientY)\n      panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed)\n      pan(panDelta.x, panDelta.y)\n      panStart.copy(panEnd)\n      scope.update()\n    }\n\n    function handleMouseWheel(event: WheelEvent) {\n      if (event.deltaY < 0) {\n        dollyIn(getZoomScale())\n      } else if (event.deltaY > 0) {\n        dollyOut(getZoomScale())\n      }\n\n      scope.update()\n    }\n\n    function handleKeyDown(event: KeyboardEvent) {\n      let needsUpdate = false\n\n      switch (event.code) {\n        case scope.keys.UP:\n          pan(0, scope.keyPanSpeed)\n          needsUpdate = true\n          break\n\n        case scope.keys.BOTTOM:\n          pan(0, -scope.keyPanSpeed)\n          needsUpdate = true\n          break\n\n        case scope.keys.LEFT:\n          pan(scope.keyPanSpeed, 0)\n          needsUpdate = true\n          break\n\n        case scope.keys.RIGHT:\n          pan(-scope.keyPanSpeed, 0)\n          needsUpdate = true\n          break\n      }\n\n      if (needsUpdate) {\n        // prevent the browser from scrolling on cursor keys\n        event.preventDefault()\n        scope.update()\n      }\n    }\n\n    function handleTouchStartRotate() {\n      if (pointers.length == 1) {\n        rotateStart.set(pointers[0].pageX, pointers[0].pageY)\n      } else {\n        const x = 0.5 * (pointers[0].pageX + pointers[1].pageX)\n        const y = 0.5 * (pointers[0].pageY + pointers[1].pageY)\n\n        rotateStart.set(x, y)\n      }\n    }\n\n    function handleTouchStartPan() {\n      if (pointers.length == 1) {\n        panStart.set(pointers[0].pageX, pointers[0].pageY)\n      } else {\n        const x = 0.5 * (pointers[0].pageX + pointers[1].pageX)\n        const y = 0.5 * (pointers[0].pageY + pointers[1].pageY)\n\n        panStart.set(x, y)\n      }\n    }\n\n    function handleTouchStartDolly() {\n      const dx = pointers[0].pageX - pointers[1].pageX\n      const dy = pointers[0].pageY - pointers[1].pageY\n      const distance = Math.sqrt(dx * dx + dy * dy)\n\n      dollyStart.set(0, distance)\n    }\n\n    function handleTouchStartDollyPan() {\n      if (scope.enableZoom) handleTouchStartDolly()\n      if (scope.enablePan) handleTouchStartPan()\n    }\n\n    function handleTouchStartDollyRotate() {\n      if (scope.enableZoom) handleTouchStartDolly()\n      if (scope.enableRotate) handleTouchStartRotate()\n    }\n\n    function handleTouchMoveRotate(event: PointerEvent) {\n      if (pointers.length == 1) {\n        rotateEnd.set(event.pageX, event.pageY)\n      } else {\n        const position = getSecondPointerPosition(event)\n        const x = 0.5 * (event.pageX + position.x)\n        const y = 0.5 * (event.pageY + position.y)\n        rotateEnd.set(x, y)\n      }\n\n      rotateDelta\n        .subVectors(rotateEnd, rotateStart)\n        .multiplyScalar(scope.rotateSpeed)\n\n      const element = scope.domElement\n\n      if (element) {\n        rotateLeft((2 * Math.PI * rotateDelta.x) / element.clientHeight) // yes, height\n        rotateUp((2 * Math.PI * rotateDelta.y) / element.clientHeight)\n      }\n      rotateStart.copy(rotateEnd)\n    }\n\n    function handleTouchMovePan(event: PointerEvent) {\n      if (pointers.length == 1) {\n        panEnd.set(event.pageX, event.pageY)\n      } else {\n        const position = getSecondPointerPosition(event)\n        const x = 0.5 * (event.pageX + position.x)\n        const y = 0.5 * (event.pageY + position.y)\n        panEnd.set(x, y)\n      }\n\n      panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed)\n      pan(panDelta.x, panDelta.y)\n      panStart.copy(panEnd)\n    }\n\n    function handleTouchMoveDolly(event: PointerEvent) {\n      const position = getSecondPointerPosition(event)\n      const dx = event.pageX - position.x\n      const dy = event.pageY - position.y\n      const distance = Math.sqrt(dx * dx + dy * dy)\n\n      dollyEnd.set(0, distance)\n      dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed))\n      dollyOut(dollyDelta.y)\n      dollyStart.copy(dollyEnd)\n    }\n\n    function handleTouchMoveDollyPan(event: PointerEvent) {\n      if (scope.enableZoom) handleTouchMoveDolly(event)\n      if (scope.enablePan) handleTouchMovePan(event)\n    }\n\n    function handleTouchMoveDollyRotate(event: PointerEvent) {\n      if (scope.enableZoom) handleTouchMoveDolly(event)\n      if (scope.enableRotate) handleTouchMoveRotate(event)\n    }\n\n    //\n    // event handlers - FSM: listen for events and reset state\n    //\n\n    function onPointerDown(event: PointerEvent) {\n      if (scope.enabled === false) return\n\n      if (pointers.length === 0) {\n        scope.domElement?.ownerDocument.addEventListener(\n          'pointermove',\n          onPointerMove,\n        )\n        scope.domElement?.ownerDocument.addEventListener(\n          'pointerup',\n          onPointerUp,\n        )\n      }\n\n      addPointer(event)\n\n      if (event.pointerType === 'touch') {\n        onTouchStart(event)\n      } else {\n        onMouseDown(event)\n      }\n    }\n\n    function onPointerMove(event: PointerEvent) {\n      if (scope.enabled === false) return\n\n      if (event.pointerType === 'touch') {\n        onTouchMove(event)\n      } else {\n        onMouseMove(event)\n      }\n    }\n\n    function onPointerUp(event: PointerEvent) {\n      removePointer(event)\n\n      if (pointers.length === 0) {\n        scope.domElement?.releasePointerCapture(event.pointerId)\n\n        scope.domElement?.ownerDocument.removeEventListener(\n          'pointermove',\n          onPointerMove,\n        )\n        scope.domElement?.ownerDocument.removeEventListener(\n          'pointerup',\n          onPointerUp,\n        )\n      }\n\n      scope.dispatchEvent(endEvent)\n\n      state = STATE.NONE\n    }\n\n    function onPointerCancel(event: PointerEvent) {\n      removePointer(event)\n    }\n\n    function onMouseDown(event: MouseEvent) {\n      let mouseAction\n\n      switch (event.button) {\n        case 0:\n          mouseAction = scope.mouseButtons.LEFT\n          break\n\n        case 1:\n          mouseAction = scope.mouseButtons.MIDDLE\n          break\n\n        case 2:\n          mouseAction = scope.mouseButtons.RIGHT\n          break\n\n        default:\n          mouseAction = -1\n      }\n\n      switch (mouseAction) {\n        case MOUSE.DOLLY:\n          if (scope.enableZoom === false) return\n          handleMouseDownDolly(event)\n          state = STATE.DOLLY\n          break\n\n        case MOUSE.ROTATE:\n          if (event.ctrlKey || event.metaKey || event.shiftKey) {\n            if (scope.enablePan === false) return\n            handleMouseDownPan(event)\n            state = STATE.PAN\n          } else if (event.altKey) {\n            if (scope.enableRotate === false) return\n            handleMouseDownRotate(event)\n            state = STATE.ROTATE\n          }\n          break\n\n        case MOUSE.PAN:\n          if (event.ctrlKey || event.metaKey || event.shiftKey) {\n            if (scope.enableRotate === false) return\n            handleMouseDownRotate(event)\n            state = STATE.ROTATE\n          } else {\n            if (scope.enablePan === false) return\n            handleMouseDownPan(event)\n            state = STATE.PAN\n          }\n          break\n\n        default:\n          state = STATE.NONE\n      }\n\n      if (state !== STATE.NONE) {\n        scope.dispatchEvent(startEvent)\n      }\n    }\n\n    function onMouseMove(event: MouseEvent) {\n      if (scope.enabled === false) return\n\n      switch (state) {\n        case STATE.ROTATE:\n          if (scope.enableRotate === false) return\n          handleMouseMoveRotate(event)\n          break\n\n        case STATE.DOLLY:\n          if (scope.enableZoom === false) return\n          handleMouseMoveDolly(event)\n          break\n\n        case STATE.PAN:\n          if (scope.enablePan === false) return\n          handleMouseMovePan(event)\n          break\n      }\n    }\n\n    function onMouseWheel(event: WheelEvent) {\n      if (\n        scope.enabled === false ||\n        scope.enableZoom === false ||\n        (state !== STATE.NONE && state !== STATE.ROTATE)\n      ) {\n        return\n      }\n\n      event.preventDefault()\n\n      scope.dispatchEvent(startEvent)\n\n      handleMouseWheel(event)\n\n      scope.dispatchEvent(endEvent)\n    }\n\n    function onKeyDown(event: KeyboardEvent) {\n      if (scope.enabled === false || scope.enablePan === false) return\n      handleKeyDown(event)\n    }\n\n    function onTouchStart(event: PointerEvent) {\n      trackPointer(event)\n\n      switch (pointers.length) {\n        case 1:\n          switch (scope.touches.ONE) {\n            case TOUCH.ROTATE:\n              if (scope.enableRotate === false) return\n              handleTouchStartRotate()\n              state = STATE.TOUCH_ROTATE\n              break\n\n            case TOUCH.PAN:\n              if (scope.enablePan === false) return\n              handleTouchStartPan()\n              state = STATE.TOUCH_PAN\n              break\n\n            default:\n              state = STATE.NONE\n          }\n\n          break\n\n        case 2:\n          switch (scope.touches.TWO) {\n            case TOUCH.DOLLY_PAN:\n              if (scope.enableZoom === false && scope.enablePan === false)\n                return\n              handleTouchStartDollyPan()\n              state = STATE.TOUCH_DOLLY_PAN\n              break\n\n            case TOUCH.DOLLY_ROTATE:\n              if (scope.enableZoom === false && scope.enableRotate === false)\n                return\n              handleTouchStartDollyRotate()\n              state = STATE.TOUCH_DOLLY_ROTATE\n              break\n\n            default:\n              state = STATE.NONE\n          }\n\n          break\n\n        default:\n          state = STATE.NONE\n      }\n\n      if (state !== STATE.NONE) {\n        scope.dispatchEvent(startEvent)\n      }\n    }\n\n    function onTouchMove(event: PointerEvent) {\n      trackPointer(event)\n\n      switch (state) {\n        case STATE.TOUCH_ROTATE:\n          if (scope.enableRotate === false) return\n          handleTouchMoveRotate(event)\n          scope.update()\n          break\n\n        case STATE.TOUCH_PAN:\n          if (scope.enablePan === false) return\n          handleTouchMovePan(event)\n          scope.update()\n          break\n\n        case STATE.TOUCH_DOLLY_PAN:\n          if (scope.enableZoom === false && scope.enablePan === false) return\n          handleTouchMoveDollyPan(event)\n          scope.update()\n          break\n\n        case STATE.TOUCH_DOLLY_ROTATE:\n          if (scope.enableZoom === false && scope.enableRotate === false) return\n          handleTouchMoveDollyRotate(event)\n          scope.update()\n          break\n\n        default:\n          state = STATE.NONE\n      }\n    }\n\n    function onContextMenu(event: Event) {\n      if (scope.enabled === false) return\n      event.preventDefault()\n    }\n\n    function addPointer(event: PointerEvent) {\n      pointers.push(event)\n    }\n\n    function removePointer(event: PointerEvent) {\n      delete pointerPositions[event.pointerId]\n\n      for (let i = 0; i < pointers.length; i++) {\n        if (pointers[i].pointerId == event.pointerId) {\n          pointers.splice(i, 1)\n          return\n        }\n      }\n    }\n\n    function trackPointer(event: PointerEvent) {\n      let position = pointerPositions[event.pointerId]\n\n      if (position === undefined) {\n        position = new Vector2()\n        pointerPositions[event.pointerId] = position\n      }\n\n      position.set(event.pageX, event.pageY)\n    }\n\n    function getSecondPointerPosition(event: PointerEvent) {\n      const pointer =\n        event.pointerId === pointers[0].pointerId ? pointers[1] : pointers[0]\n      return pointerPositions[pointer.pointerId]\n    }\n\n    // connect events\n    if (domElement !== undefined) this.connect(domElement)\n    // force an update at start\n    this.update()\n  }\n}\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n// This is very similar to OrbitControls, another set of touch behavior\n//\n//    Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate\n//    Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n//    Pan - left mouse, or arrow keys / touch: one-finger move\n\nclass MapControls extends OrbitControls {\n  constructor(\n    object: PerspectiveCamera | OrthographicCamera,\n    domElement?: HTMLElement,\n  ) {\n    super(object, domElement)\n\n    this.screenSpacePanning = false // pan orthogonal to world-space direction camera.up\n\n    this.mouseButtons.LEFT = MOUSE.PAN\n    this.mouseButtons.RIGHT = MOUSE.ROTATE\n\n    this.touches.ONE = TOUCH.PAN\n    this.touches.TWO = TOUCH.DOLLY_ROTATE\n  }\n}\n\nexport {OrbitControls as OrbitControlsImpl, MapControls}\n"
  },
  {
    "path": "packages/r3f/src/extension/components/OrbitControls/index.tsx",
    "content": "import type {EventManager, ReactThreeFiber} from '@react-three/fiber'\nimport {useFrame, useThree} from '@react-three/fiber'\nimport * as React from 'react'\nimport type {Camera, Event} from 'three'\nimport {OrbitControlsImpl} from './OrbitControlsImpl'\n\nexport type OrbitControlsChangeEvent = Event & {\n  target: EventTarget & {object: Camera}\n}\n\nexport type OrbitControlsProps = Omit<\n  ReactThreeFiber.Overwrite<\n    ReactThreeFiber.Object3DNode<OrbitControlsImpl, typeof OrbitControlsImpl>,\n    {\n      camera?: Camera\n      domElement?: HTMLElement\n      enableDamping?: boolean\n      makeDefault?: boolean\n      onChange?: (e?: OrbitControlsChangeEvent) => void\n      onEnd?: (e?: Event) => void\n      onStart?: (e?: Event) => void\n      regress?: boolean\n      target?: ReactThreeFiber.Vector3\n      keyEvents?: boolean | HTMLElement\n    }\n  >,\n  'ref'\n>\n\nexport const OrbitControls = React.forwardRef<\n  OrbitControlsImpl,\n  OrbitControlsProps\n>(\n  (\n    {\n      makeDefault,\n      camera,\n      regress,\n      domElement,\n      enableDamping = true,\n      keyEvents = false,\n      onChange,\n      onStart,\n      onEnd,\n      ...restProps\n    },\n    ref,\n  ) => {\n    const invalidate = useThree((state) => state.invalidate)\n    const defaultCamera = useThree((state) => state.camera)\n    const gl = useThree((state) => state.gl)\n    const events = useThree(\n      (state) => state.events,\n    ) as EventManager<HTMLElement>\n    const setEvents = useThree((state) => state.setEvents)\n    const set = useThree((state) => state.set)\n    const get = useThree((state) => state.get)\n    const performance = useThree((state) => state.performance)\n    const explCamera = (camera || defaultCamera) as\n      | THREE.OrthographicCamera\n      | THREE.PerspectiveCamera\n    const explDomElement = (domElement ||\n      events.connected ||\n      gl.domElement) as HTMLElement\n    const controls = React.useMemo(\n      () => new OrbitControlsImpl(explCamera),\n      [explCamera],\n    )\n\n    useFrame(() => {\n      if (controls.enabled) controls.update()\n    }, -1)\n\n    React.useEffect(() => {\n      if (keyEvents) {\n        controls.connect(keyEvents === true ? explDomElement : keyEvents)\n      }\n\n      controls.connect(explDomElement)\n      return () => void controls.dispose()\n    }, [keyEvents, explDomElement, regress, controls, invalidate])\n\n    React.useEffect(() => {\n      const callback = (e: OrbitControlsChangeEvent) => {\n        invalidate()\n        if (regress) performance.regress()\n        if (onChange) onChange(e)\n      }\n\n      const onStartCb = (e: Event) => {\n        if (onStart) onStart(e)\n      }\n\n      const onEndCb = (e: Event) => {\n        if (onEnd) onEnd(e)\n      }\n\n      controls.addEventListener('change', callback)\n      controls.addEventListener('start', onStartCb)\n      controls.addEventListener('end', onEndCb)\n\n      return () => {\n        controls.removeEventListener('start', onStartCb)\n        controls.removeEventListener('end', onEndCb)\n        controls.removeEventListener('change', callback)\n      }\n    }, [onChange, onStart, onEnd, controls, invalidate, setEvents])\n\n    React.useEffect(() => {\n      if (makeDefault) {\n        const old = get().controls\n        set({controls})\n        return () => set({controls: old})\n      }\n    }, [makeDefault, controls])\n\n    return (\n      <primitive\n        ref={ref}\n        object={controls}\n        enableDamping={enableDamping}\n        {...restProps}\n      />\n    )\n  },\n)\nexport {OrbitControlsImpl}\n"
  },
  {
    "path": "packages/r3f/src/extension/components/ProxyManager.tsx",
    "content": "import type {FC} from 'react'\nimport React, {useLayoutEffect, useMemo, useRef, useState} from 'react'\nimport type {Editable} from '../../main/store'\nimport {createPortal, invalidate} from '@react-three/fiber'\nimport EditableProxy from './EditableProxy'\nimport type {OrbitControls} from 'three-stdlib'\nimport TransformControls from './TransformControls'\nimport shallow from 'zustand/shallow'\nimport type {Material, Mesh, Object3D} from 'three'\nimport {MeshBasicMaterial, MeshPhongMaterial} from 'three'\nimport {getStudioSync, type IScrub} from '@theatre/core'\nimport {useSelected} from './useSelected'\nimport {useVal} from '@theatre/react'\nimport {getEditorSheetObject} from '../editorStuff'\nimport useExtensionStore from '../useExtensionStore'\n\nexport interface ProxyManagerProps {\n  orbitControlsRef: React.MutableRefObject<OrbitControls | null>\n}\n\ntype IEditableProxy<T> = {\n  portal: ReturnType<typeof createPortal>\n  object: Object3D\n  editable: Editable<T>\n}\n\nconst ProxyManager: FC<ProxyManagerProps> = ({orbitControlsRef}) => {\n  const isBeingEdited = useRef(false)\n  const editorObject = getEditorSheetObject()\n  const [sceneSnapshot, editables] = useExtensionStore(\n    (state) => [state.sceneSnapshot, state.editables],\n    shallow,\n  )\n  const transformControlsMode =\n    useVal(editorObject?.props.transformControls.mode) ?? 'translate'\n\n  const transformControlsSpace =\n    useVal(editorObject?.props.transformControls.space) ?? 'world'\n\n  const viewportShading =\n    useVal(editorObject?.props.viewport.shading) ?? 'rendered'\n\n  const sceneProxy = useMemo(() => sceneSnapshot?.clone(), [sceneSnapshot])\n  const [editableProxies, setEditableProxies] = useState<{\n    [name in string]?: IEditableProxy<any>\n  }>({})\n\n  // set up scene proxies\n  useLayoutEffect(() => {\n    if (!sceneProxy) {\n      return\n    }\n\n    const editableProxies: {[name: string]: IEditableProxy<any>} = {}\n\n    sceneProxy.traverse((object) => {\n      if (object.userData.__editable) {\n        const theatreKey = object.userData.__storeKey\n\n        if (\n          // there are duplicate theatreKeys in the scene, only display one instance in the editor\n          editableProxies[theatreKey] ||\n          // this object has been unmounted\n          !editables[theatreKey]\n        ) {\n          object.parent!.remove(object)\n        } else {\n          editableProxies[theatreKey] = {\n            portal: (\n              // we gotta wrap the portal because as of [this commit](https://github.com/pmndrs/react-three-fiber/commit/5d1652ce5b63397ad79c39d3dd100b26a465c41f)\n              // in react-three-fiber, portals use the uuid of their parent object as their own key. Since many of these objects are nested\n              // inside the same parent, they end up having the same react key. We avoid this issue by wrapping the portal in a component\n              // so that its react key is unique within its parent component.\n              <PortalWrapper\n                portal={createPortal(\n                  <EditableProxy storeKey={theatreKey} object={object} />,\n                  object.parent!,\n                )}\n                key={`portal-wrapper-${theatreKey}`}\n              />\n            ),\n            object: object,\n            editable: editables[theatreKey]!,\n          }\n        }\n      }\n    })\n\n    setEditableProxies(editableProxies)\n  }, [orbitControlsRef, sceneProxy])\n\n  const selected = useSelected()\n  const editableProxyOfSelected = selected && editableProxies[selected]\n  const editable = selected ? editables[selected] : undefined\n\n  // set up viewport shading modes\n  const [renderMaterials, setRenderMaterials] = useState<{\n    [id: string]: Material | Material[]\n  }>({})\n\n  useLayoutEffect(() => {\n    if (!sceneProxy) {\n      return\n    }\n\n    const renderMaterials: {\n      [id: string]: Material | Material[]\n    } = {}\n\n    sceneProxy.traverse((object) => {\n      const mesh = object as Mesh\n      if (mesh.isMesh && !mesh.userData.helper) {\n        renderMaterials[mesh.id] = mesh.material\n      }\n    })\n\n    setRenderMaterials(renderMaterials)\n\n    return () => {\n      // @todo do we need this cleanup?\n      // Object.entries(renderMaterials).forEach(([id, material]) => {\n      //   ;(sceneProxy.getObjectById(Number.parseInt(id)) as Mesh).material =\n      //     material\n      // })\n    }\n  }, [sceneProxy])\n\n  useLayoutEffect(() => {\n    if (!sceneProxy) {\n      return\n    }\n\n    sceneProxy.traverse((object) => {\n      const mesh = object as Mesh\n      if (mesh.isMesh && !mesh.userData.helper) {\n        let material\n        switch (viewportShading) {\n          case 'wireframe':\n            mesh.material = new MeshBasicMaterial({\n              wireframe: true,\n              color: 'black',\n            })\n            break\n          case 'flat':\n            // it is possible that renderMaterials hasn't updated yet\n            if (!renderMaterials[mesh.id]) {\n              return\n            }\n            material = new MeshBasicMaterial()\n            if (renderMaterials[mesh.id].hasOwnProperty('color')) {\n              material.color = (renderMaterials[mesh.id] as any).color\n            }\n            if (renderMaterials[mesh.id].hasOwnProperty('map')) {\n              material.map = (renderMaterials[mesh.id] as any).map\n            }\n            if (renderMaterials[mesh.id].hasOwnProperty('vertexColors')) {\n              material.vertexColors = (\n                renderMaterials[mesh.id] as any\n              ).vertexColors\n            }\n            mesh.material = material\n            break\n          case 'solid':\n            // it is possible that renderMaterials hasn't updated yet\n            if (!renderMaterials[mesh.id]) {\n              return\n            }\n            material = new MeshPhongMaterial()\n            if (renderMaterials[mesh.id].hasOwnProperty('color')) {\n              material.color = (renderMaterials[mesh.id] as any).color\n            }\n            if (renderMaterials[mesh.id].hasOwnProperty('map')) {\n              material.map = (renderMaterials[mesh.id] as any).map\n            }\n            if (renderMaterials[mesh.id].hasOwnProperty('vertexColors')) {\n              material.vertexColors = (\n                renderMaterials[mesh.id] as any\n              ).vertexColors\n            }\n            mesh.material = material\n            break\n          case 'rendered':\n            mesh.material = renderMaterials[mesh.id]\n        }\n      }\n      invalidate()\n    })\n  }, [viewportShading, renderMaterials, sceneProxy])\n\n  const scrub = useRef<IScrub>(undefined!)\n\n  if (!sceneProxy) {\n    return null\n  }\n\n  return (\n    <>\n      <primitive object={sceneProxy} />\n      {selected &&\n        editableProxyOfSelected &&\n        editable &&\n        editable.objectConfig.useTransformControls && (\n          <TransformControls\n            mode={transformControlsMode}\n            space={transformControlsSpace}\n            orbitControlsRef={orbitControlsRef}\n            object={editableProxyOfSelected.object}\n            onObjectChange={() => {\n              const sheetObject = editableProxyOfSelected.editable.sheetObject\n              const obj = editableProxyOfSelected.object\n\n              // interestingly, for some reason, only updating a transform when it actually changes breaks it\n              scrub.current.capture(({set}) => {\n                if (transformControlsMode === 'translate') {\n                  set(sheetObject.props.position, {\n                    ...sheetObject.value.position,\n                    x: obj.position.x,\n                    y: obj.position.y,\n                    z: obj.position.z,\n                  })\n                }\n                if (transformControlsMode === 'rotate') {\n                  set(sheetObject.props.rotation, {\n                    ...sheetObject.value.rotation,\n                    x: obj.rotation.x,\n                    y: obj.rotation.y,\n                    z: obj.rotation.z,\n                  })\n                }\n                if (transformControlsMode === 'scale') {\n                  set(sheetObject.props.scale, {\n                    x: obj.scale.x,\n                    y: obj.scale.y,\n                    z: obj.scale.z,\n                  })\n                }\n              })\n            }}\n            onDraggingChange={(event) => {\n              if (event.value) {\n                const studio = getStudioSync(true)!\n                scrub.current = studio.scrub()\n              } else {\n                scrub.current.commit()\n              }\n              return (isBeingEdited.current = event.value)\n            }}\n          />\n        )}\n      {Object.values(editableProxies).map(\n        (editableProxy) => editableProxy!.portal,\n      )}\n    </>\n  )\n}\n\nconst PortalWrapper: React.FC<{portal: React.ReactNode}> = ({portal}) => {\n  return <>{portal}</>\n}\n\nexport default ProxyManager\n"
  },
  {
    "path": "packages/r3f/src/extension/components/ReferenceWindow/ReferenceWindow.tsx",
    "content": "import type {VFC} from 'react'\nimport {useMemo} from 'react'\nimport React, {useEffect, useLayoutEffect, useRef} from 'react'\nimport shallow from 'zustand/shallow'\nimport type {WebGLRenderer} from 'three'\nimport useMeasure from 'react-use-measure'\nimport styled, {keyframes} from 'styled-components'\nimport {TiWarningOutline} from 'react-icons/ti'\nimport noiseImageUrl from './noise-transparent.png'\nimport useExtensionStore from '../../useExtensionStore'\n\nconst Container = styled.div<{minimized: boolean}>`\n  position: relative;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  pointer-events: auto;\n  cursor: pointer;\n  overflow: hidden;\n  border-radius: ${({minimized}) => (minimized ? '2px' : '4px')};\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.25), 0 2px 6px rgba(0, 0, 0, 0.15);\n`\n\nconst Canvas = styled.canvas<{width: number; height: number}>`\n  display: block;\n  width: ${({width, height}) => (width > height ? 'auto' : '100%')};\n  height: ${({width, height}) => (height > width ? 'auto' : '100%')};\n`\n\nconst staticAnimation = keyframes`\n  0% { transform: translate(0,0) }\n  10% { transform: translate(-5%,-5%) }\n  20% { transform: translate(-10%,5%) }\n  30% { transform: translate(5%,-10%) }\n  40% { transform: translate(-5%,15%) }\n  50% { transform: translate(-10%,5%) }\n  60% { transform: translate(15%,0) }\n  70% { transform: translate(0,10%) }\n  80% { transform: translate(-15%,0) }\n  90% { transform: translate(10%,5%) }\n  100% { transform: translate(5%,0) }\n`\n\nconst Static = styled.div`\n  position: relative;\n  display: flex;\n  width: 200px;\n  height: 120px;\n  padding: 18px;\n\n  ::before {\n    content: '';\n    position: absolute;\n    z-index: -1;\n    top: -50%;\n    left: -50%;\n    right: -50%;\n    bottom: -50%;\n    background: #2f2f2f url(${noiseImageUrl}) repeat 0 0;\n    animation: ${staticAnimation} 0.2s infinite;\n  }\n`\n\nconst Warning = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  align-items: center;\n  text-align: center;\n  opacity: 0.8;\n`\n\ninterface ReferenceWindowProps {\n  maxHeight: number\n  maxWidth: number\n  minimized: boolean\n  onToggleMinified: () => void\n}\n\nconst ReferenceWindow: VFC<ReferenceWindowProps> = ({\n  maxHeight,\n  maxWidth,\n  minimized,\n  onToggleMinified,\n}) => {\n  const canvasRef = useRef<HTMLCanvasElement>(null)\n\n  const [gl] = useExtensionStore((state) => [state.gl], shallow)\n  const [ref, {width: origWidth, height: origHeight}] = useMeasure()\n\n  const preserveDrawingBuffer =\n    gl?.getContextAttributes()?.preserveDrawingBuffer ?? false\n\n  useLayoutEffect(() => {\n    if (gl) {\n      ref(gl?.domElement)\n    }\n  }, [gl, ref])\n\n  const [width, height] = useMemo(() => {\n    if (!gl) return [0, 0]\n    const aspectRatio =\n      origWidth / (origHeight || Number.EPSILON) || Number.EPSILON\n\n    const width = Math.min(aspectRatio * maxHeight, maxWidth)\n\n    const height = width / aspectRatio\n    return [width, height]\n  }, [gl, maxWidth, maxHeight, origWidth, origHeight])\n\n  useEffect(() => {\n    let animationHandle: number\n    const draw = (gl: WebGLRenderer) => () => {\n      animationHandle = requestAnimationFrame(draw(gl))\n\n      if (!gl.domElement || !preserveDrawingBuffer) {\n        cancelAnimationFrame(animationHandle)\n        return\n      }\n\n      const ctx = canvasRef.current!.getContext('2d')!\n\n      // https://stackoverflow.com/questions/17861447/html5-canvas-drawimage-how-to-apply-antialiasing\n      ctx.imageSmoothingQuality = 'high'\n\n      ctx.fillStyle = 'white'\n      ctx.fillRect(0, 0, width, height)\n\n      ctx.drawImage(gl.domElement, 0, 0, width, height)\n    }\n\n    if (gl) {\n      draw(gl)()\n    }\n\n    return () => {\n      cancelAnimationFrame(animationHandle)\n    }\n  }, [gl, width, height, preserveDrawingBuffer])\n\n  return (\n    <Container\n      minimized={minimized}\n      onClick={onToggleMinified}\n      style={{\n        width: minimized ? 32 : preserveDrawingBuffer ? `${width}px` : 'auto',\n        height: minimized ? 32 : preserveDrawingBuffer ? `${height}px` : 'auto',\n      }}\n    >\n      {preserveDrawingBuffer ? (\n        <Canvas ref={canvasRef} width={width} height={height} />\n      ) : (\n        <Static>\n          <Warning>\n            <TiWarningOutline size=\"3em\" />\n            <code>\n              Please set <pre>{`gl={{ preserveDrawingBuffer: true }}`}</pre> on\n              the r3f Canvas for the reference window to work.\n            </code>\n          </Warning>\n        </Static>\n      )}\n    </Container>\n  )\n}\n\nexport default ReferenceWindow\n"
  },
  {
    "path": "packages/r3f/src/extension/components/ReferenceWindow/noiseImage.ts",
    "content": "const imageDataUrl =\n  'data:image/png;base64,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'\n\nexport default imageDataUrl\n"
  },
  {
    "path": "packages/r3f/src/extension/components/SnapshotEditor.tsx",
    "content": "import {useCallback, useEffect, useLayoutEffect, useMemo, useState} from 'react'\nimport React from 'react'\nimport {Canvas, useThree} from '@react-three/fiber'\nimport type {BaseSheetObjectType} from '../../main/store'\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {__private_allRegisteredObjects as allRegisteredObjects} from '@theatre/r3f'\nimport shallow from 'zustand/shallow'\nimport root from 'react-shadow/styled-components'\nimport ProxyManager from './ProxyManager'\nimport {useVal} from '@theatre/react'\nimport styled, {createGlobalStyle, StyleSheetManager} from 'styled-components'\nimport {getStudioSync, type ISheet} from '@theatre/core'\nimport useSnapshotEditorCamera from './useSnapshotEditorCamera'\nimport {getEditorSheet, getEditorSheetObject} from '../editorStuff'\nimport type {$IntentionalAny} from '../../types'\nimport {InfiniteGridHelper} from '../InfiniteGridHelper'\nimport {DragDetectorProvider} from './DragDetector'\nimport ReferenceWindow from './ReferenceWindow/ReferenceWindow'\nimport useExtensionStore from '../useExtensionStore'\nimport useMeasure from 'react-use-measure'\n\nconst GlobalStyle = createGlobalStyle`\n  :host {\n    contain: strict;\n    all: initial;\n    color: white;\n    font: 11px -apple-system, BlinkMacSystemFont, Segoe WPC, Segoe Editor,\n      HelveticaNeue-Light, Ubuntu, Droid Sans, sans-serif;\n  }\n\n  * {\n    padding: 0;\n    margin: 0;\n    font: inherit;\n    vertical-align: baseline;\n    list-style: none;\n  }\n`\n\nconst EditorScene: React.FC<{snapshotEditorSheet: ISheet; paneId: string}> = ({\n  snapshotEditorSheet,\n  paneId,\n}) => {\n  const [gl, scene, camera] = useThree(\n    (store) => [store.gl, store.scene, store.camera] as const,\n    shallow,\n  )\n\n  const [editorCamera, orbitControlsRef] = useSnapshotEditorCamera(\n    snapshotEditorSheet,\n    paneId,\n  )\n\n  const editorObject = getEditorSheetObject()\n\n  const helpersRoot = useExtensionStore((state) => state.helpersRoot, shallow)\n\n  const showGrid = useVal(editorObject?.props.viewport.showGrid) ?? true\n  const showAxes = useVal(editorObject?.props.viewport.showAxes) ?? true\n\n  const grid = useMemo(() => new InfiniteGridHelper(), [])\n\n  return (\n    <DragDetectorProvider>\n      {showGrid && <primitive object={grid} />}\n      {showAxes && <axesHelper args={[500]} />}\n      {editorCamera}\n\n      <primitive object={helpersRoot}></primitive>\n      <ProxyManager orbitControlsRef={orbitControlsRef} />\n      <color attach=\"background\" args={[0.1, 0.1, 0.1]} />\n    </DragDetectorProvider>\n  )\n}\n\nconst Wrapper = styled.div`\n  tab-size: 4;\n  line-height: 1.15; /* 1 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n  margin: 0;\n\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  overflow: hidden;\n`\n\nconst CanvasWrapper = styled.div`\n  position: relative;\n  z-index: 0;\n  height: 100%;\n  overflow: hidden;\n`\n\nconst Overlay = styled.div`\n  position: absolute;\n  inset: 0;\n  z-index: 2;\n  pointer-events: none;\n`\n\nconst Tools = styled.div`\n  position: absolute;\n  left: 12px;\n  top: 12px;\n  pointer-events: auto;\n`\n\nconst ReferenceWindowContainer = styled.div`\n  position: absolute;\n  right: 12px;\n  top: 12px;\n  justify-content: center;\n`\n\nconst WaitForSceneInitMessage = styled.div<{active?: boolean}>`\n  position: absolute;\n  margin: auto;\n  left: 0;\n  right: 0;\n  width: 300px;\n  top: 12px;\n  padding: 16px;\n  border-radius: 4px;\n  border: 1px solid rgba(255, 255, 255, 0.08);\n\n  backdrop-filter: blur(14px);\n  background: rgba(40, 43, 47, 0.8);\n\n  @supports not (backdrop-filter: blur()) {\n    background-color: rgba(40, 43, 47, 0.95);\n  }\n`\n\nconst SnapshotEditor: React.FC<{paneId: string}> = (props) => {\n  const snapshotEditorSheet = getEditorSheet()\n  const paneId = props.paneId\n  const editorObject = getEditorSheetObject()\n  const [ref, bounds] = useMeasure()\n\n  const [sceneSnapshot, createSnapshot] = useExtensionStore(\n    (state) => [state.sceneSnapshot, state.createSnapshot],\n    shallow,\n  )\n\n  useLayoutEffect(() => {\n    // Create a fresh snapshot when the editor is opened\n    createSnapshot()\n  }, [])\n\n  const onPointerMissed = useCallback(() => {\n    const studio = getStudioSync(true)!\n    // This callback runs when the user clicks in an empty space inside a SnapshotEditor.\n    // We'll try to set the current selection to the nearest sheet _if_ at least one object\n    // belonging to R3F was selected previously.\n    const obj: undefined | BaseSheetObjectType = studio.selection.find(\n      (sheetOrObject) =>\n        allRegisteredObjects.has(sheetOrObject as $IntentionalAny),\n    ) as $IntentionalAny\n\n    if (obj) {\n      studio.setSelection([obj.sheet])\n    }\n  }, [])\n\n  const [toolsContainer, setToolsContainer] = useState<null | HTMLElement>()\n\n  useEffect(() => {\n    if (!toolsContainer) return\n    const studio = getStudioSync(true)!\n\n    return studio.ui.renderToolset('snapshot-editor', toolsContainer)\n  }, [toolsContainer])\n\n  if (!editorObject) return <></>\n\n  const referenceWindowVisibility =\n    useVal(getEditorSheetObject()?.props.viewport.referenceWindow) ??\n    'minimized'\n\n  return (\n    <root.div style={{overflow: 'hidden'}}>\n      <StyleSheetManager disableVendorPrefixes>\n        <>\n          <GlobalStyle />\n          <Wrapper>\n            <Overlay>\n              <Tools ref={setToolsContainer} />\n              {referenceWindowVisibility !== 'hidden' && (\n                <ReferenceWindowContainer>\n                  <ReferenceWindow\n                    maxHeight={Math.min(bounds.height * 0.3, 150)}\n                    maxWidth={Math.min(bounds.width * 0.3, 250)}\n                    minimized={referenceWindowVisibility === 'minimized'}\n                    onToggleMinified={() => {\n                      const studio = getStudioSync(true)!\n                      studio.transaction(({set}) => {\n                        set(\n                          getEditorSheetObject()!.props.viewport\n                            .referenceWindow,\n                          referenceWindowVisibility === 'minimized'\n                            ? 'maximized'\n                            : 'minimized',\n                        )\n                      })\n                    }}\n                  />\n                </ReferenceWindowContainer>\n              )}\n              {!sceneSnapshot && (\n                <WaitForSceneInitMessage>\n                  The scene hasn't been initialized yet. It will appear in the\n                  editor as soon as it is.\n                </WaitForSceneInitMessage>\n              )}\n            </Overlay>\n\n            <CanvasWrapper ref={ref}>\n              <Canvas\n                onCreated={({gl}) => {\n                  gl.setClearColor('white')\n                }}\n                shadows\n                dpr={[1, 2]}\n                frameloop=\"demand\"\n                onPointerMissed={onPointerMissed}\n              >\n                <EditorScene\n                  snapshotEditorSheet={snapshotEditorSheet}\n                  paneId={paneId}\n                />\n              </Canvas>\n            </CanvasWrapper>\n          </Wrapper>\n        </>\n      </StyleSheetManager>\n    </root.div>\n  )\n}\n\nexport default SnapshotEditor\n"
  },
  {
    "path": "packages/r3f/src/extension/components/TransformControls.tsx",
    "content": "import type {Object3D, Event} from 'three'\nimport React, {forwardRef, useLayoutEffect, useEffect, useMemo} from 'react'\nimport type {ReactThreeFiber, Overwrite} from '@react-three/fiber'\nimport {useThree} from '@react-three/fiber'\nimport {TransformControls as TransformControlsImpl} from 'three-stdlib'\nimport type {OrbitControls} from 'three-stdlib'\n\ntype R3fTransformControls = Overwrite<\n  ReactThreeFiber.Object3DNode<\n    TransformControlsImpl,\n    typeof TransformControlsImpl\n  >,\n  {target?: ReactThreeFiber.Vector3}\n>\n\nexport interface TransformControlsProps extends R3fTransformControls {\n  object: Object3D\n  orbitControlsRef?: React.MutableRefObject<OrbitControls | null>\n  onObjectChange?: (event: Event) => void\n  onDraggingChange?: (event: Event) => void\n\n  // not a complete list of props that transform controls can take\n  mode: TransformControlsImpl['mode']\n  space: TransformControlsImpl['space']\n}\n\nconst TransformControls = forwardRef(\n  (\n    {\n      children,\n      object,\n      orbitControlsRef,\n      onObjectChange,\n      onDraggingChange,\n      ...props\n    }: TransformControlsProps,\n    ref,\n  ) => {\n    const {camera, gl, invalidate} = useThree()\n    const controls = useMemo(\n      () => new TransformControlsImpl(camera, gl.domElement),\n      [camera, gl.domElement],\n    )\n\n    useLayoutEffect(() => {\n      controls.attach(object)\n\n      return () => void controls.detach()\n    }, [object, controls])\n\n    useEffect(() => {\n      controls?.addEventListener?.('change', () => invalidate())\n      return () => controls?.removeEventListener?.('change', () => invalidate())\n    }, [controls, invalidate])\n\n    useEffect(() => {\n      const callback = (event: Event) => {\n        if (orbitControlsRef && orbitControlsRef.current) {\n          // @ts-ignore TODO\n          orbitControlsRef.current.enabled = !event.value\n        }\n      }\n\n      if (controls) {\n        controls.addEventListener!('dragging-changed', callback)\n      }\n\n      return () => {\n        controls.removeEventListener!('dragging-changed', callback)\n      }\n    }, [controls, orbitControlsRef])\n\n    useEffect(() => {\n      if (onObjectChange) {\n        controls.addEventListener('objectChange', onObjectChange)\n      }\n\n      return () => {\n        if (onObjectChange) {\n          controls.removeEventListener('objectChange', onObjectChange)\n        }\n      }\n    }, [onObjectChange, controls])\n\n    useEffect(() => {\n      if (onDraggingChange) {\n        controls.addEventListener('dragging-changed', onDraggingChange)\n      }\n\n      return () => {\n        if (onDraggingChange) {\n          controls.removeEventListener('dragging-changed', onDraggingChange)\n        }\n      }\n    }, [controls, onDraggingChange])\n\n    return <primitive dispose={null} object={controls} ref={ref} {...props} />\n  },\n)\n\nexport default TransformControls\n"
  },
  {
    "path": "packages/r3f/src/extension/components/useRefAndState.ts",
    "content": "import type {MutableRefObject} from 'react'\nimport {useMemo, useState} from 'react'\n\n/**\n * Combines useRef() and useState().\n *\n * @example\n * Usage:\n * ```ts\n * const [ref, val] = useRefAndState<HTMLDivElement | null>(null)\n *\n * useEffect(() => {\n *   val.addEventListener(...)\n * }, [val])\n *\n * return <div ref={ref}></div>\n * ```\n */\nexport default function useRefAndState<T>(\n  initialValue: T,\n): [ref: MutableRefObject<T>, state: T] {\n  const ref = useMemo(() => {\n    let current = initialValue\n    return {\n      get current() {\n        return current\n      },\n      set current(v: T) {\n        current = v\n        setState(v)\n      },\n    }\n  }, [])\n\n  const [state, setState] = useState<T>(() => initialValue)\n\n  return [ref, state]\n}\n"
  },
  {
    "path": "packages/r3f/src/extension/components/useSelected.tsx",
    "content": "import {useLayoutEffect, useRef, useState} from 'react'\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n  __private_allRegisteredObjects as allRegisteredObjects,\n  __private_makeStoreKey as makeStoreKey,\n} from '@theatre/r3f'\nimport {getStudioSync, type ISheetObject, type IStudio} from '@theatre/core'\nimport type {$IntentionalAny} from '../../types'\n\nexport function useSelected(): undefined | string {\n  const [state, set] = useState<string | undefined>(undefined)\n  const stateRef = useRef(state)\n  stateRef.current = state\n\n  useLayoutEffect(() => {\n    const setFromStudio = (selection: IStudio['selection']) => {\n      const item = selection.find(\n        (s): s is ISheetObject =>\n          s.type === 'Theatre_SheetObject_PublicAPI' &&\n          allRegisteredObjects.has(s as $IntentionalAny),\n      )\n      if (!item) {\n        set(undefined)\n      } else {\n        set(makeStoreKey(item.address))\n      }\n    }\n    const studio = getStudioSync(true)!\n    setFromStudio(studio.selection)\n    return studio.onSelectionChange(setFromStudio)\n  }, [])\n\n  return state\n}\n\nexport function getSelected(): undefined | string {\n  const studio = getStudioSync(true)!\n  const item = studio.selection.find(\n    (s): s is ISheetObject =>\n      s.type === 'Theatre_SheetObject_PublicAPI' &&\n      allRegisteredObjects.has(s as $IntentionalAny),\n  )\n  if (!item) {\n    return undefined\n  } else {\n    return makeStoreKey(item.address)\n  }\n}\n"
  },
  {
    "path": "packages/r3f/src/extension/components/useSnapshotEditorCamera.tsx",
    "content": "import {PerspectiveCamera} from '@react-three/drei'\nimport {OrbitControls} from './OrbitControls'\nimport type {OrbitControlsImpl} from './OrbitControls'\nimport type {MutableRefObject} from 'react'\nimport {useLayoutEffect, useRef} from 'react'\nimport React from 'react'\nimport useRefAndState from './useRefAndState'\nimport type {IScrub} from '@theatre/core'\nimport type {PerspectiveCamera as PerspectiveCameraImpl} from 'three'\nimport type {ISheet} from '@theatre/core'\nimport {getStudioSync, types} from '@theatre/core'\nimport type {ISheetObject} from '@theatre/core'\nimport {useThree} from '@react-three/fiber'\nimport type {$IntentionalAny} from '../../types'\n\nconst camConf = {\n  transform: {\n    position: {\n      x: types.number(10),\n      y: types.number(10),\n      z: types.number(0),\n    },\n    target: {\n      x: types.number(0),\n      y: types.number(0),\n      z: types.number(0),\n    },\n  },\n  lens: {\n    zoom: types.number(1, {range: [0.0001, 10]}),\n    fov: types.number(50, {range: [1, 1000]}),\n    near: types.number(0.1, {range: [0, Infinity]}),\n    far: types.number(2000, {range: [0, Infinity]}),\n    focus: types.number(10, {range: [0, Infinity]}),\n    filmGauge: types.number(35, {range: [0, Infinity]}),\n    filmOffset: types.number(0, {range: [0, Infinity]}),\n  },\n}\n\nexport default function useSnapshotEditorCamera(\n  snapshotEditorSheet: ISheet,\n  paneId: string,\n): [\n  node: React.ReactNode,\n  orbitControlsRef: MutableRefObject<OrbitControlsImpl | null>,\n] {\n  // OrbitControls and Cam might change later on, so we use useRefAndState()\n  // instead of useRef() to catch those changes.\n  const [orbitControlsRef, orbitControls] =\n    useRefAndState<OrbitControlsImpl | null>(null)\n\n  const [camRef, cam] = useRefAndState<PerspectiveCameraImpl | undefined>(\n    undefined,\n  )\n\n  const objRef = useRef<ISheetObject<typeof camConf> | null>(null)\n\n  useLayoutEffect(() => {\n    if (!objRef.current) {\n      objRef.current = snapshotEditorSheet.object(\n        `Editor Camera ${paneId}`,\n        camConf,\n      )\n    }\n  }, [paneId])\n\n  usePassValuesFromTheatreToCamera(cam, orbitControls, objRef)\n  usePassValuesFromOrbitControlsToTheatre(cam, orbitControls, objRef)\n\n  const node = (\n    <>\n      <PerspectiveCamera makeDefault ref={camRef} position={[0, 102, 0]} />\n      <OrbitControls\n        makeDefault\n        ref={orbitControlsRef}\n        camera={cam}\n        enableDamping={false}\n      />\n    </>\n  )\n\n  return [node, orbitControlsRef]\n}\n\n/**\n * This debounce does delay the placement of a keyframe, so you\n * need to be wary of it being too long and causing an issue like\n * the following:\n *\n * 1. user moves playhead t 0\n * 2. user changes orbit\n * 3. user moves playead to 10\n * 4. user changes orbit again\n *\n * User expects a keyframe on t0 and t10\n */\nconst COMMIT_DEBOUNCE_MS = 200\n\nfunction usePassValuesFromOrbitControlsToTheatre(\n  cam: PerspectiveCameraImpl | undefined,\n  orbitControls: OrbitControlsImpl | null,\n  objRef: MutableRefObject<ISheetObject<typeof camConf> | null>,\n) {\n  useLayoutEffect(() => {\n    if (!cam || orbitControls == null) return\n\n    let currentScrub:\n      | undefined\n      | {\n          /** \"debounce\" like timer for making commits to the orbit's changes */\n          scheduledCommit?: {\n            timer: $IntentionalAny\n            // Future, might be possible to remember the position we need to apply this scrub to (when the last 'end' event was received)\n            // position: number\n          }\n          scrub: IScrub\n        }\n\n    const scheduleCommit = () => {\n      if (currentScrub) {\n        clearTimeout(currentScrub.scheduledCommit?.timer)\n        const reference = currentScrub // capture current scrub to make sure currentScrub isn't out of date\n        currentScrub.scheduledCommit = {\n          timer: setTimeout(() => {\n            if (reference === currentScrub) {\n              currentScrub.scrub.commit()\n              currentScrub = undefined\n            }\n          }, COMMIT_DEBOUNCE_MS),\n        }\n      }\n    }\n\n    const onStart = () => {\n      if (currentScrub) {\n        // prevent existing scheduled commit from executing during the start of a rotation or pan.\n        // This currentScrub will continue being used and will be scheduled again onEnd\n        clearTimeout(currentScrub.scheduledCommit?.timer)\n      } else {\n        const studio = getStudioSync(true)!\n        // start new scrub\n        currentScrub = {\n          scrub: studio.scrub(),\n        }\n      }\n    }\n\n    const onEnd = () => {\n      scheduleCommit()\n    }\n\n    const onChange = () => {\n      if (!currentScrub) return\n\n      const p = cam!.position\n      const position = {x: p.x, y: p.y, z: p.z}\n\n      const t = orbitControls!.target\n      const target = {x: t.x, y: t.y, z: t.z}\n\n      const transform = {\n        position,\n        target,\n      }\n\n      currentScrub.scrub.capture(({set}) => {\n        set(objRef.current!.props.transform, transform)\n      })\n    }\n\n    orbitControls.addEventListener('start', onStart)\n    orbitControls.addEventListener('end', onEnd)\n    orbitControls.addEventListener('change', onChange)\n\n    return () => {\n      orbitControls.removeEventListener('start', onStart)\n      orbitControls.removeEventListener('end', onEnd)\n      orbitControls.removeEventListener('change', onChange)\n      if (currentScrub) {\n        // defensively discard in progress changes\n        currentScrub.scrub.discard()\n        currentScrub = undefined\n      }\n    }\n  }, [cam, orbitControls])\n}\n\nfunction usePassValuesFromTheatreToCamera(\n  cam: PerspectiveCameraImpl | undefined,\n  orbitControls: OrbitControlsImpl | null,\n  objRef: MutableRefObject<ISheetObject<typeof camConf> | null>,\n) {\n  const invalidate = useThree(({invalidate}) => invalidate)\n\n  useLayoutEffect(() => {\n    if (!cam || orbitControls === null) return\n\n    const obj = objRef.current!\n    const setFromTheatre = (\n      props: ISheetObject<typeof camConf>['value'],\n    ): void => {\n      const {position, target} = props.transform\n      cam.zoom = props.lens.zoom\n      cam.fov = props.lens.fov\n      cam.near = props.lens.near\n      cam.far = props.lens.far\n      cam.focus = props.lens.focus\n      cam.filmGauge = props.lens.filmGauge\n      cam.filmOffset = props.lens.filmOffset\n      cam.position.set(position.x, position.y, position.z)\n      cam.updateProjectionMatrix()\n      orbitControls.target.set(target.x, target.y, target.z)\n      orbitControls.update()\n      invalidate()\n    }\n\n    const unsub = obj.onValuesChange(setFromTheatre)\n    setFromTheatre(obj.value)\n\n    return unsub\n  }, [cam, orbitControls, objRef, invalidate])\n}\n"
  },
  {
    "path": "packages/r3f/src/extension/editorStuff.ts",
    "content": "import type {ISheet, ISheetObject} from '@theatre/core'\nimport {types, getStudioSync} from '@theatre/core'\n\nlet sheet: ISheet | undefined = undefined\nlet sheetObject: ISheetObject<typeof editorSheetObjectConfig> | undefined =\n  undefined\n\nconst editorSheetObjectConfig = {\n  viewport: types.compound(\n    {\n      showAxes: types.boolean(true, {label: 'Axes'}),\n      showGrid: types.boolean(true, {label: 'Grid'}),\n      showOverlayIcons: types.boolean(false, {label: 'Overlay Icons'}),\n      shading: types.stringLiteral(\n        'rendered',\n        {\n          flat: 'Flat',\n          rendered: 'Rendered',\n          solid: 'Solid',\n          wireframe: 'Wireframe',\n        },\n        {as: 'menu', label: 'Shading'},\n      ),\n      referenceWindow: types.stringLiteral(\n        'minimized',\n        {\n          maximized: 'Maximized',\n          minimized: 'Minimized',\n          hidden: 'Hidden',\n        },\n        {as: 'menu', label: 'Reference Window'},\n      ),\n    },\n    {label: 'Viewport Config'},\n  ),\n  transformControls: types.compound(\n    {\n      mode: types.stringLiteral(\n        'translate',\n        {\n          translate: 'Translate',\n          rotate: 'Rotate',\n          scale: 'Scale',\n        },\n        {as: 'switch', label: 'Mode'},\n      ),\n      space: types.stringLiteral(\n        'world',\n        {\n          local: 'Local',\n          world: 'World',\n        },\n        {as: 'switch', label: 'Space'},\n      ),\n    },\n    {label: 'Transform Controls'},\n  ),\n}\n\nexport function getEditorSheet(): ISheet {\n  if (!sheet) {\n    sheet = getStudioSync(true)!.getStudioProject().sheet('R3F UI')\n  }\n  return sheet\n}\n\nexport function getEditorSheetObject(): ISheetObject<\n  typeof editorSheetObjectConfig\n> | null {\n  if (!sheetObject) {\n    sheetObject =\n      getEditorSheet().object('Editor', editorSheetObjectConfig) || null\n  }\n  return sheetObject\n}\n"
  },
  {
    "path": "packages/r3f/src/extension/icons.tsx",
    "content": "import {\n  BsCameraVideoFill,\n  BsFillCollectionFill,\n  BsCloudFill,\n} from 'react-icons/bs'\nimport {GiCube, GiLightBulb, GiLightProjector} from 'react-icons/gi'\nimport {BiSun} from 'react-icons/bi'\nimport React from 'react'\n\nconst icons = {\n  collection: <BsFillCollectionFill />,\n  cube: <GiCube />,\n  lightBulb: <GiLightBulb />,\n  spotLight: <GiLightProjector />,\n  sun: <BiSun />,\n  camera: <BsCameraVideoFill />,\n  cloud: <BsCloudFill />,\n}\n\nexport type IconID = keyof typeof icons\n\nexport default icons\n"
  },
  {
    "path": "packages/r3f/src/extension/index.ts",
    "content": "import SnapshotEditor from './components/SnapshotEditor'\nimport type {IExtension} from '@theatre/core'\nimport {prism, val} from '@theatre/dataverse'\nimport {getEditorSheetObject} from './editorStuff'\nimport ReactDOM from 'react-dom/client'\nimport React from 'react'\nimport type {ToolsetConfig} from '@theatre/core'\nimport useExtensionStore from './useExtensionStore'\nimport {onChange} from '@theatre/core'\n\nconst io5CameraOutline = `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"ionicon\" viewBox=\"0 0 512 512\"><title>Camera</title><path d=\"M350.54 148.68l-26.62-42.06C318.31 100.08 310.62 96 302 96h-92c-8.62 0-16.31 4.08-21.92 10.62l-26.62 42.06C155.85 155.23 148.62 160 140 160H80a32 32 0 00-32 32v192a32 32 0 0032 32h352a32 32 0 0032-32V192a32 32 0 00-32-32h-59c-8.65 0-16.85-4.77-22.46-11.32z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"32\"/><circle cx=\"256\" cy=\"272\" r=\"80\" fill=\"none\" stroke=\"currentColor\" stroke-miterlimit=\"10\" stroke-width=\"32\"/><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"32\" d=\"M124 158v-22h-24v22\"/></svg>`\nconst gameIconMove = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M256 34.47l-90.51 90.51h67.883v108.393H124.98V165.49L34.47 256l90.51 90.51v-67.883h108.393V387.02H165.49L256 477.53l90.51-90.51h-67.883V278.627H387.02v67.883L477.53 256l-90.51-90.51v67.883H278.627V124.98h67.883L256 34.47z\"/></svg>`\nconst gameIconClockwiseRotation = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M263.09 50c-11.882-.007-23.875 1.018-35.857 3.13C142.026 68.156 75.156 135.026 60.13 220.233 45.108 305.44 85.075 391.15 160.005 434.41c32.782 18.927 69.254 27.996 105.463 27.553 46.555-.57 92.675-16.865 129.957-48.15l-30.855-36.768c-50.95 42.75-122.968 49.05-180.566 15.797-57.597-33.254-88.152-98.777-76.603-164.274 11.55-65.497 62.672-116.62 128.17-128.168 51.656-9.108 103.323 7.98 139.17 43.862L327 192h128V64l-46.34 46.342C370.242 71.962 317.83 50.03 263.09 50z\"/></svg>`\nconst gameIconResize = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M29 30l1 90h36V66h26V30H29zm99 0v36h72V30h-72zm108 0v36h72V30h-72zm108 0v36h72V30h-72zm102 0v78h36V30h-36zm-206 80v36h100.543l-118 118H30v218h218V289.457l118-118V272h36V110H240zm206 34v72h36v-72h-36zM30 156v72h36v-72H30zm416 96v72h36v-72h-36zm0 108v72h36v-72h-36zm-166 86v36h72v-36h-72zm108 0v36h72v-36h-72z\"/></svg>`\nconst boxIconsGlobe = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 24 24\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 2C6.486 2 2 6.486 2 12s4.486 10 10 10 10-4.486 10-10S17.514 2 12 2zm7.931 9h-2.764a14.67 14.67 0 0 0-1.792-6.243A8.013 8.013 0 0 1 19.931 11zM12.53 4.027c1.035 1.364 2.427 3.78 2.627 6.973H9.03c.139-2.596.994-5.028 2.451-6.974.172-.01.344-.026.519-.026.179 0 .354.016.53.027zm-3.842.7C7.704 6.618 7.136 8.762 7.03 11H4.069a8.013 8.013 0 0 1 4.619-6.273zM4.069 13h2.974c.136 2.379.665 4.478 1.556 6.23A8.01 8.01 0 0 1 4.069 13zm7.381 6.973C10.049 18.275 9.222 15.896 9.041 13h6.113c-.208 2.773-1.117 5.196-2.603 6.972-.182.012-.364.028-.551.028-.186 0-.367-.016-.55-.027zm4.011-.772c.955-1.794 1.538-3.901 1.691-6.201h2.778a8.005 8.005 0 0 1-4.469 6.201z\"></path></svg>`\nconst boxIconsCube = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 24 24\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 2C6.486 2 2 6.486 2 12s4.486 10 10 10 10-4.486 10-10S17.514 2 12 2zm7.931 9h-2.764a14.67 14.67 0 0 0-1.792-6.243A8.013 8.013 0 0 1 19.931 11zM12.53 4.027c1.035 1.364 2.427 3.78 2.627 6.973H9.03c.139-2.596.994-5.028 2.451-6.974.172-.01.344-.026.519-.026.179 0 .354.016.53.027zm-3.842.7C7.704 6.618 7.136 8.762 7.03 11H4.069a8.013 8.013 0 0 1 4.619-6.273zM4.069 13h2.974c.136 2.379.665 4.478 1.556 6.23A8.01 8.01 0 0 1 4.069 13zm7.381 6.973C10.049 18.275 9.222 15.896 9.041 13h6.113c-.208 2.773-1.117 5.196-2.603 6.972-.182.012-.364.028-.551.028-.186 0-.367-.016-.55-.027zm4.011-.772c.955-1.794 1.538-3.901 1.691-6.201h2.778a8.005 8.005 0 0 1-4.469 6.201z\"></path></svg>`\nconst gameIconsCube = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M256 24.585L51.47 118.989 256 213.394l204.53-94.405zM38.998 133.054v258.353L247 487.415V229.063zm434.004 0L265 229.062v258.353l208.002-96.008z\"></path></svg>`\nconst fontAwesomeCube = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z\"></path></svg>`\nconst gameIconsIceCube = `<svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M238.406 26.844c-9.653.12-18.926 2.69-30.437 7.062l-157.282 57c-20.984 7.65-21.587 11.834-22.344 33.28L20.937 358.22c-1.207 27.514-.654 33.187 23.25 43.56L229.97 483.19c19.34 8.29 31.906 7.655 45.186 3.218l181.938-56.53c21.95-7.295 25.04-9.627 25.875-36.845l7.686-250.155c.662-17.37-5.667-24.695-18.78-29.625L271.062 34.375c-12.977-5.344-23.003-7.653-32.657-7.53zm.813 24.875c23.637-.053 45.564 8.434 87.874 24.874 95.545 37.123 131.71 53.8 69.687 77.937-74.002 28.802-128.175 45.115-172.28 25.814L113.47 131.75c-34.57-15.127-44.69-27.46 17.843-50.094 55.64-20.14 82.742-29.882 107.906-29.937zm44.718 43.75c-38.284.402-55.285 21.205-56.813 38.936-.873 10.132 2.95 19.6 12.406 26.25 9.456 6.65 25.355 10.56 48.97 5.938 35.817-7.01 61.536-15.056 77.5-22.844 7.982-3.894 13.464-7.737 16.5-10.844 3.036-3.107 3.453-4.942 3.438-6-.016-1.057-.44-2.675-3.313-5.406-2.873-2.73-8.03-6.04-15.22-9.156-14.378-6.233-36.757-11.877-65.717-15.72-6.355-.842-12.28-1.213-17.75-1.155zM59.25 134c10.372-.29 29.217 7.2 63.906 22.656 140.925 62.786 140.52 65.876 130.97 200.656-7.783 109.81-8.797 109.85-128.47 59.282-73.15-30.91-86.806-40.853-85.187-88.97l5.468-162.937c.674-20.034 1.557-30.358 13.312-30.687zm381.938 30.906c29.172-.384 29.1 28.075 26.75 105.25-4.118 135.132-9.05 140.184-120.375 173.72-70.42 21.21-81.49 25.614-78.97-12.032l11-164.156c3.217-48.034 7.588-51.508 94.813-83.907 31.323-11.633 52.534-18.686 66.78-18.874zm-20.438 40.688c-.332-.002-.674.015-1 .03-5.22.263-10.226 2.77-14.188 8.407-3.96 5.638-6.81 14.71-5.687 27.907 1.448 17.033-4.507 38.11-15.156 56.938-10.65 18.827-26.502 35.91-47.814 38.813-29.127 3.968-42.41 23.58-43.5 42.062-.545 9.24 2.108 18.03 7.688 24.594s14.088 11.335 27.187 12.03c41.146 2.185 71.336-10.766 91.595-39.155 20.26-28.39 30.396-73.76 25.875-136.595-1.876-26.076-14.708-34.977-25-35.03zm-246.25 8.844c-.644 0-1.218.063-1.72.187-2.003.494-3.685 1.53-5.655 4.813-1.913 3.186-3.688 8.618-4.406 16.343l-.064.657c-1.388 16.732-8.098 28.602-17.844 35.063-9.745 6.46-20.794 7.808-31.125 9.094-10.33 1.286-20.177 2.39-28.156 5.75-7.977 3.36-14.36 8.38-19.468 19.78-7.2 16.076-7.143 28.027-3.124 38.563 4.018 10.537 12.688 20.106 24.687 28.75 23.998 17.29 60.27 29.956 88.906 41.844 11.386 4.727 20.496 6.484 27.282 6.126 6.787-.358 11.278-2.423 15.375-6.562 8.195-8.28 14.057-27.692 15-57.344 2.024-63.623-18.84-110.284-38.656-130.875-8.668-9.008-16.52-12.193-21.03-12.188zm184.22 6.812c-.95-.003-1.927.035-2.97.094-35.464 1.99-48.477 12.867-52.5 24.062-4.023 11.196.826 27.07 10.844 39.78 11.488 14.58 20.59 15.736 30.437 12.283 9.848-3.455 20.542-14.108 27.376-26.908s9.512-27.397 7.188-36.28c-1.163-4.443-3.144-7.422-6.47-9.626-2.908-1.928-7.274-3.388-13.905-3.406z\"></path></svg>`\n\nconst r3fExtension: IExtension = {\n  id: '@theatre/r3f',\n  toolbars: {\n    global(set, studio) {\n      const calc = prism<ToolsetConfig>(() => {\n        const editorObject = getEditorSheetObject()\n\n        return [\n          {\n            type: 'Icon',\n            title: 'Create Snapshot',\n            svgSource: io5CameraOutline,\n            onClick: () => {\n              studio.createPane('snapshot')\n            },\n          },\n        ]\n      })\n      return onChange(calc, () => {\n        set(calc.getValue())\n      })\n    },\n    'snapshot-editor': (set, studio) => {\n      const {createSnapshot} = useExtensionStore.getState()\n\n      const calc = prism<ToolsetConfig>(() => {\n        const editorObject = getEditorSheetObject()\n\n        const transformControlsMode =\n          val(editorObject?.props.transformControls.mode) ?? 'translate'\n        const transformControlsSpace =\n          val(editorObject?.props.transformControls.space) ?? 'world'\n        const viewportShading =\n          val(editorObject?.props.viewport.shading) ?? 'rendered'\n\n        return [\n          {\n            type: 'Icon',\n            onClick: createSnapshot,\n            title: 'Refresh Snapshot',\n            svgSource: `<svg stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" viewBox=\"0 0 24 24\" stroke-linecap=\"round\" stroke-linejoin=\"round\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\"><polyline points=\"23 4 23 10 17 10\"></polyline><polyline points=\"1 20 1 14 7 14\"></polyline><path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\"></path></svg>`,\n          },\n          {\n            type: 'Switch',\n            value: transformControlsMode,\n            onChange: (value) =>\n              studio.transaction(({set}) =>\n                set(editorObject!.props.transformControls.mode, value),\n              ),\n            options: [\n              {\n                value: 'translate',\n                label: 'Tool: Translate',\n                svgSource: gameIconMove,\n              },\n              {\n                value: 'rotate',\n                label: 'Tool: Rotate',\n                svgSource: gameIconClockwiseRotation,\n              },\n              {\n                value: 'scale',\n                label: 'Tool: Scale',\n                svgSource: gameIconResize,\n              },\n            ],\n          },\n          {\n            type: 'Switch',\n            value: transformControlsSpace,\n            onChange: (space) =>\n              studio.transaction(({set}) => {\n                set(editorObject!.props.transformControls.space, space)\n              }),\n            options: [\n              {\n                value: 'world',\n                label: 'Space: World',\n                svgSource: boxIconsGlobe,\n              },\n              {\n                value: 'local',\n                label: 'Space: Local',\n                svgSource: boxIconsCube,\n              },\n            ],\n          },\n          {\n            type: 'Switch',\n            value: viewportShading,\n            onChange: (shading) =>\n              studio.transaction(({set}) => {\n                set(editorObject!.props.viewport.shading, shading)\n              }),\n            options: [\n              {\n                value: 'wireframe',\n                label: 'Display: Wireframe',\n                svgSource: boxIconsCube,\n              },\n              {\n                value: 'flat',\n                label: 'Display: Flat',\n                svgSource: gameIconsCube,\n              },\n              {\n                value: 'solid',\n                label: 'Display: Solid',\n                svgSource: fontAwesomeCube,\n              },\n              {\n                value: 'rendered',\n                label: 'Display: Rendered',\n                svgSource: gameIconsIceCube,\n              },\n            ],\n          },\n        ]\n      })\n      return onChange(calc, () => {\n        set(calc.getValue())\n      })\n    },\n  },\n  panes: [\n    {\n      class: 'snapshot',\n      mount: ({paneId, node}) => {\n        const root = ReactDOM.createRoot(node)\n\n        root.render(React.createElement(SnapshotEditor, {paneId}))\n        function unmount() {\n          // gotta unmount in the next tick, otherwise react will complain https://github.com/facebook/react/issues/25675\n          setTimeout(() => {\n            root.unmount()\n          }, 0)\n        }\n        return unmount\n      },\n    },\n  ],\n}\n\nexport default r3fExtension\n"
  },
  {
    "path": "packages/r3f/src/extension/useExtensionStore.ts",
    "content": "// eslint-disable-next-line import/no-extraneous-dependencies\nimport {____private_editorStore} from '@theatre/r3f'\nimport create from 'zustand'\n\nconst useExtensionStore = create(____private_editorStore)\n\nexport default useExtensionStore\n"
  },
  {
    "path": "packages/r3f/src/globals.d.ts",
    "content": "declare module '*.txt' {\n  export default string\n}\n\ndeclare module '*.png' {\n  export default string\n}\n"
  },
  {
    "path": "packages/r3f/src/index.ts",
    "content": "export {default as editable} from './main/editable'\nexport type {EditableState, BindFunction} from './main/store'\n/**\n * This is a private API that's exported so that `@theatre/r3f/dist/extension`\n * and `@theatre/r3f` can talk to one another. This API _could_ change\n * between patch releases, so please don't build on it :)\n *\n * @internal\n */\nexport {\n  editorStore as ____private_editorStore,\n  allRegisteredObjects as __private_allRegisteredObjects,\n} from './main/store'\n/**\n * This is a private API that's exported so that `@theatre/r3f/dist/extension`\n * and `@theatre/r3f` can talk to one another. This API _could_ change\n * between patch releases, so please don't build on it :)\n *\n * @internal\n */\nexport {makeStoreKey as __private_makeStoreKey} from './main/utils'\n\nexport {default as SheetProvider, useCurrentSheet} from './main/SheetProvider'\nexport {\n  default as RafDriverProvider,\n  useCurrentRafDriver,\n} from './main/RafDriverProvider'\nexport {refreshSnapshot} from './main/utils'\nexport {default as RefreshSnapshot} from './main/RefreshSnapshot'\nexport * from './drei'\n"
  },
  {
    "path": "packages/r3f/src/main/.eslintrc.js",
    "content": "module.exports = {\n  rules: {\n    'no-restricted-syntax': [\n      'error',\n      {\n        selector: `ImportDeclaration[importKind!='type'][source.value=/\\\\u002Fextension\\\\u002F/]`,\n        message: `The main bundle should not be able to import the internals of extension.`,\n      },\n    ],\n  },\n}\n"
  },
  {
    "path": "packages/r3f/src/main/RafDriverProvider.tsx",
    "content": "import type {ReactNode} from 'react'\nimport React, {createContext, useContext, useEffect} from 'react'\nimport type {IRafDriver} from '@theatre/core'\n\nconst ctx = createContext<{rafDriver: IRafDriver}>(undefined!)\n\nexport const useCurrentRafDriver = (): IRafDriver | undefined => {\n  return useContext(ctx)?.rafDriver\n}\n\nconst RafDriverProvider: React.FC<{\n  driver: IRafDriver\n  children: ReactNode\n}> = ({driver, children}) => {\n  useEffect(() => {\n    if (!driver || driver.type !== 'Theatre_RafDriver_PublicAPI') {\n      throw new Error(\n        `driver in <RafDriverProvider deriver={driver}> has an invalid value`,\n      )\n    }\n  }, [driver])\n\n  return <ctx.Provider value={{rafDriver: driver}}>{children}</ctx.Provider>\n}\n\nexport default RafDriverProvider\n"
  },
  {
    "path": "packages/r3f/src/main/RefreshSnapshot.tsx",
    "content": "import React, {useEffect} from 'react'\nimport {refreshSnapshot} from './utils'\n\n/**\n * Putting this element in a suspense tree makes sure the snapshot editor\n * gets refreshed once the tree renders.\n *\n * Alternatively you can use {@link refreshSnapshot}\n *\n * @example\n * Usage\n * ```jsx\n * <Suspense fallback={null}>\n *  <RefreshSnapshot />\n *  <Model url={sceneGLB} />\n * </Suspense>\n * ```\n */\nconst RefreshSnapshot: React.FC<{}> = () => {\n  useEffect(() => {\n    setTimeout(() => {\n      refreshSnapshot()\n    })\n  }, [])\n  return <></>\n}\n\nexport default RefreshSnapshot\n"
  },
  {
    "path": "packages/r3f/src/main/SheetProvider.tsx",
    "content": "import type {ReactNode} from 'react'\nimport React, {\n  createContext,\n  useContext,\n  useEffect,\n  useLayoutEffect,\n} from 'react'\nimport {useThree} from '@react-three/fiber'\nimport type {ISheet} from '@theatre/core'\nimport {bindToCanvas} from './store'\n\nconst ctx = createContext<{sheet: ISheet}>(undefined!)\n\nconst useWrapperContext = (): {sheet: ISheet} => {\n  const val = useContext(ctx)\n  if (!val) {\n    throw new Error(\n      `No sheet found. You need to add a <SheetProvider> higher up in the tree. https://docs.theatrejs.com/r3f.html#sheetprovider`,\n    )\n  }\n  return val\n}\n\nexport const useCurrentSheet = (): ISheet | undefined => {\n  return useWrapperContext().sheet\n}\n\nconst SheetProvider: React.FC<{\n  sheet: ISheet\n  children: ReactNode\n}> = ({sheet, children}) => {\n  const {scene, gl} = useThree((s) => ({scene: s.scene, gl: s.gl}))\n\n  useEffect(() => {\n    if (!sheet || sheet.type !== 'Theatre_Sheet_PublicAPI') {\n      throw new Error(`sheet in <Wrapper sheet={sheet}> has an invalid value`)\n    }\n  }, [sheet])\n\n  useLayoutEffect(() => {\n    bindToCanvas({gl, scene})\n  }, [scene, gl])\n\n  return <ctx.Provider value={{sheet}}>{children}</ctx.Provider>\n}\n\nexport default SheetProvider\n"
  },
  {
    "path": "packages/r3f/src/main/defaultEditableFactoryConfig.ts",
    "content": "import type {EditableFactoryConfig} from './editableFactoryConfigUtils'\nimport {\n  createColorPropConfig,\n  createNumberPropConfig,\n  createVector,\n  createVectorPropConfig,\n  extendObjectProps,\n} from './editableFactoryConfigUtils'\nimport type {\n  DirectionalLight,\n  Object3D,\n  OrthographicCamera,\n  PerspectiveCamera,\n  PointLight,\n  SpotLight,\n} from 'three'\nimport {\n  BoxHelper,\n  CameraHelper,\n  Color,\n  DirectionalLightHelper,\n  PointLightHelper,\n  SpotLightHelper,\n} from 'three'\n\nconst baseObjectConfig = {\n  props: {\n    position: createVectorPropConfig('position'),\n    rotation: createVectorPropConfig('rotation'),\n    scale: createVectorPropConfig('scale', createVector([1, 1, 1])),\n  },\n  useTransformControls: true,\n  icon: 'cube' as const,\n  createHelper: (object: Object3D) => new BoxHelper(object, selectionColor),\n}\n\nconst baseLightConfig = {\n  ...extendObjectProps(baseObjectConfig, {\n    intensity: createNumberPropConfig('intensity', 1),\n    distance: createNumberPropConfig('distance'),\n    decay: createNumberPropConfig('decay'),\n    color: createColorPropConfig('color', new Color('white')),\n  }),\n  dimensionless: true,\n}\n\nconst baseCameraConfig = {\n  ...extendObjectProps(baseObjectConfig, {\n    near: createNumberPropConfig('near', 0.1, {nudgeMultiplier: 0.1}),\n    far: createNumberPropConfig('far', 2000, {nudgeMultiplier: 0.1}),\n  }),\n  updateObject: (camera: PerspectiveCamera | OrthographicCamera) => {\n    camera.updateProjectionMatrix()\n  },\n  icon: 'camera' as const,\n  dimensionless: true,\n  createHelper: (camera: PerspectiveCamera) => new CameraHelper(camera),\n}\n\nconst selectionColor = '#40AAA4'\n\nconst defaultEditableFactoryConfig = {\n  group: {\n    ...baseObjectConfig,\n    icon: 'collection' as const,\n    createHelper: (object: Object3D) => new BoxHelper(object, selectionColor),\n  },\n  mesh: {\n    ...baseObjectConfig,\n    icon: 'cube' as const,\n    createHelper: (object: Object3D) => new BoxHelper(object, selectionColor),\n  },\n  spotLight: {\n    ...extendObjectProps(baseLightConfig, {\n      angle: createNumberPropConfig('angle', 0, {nudgeMultiplier: 0.001}),\n      penumbra: createNumberPropConfig('penumbra', 0, {nudgeMultiplier: 0.001}),\n    }),\n    icon: 'spotLight' as const,\n    createHelper: (light: SpotLight) =>\n      new SpotLightHelper(light, selectionColor),\n  },\n  directionalLight: {\n    ...extendObjectProps(baseObjectConfig, {\n      intensity: createNumberPropConfig('intensity', 1),\n      color: createColorPropConfig('color', new Color('white')),\n    }),\n    icon: 'sun' as const,\n    dimensionless: true,\n    createHelper: (light: DirectionalLight) =>\n      new DirectionalLightHelper(light, 1, selectionColor),\n  },\n  pointLight: {\n    ...baseLightConfig,\n    icon: 'lightBulb' as const,\n    createHelper: (light: PointLight) =>\n      new PointLightHelper(light, 1, selectionColor),\n  },\n  ambientLight: {\n    props: {\n      intensity: createNumberPropConfig('intensity', 1),\n      color: createColorPropConfig('color', new Color('white')),\n    },\n    useTransformControls: false,\n    icon: 'lightBulb' as const,\n  },\n  hemisphereLight: {\n    props: {\n      intensity: createNumberPropConfig('intensity', 1),\n      color: createColorPropConfig('color', new Color('white')),\n      groundColor: createColorPropConfig('groundColor', new Color('white')),\n    },\n    useTransformControls: false,\n    icon: 'lightBulb' as const,\n  },\n  perspectiveCamera: extendObjectProps(baseCameraConfig, {\n    fov: createNumberPropConfig('fov', 50, {nudgeMultiplier: 0.1}),\n    zoom: createNumberPropConfig('zoom', 1),\n  }),\n  orthographicCamera: baseCameraConfig,\n  points: baseObjectConfig,\n  line: baseObjectConfig,\n  lineLoop: baseObjectConfig,\n  lineSegments: baseObjectConfig,\n  fog: {\n    props: {\n      color: createColorPropConfig('color'),\n      near: createNumberPropConfig('near', 1, {nudgeMultiplier: 0.1}),\n      far: createNumberPropConfig('far', 1000, {nudgeMultiplier: 0.1}),\n    },\n    useTransformControls: false,\n    icon: 'cloud' as const,\n  },\n}\n\n// Assert that the config is indeed of EditableFactoryConfig without actually\n// forcing it to that type so that we can pass the real type to the editable factory\ndefaultEditableFactoryConfig as EditableFactoryConfig\n\nexport default defaultEditableFactoryConfig\n"
  },
  {
    "path": "packages/r3f/src/main/editable.tsx",
    "content": "import type {ComponentProps, ComponentType, Ref, RefAttributes} from 'react'\nimport {useMemo, useState} from 'react'\nimport React, {forwardRef, useEffect, useLayoutEffect, useRef} from 'react'\nimport {allRegisteredObjects, editorStore} from './store'\nimport {mergeRefs} from 'react-merge-refs'\nimport useInvalidate from './useInvalidate'\nimport {useCurrentSheet} from './SheetProvider'\nimport defaultEditableFactoryConfig from './defaultEditableFactoryConfig'\nimport type {EditableFactoryConfig} from './editableFactoryConfigUtils'\nimport {makeStoreKey} from './utils'\nimport type {$FixMe, $IntentionalAny} from '../types'\nimport type {ISheetObject} from '@theatre/core'\nimport {notify} from '@theatre/core'\nimport {useCurrentRafDriver} from './RafDriverProvider'\n\nconst createEditable = <Keys extends keyof JSX.IntrinsicElements>(\n  config: EditableFactoryConfig,\n) => {\n  const editable = <\n    T extends ComponentType<any> | keyof JSX.IntrinsicElements | 'primitive',\n    U extends Keys,\n  >(\n    Component: T,\n    type: T extends 'primitive' ? null : U,\n  ) => {\n    type Props = Omit<ComponentProps<T>, 'visible'> & {\n      theatreKey: string\n      visible?: boolean | 'editor'\n      additionalProps?: $FixMe\n      objRef?: $FixMe\n    } & (T extends 'primitive'\n        ? {\n            editableType: U\n          }\n        : {}) &\n      RefAttributes<JSX.IntrinsicElements[U]>\n\n    if (Component !== 'primitive' && !type) {\n      throw new Error(\n        `You must provide the type of the component you're creating an editable for. For example: editable(MyComponent, 'mesh').`,\n      )\n    }\n\n    // TODO: detect if `editable()` is being called in the body of a react component, which is a common\n    // mistake. If it is, throw an error.\n\n    return forwardRef(\n      (\n        {\n          theatreKey,\n          visible,\n          editableType,\n          additionalProps,\n          objRef,\n          ...props\n        }: Props,\n        ref,\n      ) => {\n        //region Runtime type checks\n        if (typeof theatreKey !== 'string') {\n          throw new Error(\n            `No valid theatreKey was provided to the editable component. theatreKey must be a string. Received: ${theatreKey}`,\n          )\n        }\n\n        if (Component === 'primitive' && !editableType) {\n          throw new Error(\n            `When using the primitive component, you must provide the editableType prop. Received: ${editableType}`,\n          )\n        }\n        //endregion\n\n        const actualType = type ?? editableType\n\n        const objectRef = useRef<JSX.IntrinsicElements[U]>()\n\n        const sheet = useCurrentSheet()!\n        const rafDriver = useCurrentRafDriver()\n\n        const [sheetObject, setSheetObject] = useState<\n          undefined | ISheetObject<$FixMe>\n        >(undefined)\n\n        const storeKey = useMemo(\n          () =>\n            makeStoreKey({\n              ...sheet.address,\n              objectKey: theatreKey as $IntentionalAny,\n            }),\n          [sheet, theatreKey],\n        )\n\n        const invalidate = useInvalidate()\n\n        // warn about cameras in r3f\n        useEffect(() => {\n          if (\n            Component === 'perspectiveCamera' ||\n            Component === 'orthographicCamera'\n          ) {\n            const dreiComponent =\n              Component.charAt(0).toUpperCase() + Component.slice(1)\n\n            notify.warning(\n              `Possibly incorrect use of <e.${Component} />`,\n              `You seem to have declared the camera \"${theatreKey}\" simply as \\`<e.${Component} ... />\\`. This alone won't make r3f use it for rendering.\n\nThe easiest way to create a custom animatable \\`${dreiComponent}\\` is to import it from \\`@react-three/drei\\`, and make it editable.\n\\`\\`\\`\nimport {${dreiComponent}} from '@react-three/drei'\n\nconst EditableCamera =\n  editable(${dreiComponent}, '${Component}')\n\\`\\`\\`\nThen you can use it in your JSX like any other editable component. Note the makeDefault prop exposed by drei, which makes r3f use it for rendering.\n\\`\\`\\`\n<EditableCamera\n  theatreKey=\"${theatreKey}\"\n  makeDefault\n>\n\\`\\`\\`\n`,\n            )\n          }\n        }, [Component, theatreKey])\n\n        // create sheet object and add editable to store\n        useLayoutEffect(() => {\n          if (!sheet) return\n          if (sheetObject) {\n            sheet.object(\n              theatreKey,\n              Object.assign(\n                {\n                  ...additionalProps,\n                },\n                // @ts-ignore\n                ...Object.values(config[actualType].props).map(\n                  // @ts-ignore\n                  (value) => value.type,\n                ),\n              ),\n              {reconfigure: true},\n            )\n            return\n          } else {\n            const sheetObject = sheet.object(\n              theatreKey,\n              Object.assign(\n                {\n                  ...additionalProps,\n                },\n                // @ts-ignore\n                ...Object.values(config[actualType].props).map(\n                  // @ts-ignore\n                  (value) => value.type,\n                ),\n              ),\n            )\n            allRegisteredObjects.add(sheetObject)\n            setSheetObject(sheetObject)\n\n            if (objRef)\n              typeof objRef === 'function'\n                ? objRef(sheetObject)\n                : (objRef.current = sheetObject)\n\n            editorStore.getState().addEditable(storeKey, {\n              type: actualType,\n              sheetObject,\n              visibleOnlyInEditor: visible === 'editor',\n              // @ts-ignore\n              objectConfig: config[actualType],\n            })\n          }\n        }, [sheet, storeKey, additionalProps])\n\n        // store initial values of props\n        useLayoutEffect(() => {\n          if (!sheetObject) return\n          sheetObject!.initialValue = Object.fromEntries(\n            // @ts-ignore\n            Object.entries(config[actualType].props).map(\n              // @ts-ignore\n              ([key, value]) => [key, value.parse(props)],\n            ),\n          )\n        }, [\n          sheetObject,\n          // @ts-ignore\n          ...Object.keys(config[actualType].props).map(\n            // @ts-ignore\n            (key) => props[key],\n          ),\n        ])\n\n        // subscribe to prop changes from theatre\n        useLayoutEffect(() => {\n          if (!sheetObject) return\n\n          const object = objectRef.current!\n\n          const setFromTheatre = (newValues: any) => {\n            // @ts-ignore\n            Object.entries(config[actualType].props).forEach(\n              // @ts-ignore\n              ([key, value]) => value.apply(newValues[key], object),\n            )\n            // @ts-ignore\n            config[actualType].updateObject?.(object)\n            invalidate()\n          }\n\n          setFromTheatre(sheetObject.value)\n\n          const unsubscribe = sheetObject.onValuesChange(\n            setFromTheatre,\n            rafDriver,\n          )\n\n          return () => {\n            unsubscribe()\n            sheetObject.sheet.detachObject(theatreKey)\n            allRegisteredObjects.delete(sheetObject)\n            editorStore.getState().removeEditable(storeKey)\n          }\n        }, [sheetObject, rafDriver])\n\n        return (\n          // @ts-ignore\n          <Component\n            ref={mergeRefs([objectRef, ref])}\n            {...props}\n            visible={visible !== 'editor' && visible}\n            userData={{\n              __editable: true,\n              __storeKey: storeKey,\n            }}\n          />\n        )\n      },\n    )\n  }\n\n  const extensions = {\n    ...Object.fromEntries(\n      Object.keys(config).map((key) => [\n        key,\n        // @ts-ignore\n        editable(key, key),\n      ]),\n    ),\n    primitive: editable('primitive', null),\n  } as unknown as {\n    [Property in Keys]: React.ForwardRefExoticComponent<\n      Omit<JSX.IntrinsicElements[Property], 'visible'> & {\n        theatreKey: string\n        visible?: boolean | 'editor'\n        additionalProps?: $FixMe\n        objRef?: $FixMe\n        // not exactly sure how to get the type of the threejs object itself\n        ref?: Ref<unknown>\n      }\n    >\n  } & {\n    primitive: React.ForwardRefExoticComponent<\n      {\n        object: any\n        theatreKey: string\n        visible?: boolean | 'editor'\n        additionalProps?: $FixMe\n        objRef?: $FixMe\n        editableType: keyof JSX.IntrinsicElements\n        // not exactly sure how to get the type of the threejs object itself\n        ref?: Ref<unknown>\n      } & {\n        // Have to reproduce the primitive component's props here because we need to\n        // lift this index type here to the outside to make auto-complete work\n        [props: string]: any\n      }\n    >\n  }\n\n  return Object.assign(editable, extensions)\n}\n\nconst editable = createEditable<keyof typeof defaultEditableFactoryConfig>(\n  defaultEditableFactoryConfig,\n)\n\nexport default editable\n"
  },
  {
    "path": "packages/r3f/src/main/editableFactoryConfigUtils.ts",
    "content": "import type {UnknownShorthandCompoundProps} from '@theatre/core'\nimport {notify} from '@theatre/core'\nimport {types} from '@theatre/core'\nimport type {Object3D} from 'three'\nimport type {IconID} from '../extension/icons'\nimport {Color} from 'three'\n\nexport type Helper = Object3D & {\n  update?: () => void\n}\ntype PropConfig<T> = {\n  parse: (props: Record<string, any>) => T\n  apply: (value: T, object: any) => void\n  type: UnknownShorthandCompoundProps\n}\ntype Props = Record<string, PropConfig<any>>\ntype Meta<T> = {\n  useTransformControls: boolean\n  updateObject?: (object: T) => void\n  icon: IconID\n  dimensionless?: boolean\n  createHelper?: (object: T) => Helper\n}\nexport type ObjectConfig<T> = {props: Props} & Meta<T>\nexport type EditableFactoryConfig = Partial<\n  Record<keyof JSX.IntrinsicElements, ObjectConfig<any>>\n>\n\ntype Vector3 = {\n  x: number\n  y: number\n  z: number\n}\n\nfunction isNumber(value: any) {\n  return typeof value === 'number' && isFinite(value)\n}\n\nfunction isVectorObject(value: any) {\n  return (['x', 'y', 'z'] as const).every((axis) => isNumber(value[axis]))\n}\n\nexport const createVector = (components?: [number, number, number]) => {\n  return components\n    ? {x: components[0], y: components[1], z: components[2]}\n    : {\n        x: 0,\n        y: 0,\n        z: 0,\n      }\n}\n\nexport const createVectorPropConfig = (\n  key: string,\n  defaultValue = createVector(),\n  {nudgeMultiplier = 0.01} = {},\n): PropConfig<Vector3> => ({\n  parse: (props) => {\n    const propValue = props[key]\n    // if prop exists\n    const vector = !propValue\n      ? defaultValue\n      : // if prop is an array\n      Array.isArray(propValue)\n      ? createVector(propValue as any)\n      : // if prop is a scalar\n      isNumber(propValue)\n      ? {\n          x: propValue,\n          y: propValue,\n          z: propValue,\n        }\n      : // if prop is a threejs Vector3\n      isVectorObject(propValue)\n      ? {\n          x: propValue.x,\n          y: propValue.y,\n          z: propValue.z,\n        }\n      : // show a warning and return defaultValue\n        (notify.warning(\n          `Invalid value for vector prop \"${key}\"`,\n          `Couldn't make sense of \\`${key}={${JSON.stringify(\n            propValue,\n          )}}\\`, falling back to \\`${key}={${JSON.stringify([\n            defaultValue.x,\n            defaultValue.y,\n            defaultValue.z,\n          ])}}\\`.\n\nTo fix this, make sure the prop is set to either a number, an array of numbers, or a three.js Vector3 object.`,\n        ),\n        defaultValue)\n    ;(['x', 'y', 'z'] as const).forEach((axis) => {\n      // e.g. r3f also accepts prop keys like \"scale-x\"\n      if (props[`${key}-${axis}` as any])\n        vector[axis] = props[`${key}-${axis}` as any]\n    })\n    return vector\n  },\n  apply: (value, object) => {\n    object[key].set(value.x, value.y, value.z)\n  },\n  type: {\n    [key]: {\n      x: types.number(defaultValue.x, {nudgeMultiplier}),\n      y: types.number(defaultValue.y, {nudgeMultiplier}),\n      z: types.number(defaultValue.z, {nudgeMultiplier}),\n    },\n  },\n})\n\nexport const createNumberPropConfig = (\n  key: string,\n  defaultValue: number = 0,\n  {nudgeMultiplier = 0.01} = {},\n): PropConfig<number> => ({\n  parse: (props) => {\n    return props[key] ?? defaultValue\n  },\n  apply: (value, object) => {\n    object[key] = value\n  },\n  type: {\n    [key]: types.number(defaultValue, {nudgeMultiplier}),\n  },\n})\n\nexport type Rgba = {\n  r: number\n  g: number\n  b: number\n  a: number\n}\n\nexport const createColorPropConfig = (\n  key: string,\n  defaultValue = new Color(0, 0, 0),\n): PropConfig<Rgba> => ({\n  parse: (props) => {\n    return {...(props[key] ?? defaultValue), a: 1}\n  },\n  apply: (value, object) => {\n    object[key].setRGB(value.r, value.g, value.b)\n  },\n  type: {\n    [key]: types.rgba({...defaultValue, a: 1}),\n  },\n})\n\nexport const extendObjectProps = <T extends {props: {}}>(\n  objectConfig: T,\n  extension: Props,\n) => ({\n  ...objectConfig,\n  props: {...objectConfig.props, ...extension},\n})\n"
  },
  {
    "path": "packages/r3f/src/main/store.ts",
    "content": "import type {StateCreator} from 'zustand'\nimport create from 'zustand/vanilla'\nimport type {Object3D, Scene, WebGLRenderer} from 'three'\nimport {Group} from 'three'\nimport type {ISheetObject} from '@theatre/core'\nimport type {ObjectConfig} from './editableFactoryConfigUtils'\n\nexport type TransformControlsMode = 'translate' | 'rotate' | 'scale'\nexport type TransformControlsSpace = 'world' | 'local'\nexport type ViewportShading = 'wireframe' | 'flat' | 'solid' | 'rendered'\n\nexport type BaseSheetObjectType = ISheetObject<any>\n\nexport const allRegisteredObjects = new WeakSet<BaseSheetObjectType>()\n\nexport interface Editable<T> {\n  type: string\n  sheetObject: ISheetObject<any>\n  objectConfig: ObjectConfig<T>\n  visibleOnlyInEditor: boolean\n}\n\nexport type EditableSnapshot<T extends Editable<any> = Editable<any>> = {\n  proxyObject?: Object3D | null\n} & T\n\nexport interface SerializedEditable {\n  type: string\n}\n\nexport interface EditableState {\n  editables: Record<string, SerializedEditable>\n}\n\nexport type EditorStore = {\n  scene: Scene | null\n  gl: WebGLRenderer | null\n  helpersRoot: Group\n  editables: Record<string, Editable<any>>\n  // this will come in handy when we start supporting multiple canvases\n  canvasName: string\n  sceneSnapshot: Scene | null\n  editablesSnapshot: Record<string, EditableSnapshot> | null\n\n  init: (scene: Scene, gl: WebGLRenderer) => void\n\n  addEditable: (theatreKey: string, editable: Editable<any>) => void\n  removeEditable: (theatreKey: string) => void\n  createSnapshot: () => void\n  setSnapshotProxyObject: (\n    proxyObject: Object3D | null,\n    theatreKey: string,\n  ) => void\n}\n\nconst config: StateCreator<EditorStore> = (set, get) => {\n  return {\n    sheet: null,\n    editorObject: null,\n    scene: null,\n    gl: null,\n    helpersRoot: new Group(),\n    editables: {},\n    canvasName: 'default',\n    sceneSnapshot: null,\n    editablesSnapshot: null,\n    initialEditorCamera: {},\n\n    init: (scene, gl) => {\n      set({\n        scene,\n        gl,\n      })\n\n      // Create a snapshot, so that if the editor is already open, it gets refreshed\n      // when the scene is initialized\n      get().createSnapshot()\n    },\n\n    addEditable: (theatreKey, editable) => {\n      set((state) => ({\n        editables: {\n          ...state.editables,\n          [theatreKey]: editable,\n        },\n      }))\n    },\n\n    removeEditable: (theatreKey) => {\n      set((state) => {\n        const editables = {...state.editables}\n        delete editables[theatreKey]\n        return {\n          editables,\n        }\n      })\n    },\n\n    createSnapshot: () => {\n      set((state) => ({\n        sceneSnapshot: state.scene?.clone() ?? null,\n        editablesSnapshot: state.editables,\n      }))\n    },\n\n    setSnapshotProxyObject: (proxyObject, theatreKey) => {\n      set((state) => ({\n        editablesSnapshot: {\n          ...state.editablesSnapshot,\n          [theatreKey]: {\n            ...state.editablesSnapshot![theatreKey],\n            proxyObject,\n          },\n        },\n      }))\n    },\n  }\n}\n\nexport const editorStore = create<EditorStore>(config)\n\nexport type BindFunction = (options: {\n  allowImplicitInstancing?: boolean\n  gl: WebGLRenderer\n  scene: Scene\n}) => void\n\nexport const bindToCanvas: BindFunction = ({gl, scene}) => {\n  const init = editorStore.getState().init\n  init(scene, gl)\n}\n"
  },
  {
    "path": "packages/r3f/src/main/useInvalidate.ts",
    "content": "import {useThree} from '@react-three/fiber'\n\nexport default function useInvalidate() {\n  return useThree(({invalidate}) => invalidate)\n}\n"
  },
  {
    "path": "packages/r3f/src/main/utils.ts",
    "content": "import {editorStore} from './store'\nimport type {ISheetObject} from '@theatre/core'\n\nexport const refreshSnapshot = editorStore.getState().createSnapshot\n\nexport const makeStoreKey = (sheetObjectAddress: ISheetObject['address']) =>\n  `${sheetObjectAddress.sheetId}:${sheetObjectAddress.sheetInstanceId}:${sheetObjectAddress.objectKey}`\n"
  },
  {
    "path": "packages/r3f/src/types.ts",
    "content": "export type $FixMe = any\nexport type $IntentionalAny = any\n"
  },
  {
    "path": "packages/r3f/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \"src\",\n    \"types\": [\"jest\", \"node\"],\n    \"jsx\": \"react\",\n    \"emitDeclarationOnly\": true,\n    \"composite\": true\n  },\n  \"references\": [{\"path\": \"../studio\"}, {\"path\": \"../core\"}],\n  \"include\": [\"./src/**/*\"]\n}\n"
  },
  {
    "path": "packages/react/.gitignore",
    "content": "/dist"
  },
  {
    "path": "packages/react/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "packages/react/README.md",
    "content": "# @theatre/react\n\nUtilities for using [Theatre.js](https://www.theatrejs.com) or\n[Dataverse](https://github.com/theatre-js/theatre/tree/main/packages/dataverse)\nwith React.\n\n## Documentation\n\n### `useVal(pointerOrPrism)`\n\nA React hook that returns the value of the given prism or pointer.\n\nUsage with Dataverse pointers:\n\n```tsx\nimport {Atom} from '@theatre/dataverse'\nimport {useVal} from '@theatre/react'\n\nconst atom = new Atom({foo: 'foo'})\n\nfunction Component() {\n  const foo = useVal(atom.pointer.foo)\n  return <div>{foo}</div>\n}\n```\n\nUsage with Dataverse prisms:\n\n```tsx\nimport {prism} from '@theatre/dataverse'\nimport {useVal} from '@theatre/react'\n\nconst pr = prism(() => 'some value')\n\nfunction Component() {\n  const value = useVal(pr)\n  return <div>{value}</div>\n}\n```\n\nUsage with Theatre.js pointers:\n\n```tsx\nimport {useVal} from '@theatre/react'\nimport {getProject} from '@theatre/core'\n\nconst obj = getProject('my project')\n  .sheet('my sheet')\n  .object('my object', {foo: 'default value of props.foo'})\n\nfunction Component() {\n  const value = useVal(obj.props.foo)\n  return <div>obj.foo is {value}</div>\n}\n```\n\n_Note that `useVal()` is a React hook, so it can only be used inside a React\ncomponent's render function. `val()` on the other hand, can be used either\ninside a `prism` (which would be reactive) or anywhere where reactive values are\nnot needed._\n\n### `usePrism(fn, deps)`\n\nCreates a prism out of `fn` and subscribes the element to the value of the\ncreated prism.\n\n```tsx\nimport {Atom, val, prism} from '@theatre/dataverse'\nimport {usePrism} from '@theatre/react'\n\nconst state = new Atom({a: 1, b: 1})\n\nfunction Component(props: {which: 'a' | 'b'}) {\n  const value = usePrism(\n    () => {\n      prism.isPrism() // true\n      // note that this function is running inside a prism, so all of prism's\n      // hooks (prism.memo(), prism.effect(), etc) are available\n      const num = val(props.which === 'a' ? state.pointer.a : state.pointer.b)\n      return doExpensiveComputation(num)\n    },\n    // since our prism reads `props.which`, we should include it in the deps array\n    [props.which],\n  )\n  return <div>{value}</div>\n}\n```\n\n> Note that just like `useMemo(..., deps)`, it's necessary to provide a `deps`\n> array to `usePrism()`.\n\n### `usePrismInstance(prismInstance)`\n\nSubscribes the element to the value of the given prism instance.\n\n```tsx\nimport {Atom, val, prism} from '@theatre/dataverse'\nimport {usePrismInstance} from '@theatre/react'\n\nconst state = new Atom({a: 1, b: 1})\n\nconst p = prism(() => {\n  return val(state.pointer.a) + val(state.pointer.b)\n})\n\nfunction Component() {\n  const value = usePrismInstance(p)\n  return <div>{value}</div>\n}\n```\n\n### `useAtom(initialValue)`\n\n/\\*\\* Creates a new Atom, similar to useState(), but the component won't\nre-render if the value of the atom changes.\n\n```tsx\nimport {useAtom, useVal} from '@theatre/react'\nimport {useEffect} from 'react'\n\nfunction MyComponent() {\n  const atom = useAtom({count: 0, ready: false})\n\n  const onClick = () =>\n    atom.setByPointer(\n      (p) => p.count,\n      (count) => count + 1,\n    )\n\n  useEffect(() => {\n    setTimeout(() => {\n      atom.setByPointer((p) => p.ready, true)\n    }, 1000)\n  }, [])\n\n  const ready = useVal(atom.pointer.ready)\n  if (!ready) return <div>Loading...</div>\n  return <button onClick={onClick}>Click me</button>\n}\n```\n\n## Links\n\n- Learn more about [Dataverse](../dataverse/README.md)\n"
  },
  {
    "path": "packages/react/devEnv/api-extractor.json",
    "content": "/**\r\n * Config file for API Extractor.  For more info, please visit: https://api-extractor.com\r\n */\r\n{\r\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json\",\r\n\r\n  /**\r\n   * Optionally specifies another JSON config file that this file extends from.  This provides a way for\r\n   * standard settings to be shared across multiple projects.\r\n   *\r\n   * If the path starts with \"./\" or \"../\", the path is resolved relative to the folder of the file that contains\r\n   * the \"extends\" field.  Otherwise, the first path segment is interpreted as an NPM package name, and will be\r\n   * resolved using NodeJS require().\r\n   *\r\n   * SUPPORTED TOKENS: none\r\n   * DEFAULT VALUE: \"\"\r\n   */\r\n  \"extends\": \"../../../devEnv/api-extractor-base.json\",\r\n  // \"extends\": \"my-package/include/api-extractor-base.json\"\r\n\r\n  /**\r\n   * Determines the \"<projectFolder>\" token that can be used with other config file settings.  The project folder\r\n   * typically contains the tsconfig.json and package.json config files, but the path is user-defined.\r\n   *\r\n   * The path is resolved relative to the folder of the config file that contains the setting.\r\n   *\r\n   * The default value for \"projectFolder\" is the token \"<lookup>\", which means the folder is determined by traversing\r\n   * parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder\r\n   * that contains a tsconfig.json file.  If a tsconfig.json file cannot be found in this way, then an error\r\n   * will be reported.\r\n   *\r\n   * SUPPORTED TOKENS: <lookup>\r\n   * DEFAULT VALUE: \"<lookup>\"\r\n   */\r\n  \"projectFolder\": \"..\"\r\n}\r\n"
  },
  {
    "path": "packages/react/devEnv/api-extractor.tsconfig.json",
    "content": "{\n  \"$schema\": \"https://json.schemastore.org/tsconfig\",\n  \"extends\": \"../tsconfig.json\",\n  \"compilerOptions\": {\n    \"paths\": {}\n  }\n}\n"
  },
  {
    "path": "packages/react/devEnv/build.ts",
    "content": "import * as path from 'path'\nimport {build} from 'esbuild'\nimport type {Plugin} from 'esbuild'\n\nconst externalPlugin = (patterns: RegExp[]): Plugin => {\n  return {\n    name: `external`,\n\n    setup(build) {\n      build.onResolve({filter: /.*/}, (args) => {\n        const external = patterns.some((p) => {\n          return p.test(args.path)\n        })\n\n        if (external) {\n          return {path: args.path, external}\n        }\n      })\n    },\n  }\n}\n\nconst definedGlobals = {\n  global: 'window',\n}\n\nasync function createBundles(watch: boolean) {\n  const pathToPackage = path.join(__dirname, '../')\n  const esbuildConfig: Parameters<typeof build>[0] = {\n    entryPoints: [path.join(pathToPackage, 'src/index.ts')],\n    bundle: true,\n    sourcemap: true,\n    define: definedGlobals,\n    watch,\n    platform: 'neutral',\n    mainFields: ['browser', 'module', 'main'],\n    target: ['firefox57', 'chrome58'],\n    conditions: ['browser', 'node'],\n    plugins: [externalPlugin([/^[\\@a-zA-Z]+/])],\n  }\n\n  await build({\n    ...esbuildConfig,\n    outfile: path.join(pathToPackage, 'dist/index.js'),\n    format: 'cjs',\n  })\n\n  // build({\n  //   ...esbuildConfig,\n  //   outfile: path.join(pathToPackage, 'dist/index.mjs'),\n  //   format: 'esm',\n  // })\n}\n\nvoid createBundles(false)\n"
  },
  {
    "path": "packages/react/devEnv/tsconfig.json",
    "content": "{\n  \n}"
  },
  {
    "path": "packages/react/package.json",
    "content": "{\n  \"name\": \"@theatre/react\",\n  \"version\": \"0.7.0\",\n  \"license\": \"Apache-2.0\",\n  \"author\": {\n    \"name\": \"Aria Minaei\",\n    \"email\": \"aria@theatrejs.com\",\n    \"url\": \"https://github.com/AriaMinaei\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/AriaMinaei/theatre\",\n    \"directory\": \"packages/react\"\n  },\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"files\": [\n    \"dist/**/*\"\n  ],\n  \"scripts\": {\n    \"prepack\": \"node ../../devEnv/ensurePublishing.js\",\n    \"typecheck\": \"yarn run build\",\n    \"build\": \"run-s build:ts build:js build:api-json\",\n    \"build:ts\": \"tsc --build ./tsconfig.json\",\n    \"build:js\": \"tsx ./devEnv/build.ts\",\n    \"build:api-json\": \"api-extractor run --local --config devEnv/api-extractor.json\",\n    \"prepublish\": \"node ../../devEnv/ensurePublishing.js\",\n    \"clean\": \"rm -rf ./dist && rm -f tsconfig.tsbuildinfo\"\n  },\n  \"devDependencies\": {\n    \"@microsoft/api-extractor\": \"^7.18.11\",\n    \"@types/jest\": \"^26.0.23\",\n    \"@types/lodash-es\": \"^4.17.4\",\n    \"@types/node\": \"^15.6.2\",\n    \"@types/react\": \"^17.0.9\",\n    \"@types/react-dom\": \"^17.0.6\",\n    \"esbuild\": \"^0.12.15\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"tsx\": \"4.7.0\",\n    \"typescript\": \"5.1.6\"\n  },\n  \"dependencies\": {\n    \"@theatre/dataverse\": \"workspace:*\",\n    \"lodash-es\": \"^4.17.21\",\n    \"queue-microtask\": \"^1.2.3\"\n  },\n  \"peerDependencies\": {\n    \"react\": \"*\",\n    \"react-dom\": \"*\"\n  }\n}\n"
  },
  {
    "path": "packages/react/src/index.ts",
    "content": "/**\n * React bindings for dataverse.\n *\n * @packageDocumentation\n */\n\nimport type {Prism} from '@theatre/dataverse'\nimport {prism, val, Atom} from '@theatre/dataverse'\nimport {findIndex} from 'lodash-es'\nimport queueMicrotask from 'queue-microtask'\nimport {useCallback, useLayoutEffect, useRef, useState} from 'react'\nimport {unstable_batchedUpdates} from 'react-dom'\n\ntype $IntentionalAny = any\ntype VoidFn = () => void\n\n/**\n * Enables a few traces and debug points to help identify performance glitches in `@theatre/react`.\n * Look up references to this value to see how to make use of those traces.\n */\nconst TRACE: boolean = false && process.env.NODE_ENV !== 'production'\n\nfunction useForceUpdate(debugLabel?: string) {\n  const [, setTick] = useState(0)\n\n  const update = useCallback(() => {\n    setTick((tick) => tick + 1)\n  }, [])\n\n  return update\n}\n\n/**\n * A React hook that executes the callback function and returns its return value\n * whenever there's a change in the values of the dependency array, or in the\n * prisms that are used within the callback function.\n *\n * @param fn - The callback function\n * @param deps - The dependency array\n * @param debugLabel - The label used by the debugger\n *\n * @remarks\n *\n * A common mistake with `usePrism()` is not including its deps in its dependency array. Let's\n * have an eslint rule to catch that.\n */\nexport function usePrism<T>(\n  fn: () => T,\n  deps: unknown[],\n  debugLabel?: string,\n): T {\n  const refs = useRef<{\n    atom: Atom<typeof fn>\n    prism: Prism<T>\n    deps: unknown[]\n  }>()\n\n  if (!refs.current) {\n    refs.current = {\n      atom: new Atom(fn),\n      prism: prism(() => {\n        const fn = refs.current!.atom.prism.getValue()\n        return fn()\n      }),\n      deps,\n    }\n  } else {\n    if (deps.length !== refs.current.deps.length) {\n      refs.current.deps = deps\n      refs.current.atom.set(fn)\n    } else {\n      for (let i = 0; i < deps.length; i++) {\n        if (deps[i] !== refs.current.deps[i]) {\n          refs.current.deps = deps\n          refs.current.atom.set(fn)\n          break\n        }\n      }\n    }\n  }\n\n  return _usePrismStaticInstance(refs.current.prism, debugLabel)\n}\n\nexport const useVal: typeof val = (p: $IntentionalAny, debugLabel?: string) => {\n  return usePrism(() => val(p), [p], debugLabel)\n}\n\n/**\n * Each usePrism() call is assigned an `order`. Parents have a smaller\n * order than their children, and so on.\n */\nlet lastOrder = 0\n\n/**\n * A sorted array of prisms that need to be refreshed. The prisms are sorted\n * by their order, which means a parent prism always gets priority to children\n * and descendents. Ie. we refresh the prisms top to bottom.\n */\nconst queue: QueueItem[] = []\nconst setOfQueuedItems = new Set<QueueItem>()\n\ntype QueueItem<T = unknown> = {\n  order: number\n  /**\n   * runUpdate() is the equivalent of a forceUpdate() call. It would only be called\n   * if the value of the inner prism has _actually_ changed.\n   */\n  runUpdate: VoidFn\n  /**\n   * Some debugging info that are only present if {@link TRACE} is true\n   */\n  debug?: {\n    /**\n     * The `debugLabel` given to `usePrism()/usePrismInstance()`\n     */\n    label?: string\n    /**\n     * A trace of the first time the component got rendered\n     */\n    traceOfFirstTimeRender: Error\n    /**\n     * An array of the operations done on/about this usePrismInstance. This is helpful to trace\n     * why a usePrismInstance's update was added to the queue and why it re-rendered\n     */\n    history: Array<\n      /**\n       * Item reached its turn in the queue\n       */\n      | `queue reached`\n      /**\n       * Item reached its turn in the queue, and errored (likely something in `prism()` threw an error)\n       */\n      | `queue: der.getValue() errored`\n      /**\n       * The item was added to the queue (may be called multiple times, but will only queue once)\n       */\n      | `queueUpdate()`\n      /**\n       * `cb` in `item.der.onStale(cb)` was called\n       */\n      | `onStale(cb)`\n      /**\n       * Item was rendered\n       */\n      | `rendered`\n    >\n  }\n  /**\n   * A reference to the prism\n   */\n  der: Prism<T>\n  /**\n   * The last value of this prism.\n   */\n  lastValue: T\n  /**\n   * Would be set to true if the element hosting the `usePrismInstance()` was unmounted\n   */\n  unmounted: boolean\n  /**\n   * Adds the `usePrismInstance` to the update queue\n   */\n  queueUpdate: () => void\n  /**\n   * Untaps from `this.der.unStale()`\n   */\n  untap: () => void\n}\n\nlet microtaskIsQueued = false\n\nconst pushToQueue = (item: QueueItem) => {\n  _pushToQueue(item)\n  queueIfNeeded()\n}\n\nconst _pushToQueue = (item: QueueItem) => {\n  if (setOfQueuedItems.has(item)) return\n  setOfQueuedItems.add(item)\n\n  if (queue.length === 0) {\n    queue.push(item)\n  } else {\n    const index = findIndex(\n      queue,\n      (existingItem) => existingItem.order >= item.order,\n    )\n    if (index === -1) {\n      queue.push(item)\n    } else {\n      const right = queue[index]\n      if (right.order > item.order) {\n        queue.splice(index, 0, item)\n      }\n    }\n  }\n}\n\n/**\n * Plucks items from the queue\n */\nconst removeFromQueue = (item: QueueItem) => {\n  if (!setOfQueuedItems.has(item)) return\n  setOfQueuedItems.delete(item)\n\n  const index = findIndex(queue, (o) => o === item)\n  queue.splice(index, 1)\n}\n\nfunction queueIfNeeded() {\n  if (microtaskIsQueued) return\n  microtaskIsQueued = true\n\n  queueMicrotask(() => {\n    unstable_batchedUpdates(function runQueue() {\n      while (queue.length > 0) {\n        const item = queue.shift()!\n        setOfQueuedItems.delete(item)\n\n        let newValue\n        if (TRACE) {\n          item.debug?.history.push(`queue reached`)\n        }\n        try {\n          newValue = item.der.getValue()\n        } catch (error) {\n          if (TRACE) {\n            item.debug?.history.push(`queue: der.getValue() errored`)\n          }\n          console.error(\n            'A `der.getValue()` in `usePrismInstance(der)` threw an error. ' +\n              \"This may be a zombie child issue, so we're gonna try to get its value again in a normal react render phase.\" +\n              'If you see the same error again, then you either have an error in your prism code, or the deps array in `usePrism(fn, deps)` is missing ' +\n              'a dependency and causing the prism to read stale values.',\n          )\n          console.error(error)\n\n          item.runUpdate()\n\n          continue\n        }\n        if (newValue !== item.lastValue) {\n          item.lastValue = newValue\n          item.runUpdate()\n        }\n      }\n\n      microtaskIsQueued = false\n    }, 1)\n  })\n}\n\n/**\n * Like `usePrismInstance()`, but it expects the prism's instance to be\n * static and never change between renders.\n *\n * @param der - The prism\n * @param debugLabel - The label used by the debugger\n * @returns The value of the prism\n */\nexport function _usePrismStaticInstance<T>(\n  der: Prism<T>,\n  debugLabel?: string,\n): T {\n  const _forceUpdate = useForceUpdate(debugLabel)\n\n  const ref = useRef<QueueItem<T>>(undefined as $IntentionalAny)\n\n  if (!ref.current) {\n    lastOrder++\n\n    ref.current = {\n      order: lastOrder,\n      runUpdate: () => {\n        if (!ref.current.unmounted) {\n          _forceUpdate()\n        }\n      },\n      der,\n      lastValue: undefined as $IntentionalAny,\n      unmounted: false,\n      queueUpdate: () => {\n        if (TRACE) {\n          ref.current.debug?.history.push(`queueUpdate()`)\n        }\n        pushToQueue(ref.current)\n      },\n      untap: der.onStale(() => {\n        if (TRACE) {\n          ref.current.debug!.history.push(`onStale(cb)`)\n        }\n        ref.current!.queueUpdate()\n      }),\n    }\n\n    if (TRACE) {\n      ref.current.debug = {\n        label: debugLabel,\n        traceOfFirstTimeRender: new Error(),\n        history: [],\n      }\n    }\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (der !== ref.current.der) {\n      console.error(\n        'Argument `der` in `usePrismInstance(der)` should not change between renders.',\n      )\n    }\n  }\n\n  useLayoutEffect(() => {\n    return function onUnmount() {\n      ref.current.unmounted = true\n      ref.current.untap()\n      removeFromQueue(ref.current)\n    }\n  }, [])\n\n  // if we're queued but are rendering before our turn, remove us from the queue\n  removeFromQueue(ref.current)\n\n  const newValue = ref.current.der.getValue()\n  ref.current.lastValue = newValue\n\n  if (TRACE) {\n    ref.current.debug?.history.push(`rendered`)\n  }\n\n  return newValue\n}\n\n/**\n * A React hook that returns the value of the prism that it received as the first argument.\n * It works like an implementation of Dataverse's Ticker, except that it runs the side effects in\n * an order where a component's prism is guaranteed to run before any of its descendents' prisms.\n *\n * @param der - The prism\n * @param debugLabel - The label used by the debugger\n *\n * @remarks\n * It looks like this new implementation of usePrism() manages to:\n * 1. Not over-calculate the prisms\n * 2. Render prism in ancestor -\\> descendent order\n * 3. Not set off React's concurrent mode alarms\n *\n *\n * I'm happy with how little bookkeeping we ended up doing here.\n *\n * ---\n *\n * Notes on the latest implementation:\n *\n * # Remove cold prism reads\n *\n * Prior to the latest change, the first render of every `usePrismInstance()` resulted in a cold read of its inner prism.\n * Cold reads are predictably slow. The reason we'd run cold reads was to comply with react's rule of not running side-effects\n * during render. (Turning a prism hot is _technically_ a side-effect).\n *\n * However, now that users are animating scenes with hundreds of objects in the same sequence, the lag started to be noticable.\n *\n * This commit changes `usePrismInstance()` so that it turns its prism hot before rendering them.\n *\n * # Freshen prisms before render\n *\n * Previously in order to avoid the zombie child problem (https://kaihao.dev/posts/stale-props-and-zombie-children-in-redux)\n * we deferred freshening the prisms to the render phase of components. This meant that if a prism's dependencies\n * changed, `usePrismInstance()` would schedule a re-render, regardless of whether that change actually affected the prism's\n * value. Here is a contrived example:\n *\n * ```ts\n * const num = new Box(1)\n * const isPositiveD = prism(() => num.prism.getValue() >= 0)\n *\n * const Comp = () => {\n *   return <div>{usePrismInstance(isPositiveD)}</div>\n * }\n *\n * num.set(2) // would cause Comp to re-render- even though 1 is still a positive number\n * ```\n *\n * We now avoid this problem by freshening the prism (i.e. calling `der.getValue()`) inside `runQueue()`,\n * and then only causing a re-render if the prism's value is actually changed.\n *\n * This still avoids the zombie-child problem because `runQueue` reads the prisms in-order of their position in\n * the mounting tree.\n *\n * On the off-chance that one of them still turns out to be a zombile child, `runQueue` will defer that particular\n * `usePrismInstance()` to be read inside a normal react render phase.\n */\nexport function usePrismInstance<T>(der: Prism<T>, debugLabel?: string): T {\n  return usePrism(() => der.getValue(), [der], debugLabel)\n}\n\n/**\n * Creates a new Atom, similar to useState(), but the component\n * won't re-render if the value of the atom changes.\n *\n * @param initialState - Initial state\n * @returns The Atom\n *\n * @example\n *\n * Usage\n * ```tsx\n * import {useAtom, useVal} from '@theatre/react'\n * import {useEffect} from 'react'\n *\n * function MyComponent() {\n *   const atom = useAtom({count: 0, ready: false})\n *\n *   const onClick = () =>\n *     atom.setByPointer(\n *       (p) => p.count,\n *       (count) => count + 1,\n *     )\n *\n *   useEffect(() => {\n *     setTimeout(() => {\n *       atom.setByPointer((p) => p.ready, true)\n *     }, 1000)\n *   }, [])\n *\n *   const ready = useVal(atom.pointer.ready)\n *   if (!ready) return <div>Loading...</div>\n *   return <button onClick={onClick}>Click me</button>\n * }\n * ```\n */\nexport function useAtom<T>(initialState: T): Atom<T> {\n  const ref = useRef<Atom<T>>(undefined as $IntentionalAny)\n  if (!ref.current) {\n    ref.current = new Atom(initialState)\n  }\n  return ref.current\n}\n"
  },
  {
    "path": "packages/react/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \"src\",\n    \"types\": [\"jest\", \"node\"],\n    \"emitDeclarationOnly\": true,\n    \"target\": \"es6\",\n    \"composite\": true\n  },\n  \"include\": [\"./src/**/*\"],\n  \"references\": [{\"path\": \"../dataverse\"}]\n}\n"
  },
  {
    "path": "packages/saaz/.gitignore",
    "content": "/dist"
  },
  {
    "path": "packages/saaz/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "packages/saaz/README.md",
    "content": "# Saaz\n"
  },
  {
    "path": "packages/saaz/devEnv/api-extractor.json",
    "content": "/**\r\n * Config file for API Extractor.  For more info, please visit: https://api-extractor.com\r\n */\r\n{\r\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json\",\r\n\r\n  /**\r\n   * Optionally specifies another JSON config file that this file extends from.  This provides a way for\r\n   * standard settings to be shared across multiple projects.\r\n   *\r\n   * If the path starts with \"./\" or \"../\", the path is resolved relative to the folder of the file that contains\r\n   * the \"extends\" field.  Otherwise, the first path segment is interpreted as an NPM package name, and will be\r\n   * resolved using NodeJS require().\r\n   *\r\n   * SUPPORTED TOKENS: none\r\n   * DEFAULT VALUE: \"\"\r\n   */\r\n  \"extends\": \"../../../devEnv/api-extractor-base.json\",\r\n  // \"extends\": \"my-package/include/api-extractor-base.json\"\r\n\r\n  /**\r\n   * Determines the \"<projectFolder>\" token that can be used with other config file settings.  The project folder\r\n   * typically contains the tsconfig.json and package.json config files, but the path is user-defined.\r\n   *\r\n   * The path is resolved relative to the folder of the config file that contains the setting.\r\n   *\r\n   * The default value for \"projectFolder\" is the token \"<lookup>\", which means the folder is determined by traversing\r\n   * parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder\r\n   * that contains a tsconfig.json file.  If a tsconfig.json file cannot be found in this way, then an error\r\n   * will be reported.\r\n   *\r\n   * SUPPORTED TOKENS: <lookup>\r\n   * DEFAULT VALUE: \"<lookup>\"\r\n   */\r\n  \"projectFolder\": \"..\"\r\n}\r\n"
  },
  {
    "path": "packages/saaz/devEnv/api-extractor.tsconfig.json",
    "content": "{\n  \"$schema\": \"https://json.schemastore.org/tsconfig\",\n  \"extends\": \"../tsconfig.json\"\n}\n"
  },
  {
    "path": "packages/saaz/devEnv/build.ts",
    "content": "import * as path from 'path'\nimport {build} from 'esbuild'\n\nconst definedGlobals = {}\n\nfunction createBundles(watch: boolean) {\n  const pathToPackage = path.join(__dirname, '../')\n  const esbuildConfig: Parameters<typeof build>[0] = {\n    entryPoints: [path.join(pathToPackage, 'src/index.ts')],\n    bundle: true,\n    sourcemap: true,\n    define: definedGlobals,\n    watch,\n    platform: 'neutral',\n    mainFields: ['browser', 'module', 'main'],\n    target: ['firefox57', 'chrome58'],\n    conditions: ['browser', 'node'],\n  }\n\n  void build({\n    ...esbuildConfig,\n    outfile: path.join(pathToPackage, 'dist/index.js'),\n    format: 'cjs',\n  })\n\n  // build({\n  //   ...esbuildConfig,\n  //   outfile: path.join(pathToPackage, 'dist/index.mjs'),\n  //   format: 'esm',\n  // })\n}\n\ncreateBundles(false)\n"
  },
  {
    "path": "packages/saaz/devEnv/tsconfig.json",
    "content": "{\n  \n}"
  },
  {
    "path": "packages/saaz/package.json",
    "content": "{\n  \"name\": \"@theatre/saaz\",\n  \"version\": \"0.7.0\",\n  \"license\": \"Apache-2.0\",\n  \"author\": {\n    \"name\": \"Aria Minaei\",\n    \"email\": \"aria@theatrejs.com\",\n    \"url\": \"https://github.com/AriaMinaei\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/theatre-js/theatre\",\n    \"directory\": \"packages/saaz\"\n  },\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"files\": [\n    \"dist/**/*\"\n  ],\n  \"scripts\": {\n    \"prepack\": \"node ../../devEnv/ensurePublishing.js\",\n    \"typecheck\": \"yarn run build:ts\",\n    \"build\": \"run-s build:ts build:js build:api-json\",\n    \"build:ts\": \"tsc --build ./tsconfig.json\",\n    \"build:js\": \"tsx ./devEnv/build.ts\",\n    \"build:api-json\": \"api-extractor run --local --config devEnv/api-extractor.json\",\n    \"prepublish\": \"node ../../devEnv/ensurePublishing.js\",\n    \"clean\": \"rm -rf ./dist && rm -f tsconfig.tsbuildinfo\",\n    \"docs\": \"typedoc src/index.ts --out api --plugin typedoc-plugin-markdown --readme none\",\n    \"precommit\": \"yarn run docs\"\n  },\n  \"devDependencies\": {\n    \"@microsoft/api-extractor\": \"^7.36.4\",\n    \"@theatre/dataverse\": \"workspace:*\",\n    \"@theatre/utils\": \"workspace:*\",\n    \"@types/jest\": \"^26.0.23\",\n    \"@types/lodash-es\": \"^4.17.4\",\n    \"@types/node\": \"^15.6.2\",\n    \"esbuild\": \"^0.12.15\",\n    \"fast-deep-equal\": \"^3.1.3\",\n    \"immer\": \"^9.0.6\",\n    \"jest-diff\": \"^29.6.4\",\n    \"lodash-es\": \"^4.17.21\",\n    \"nanoid\": \"^4.0.2\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"tsx\": \"4.7.0\",\n    \"typedoc\": \"^0.24.8\",\n    \"typedoc-plugin-markdown\": \"^3.15.4\",\n    \"typescript\": \"5.1.6\"\n  },\n  \"dependencies\": {\n    \"idb\": \"^7.1.1\"\n  }\n}\n"
  },
  {
    "path": "packages/saaz/src/__snapshots__/rogue.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Rogue merging defaults 1`] = `\n{\n  \"a\": {\n    \"aStep\": 1,\n    \"bStep\": 1,\n    \"foo\": \"setBy1\",\n    \"obj\": {\n      \"objA\": \"true\",\n      \"objB\": \"true\",\n    },\n  },\n}\n`;\n\nexports[`Rogue overriding an existing prop 1`] = `\n[\n  {\n    \"branchName\": \"base\",\n    \"path\": [\n      [\n        \"base\",\n        \"a\",\n      ],\n    ],\n    \"type\": \"SetBoxedValue\",\n    \"value\": 2,\n  },\n]\n`;\n\nexports[`Rogue setting a non-existing prop 1`] = `\n[\n  {\n    \"$branches\": {\n      \"base\": {\n        \"$mapProps\": {\n          \"a\": {\n            \"$branches\": {\n              \"base\": {\n                \"$boxedValue\": 1,\n              },\n            },\n            \"$type\": [\n              \"boxed\",\n              \"base\",\n            ],\n          },\n        },\n      },\n    },\n    \"$type\": [\n      \"map\",\n      \"base\",\n    ],\n  },\n  [\n    {\n      \"path\": [\n        [\n          \"base\",\n          \"a\",\n        ],\n      ],\n      \"type\": \"ChangeType\",\n      \"value\": [\n        \"boxed\",\n        \"base\",\n      ],\n    },\n    {\n      \"branchName\": \"base\",\n      \"path\": [\n        [\n          \"base\",\n          \"a\",\n        ],\n      ],\n      \"type\": \"SetBoxedValue\",\n      \"value\": 1,\n    },\n  ],\n]\n`;\n\nexports[`Rogue setting a non-existing prop to an object 1`] = `\n[\n  {\n    \"$branches\": {\n      \"base\": {\n        \"$mapProps\": {\n          \"a\": {\n            \"$branches\": {\n              \"base\": {\n                \"$mapProps\": {\n                  \"b\": {\n                    \"$branches\": {\n                      \"base\": {\n                        \"$boxedValue\": 1,\n                      },\n                    },\n                    \"$type\": [\n                      \"boxed\",\n                      \"base\",\n                    ],\n                  },\n                },\n              },\n            },\n            \"$type\": [\n              \"map\",\n              \"base\",\n            ],\n          },\n        },\n      },\n    },\n    \"$type\": [\n      \"map\",\n      \"base\",\n    ],\n  },\n  [\n    {\n      \"path\": [\n        [\n          \"base\",\n          \"a\",\n        ],\n      ],\n      \"type\": \"ChangeType\",\n      \"value\": [\n        \"map\",\n        \"base\",\n      ],\n    },\n    {\n      \"path\": [\n        [\n          \"base\",\n          \"a\",\n        ],\n        [\n          \"base\",\n          \"b\",\n        ],\n      ],\n      \"type\": \"ChangeType\",\n      \"value\": [\n        \"boxed\",\n        \"base\",\n      ],\n    },\n    {\n      \"branchName\": \"base\",\n      \"path\": [\n        [\n          \"base\",\n          \"a\",\n        ],\n        [\n          \"base\",\n          \"b\",\n        ],\n      ],\n      \"type\": \"SetBoxedValue\",\n      \"value\": 1,\n    },\n  ],\n]\n`;\n"
  },
  {
    "path": "packages/saaz/src/back/BackMemoryAdapter.ts",
    "content": "import type {$IntentionalAny, BackStorageAdapter} from '../types'\n\nexport class BackMemoryAdapter implements BackStorageAdapter {\n  private _state: {\n    lists: {\n      [key in string]?: Array<{id: string}>\n    }\n    singularValues: {\n      [key in string]?: unknown\n    }\n  } = {lists: {}, singularValues: {}}\n\n  export(): unknown {\n    return this._state\n  }\n\n  constructor(state?: unknown) {\n    if (state) {\n      this._state = state as $IntentionalAny\n    }\n  }\n\n  async get<T>(key: string): Promise<T | void> {\n    return this._state.singularValues[key] as T | void\n  }\n\n  async set<T>(key: string, value: T): Promise<void> {\n    this._state.singularValues[key] = value\n  }\n\n  async pushToList<T extends {id: string}>(\n    key: string,\n    rows: T[],\n  ): Promise<void> {\n    if (!this._state.lists[key]) {\n      this._state.lists[key] = []\n    }\n    const list = this._state.lists[key]!\n    if (list.some((row) => rows.some((r) => r.id === row.id))) {\n      throw new Error(\n        `Cannot push to list \"${key}\" because one or more rows already exist`,\n      )\n    }\n    list.push(...rows)\n  }\n\n  async getList<T extends {id: string}>(key: string): Promise<T[]> {\n    if (!this._state.lists[key]) {\n      return []\n    }\n    return this._state.lists[key]! as $IntentionalAny\n  }\n\n  async pluckFromList<T extends {id: string}>(\n    key: string,\n    ids: string[],\n  ): Promise<Array<T | undefined>> {\n    if (!this._state.lists[key]) {\n      return []\n    }\n    const list = this._state.lists[key]!\n    return ids.map((id) => {\n      const index = list.findIndex((row) => row.id === id)\n      if (index === -1) {\n        return undefined\n      } else {\n        const row = list[index]\n        list.splice(index, 1)\n        return row as T\n      }\n    })\n  }\n}\n"
  },
  {
    "path": "packages/saaz/src/back/BackStorage.ts",
    "content": "import {defer} from '@theatre/utils/defer'\nimport type {BackStorageAdapter, Transaction} from '../types'\n\nexport class BackStorage {\n  private _readyD = defer()\n  constructor(opts: {dbName: string; storageAdapter: BackStorageAdapter}) {\n    this._readyD.resolve(void 0)\n  }\n\n  get ready() {\n    return this._readyD.promise\n  }\n\n  async pushToJournal(opts: {\n    dbName: string\n    clock: number\n    jsonDiff: unknown\n    peerId: string\n    peerClockFrom: number\n    peerClockTo: number\n    timestamp: number\n    transactions: Transaction[]\n  }) {}\n}\n"
  },
  {
    "path": "packages/saaz/src/back/SaazBack.ts",
    "content": "import {defer} from '@theatre/utils/defer'\nimport {applyOptimisticUpdateToState} from '../shared/transactions'\nimport type {\n  BackApplyUpdateOps,\n  SaazBackInterface,\n  BackStorageAdapter,\n  BackGetUpdateSinceClockResult,\n  Schema,\n  $IntentionalAny,\n  PeerSubscribeCallback,\n  AllPeersPresenceState,\n  PeerPresenceState,\n  FullSnapshot,\n} from '../types'\nimport {BackStorage} from './BackStorage'\nimport type {DebouncedFunc} from 'lodash-es'\nimport {cloneDeep, throttle} from 'lodash-es'\nimport {ensureStateIsUptodate as ensureOpStateIsUptodate} from '../shared/utils'\nimport {Atom} from '@theatre/dataverse'\nimport deepEqual from '@theatre/utils/deepEqual'\n\nexport default class SaazBack implements SaazBackInterface {\n  private _dbName: string\n  private _storage: BackStorage\n  private _readyDeferred = defer<void>()\n  private _dbState: FullSnapshot<$IntentionalAny> = {cell: {}, op: {}}\n  private _clock: number | null = null\n  private _peerStates: {\n    [peerId in string]?: {\n      lastIncorporatedPeerClock: number\n    }\n  } = {}\n  private _subsribers: Array<PeerSubscribeCallback> = []\n  private _schema: Schema<{$schemaVersion: number}>\n  private _presenceState: Atom<AllPeersPresenceState> = new Atom({})\n  private _schedulePresenseUpdate: DebouncedFunc<() => void>\n\n  constructor(opts: {\n    dbName: string\n    storageAdapter: BackStorageAdapter\n    schema: Schema<$IntentionalAny>\n  }) {\n    this._schema = opts.schema\n    this._dbName = opts.dbName\n    this._storage = new BackStorage({\n      dbName: opts.dbName,\n      storageAdapter: opts.storageAdapter,\n    })\n\n    void this._storage.ready.then(() => {\n      this._readyDeferred.resolve()\n    })\n\n    this._schedulePresenseUpdate = throttle(\n      () => {\n        this._callSubscribersForPresenceUpdate()\n      },\n      1000 / 30,\n      {leading: true},\n    )\n\n    this._schedulePresenseUpdate.cancel()\n  }\n\n  get ready() {\n    return this._readyDeferred.promise\n  }\n\n  get isReady(): boolean {\n    return this._readyDeferred.status === 'resolved'\n  }\n\n  async getUpdatesSinceClock(opts: {\n    clock: number | null\n    peerId: string\n  }): Promise<BackGetUpdateSinceClockResult> {\n    await this._readyDeferred.promise\n    return this._getUpdatesSinceClockSync(opts)\n  }\n\n  async applyUpdates(\n    opts: BackApplyUpdateOps,\n  ): Promise<\n    ({ok: true} & BackGetUpdateSinceClockResult) | {ok: false; error: unknown}\n  > {\n    await this._readyDeferred.promise\n    return this._applyUpdatesSync(cloneDeep(opts))\n  }\n\n  async subscribe(\n    opts: {\n      peerId: string\n    },\n    onUpdate: PeerSubscribeCallback,\n  ): Promise<() => void> {\n    await this._readyDeferred.promise\n    return this._subscribeSync(cloneDeep(opts), onUpdate)\n  }\n\n  private _getUpdatesSinceClockSync(opts: {\n    clock: number | null\n    peerId: string\n  }): BackGetUpdateSinceClockResult {\n    if (!this.ready) {\n      throw new Error('Backend is not ready')\n    }\n\n    const lastIncorporatedPeerClock =\n      this._peerStates[opts.peerId]?.lastIncorporatedPeerClock ?? null\n\n    const clock = this._clock ?? -1\n    const {peerId} = opts\n\n    if ((opts.clock ?? -1) === clock) {\n      return {hasUpdates: false, peerId, clock, lastIncorporatedPeerClock}\n    }\n\n    return {\n      hasUpdates: true,\n      clock,\n      lastIncorporatedPeerClock,\n      peerId,\n      snapshot: {\n        type: 'Snapshot',\n        value: this._dbState,\n      },\n    }\n  }\n\n  async getLastIncorporatedPeerClock(opts: {\n    peerId: string\n  }): Promise<{lastIncorporatedPeerClock: number | null; peerId: string}> {\n    await this._readyDeferred.promise\n    return {\n      peerId: opts.peerId,\n      lastIncorporatedPeerClock:\n        this._peerStates[opts.peerId]?.lastIncorporatedPeerClock ?? null,\n    }\n  }\n\n  async closePeer(opts: {peerId: string}): Promise<{ok: boolean}> {\n    delete this._peerStates[opts.peerId]\n    return {ok: true}\n  }\n\n  async updatePresence(opts: {\n    peerId: string\n    presence: PeerPresenceState\n  }): Promise<{ok: true} | {ok: false; error: unknown}> {\n    await this._readyDeferred.promise\n    return this._updatePresenceSync(cloneDeep(opts))\n  }\n\n  private _updatePresenceSync(opts: {\n    peerId: string\n    presence: PeerPresenceState\n  }): {ok: true} | {ok: false; error: unknown} {\n    if (!this.ready) {\n      throw new Error('Backend is not ready')\n    }\n\n    if (!deepEqual(this._presenceState.get()[opts.peerId], opts.presence)) {\n      this._presenceState.setByPointer((p) => p[opts.peerId], opts.presence)\n      this._schedulePresenseUpdate()\n    }\n\n    return {ok: true}\n  }\n\n  private _applyUpdatesSync(\n    opts: BackApplyUpdateOps,\n  ):\n    | ({ok: true} & BackGetUpdateSinceClockResult)\n    | {ok: false; error: unknown} {\n    if (!this.ready) {\n      throw new Error('Backend is not ready')\n    }\n\n    if (opts.updates.length === 0) {\n      return {\n        ok: true,\n        ...this._getUpdatesSinceClockSync({\n          clock: opts.backendClock,\n          peerId: opts.peerId,\n        }),\n      }\n    }\n\n    if (!this._peerStates[opts.peerId]) {\n      this._peerStates[opts.peerId] = {\n        lastIncorporatedPeerClock: -1,\n      }\n    }\n    const peerState = this._peerStates[opts.peerId]!\n\n    // const rebasing = opts.backendClock !== this._clock\n\n    let snapshotSoFar = ensureOpStateIsUptodate(this._dbState, this._schema)\n    let lastAcknowledgedClock = peerState.lastIncorporatedPeerClock\n    let backendClock = this._clock ?? -1\n\n    // const updatesToIncorporate = []\n\n    for (const update of opts.updates) {\n      if (peerState.lastIncorporatedPeerClock >= update.peerClock) {\n        continue\n      }\n\n      const snapshotBefore = snapshotSoFar\n      const [opSnapshotAfter] = applyOptimisticUpdateToState(\n        update,\n        snapshotBefore,\n        this._schema,\n        true,\n      )\n      snapshotSoFar = opSnapshotAfter\n      lastAcknowledgedClock = update.peerClock\n      backendClock++\n    }\n\n    if (lastAcknowledgedClock !== peerState.lastIncorporatedPeerClock) {\n      this._dbState = snapshotSoFar\n      peerState.lastIncorporatedPeerClock = lastAcknowledgedClock\n      this._clock = backendClock\n      this._callSubscribersForBackendStateUpdate()\n      // TODO: save individual updates to storage\n    }\n\n    const s = this._getUpdatesSinceClockSync({\n      clock: opts.backendClock,\n      peerId: opts.peerId,\n    })\n\n    return {\n      ok: true,\n      ...s,\n    }\n  }\n\n  private _subscribeSync(\n    opts: {peerId: string},\n    onUpdate: PeerSubscribeCallback,\n  ): () => void {\n    this._subsribers.push(onUpdate)\n    let unsubscribed = false\n    const unsub = () => {\n      if (unsubscribed) return\n      unsubscribed = true\n      const i = this._subsribers.indexOf(onUpdate)\n      if (i !== -1) {\n        this._subsribers.splice(i, 1)\n      }\n    }\n    return unsub\n  }\n\n  private _callSubscribersForBackendStateUpdate() {\n    this._schedulePresenseUpdate.cancel()\n    for (const sub of this._subsribers) {\n      sub({presence: this._presenceState.get(), shouldCheckForUpdates: true})\n    }\n  }\n\n  private _callSubscribersForPresenceUpdate() {\n    this._schedulePresenseUpdate.cancel()\n    for (const sub of this._subsribers) {\n      sub({presence: this._presenceState.get(), shouldCheckForUpdates: false})\n    }\n  }\n}\n"
  },
  {
    "path": "packages/saaz/src/front/FrontIdbAdapter.ts",
    "content": "import type {IDBPTransaction} from 'idb'\nimport {openDB} from 'idb'\nimport type {\n  FrontStorageAdapterTransaction,\n  FrontStorageAdapter,\n} from '../types'\n\ntype SingularValue<T> = {\n  sessionAndKey: string\n  session: string\n  value: T\n  key: string\n}\ntype ListItem<V> = {\n  sessionAndKeyAndId: `${string}/${string}/${string}`\n  session: string\n  value: V\n  key: string\n  sessionAndKey: `${string}/${string}`\n}\n\nexport class FrontIDBAdapter implements FrontStorageAdapter {\n  constructor(\n    private _idbName: string,\n    private _currentSessionName: string,\n  ) {}\n\n  private _dbPromise = this._initializeDB()\n\n  async _initializeDB() {\n    return openDB(this._idbName, 1, {\n      upgrade(db) {\n        const singularValueStore = db.createObjectStore('singularValues', {\n          keyPath: 'sessionAndKey',\n        })\n\n        singularValueStore.createIndex('session', 'session')\n\n        const listsStore = db.createObjectStore('lists', {\n          keyPath: 'sessionAndKeyAndId',\n        })\n\n        listsStore.createIndex('session', 'session')\n        listsStore.createIndex('sessionAndKey', 'sessionAndKey')\n      },\n    })\n  }\n\n  get ready() {\n    return this._dbPromise\n  }\n\n  async transaction<T>(\n    fn: (opts: FrontStorageAdapterTransaction) => Promise<T>,\n  ): Promise<T> {\n    const db = await this.ready\n    const tx = db.transaction(['singularValues', 'lists'], 'readwrite')\n    const t = new IDBTransaction(tx)\n    return await fn(t)\n  }\n\n  async get<T>(key: string, session: string): Promise<T | void> {\n    return await this.transaction(({get}) => get(key, session))\n  }\n\n  async getList<T extends {id: string}>(\n    key: string,\n    session: string,\n  ): Promise<T[]> {\n    return await this.transaction(({getList}) => getList(key, session))\n  }\n}\n\nclass IDBTransaction implements FrontStorageAdapterTransaction {\n  constructor(private _tx: IDBPTransaction<unknown, string[], 'readwrite'>) {}\n\n  async get<T>(key: string, session: string): Promise<T | void> {\n    const sessionAndKey = `${session}/${key}`\n    const store = this._tx.objectStore('singularValues')\n\n    const v = (await store.get(sessionAndKey)) as SingularValue<T>\n    return v?.value\n  }\n\n  async getAll<T>(key: string): Promise<Record<string, T>> {\n    const index = this._tx.objectStore('singularValues').index('session')\n    const all: Array<SingularValue<T>> = await index.getAll()\n\n    const record: Record<string, T> = {}\n\n    for (const row of all) {\n      record[row.session] = row.value\n    }\n\n    return record\n  }\n\n  async set<T>(key: string, value: T, session: string): Promise<void> {\n    const sessionAndKey = `${session}/${key}`\n    const store = this._tx.objectStore('singularValues')\n    const s: SingularValue<T> = {\n      sessionAndKey: sessionAndKey,\n      value,\n      session,\n      key,\n    }\n\n    await store.put(s)\n  }\n\n  async deleteSession(session: string): Promise<void> {\n    {\n      const store = this._tx.objectStore('singularValues')\n      const index = store.index('session')\n      const sessionIndex = await index.getAllKeys(session)\n\n      for (const key of sessionIndex) {\n        await store.delete(key)\n      }\n    }\n\n    const listsStore = this._tx.objectStore('lists')\n    const listsIndex = listsStore.index('session')\n    const listsSessionIndex = await listsIndex.getAllKeys(session)\n\n    for (const key of listsSessionIndex) {\n      await listsStore.delete(key)\n    }\n  }\n\n  async pushToList<T extends {id: string}>(\n    key: string,\n    rows: T[],\n    session: string,\n  ): Promise<void> {\n    const store = this._tx.objectStore('lists')\n\n    for (const row of rows) {\n      const listItem: ListItem<T> = {\n        key,\n        session,\n        value: row,\n        sessionAndKeyAndId: `${session}/${key}/${row.id}`,\n        sessionAndKey: `${session}/${key}`,\n      }\n\n      const existingItem = await store.get(listItem.sessionAndKeyAndId)\n      if (existingItem) {\n        throw new Error(\n          `Cannot push to list \"${key}\" because an entry with id \"${row.id}\" already exists`,\n        )\n      }\n\n      // Save the row with key and id properties\n      await store.put(listItem)\n    }\n  }\n\n  async getList<T extends {id: string}>(\n    key: string,\n    session: string,\n  ): Promise<T[]> {\n    const store = this._tx.objectStore('lists')\n    const keyIndex = store.index('sessionAndKey')\n    const sessionAndKey = `${session}/${key}`\n    const all = await keyIndex.getAll(sessionAndKey)\n\n    return all.map((s) => s.value)\n  }\n\n  async pluckFromList<T extends {id: string}>(\n    key: string,\n    ids: string[],\n    session: string,\n  ): Promise<Array<T | undefined>> {\n    const store = this._tx.objectStore('lists')\n\n    const results: Array<T | undefined> = []\n    for (const id of ids) {\n      const sessionAndKeyAndId = `${session}/${key}/${id}`\n      const item = await store.get(sessionAndKeyAndId)\n      if (item) {\n        results.push(item.value as T)\n        await store.delete(item)\n      } else {\n        results.push(undefined)\n      }\n    }\n\n    return results\n  }\n}\n"
  },
  {
    "path": "packages/saaz/src/front/FrontMemoryAdapter.ts",
    "content": "import type {Draft} from 'immer'\nimport {createDraft, current, finishDraft} from 'immer'\nimport type {$IntentionalAny, FrontStorageAdapterTransaction} from '../types'\nimport type {FrontStorageAdapter} from '../types'\nimport {defer} from '@theatre/utils/defer'\n\nexport class FrontMemoryAdapter implements FrontStorageAdapter {\n  private _state: {\n    sessions: {\n      [key in string]?: {\n        lists: {\n          [key in string]?: Array<{id: string}>\n        }\n        keyval: {\n          [key in string]?: unknown\n        }\n      }\n    }\n  } = {sessions: {}}\n\n  private _readyDeferred = defer<void>()\n  private _lastTransactionPromise: Promise<void> = Promise.resolve()\n\n  export(): unknown {\n    return this._state\n  }\n\n  constructor(state?: unknown) {\n    if (state) {\n      this._state = state as $IntentionalAny\n    }\n    // nothing to initialize, so just resolve the promise\n    this._readyDeferred.resolve()\n  }\n\n  get ready() {\n    return this._readyDeferred.promise\n  }\n\n  async transaction<T>(\n    fn: (opts: FrontStorageAdapterTransaction) => Promise<T>,\n  ): Promise<T> {\n    const deferred = defer<void>()\n    const oldTransactionPromise = this._lastTransactionPromise\n    this._lastTransactionPromise = deferred.promise\n    try {\n      await oldTransactionPromise\n    } catch (err) {\n      // ignore the error. it'll be handled elsewhere\n    }\n\n    await this.ready\n    const originalState = this._state\n    const draft = createDraft(originalState)\n    const t = new Transaction(draft)\n    try {\n      const result = await fn(t)\n\n      this._state = finishDraft(draft)\n      return result\n    } catch (error) {\n      throw error\n    } finally {\n      deferred.resolve()\n    }\n  }\n\n  async get<T>(key: string, session: string): Promise<T | void> {\n    return await this.transaction(({get}) => get(key, session))\n  }\n\n  async getList<T extends {id: string}>(\n    key: string,\n    session: string,\n  ): Promise<T[]> {\n    return await this.transaction(({getList}) => getList(key, session))\n  }\n}\n\nclass Transaction implements FrontStorageAdapterTransaction {\n  constructor(private _draft: Draft<FrontMemoryAdapter['_state']>) {}\n\n  async get<T>(key: string, session: string): Promise<T | void> {\n    return current(this._draft.sessions[session]?.keyval)?.[key] as T | void\n  }\n\n  async set<T>(key: string, value: T, session: string): Promise<void> {\n    this._draft.sessions[session] ??= {keyval: {}, lists: {}}\n    const s = this._draft.sessions[session]!\n    s.keyval[key] = value\n  }\n\n  async getAll<T>(key: string): Promise<Record<string, T>> {\n    const vals: Record<string, T> = {}\n\n    for (const [sessionId, v] of Object.entries(this._draft.sessions)) {\n      if (!v) continue\n      if (Object.hasOwn(v.keyval, key)) {\n        const value: T | undefined = v.keyval[key] as $IntentionalAny\n        if (value === undefined) continue\n        vals[sessionId] = value\n      }\n    }\n\n    return vals\n  }\n\n  async deleteSession(session: string): Promise<void> {\n    delete this._draft.sessions[session]\n  }\n\n  async pushToList<T extends {id: string}>(\n    key: string,\n    rows: T[],\n    session: string,\n  ): Promise<void> {\n    this._draft.sessions[session] ??= {keyval: {}, lists: {}}\n    const s = this._draft.sessions[session]!\n\n    if (!s.lists[key]) {\n      s.lists[key] = []\n    }\n    const list = s.lists[key]!\n    if (list.some((row) => rows.some((r) => r.id === row.id))) {\n      throw new Error(\n        `Cannot push to list \"${key}\" because one or more rows already exist`,\n      )\n    }\n    list.push(...rows)\n  }\n\n  async getList<T extends {id: string}>(\n    key: string,\n    session: string,\n  ): Promise<T[]> {\n    const s = this._draft.sessions[session]\n    if (!s?.lists[key]) {\n      return []\n    }\n    return current(s?.lists)[key]! as $IntentionalAny\n  }\n\n  async pluckFromList<T extends {id: string}>(\n    key: string,\n    ids: string[],\n    session: string,\n  ): Promise<Array<T | undefined>> {\n    this._draft.sessions[session] ??= {keyval: {}, lists: {}}\n    const s = this._draft.sessions[session]!\n\n    if (!s.lists[key]) {\n      return []\n    }\n    const list = s.lists[key]!\n    return ids.map((id) => {\n      const index = list.findIndex((row) => row.id === id)\n      if (index === -1) {\n        return undefined\n      } else {\n        const row = list[index]\n        list.splice(index, 1)\n        return row as T\n      }\n    })\n  }\n}\n"
  },
  {
    "path": "packages/saaz/src/front/FrontStorage.ts",
    "content": "import type {\n  $IntentionalAny,\n  SessionState,\n  FrontStorageAdapterTransaction,\n  Transaction,\n} from '../types'\nimport type {FrontStorageAdapter} from '../types'\n\nexport class FrontStorage {\n  constructor(\n    readonly dbName: string,\n    private readonly _adapter: FrontStorageAdapter,\n  ) {}\n\n  async transaction<T>(fn: (opts: FrontStorageTransaction) => Promise<T>) {\n    return await this._adapter.transaction(async (adapterOpts) => {\n      const t = new FrontStorageTransactionImpl(adapterOpts)\n      return await fn(t)\n    })\n  }\n}\n\nclass FrontStorageTransactionImpl {\n  constructor(private _adapterTransaction: FrontStorageAdapterTransaction) {}\n\n  async setSessionState(s: SessionState<unknown>, session: string) {\n    // TODO: serializing the state every time this changes probably wastes IO.\n    // better to create a writeahead log and compact it every once in a while\n    await this._adapterTransaction.set('sessionState', s, session)\n  }\n\n  async getSessionState(\n    session: string,\n  ): Promise<SessionState<unknown> | undefined> {\n    const v = this._adapterTransaction.get('sessionState', session)\n    return v as $IntentionalAny\n  }\n\n  async deleteSession(session: string): Promise<void> {\n    await this._adapterTransaction.deleteSession(session)\n  }\n\n  async getMostRecentlySyncedSessionState(): Promise<\n    SessionState<unknown> | undefined\n  > {\n    const allSessionStates =\n      this._adapterTransaction.getAll<SessionState<unknown>>('sessionState')\n    let latest: SessionState<unknown> | undefined\n    for (const [peerId, sessionState] of Object.entries(allSessionStates)) {\n      if (\n        typeof sessionState.backendClock === 'number' &&\n        sessionState.backendClock > (latest?.backendClock ?? -1)\n      ) {\n        latest = sessionState\n      }\n    }\n\n    return latest\n  }\n\n  async getOptimisticUpdates(session: string): Promise<Transaction[]> {\n    const s = await this._adapterTransaction.getList<{\n      id: string\n      transaction: Transaction\n    }>('optimisticUpdates', session)\n    return s.map((t) => t.transaction)\n  }\n\n  async pluckOptimisticUpdates(\n    transactions: Pick<Transaction, 'peerClock'>[],\n    session: string,\n  ): Promise<void> {\n    await this._adapterTransaction.pluckFromList(\n      'optimisticUpdates',\n      transactions.map(({peerClock}) => '#' + peerClock),\n      session,\n    )\n  }\n\n  async getAllExistingSessionIds(): Promise<string[]> {\n    const all = await this._adapterTransaction.getAll('session')\n    return Object.keys(all)\n  }\n\n  async pushOptimisticUpdates(\n    transactions: Transaction[],\n    session: string,\n  ): Promise<void> {\n    await this._adapterTransaction.pushToList<{\n      id: string\n      transaction: Transaction\n    }>(\n      'optimisticUpdates',\n      transactions.map((t) => ({\n        id: '#' + t.peerClock,\n        transaction: t,\n      })),\n      session,\n    )\n  }\n}\n\nexport type FrontStorageTransaction = FrontStorageTransactionImpl\n"
  },
  {
    "path": "packages/saaz/src/front/SaazFront.ts",
    "content": "import type {\n  $IntentionalAny,\n  AllPeersPresenceState,\n  BackGetUpdateSinceClockResult,\n  SessionState,\n  FullSnapshot,\n  SaazBackInterface,\n  Schema,\n  TempTransaction,\n  TempTransactionApi,\n  Transaction,\n  ValidOpSnapshot,\n} from '../types'\nimport type {ValidGenerators, EditorDefinitionToEditorInvocable} from '../types'\nimport type {OnDiskSnapshot} from '../types'\nimport type {FrontStorageAdapter} from '../types'\nimport {\n  applyOptimisticUpdateToState,\n  recordInvokations,\n} from '../shared/transactions'\nimport {FrontStorage} from './FrontStorage'\nimport {ensureStateIsUptodate} from '../shared/utils'\nimport {debounce} from 'lodash-es'\nimport type {Prism} from '@theatre/dataverse'\nimport {Atom, prism, val} from '@theatre/dataverse'\nimport waitForPrism from '@theatre/utils/waitForPrism'\nimport {subscribeDebounced} from '@theatre/utils/subscribeDebounced'\nimport fastDeepEqual from 'fast-deep-equal'\nimport {diff} from 'jest-diff'\nimport type {Ops} from '../rogue'\nimport {jsonFromCell, makeDraft} from '../rogue'\nimport memoizeFn from '@theatre/utils/memoizeFn'\nimport {nanoid} from 'nanoid'\nimport {defer} from '@theatre/utils/defer'\nimport type {VoidFn} from '@theatre/utils/types'\n\nconst emptyObject = {}\nconst MAX_UNDO_STACK_SIZE = 1000\nconst PEERID_LENGTH = 32\nconst LOCK_PREFIX = 'theatrejs-saaz-closed-session-lock/'\n\ntype UndoStackItem = {\n  forwardOps: Ops\n  backwardOps: Ops\n}\n\ntype SessionLock = {\n  peerId: string\n  unlock: VoidFn\n}\n\ntype AtomState<OpSnapshot extends ValidOpSnapshot, CellShape extends {}> = {\n  /**\n   * The queue of optimistic updates that have not been acknowledged by the backend yet. As soon as\n   * the backend acknowledges an update, it will be removed from this queue.\n   */\n  optimisticUpdatesQueue: Transaction[]\n  sessionState: SessionState<OpSnapshot> | null\n  emptySnapshot: FullSnapshot<OpSnapshot>\n  tempTransactions: TempTransaction[]\n  allPeersPresenceState: AllPeersPresenceState\n  initialized: boolean\n  /**\n   * This is a mirror of the frontend state _as it is stored_ on the front storage.\n   * We can use this to determine if the front storage is up to date.\n   */\n  frontStorageStateMirror: {\n    backendState: SessionState<OpSnapshot> | null\n    optimisticUpdatesQueue: Transaction[]\n  }\n  peerClock: number\n  closedSessions: ClosedSession[]\n  undoRedo: {\n    // the stack is a list of transactions that can be undone. The first item is the most recent transaction.\n    stack: UndoStackItem[]\n    // 0 means no undo has been called since the last transaction.\n    cursor: number\n  }\n}\n\nexport class SaazFront<\n  OpSnapshot extends ValidOpSnapshot,\n  Editors extends {},\n  Generators extends ValidGenerators,\n  CellShape extends {} = {},\n> {\n  /**\n   * Using an atom here so we can react to changes to its state\n   */\n  private readonly _atom: Atom<AtomState<OpSnapshot, CellShape>>\n  /**\n   * The initial snapshot that was saved to disk, and provided as opts.initialSnapshot to the constructor\n   */\n  private readonly _diskSnapshot: OnDiskSnapshot<OpSnapshot> | null\n  /**\n   * The peer id of this frontend. It is supposed to be unique per-tab, and globally. If there are more than\n   * one Saaz instance per tab, then each should have its own peer id. Better to generate this via UUID.\n   *\n   * Note that the backend will associate the peerId with the user's account to make sure the peerId cannot\n   * be stolen.\n   *\n   * Each user account may have many peerIds associated with it (the user may have multiple tabs, or multiple devices open at the same time).\n   *\n   * The backend will periodically garbage-collect the peerIds that have not been used for a while. In the off-chance that a peerId is garbage-collected\n   * on the backend but the frontend still has it, the frontend will generate a new peerId and use that instead.\n   */\n  private readonly _peerId: string\n  /**\n   * The name of the database. This is used to namespace the keys in the storage adapter.\n   */\n  private _dbName: string\n  /**\n   * The storage adapter that the frontend uses to store its state. The storage is meant to allow the user to work offline\n   * and be able to close the tab and reopen it later and continue working.\n   */\n  private _storage: FrontStorage\n  /**\n   * A promise that resolves when the frontend is ready to be used. This is the same as the promise returned by the ready getter.\n   */\n  private _initializedPromise: Promise<unknown>\n\n  /**\n   * The backend that the frontend communicates with. In environments where the backend and the frontend are in the same process,\n   * then a reference to SaazBack can be passed here. This is useful for testing.\n   *\n   * In environments where the backend and the frontend are in different processes (a client/server setup), an object that\n   * implements `SaazBackInterface` should be passed here. See `@theatre/sync-server` for a TRPC-based implementation.\n   */\n  private _backend: SaazBackInterface\n\n  /**\n   * The schema includes the shape of the snapshot, a nested object of editors, and a shallow object of generator functions.\n   */\n  private readonly _schema: Schema<OpSnapshot, Editors, Generators>\n\n  /**\n   * A counter that is used to generate unique ids for temp transactions.\n   */\n  private _tempTransactionCounter: number = 0\n\n  /**\n   * A list of functions that will be called when the frontend is destroyed.\n   */\n  private _teardownCallbacks: (() => void)[] = []\n\n  /**\n   * We use dataverse prisms to derive several values from the atom. This makes the reactive parts of the code easier to maintain.\n   */\n  private _prisms: {\n    base: Prism<FullSnapshot<OpSnapshot>>\n    /**\n     * The state as it is on the backend, plus all the optimistic updates that have not been acknowledged by the backend yet.\n     */\n    optimisticState: Prism<FullSnapshot<OpSnapshot>>\n    /**\n     * This is optimisticState (see above), plus the temp transactions.\n     */\n    withTemps: Prism<FullSnapshot<OpSnapshot>>\n    /**\n     * This is withTemps (see above), plus the temp transactions of all the peers.\n     */\n    withPeers: Prism<FullSnapshot<OpSnapshot>>\n\n    /**\n     * The number of optimistic updates that have not been acknowledged by the backend yet.\n     * If this is 0, then the backend has received all the updates that the frontend has sent.\n     * This doesn't mean that the backend has processed all the updates yet.\n     * It also doesn't mean the frontend has received all the updates from other peers through the backend.\n     */\n    countOfUnpushedUpdatesToBackend: Prism<number>\n\n    /**\n     * A prism that resolves to true if the frontend has synced to _its own storage_. This means\n     * that if the user closes the tab or the session crashes, and navigates back to the page,\n     * the frontend will be able to restore its state from the storage.\n     */\n    allSyncedToFrontStorage: Prism<boolean>\n  } = {\n    base: prism<FullSnapshot<OpSnapshot>>(() => {\n      return (\n        val(this._atom.pointer.sessionState.snapshot) ??\n        val(this._atom.pointer.emptySnapshot)\n      )\n    }),\n    optimisticState: prism<FullSnapshot<OpSnapshot>>(() => {\n      const base = this._prisms.base.getValue()\n      let stateSoFar = base\n      // this may become a bottleneck\n      const closedSessions = val(this._atom.pointer.closedSessions)\n      for (const session of closedSessions) {\n        for (const update of session.optimisticUpdates) {\n          stateSoFar = this._cachedApplyTransactionToState(\n            update,\n            base,\n            stateSoFar,\n          )\n        }\n      }\n\n      const optimisticUpdates = val(this._atom.pointer.optimisticUpdatesQueue)\n\n      const lastIncorporatedPeerClock =\n        val(this._atom.pointer.sessionState.lastIncorporatedPeerClock) ?? -1\n\n      for (const update of optimisticUpdates) {\n        // if the update has already been incorporated into the backend state, skip it (it'll be garbage collected soon)\n        if (update.peerClock <= lastIncorporatedPeerClock) continue\n\n        stateSoFar = this._cachedApplyTransactionToState(\n          update,\n          base,\n          stateSoFar,\n        )\n      }\n\n      return stateSoFar\n    }),\n\n    withTemps: prism<FullSnapshot<OpSnapshot>>(() => {\n      let currentState = this._prisms.optimisticState.getValue()\n      const temps = val(this._atom.pointer.tempTransactions)\n      for (const temp of temps) {\n        ;[currentState] = applyOptimisticUpdateToState(\n          temp,\n          currentState,\n          this._schema,\n          true,\n        )\n      }\n      return currentState\n    }),\n\n    withPeers: prism<FullSnapshot<OpSnapshot>>(() => {\n      let currentState = this._prisms.withTemps.getValue()\n      for (const [peerId, presence] of Object.entries(\n        val(this._atom.pointer.allPeersPresenceState),\n      )) {\n        if (peerId === this._peerId) continue\n        if (!presence) continue\n\n        for (const temp of presence.tempTransactions) {\n          ;[currentState] = applyOptimisticUpdateToState(\n            temp,\n            currentState,\n            this._schema,\n            true,\n          )\n        }\n      }\n      return currentState\n    }),\n\n    countOfUnpushedUpdatesToBackend: prism<number>(() => {\n      return val(this._atom.pointer.optimisticUpdatesQueue).length\n    }),\n\n    allSyncedToFrontStorage: prism<boolean>(() => {\n      // if not initialized, then we're not synced\n      if (!val(this._atom.pointer.initialized)) return false\n\n      // backendClock as of the last time the front communicated with the backend\n      const backendClock =\n        val(this._atom.pointer.sessionState.backendClock) ?? -1\n      // backendClock as of the last time we stored the backend's state in the front storage\n      const lastStoredBackendClock =\n        val(\n          this._atom.pointer.frontStorageStateMirror.backendState.backendClock,\n        ) ?? -1\n\n      // if we haven't yet stored the backend's state in the front storage, return false\n      if (backendClock !== lastStoredBackendClock) return false\n\n      // TODO: how about closed sessions?\n\n      const outstandingUpdates = val(this._atom.pointer.optimisticUpdatesQueue)\n      const storedUpdates = val(\n        this._atom.pointer.frontStorageStateMirror.optimisticUpdatesQueue,\n      )\n\n      if (outstandingUpdates.length === 0) {\n        // there are no outstanding optimistic updates (they're all incorporated into the backend state),\n        // so we can assume that the front storage is up to date. Note that front storage may not have\n        // gartbage collected the old updates yet, but that's ok. they'll be garbage collected eventually.\n        return true\n      }\n\n      const lastOutstandingUpdate =\n        outstandingUpdates[outstandingUpdates.length - 1]\n      const lastStoredUpdate = storedUpdates[storedUpdates.length - 1]\n\n      if (\n        lastStoredUpdate &&\n        lastStoredUpdate.peerClock === lastOutstandingUpdate.peerClock\n      ) {\n        // the last outstanding update is the same as the last stored update, so we can assume that the front storage is up to date.\n        return true\n      } else {\n        // the front storage has yet to catch up\n        return false\n      }\n    }),\n  }\n\n  private _caches = {\n    transactionToState: new WeakMap<\n      Transaction,\n      {\n        before: FullSnapshot<OpSnapshot>\n        after: FullSnapshot<OpSnapshot>\n        base: FullSnapshot<OpSnapshot>\n      }\n    >(),\n  }\n\n  constructor(opts: {\n    schema: Schema<OpSnapshot, Editors, Generators, CellShape>\n    backend: SaazBackInterface\n    diskSnapshot?: OnDiskSnapshot<OpSnapshot>\n    peerId?: string\n    dbName: string\n    storageAdapter: FrontStorageAdapter\n    /**\n     * If true (default), the frontend will keep the prisms hot. This is a perf optimization\n     */\n    keepPrismsHot?: boolean\n  }) {\n    if (opts.diskSnapshot) {\n      this._diskSnapshot = {\n        ...opts.diskSnapshot,\n        snapshot: ensureStateIsUptodate(\n          opts.diskSnapshot.snapshot,\n          opts.schema,\n        ),\n      }\n    } else {\n      this._diskSnapshot = null\n    }\n    this._atom = new Atom<AtomState<OpSnapshot, CellShape>>({\n      optimisticUpdatesQueue: [],\n      emptySnapshot: ensureStateIsUptodate(null, opts.schema),\n      sessionState: null,\n      tempTransactions: [],\n      allPeersPresenceState: emptyObject,\n      initialized: false,\n      frontStorageStateMirror: {\n        backendState: null,\n        optimisticUpdatesQueue: [],\n      },\n      peerClock: -1,\n      closedSessions: [],\n      undoRedo: {\n        stack: [],\n        cursor: 0,\n      },\n    })\n\n    this._initializedPromise = waitForPrism(\n      prism(() => val(this._atom.pointer.initialized)),\n      (v) => v === true,\n    )\n\n    if (opts.keepPrismsHot !== false) {\n      this._teardownCallbacks.push(this._prisms.withPeers.keepHot())\n    }\n\n    this._schema = opts.schema\n    this._peerId = opts.peerId ?? nanoid(PEERID_LENGTH)\n    this._backend = opts.backend\n    this._dbName = opts.dbName\n    this._storage = new FrontStorage(this._dbName, opts.storageAdapter)\n\n    void this._init()\n  }\n\n  private async _init() {\n    await this._loadClosedSessions()\n\n    // The most recent backend state that one of the closed sessions has cached.\n    // We can use this until we get the first update from the backend\n    const cachedBackendState: SessionState<unknown> | undefined =\n      await this._storage.transaction(async (t) =>\n        t.getMostRecentlySyncedSessionState(),\n      )\n\n    // this will create the database and start a transaction\n    await this._storage.transaction(async (t) => {\n      const initialSnapshot = this._diskSnapshot\n      if (!cachedBackendState) {\n        // there are no closed/crashed sessions that have a backend state.\n        this._setSessionState({\n          backendClock: initialSnapshot?.clock ?? null,\n          lastIncorporatedPeerClock: null,\n          lastSyncTime: null,\n          snapshot: initialSnapshot?.snapshot ?? null,\n          peerId: this._peerId,\n        })\n      } else {\n        if (initialSnapshot) {\n          // TODO\n          throw new Error(`Not implemented`)\n        } else {\n          this._atom.setByPointer((p) => p.sessionState, {\n            lastSyncTime: null,\n            backendClock: cachedBackendState.backendClock ?? null,\n            lastIncorporatedPeerClock: null,\n            peerId: this._peerId,\n            snapshot: ensureStateIsUptodate<OpSnapshot>(\n              cachedBackendState.snapshot as $IntentionalAny,\n              this._schema,\n            ),\n          })\n        }\n      }\n\n      this._atom.setByPointer((p) => p.initialized, true)\n    })\n\n    this._teardownCallbacks.push(\n      this._subscribeToBackend(),\n      this._reflectBackendStateToStorage(),\n      this._reflectOptimisticUpdatesToStorage(),\n      this._reflectPresenceToBackend(),\n      this._removeStalePeerPresenceStates(),\n      this._reflectUpdatesToBackend(),\n      this._gcClosedSessions(),\n    )\n  }\n\n  private async _loadClosedSessions() {\n    // in case there are crashed/closed sesions that haven't synced\n    // with backend yet, let's take them over\n    const closedSessionsLocks = await this._acquireLocksOnClosedSessions()\n\n    const closedSessions: ClosedSession[] = await this._storage.transaction(\n      async (t) =>\n        await Promise.all(\n          closedSessionsLocks.map(\n            async (closedSessionLock): Promise<ClosedSession> => {\n              return {\n                optimisticUpdates: await t.getOptimisticUpdates(\n                  closedSessionLock.peerId,\n                ),\n                peerId: closedSessionLock.peerId,\n                lastIncorporatedPeerClock: null,\n              }\n            },\n          ),\n        ),\n    )\n\n    this._atom.setByPointer((p) => p.closedSessions, closedSessions)\n  }\n\n  private async _acquireLocksOnClosedSessions(): Promise<Array<SessionLock>> {\n    const allPeerIds: string[] = await this._storage.transaction(async (t) =>\n      t.getAllExistingSessionIds(),\n    )\n\n    const all: Array<SessionLock | undefined> = await Promise.all(\n      allPeerIds.map(async (peerId) => {\n        try {\n          const d = defer<undefined | SessionLock>()\n          void navigator.locks.request(\n            LOCK_PREFIX + peerId,\n            {\n              mode: 'exclusive',\n              ifAvailable: true,\n              steal: false,\n            },\n            async (lock) => {\n              if (!lock) {\n                d.resolve(undefined)\n                return\n              }\n\n              const unlockDeferred = defer<void>()\n\n              let locked = true\n\n              d.resolve({\n                peerId,\n                unlock: () => {\n                  if (!locked) return\n                  locked = false\n                  unlockDeferred.resolve()\n                },\n              })\n\n              await unlockDeferred.promise\n            },\n          )\n\n          return d.promise\n        } catch (error) {\n          return undefined\n        }\n      }),\n    )\n\n    return all.filter((v): v is SessionLock => !!v)\n  }\n\n  teardown(): void {\n    for (const cb of this._teardownCallbacks) {\n      cb()\n    }\n    this._teardownCallbacks.length = 0\n  }\n\n  private _removeStalePeerPresenceStates() {\n    const schedule = debounce(() => {\n      this._atom.setByPointer((p) => p.allPeersPresenceState, emptyObject)\n    }, 1000 * 15)\n    return this._atom.onChangeByPointer(\n      (p) => p.allPeersPresenceState,\n      schedule,\n    )\n  }\n\n  private _reflectPresenceToBackend() {\n    let lastTempTransactions: TempTransaction[] = []\n    let lastUpdateSent: number = 0\n\n    return subscribeDebounced(\n      this._atom.pointer.tempTransactions,\n      async (tempTransactions) => {\n        const now = Date.now()\n        if (\n          !fastDeepEqual(tempTransactions, lastTempTransactions) ||\n          now - lastUpdateSent > 1000 * 5\n        ) {\n          lastTempTransactions = tempTransactions\n          lastUpdateSent = now\n          void this._backend.updatePresence({\n            peerId: this._peerId,\n            presence: {tempTransactions},\n          })\n        }\n        await new Promise((resolve) => setTimeout(resolve, 30))\n      },\n    )\n  }\n\n  private _reflectUpdatesToBackend() {\n    const p = prism<{\n      peerId: string\n      // lastIncorporatedPeerClock: number | null\n      updates: Transaction[]\n    }>(() => {\n      const closedSessions = val(this._atom.pointer.closedSessions)\n      for (const closedSession of closedSessions) {\n        const updatesLeftToPush = closedSession.optimisticUpdates.filter(\n          (update) =>\n            update.peerClock > (closedSession.lastIncorporatedPeerClock ?? -1),\n        )\n        if (updatesLeftToPush.length > 0) {\n          return {\n            peerId: closedSession.peerId,\n            lastIncorporatedPeerClock:\n              closedSession.lastIncorporatedPeerClock ?? -1,\n            updates: updatesLeftToPush,\n          }\n        }\n      }\n\n      // no closed sessions left to sync. let's sync the current session\n\n      const lastIncorporatedPeerClock =\n        val(this._atom.pointer.sessionState.lastIncorporatedPeerClock) ?? -1\n\n      const updatesLeftToPush = val(\n        this._atom.pointer.optimisticUpdatesQueue,\n      ).filter((update) => update.peerClock > lastIncorporatedPeerClock)\n\n      return {\n        updates: updatesLeftToPush,\n        lastIncorporatedPeerClock,\n        peerId: this._peerId,\n      }\n    })\n\n    return subscribeDebounced(p, async ({updates, peerId}) => {\n      if (updates.length === 0) return\n      const backendClock = val(this._atom.pointer.sessionState.backendClock) as\n        | number\n        | null\n\n      try {\n        const res = await this._backend.applyUpdates({\n          backendClock,\n          peerId,\n          updates,\n        })\n\n        if (res.ok) {\n          this._processBackendUpdate(res)\n        } else {\n          console.error(res.error)\n          throw new Error('Backend rejected optimistic update')\n        }\n      } catch (errs) {\n        console.error(errs)\n      }\n    })\n  }\n\n  private _processBackendUpdate(s: BackGetUpdateSinceClockResult) {\n    const originalBackendState = this._atom.get().sessionState\n    if (!originalBackendState) {\n      throw new Error('backend state not initialized')\n    }\n\n    if (!s.hasUpdates) {\n      this._setSessionState({\n        ...originalBackendState,\n        lastSyncTime: Date.now(),\n        peerId: s.peerId,\n        lastIncorporatedPeerClock: s.lastIncorporatedPeerClock,\n      })\n      return\n    } else {\n      const {snapshot} = s\n      if (snapshot.type !== 'Snapshot') {\n        throw new Error('Non-snapshot updates not implemented')\n      }\n      this._setSessionState({\n        backendClock: s.clock,\n        lastIncorporatedPeerClock: s.lastIncorporatedPeerClock,\n        lastSyncTime: Date.now(),\n        snapshot: snapshot.value,\n        peerId: s.peerId,\n      })\n    }\n  }\n\n  private _reflectBackendStateToStorage() {\n    return subscribeDebounced(\n      this._atom.pointer.sessionState,\n      async (backendState) => {\n        if (!backendState) return\n\n        try {\n          await this._storage.transaction(async (t) => {\n            await t.setSessionState(backendState, this._peerId)\n          })\n          this._atom.setByPointer(\n            (p) => p.frontStorageStateMirror.backendState,\n            backendState,\n          )\n        } catch (error) {\n          console.error(error)\n        }\n      },\n    )\n  }\n\n  private _gcClosedSessions() {\n    return subscribeDebounced(\n      this._atom.pointer.closedSessions,\n      async (closedSessions) => {\n        const sessionsWithNoUpdates = closedSessions.filter(\n          (s) => s.optimisticUpdates.length === 0,\n        )\n        for (const emptySession of sessionsWithNoUpdates) {\n          this._atom.reduceByPointer(\n            (p) => p.closedSessions,\n            (a) => a.filter((c) => c.peerId !== emptySession.peerId),\n          )\n          await this._storage.transaction(async (t) => {\n            await t.deleteSession(emptySession.peerId)\n          })\n          void this._backend.closePeer({peerId: emptySession.peerId})\n        }\n      },\n    )\n  }\n\n  private _reflectOptimisticUpdatesToStorage() {\n    return subscribeDebounced(\n      this._atom.pointer.optimisticUpdatesQueue,\n      async (memory) => {\n        const last =\n          this._atom.get().frontStorageStateMirror.optimisticUpdatesQueue\n        if (memory.length === 0 && last.length === 0) return\n\n        const toPush: Transaction[] = []\n        const toPluck: Transaction[] = []\n\n        for (const transacion of memory) {\n          const existing = last.find(\n            (t) => t.peerClock === transacion.peerClock,\n          )\n          if (!existing) {\n            toPush.push(transacion)\n          } else {\n            toPluck.push(existing)\n          }\n        }\n\n        try {\n          await this._storage.transaction(async (t) => {\n            await t.pushOptimisticUpdates(toPush, this._peerId)\n            await t.pluckOptimisticUpdates(toPluck, this._peerId)\n          })\n          this._atom.setByPointer(\n            (p) => p.frontStorageStateMirror.optimisticUpdatesQueue,\n            memory,\n          )\n        } catch (error) {\n          console.error(error)\n          return\n        }\n      },\n    )\n  }\n\n  private _cachedApplyTransactionToState(\n    transaction: Transaction,\n    base: FullSnapshot<OpSnapshot>,\n    before: FullSnapshot<OpSnapshot>,\n  ): FullSnapshot<OpSnapshot> {\n    let cache = this._caches.transactionToState.get(transaction)\n    if (cache) {\n      if (cache.before === before) {\n        return cache.after\n      }\n    }\n    const [after] = applyOptimisticUpdateToState(\n      transaction,\n      before,\n      this._schema,\n      true,\n    )\n    if (!cache) {\n      cache = {before: before, after: after, base}\n      this._caches.transactionToState.set(transaction, cache)\n    } else {\n      cache.before = before\n      cache.after = after\n      cache.base = base\n    }\n\n    return after\n  }\n\n  _setSessionState(opts: SessionState<OpSnapshot>) {\n    const s = {\n      ...opts,\n      value: ensureStateIsUptodate(opts.snapshot, this._schema),\n    }\n\n    if (s.peerId === this._peerId) {\n      this._atom.setByPointer((p) => p.sessionState, s)\n\n      // let's GC the updates the backend has incorporated\n      const lastAcknowledgedPeerClock = s.lastIncorporatedPeerClock ?? -1\n\n      const existingQueue = this._atom.get().optimisticUpdatesQueue\n      if (\n        existingQueue.length > 0 &&\n        existingQueue[0].peerClock <= lastAcknowledgedPeerClock\n      ) {\n        const newQueue = existingQueue.filter(\n          (update) => update.peerClock > lastAcknowledgedPeerClock,\n        )\n        this._atom.setByPointer((p) => p.optimisticUpdatesQueue, newQueue)\n      }\n    } else {\n      // the session state comes from an update belonging to a different session. let's update the\n      // snapshot/backendClock and other relevant bits, but keep peerId and lastIncorporatedPeerClock unchanged\n      this._atom.reduceByPointer(\n        (p) => p.sessionState,\n        (oldSessionstate): SessionState<OpSnapshot> => {\n          return {\n            backendClock: s.backendClock,\n            lastSyncTime: s.lastSyncTime,\n            peerId: this._peerId,\n            lastIncorporatedPeerClock:\n              oldSessionstate?.lastIncorporatedPeerClock ?? null,\n            snapshot: s.snapshot,\n          }\n        },\n      )\n      const lastAcknowledgedPeerClock = s.lastIncorporatedPeerClock ?? -1\n      const index = this._atom\n        .get()\n        .closedSessions.findIndex((s) => s.peerId === this._peerId)\n      if (index === -1) return\n\n      const closedSession = this._atom.get().closedSessions[index]\n\n      if (!closedSession) {\n        return\n      }\n\n      const existingQueue = closedSession.optimisticUpdates\n      if (\n        existingQueue.length > 0 &&\n        existingQueue[0].peerClock <= lastAcknowledgedPeerClock\n      ) {\n        const newQueue = existingQueue.filter(\n          (update) => update.peerClock > lastAcknowledgedPeerClock,\n        )\n        this._atom.setByPointer((p) => p.closedSessions[index], {\n          optimisticUpdates: newQueue,\n          lastIncorporatedPeerClock: s.lastIncorporatedPeerClock,\n          peerId: s.peerId,\n        })\n      }\n    }\n  }\n\n  private async _pullUpdatesFromBackend(): Promise<void> {\n    const originalBackendState = this._atom.get().sessionState\n    if (!originalBackendState) {\n      throw new Error('backend state not initialized')\n    }\n\n    const s = await this._backend.getUpdatesSinceClock({\n      clock: originalBackendState.backendClock ?? null,\n      peerId: this._peerId,\n    })\n\n    this._processBackendUpdate(s)\n  }\n\n  private _subscribeToBackend(): () => void {\n    void this._pullUpdatesFromBackend()\n    const stop = this._backend.subscribe(\n      {\n        peerId: this._peerId,\n      },\n      async (s) => {\n        if (s.shouldCheckForUpdates) {\n          void this._pullUpdatesFromBackend().catch((err) => {\n            console.error(err)\n          })\n        }\n        this._atom.setByPointer((p) => p.allPeersPresenceState, s.presence)\n      },\n    )\n\n    const unsub = () => {\n      void stop.then((s) => stop)\n    }\n\n    return unsub\n  }\n\n  get state(): {op: OpSnapshot; cell: CellShape} {\n    return finalState(this._prisms.withPeers.getValue()) as $IntentionalAny\n  }\n\n  get isReady(): boolean {\n    return this._atom.get().initialized === true\n  }\n\n  get ready(): Promise<unknown> {\n    return this._initializedPromise\n  }\n\n  tx(\n    editorFn?: (editors: EditorDefinitionToEditorInvocable<Editors>) => void,\n    draftFn?: (cellDraft: CellShape) => void,\n    undoable: boolean = true,\n  ): void {\n    const [update, isEmpty, backwardOps] = this._createTransaction(\n      this._prisms.optimisticState.getValue(),\n      editorFn,\n      draftFn,\n    )\n    if (isEmpty) return\n    this._pushOptimisticUpdate(update, undoable ? backwardOps : [])\n  }\n\n  tempTx(\n    editorFn?: (editors: EditorDefinitionToEditorInvocable<Editors>) => void,\n    draftFn?: (cellDraft: CellShape) => void,\n    existingTempTransaction?: TempTransactionApi<Editors, CellShape>,\n  ): TempTransactionApi<Editors, CellShape> {\n    if (existingTempTransaction) {\n      existingTempTransaction.recapture(editorFn, draftFn)\n      return existingTempTransaction\n    }\n    const [o, originalIsEmpty, originalBackwardOps] = this._createTransaction(\n      this._prisms.optimisticState.getValue(),\n      editorFn,\n      draftFn,\n    )\n\n    const originalTransaction: TempTransaction = {\n      ...o,\n      tempId: this._tempTransactionCounter++,\n      backwardOps: originalBackwardOps,\n    }\n\n    this._setTempTransaction(originalTransaction.tempId, originalTransaction)\n\n    let currentTransaction: TempTransaction = originalTransaction\n    let currentIsEmpty: boolean = originalIsEmpty\n\n    let transactionState: 'alive' | 'committed' | 'discarded' = 'alive'\n\n    const commit = (undoable: boolean = true): void => {\n      if (transactionState !== 'alive') {\n        throw new Error('Transaction is already ' + transactionState)\n      }\n      transactionState = 'committed'\n      this._setTempTransaction(originalTransaction.tempId, undefined)\n      if (currentIsEmpty) return\n\n      const finalUpdate = {...currentTransaction}\n\n      this._pushOptimisticUpdate(\n        finalUpdate,\n        undoable ? currentTransaction.backwardOps : [],\n      )\n    }\n    const discard = (): void => {\n      if (transactionState !== 'alive') {\n        throw new Error('Transaction is already ' + transactionState)\n      }\n      transactionState = 'discarded'\n      this._setTempTransaction(originalTransaction.tempId, undefined)\n    }\n    const recapture = (\n      editorFn?: (editors: EditorDefinitionToEditorInvocable<Editors>) => void,\n      draftFn?: (cellDraft: CellShape) => void,\n    ): void => {\n      if (transactionState !== 'alive') {\n        throw new Error('Transaction is already ' + transactionState)\n      }\n      const [update, newIsEmpty, backwardOps] = this._createTransaction(\n        this._prisms.optimisticState.getValue(),\n        editorFn,\n        draftFn,\n      )\n\n      const newTransaction: TempTransaction = {\n        ...update,\n        tempId: originalTransaction.tempId,\n        backwardOps,\n      }\n      currentTransaction = newTransaction\n      currentIsEmpty = newIsEmpty\n      this._setTempTransaction(originalTransaction.tempId, newTransaction)\n    }\n\n    const reset = (): void => {\n      if (transactionState !== 'alive') {\n        throw new Error('Transaction is already ' + transactionState)\n      }\n\n      this._setTempTransaction(originalTransaction.tempId, undefined)\n    }\n\n    return {commit, discard: discard, recapture, reset}\n  }\n\n  private _setTempTransaction(\n    id: number,\n    transaction: TempTransaction | undefined,\n  ): void {\n    const prev = this._atom.get().tempTransactions\n    const existingIndex = prev.findIndex((t) => t.tempId === id)\n    const next = [...prev]\n\n    let changed = false\n    if (existingIndex > -1) {\n      next.splice(existingIndex, 1)\n      changed = true\n    }\n    if (transaction) {\n      if (existingIndex > -1) {\n        next.splice(existingIndex, 0, transaction)\n        changed = true\n      } else {\n        next.push(transaction)\n        changed = true\n      }\n    }\n\n    if (changed) {\n      this._atom.setByPointer((p) => p.tempTransactions, next)\n    }\n  }\n\n  private _createTransaction(\n    fullSnapshot: FullSnapshot<OpSnapshot>,\n    editorFn?: (editors: EditorDefinitionToEditorInvocable<Editors>) => void,\n    draftFn?: (draft: CellShape) => void,\n    warnIfNoInvokations: boolean = false,\n  ): [\n    udpate: Omit<Transaction, 'peerClock'>,\n    isEmpty: boolean,\n    backwardOps: Ops,\n  ] {\n    const invokations = editorFn\n      ? recordInvokations(this._schema.editors, editorFn)\n      : []\n\n    if (invokations.length === 0) {\n      if (warnIfNoInvokations && editorFn)\n        console.info(`Transaction didn't invoke any editors. It's a no-op.`)\n    }\n    let backwardOps: Ops = []\n\n    let draftOps: any[] = []\n    if (typeof draftFn === 'function') {\n      const [draft, fin] = makeDraft(fullSnapshot.cell)\n      draftFn(draft)\n      const [_, forwardOps, _backwardOps] = fin()\n      if (forwardOps.length > 0) {\n        draftOps = forwardOps\n        backwardOps = _backwardOps\n      }\n    }\n\n    const [producedSnapshot, generatorRecordings] =\n      applyOptimisticUpdateToState(\n        {invokations, generatorRecordings: {}, draftOps},\n        fullSnapshot,\n        this._schema,\n        false,\n      )\n\n    const transaction: Omit<Transaction, 'peerClock'> = {\n      invokations,\n      generatorRecordings: generatorRecordings,\n      draftOps: draftOps,\n      peerId: this._peerId,\n    }\n\n    if (process.env.NODE_ENV !== 'production' && editorFn) {\n      if (\n        !fastDeepEqual(\n          invokations,\n          recordInvokations(this._schema.editors, editorFn),\n        )\n      ) {\n        throw new Error(\n          `Transaction function seems to invoke different editors each time it is called. This means it is not deterministic, and running it several times will create different states. To fix this, make sure the transaction calls exactly the same editors, in the same order, with the same arguments`,\n        )\n      }\n\n      const [secondSnapshot] = applyOptimisticUpdateToState(\n        transaction,\n        fullSnapshot,\n        this._schema,\n        true,\n      )\n\n      if (!fastDeepEqual(secondSnapshot, producedSnapshot)) {\n        // at least one editor is not deterministic\n\n        // let's see if we can find which one it is, to help the user debug\n        let invokationsSoFar: typeof invokations = []\n        for (const invokation of invokations) {\n          // run each invokation one-by-one, and see which one produces a different snapshot\n          invokationsSoFar = [...invokationsSoFar, invokation]\n          // first call\n          const [newSnapshot1] = applyOptimisticUpdateToState(\n            {\n              invokations: invokationsSoFar,\n              generatorRecordings: transaction.generatorRecordings,\n              draftOps: transaction.draftOps,\n            },\n            fullSnapshot,\n            this._schema,\n            true,\n          )\n          // second call\n          const [newSnapshot2] = applyOptimisticUpdateToState(\n            {\n              invokations: invokationsSoFar,\n              generatorRecordings: transaction.generatorRecordings,\n              draftOps: transaction.draftOps,\n            },\n            fullSnapshot,\n            this._schema,\n            true,\n          )\n          if (!fastDeepEqual(newSnapshot1, newSnapshot2)) {\n            // found the culprit\n            throw new Error(\n              `Transaction is not deterministic, because editor ${\n                invokation[0]\n              }(${JSON.stringify(\n                invokation[1],\n              )}) is not deterministic. It produces different results when called twice. \\n${diff(\n                newSnapshot1,\n                newSnapshot2,\n              )}`,\n            )\n          }\n        }\n\n        // couldn't find which editor is not deterministic. let's just throw a generic error\n        const diffString = diff(producedSnapshot, secondSnapshot)\n        throw new Error(\n          `The second invocation of the transaction produced a different state than the first invocation. \\n${diffString}`,\n        )\n      }\n    }\n\n    return [\n      transaction,\n      invokations.length === 0 && transaction.draftOps.length === 0,\n      backwardOps,\n    ]\n  }\n\n  async waitForStorageSync() {\n    await waitForPrism(this._prisms.allSyncedToFrontStorage, (v) => v === true)\n  }\n\n  private _pushOptimisticUpdate(\n    updateWithoutPeerClock: Omit<Transaction, 'peerClock'>,\n    // if defined, then it'll constitute an undo-able operation\n    backwardOps: Ops | undefined,\n  ): void {\n    const clockBefore = this._atom.get().peerClock\n    const newClock = clockBefore + 1\n\n    const transaction: Transaction = {\n      generatorRecordings: updateWithoutPeerClock.generatorRecordings,\n      invokations: updateWithoutPeerClock.invokations,\n      peerId: updateWithoutPeerClock.peerId,\n      peerClock: newClock,\n      draftOps: updateWithoutPeerClock.draftOps,\n    }\n\n    this._atom.reduce((state) => ({\n      ...state,\n      peerClock: newClock,\n      optimisticUpdatesQueue: [...state.optimisticUpdatesQueue, transaction],\n    }))\n\n    if (backwardOps?.length === 0) {\n      // console.log('no backward ops', transaction.draftOps)\n    }\n    if (backwardOps && backwardOps.length > 0)\n      this._addToUndoStack({backwardOps, forwardOps: transaction.draftOps})\n  }\n\n  async waitForBackendSync(): Promise<void> {\n    await this.ready\n    await waitForPrism(\n      this._prisms.countOfUnpushedUpdatesToBackend,\n      (v) => v === 0,\n    )\n  }\n\n  private _addToUndoStack(op: UndoStackItem) {\n    this._atom.reduceByPointer(\n      (p) => p.undoRedo,\n      (o) => {\n        let stack =\n          // copy the stack\n          [...o.stack]\n            // and only keep the items that are before the cursor (so if the user has undone, and then does a new operation, we'll discard the redo stack)\n            .slice(o.cursor)\n\n        stack.unshift(op)\n\n        if (stack.length > MAX_UNDO_STACK_SIZE)\n          stack.length = MAX_UNDO_STACK_SIZE\n\n        return {\n          cursor: 0,\n          stack,\n        }\n      },\n    )\n  }\n\n  undo() {\n    const undoRedo = this._atom.get().undoRedo\n    if (undoRedo.cursor >= undoRedo.stack.length) return\n    const item = undoRedo.stack[undoRedo.cursor]\n    this._atom.reduceByPointer(\n      (p) => p.undoRedo,\n      (o) => {\n        return {\n          ...o,\n          cursor: o.cursor + 1,\n        }\n      },\n    )\n\n    this._pushOptimisticUpdate(\n      {\n        draftOps: item.backwardOps,\n        generatorRecordings: {},\n        invokations: [],\n        peerId: this._peerId,\n      },\n      undefined,\n    )\n  }\n\n  redo() {\n    const undoRedo = this._atom.get().undoRedo\n    if (undoRedo.cursor === 0) return\n    const item = undoRedo.stack[undoRedo.cursor - 1]\n    this._atom.reduceByPointer(\n      (p) => p.undoRedo,\n      (o) => {\n        return {\n          ...o,\n          cursor: o.cursor - 1,\n        }\n      },\n    )\n\n    this._pushOptimisticUpdate(\n      {\n        draftOps: item.forwardOps,\n        generatorRecordings: {},\n        invokations: [],\n        peerId: this._peerId,\n      },\n      undefined,\n    )\n  }\n\n  subscribe(\n    fn: (newState: {op: OpSnapshot; cell: CellShape}) => void,\n  ): () => void {\n    const withPeers = this._prisms.withPeers\n    let oldState = withPeers.getValue()\n    return withPeers.onStale(() => {\n      const newState = withPeers.getValue()\n      if (newState !== oldState) {\n        oldState = newState\n        fn(finalState(newState) as $IntentionalAny)\n      }\n    })\n  }\n}\n\ntype ClosedSession = {\n  peerId: string\n  optimisticUpdates: Transaction[]\n  lastIncorporatedPeerClock: number | null\n}\n\nconst finalState = memoizeFn(<S>(s: FullSnapshot<S>): {op: S; cell: {}} => {\n  return {\n    op: s.op,\n    cell: jsonFromCell(s.cell) as $IntentionalAny,\n  }\n})\n"
  },
  {
    "path": "packages/saaz/src/index.test.ts",
    "content": "import {SaazFront} from './front/SaazFront'\nimport {FrontMemoryAdapter} from './front/FrontMemoryAdapter'\nimport SaazBack from './back/SaazBack'\nimport type {$IntentionalAny, Schema} from './types'\nimport {BackMemoryAdapter} from './back/BackMemoryAdapter'\n\njest.setTimeout(1000)\n\ndescribe(`saaz`, () => {\n  test('everything', async () => {\n    type OpShape = {\n      $schemaVersion: number\n      opCount: number\n    }\n\n    type Generators = {\n      rand: () => number\n    }\n\n    let randNum = 10\n\n    const generators: Generators = {\n      rand: () => {\n        return randNum++\n      },\n    }\n\n    const opEditors = {\n      increaseBy(state: OpShape, generators: Generators, opts: {by: number}) {\n        let count = state.opCount ?? 0\n        state.opCount = count + opts.by\n      },\n\n      // this is a bad editor because it uses a random number generator, so it's not deterministic.\n      // we expect saaz.tx() to throw an error if we try to use it.\n      randomizeCountBadly(state: OpShape, generators: Generators, opts: {}) {\n        state.opCount = Math.random()\n      },\n\n      // this is a good editor because it uses a random number generator, but it's deterministic.\n      randomizeCountWell(state: OpShape, generators: Generators, opts: {}) {\n        state.opCount = generators.rand()\n      },\n    }\n\n    type CellShape = {cellCount?: number}\n\n    const schema: Schema<\n      OpShape,\n      typeof opEditors,\n      typeof generators,\n      CellShape\n    > = {\n      opShape: null as $IntentionalAny as OpShape,\n      // migrateOp(state: $IntentionalAny) {},\n      // migrateCell(s) {},\n\n      version: 1,\n      editors: opEditors,\n      generators: generators,\n      cellShape: null as any as CellShape,\n    } as const\n\n    const mem = new FrontMemoryAdapter()\n\n    const backend = new SaazBack({\n      storageAdapter: new BackMemoryAdapter(),\n      dbName: 'test',\n      schema,\n    })\n\n    const saaz = new SaazFront({\n      schema,\n      backend,\n      peerId: 'peer1',\n      storageAdapter: mem,\n      dbName: 'test',\n    })\n\n    await saaz.ready\n\n    expect(saaz.state.op.opCount).toEqual(undefined)\n    expect(saaz.state.cell.cellCount).toEqual(undefined)\n\n    expect(() =>\n      saaz.tx((editors) => {\n        editors.randomizeCountBadly({})\n      }),\n    ).toThrow()\n\n    expect(() =>\n      saaz.tx(undefined, (draft) => {\n        draft.cellCount = 1\n        throw new Error('oops')\n      }),\n    ).toThrow()\n\n    expect(saaz.state.op.opCount).toEqual(undefined)\n    expect(saaz.state.cell.cellCount).toEqual(undefined)\n\n    expect(() =>\n      saaz.tx((editors) => {\n        editors.increaseBy({by: 1})\n        throw new Error('oops')\n      }),\n    ).toThrow()\n\n    expect(saaz.state.op.opCount).toEqual(undefined)\n\n    expect(() =>\n      saaz.tx((editors) => {\n        editors.randomizeCountWell({})\n      }),\n    ).not.toThrow()\n\n    await new Promise((resolve) => setTimeout(resolve, 100))\n\n    expect(saaz.state.op.opCount).toEqual(10)\n\n    saaz.tx(undefined, (draft) => {\n      draft.cellCount = 1\n    })\n\n    expect(saaz.state.cell.cellCount).toEqual(1)\n\n    saaz.tx((editors) => {\n      editors.increaseBy({by: 3})\n    })\n\n    expect(saaz.state.op.opCount).toEqual(13)\n\n    await saaz.waitForBackendSync()\n\n    await saaz.waitForStorageSync()\n\n    expect(\n      (mem.export() as $IntentionalAny).sessions['peer1'].keyval.sessionState\n        .value.op,\n    ).toEqual({opCount: 13})\n\n    // const fauxBackennd: SaazBackInterface = {\n    //   async getUpdatesSinceClock() {\n    //     return {clock: null, hasUpdates: false}\n    //   },\n    //   applyUpdates(opts) {\n    //     return Promise.resolve({ok: true, hasUpdates: false})\n    //   },\n    //   updatePresence(opts) {\n    //     return Promise.resolve({ok: true})\n    //   },\n    //   async subscribe() {\n    //     return () => {}\n    //   },\n    // }\n\n    const saaz2 = new SaazFront({\n      schema,\n      peerId: '2',\n      storageAdapter: new FrontMemoryAdapter(),\n      dbName: 'test',\n      backend: backend,\n    })\n\n    await saaz2.ready\n    await saaz2.waitForBackendSync()\n    expect(saaz2.state).toEqual(saaz.state)\n\n    const saaz3 = new SaazFront({\n      schema,\n      peerId: '3',\n      storageAdapter: new FrontMemoryAdapter(),\n      dbName: 'test',\n      backend: backend,\n    })\n\n    await saaz3.ready\n    await saaz3.waitForBackendSync()\n\n    expect(saaz3.state).toEqual(saaz.state)\n\n    saaz.tx(undefined, (draft) => {\n      draft.cellCount = 2\n    })\n\n    expect(saaz.state.cell.cellCount).toEqual(2)\n\n    saaz.tx(undefined, (draft) => {\n      draft.cellCount = 3\n    })\n\n    expect(saaz.state.cell.cellCount).toEqual(3)\n\n    await saaz.waitForBackendSync()\n    await saaz3.waitForBackendSync()\n\n    expect(saaz3.state).toEqual(saaz.state)\n\n    saaz.undo()\n\n    expect(saaz.state.cell.cellCount).toEqual(2)\n\n    await saaz.waitForBackendSync()\n    await saaz3.waitForBackendSync()\n\n    expect(saaz3.state).toEqual(saaz.state)\n\n    saaz.undo()\n\n    expect(saaz.state.cell.cellCount).toEqual(1)\n\n    saaz.redo()\n    expect(saaz.state.cell.cellCount).toEqual(2)\n\n    saaz.redo()\n    expect(saaz.state.cell.cellCount).toEqual(3)\n\n    saaz.undo()\n    saaz.undo()\n    expect(saaz.state.cell.cellCount).toEqual(1)\n\n    saaz.tx(undefined, (draft) => {\n      draft.cellCount = 4\n    })\n\n    expect(saaz.state.cell.cellCount).toEqual(4)\n    saaz.redo()\n    expect(saaz.state.cell.cellCount).toEqual(4)\n    saaz.undo()\n    expect(saaz.state.cell.cellCount).toEqual(1)\n\n    saaz.teardown()\n    saaz2.teardown()\n    saaz3.teardown()\n  })\n})\n"
  },
  {
    "path": "packages/saaz/src/index.ts",
    "content": "export {SaazFront} from './front/SaazFront'\nexport {default as SaazBack} from './back/SaazBack'\nexport {FrontIDBAdapter} from './front/FrontIdbAdapter'\nexport {FrontMemoryAdapter} from './front/FrontMemoryAdapter'\nexport type {\n  FrontStorageAdapter,\n  BackStorageAdapter,\n  SaazBackInterface,\n  Schema,\n} from './types'\nexport {BackMemoryAdapter} from './back/BackMemoryAdapter'\nexport {current} from './rogue'\n"
  },
  {
    "path": "packages/saaz/src/rogue.test.ts",
    "content": "import {BackMemoryAdapter} from './back/BackMemoryAdapter'\nimport SaazBack from './back/SaazBack'\nimport {FrontMemoryAdapter} from './front/FrontMemoryAdapter'\nimport {SaazFront} from './front/SaazFront'\nimport type {Root} from './rogue'\nimport {change, fromOps, jsonFromCell} from './rogue'\nimport type { Schema} from './types'\n\nconst ahistoricSnapshot: Root = {\n  $type: ['map', 'base'],\n  $branches: {\n    base: {\n      $mapProps: {\n        foo: {\n          $type: ['map', 'base'],\n          $branches: {\n            base: {\n              $boxedValue:\n                'some value here, but this will be ignored, because this is an obj register.',\n              $mapProps: {\n                bar: {\n                  $type: ['boxed', 'base'],\n                  $branches: {\n                    base: {\n                      $boxedValue:\n                        'some value here. this is an lww register, and it can contain any json value.',\n                    },\n                  },\n                },\n              },\n            },\n          },\n        },\n      },\n    },\n  },\n}\n\ndescribe(`Rogue`, () => {\n  test('setting a non-existing prop', () => {\n    const [rep, ops] = change({}, (draft) => {\n      expect(draft.a).toBe(undefined)\n      draft.a = 1\n      expect(draft.a).toBe(1)\n    })\n    expect(jsonFromCell(rep)).toEqual({a: 1})\n\n    expect([rep, ops]).toMatchSnapshot()\n    const [rep2] = fromOps({}, ops)\n    expect(rep2).toEqual(rep)\n  })\n  test('overriding an existing prop with the same value', () => {\n    const [rep1] = change({}, (draft) => {\n      draft.a = 1\n    })\n    const [rep2, ops] = change(rep1, (draft) => {\n      expect(draft.a).toBe(1)\n      draft.a = 1\n      expect(draft.a).toBe(1)\n    })\n    expect(rep1).toBe(rep2)\n    expect(ops).toEqual([])\n  })\n  test('overriding an existing prop', () => {\n    const [rep1] = change({}, (draft) => {\n      draft.a = 1\n    })\n    const [rep2, ops] = change(rep1, (draft) => {\n      expect(draft.a).toBe(1)\n      draft.a = 2\n      expect(draft.a).toBe(2)\n    })\n    expect(jsonFromCell(rep2)).toEqual({a: 2})\n    expect(ops).toHaveLength(1)\n    expect(ops).toMatchSnapshot()\n    const [rep3] = fromOps(rep1, ops)\n    expect(rep3).toEqual(rep2)\n  })\n  test('setting a non-existing prop to an object', () => {\n    const [rep, ops] = change({}, (draft) => {\n      expect(draft.a).toBe(undefined)\n      draft.a = {b: 1}\n      expect(draft.a).toEqual(draft.a)\n      expect(draft.a).toEqual({b: 1})\n    })\n    expect(jsonFromCell(rep)).toEqual({a: {b: 1}})\n\n    expect([rep, ops]).toMatchSnapshot()\n    const [rep2] = fromOps({}, ops)\n    expect(rep2).toEqual(rep)\n  })\n\n  test('setting an existing prop to an object', () => {\n    const [rep] = change({}, (draft) => {\n      draft.a = {b: 1}\n    })\n    expect(jsonFromCell(rep)).toEqual({a: {b: 1}})\n    const [rep2, ops2] = change(rep, (draft) => {\n      expect(draft.a).toEqual({b: 1})\n      draft.a = {b: 2}\n      expect(draft.a).toEqual({b: 2})\n    })\n\n    expect(jsonFromCell(rep2)).toEqual({a: {b: 2}})\n    const [rep3] = fromOps(rep, ops2)\n    expect(rep3).toEqual(rep2)\n  })\n  test('setting an existing prop from an object', () => {\n    const [rep] = change({}, (draft) => {\n      draft.a = {b: 1}\n    })\n    expect(jsonFromCell(rep)).toEqual({a: {b: 1}})\n    const [rep2, ops2] = change(rep, (draft) => {\n      expect(draft.a).toEqual({b: 1})\n      draft.a = {c: 1}\n      expect(draft.a).toEqual({c: 1})\n    })\n\n    expect(jsonFromCell(rep2)).toEqual({a: {c: 1}})\n    const [rep3] = fromOps(rep, ops2)\n    expect(rep3).toEqual(rep2)\n  })\n\n  test(`merging defaults`, () => {\n    const [, ops1_1] = change({}, (draft) => {\n      draft.a = {aStep: 1, foo: 'setBy1', obj: {objA: 'true'}}\n    })\n    const [, ops2_1] = change({}, (draft) => {\n      draft.a = {bStep: 1, foo: 'setBy2', obj: {objB: 'true'}}\n    })\n\n    const merge1 = fromOps({}, [...ops2_1, ...ops1_1])[0]\n\n    const _11 = jsonFromCell(merge1)\n    expect(_11).toMatchSnapshot()\n    // console.log(_11)\n  })\n\n  function scenario(\n    name: string,\n    steps: Record<\n      string,\n      (draft: any, lastSnapshot: any, lastOps: any[]) => void\n    >,\n  ) {\n    describe(name, () => {\n      type StepResult = {\n        json: any\n        ops: any[]\n        backwardOps: any[]\n        rep: any\n        next?: StepResult\n        prev?: StepResult\n      }\n      let last: StepResult = {\n        json: {},\n        backwardOps: [],\n        ops: [],\n        rep: {},\n      }\n      const byStep: Record<string, StepResult> = {}\n\n      for (const [stepName, fn] of Object.entries(steps)) {\n        test(stepName, () => {\n          const prev: StepResult = {...last}\n          const [rep, ops, backwardOps] = change(prev.rep, (draft) => {\n            fn(draft, prev.json, prev.ops)\n          })\n          const stepResult: StepResult = {\n            rep,\n            ops,\n            backwardOps,\n            json: jsonFromCell(rep),\n            prev,\n          }\n          last.next = stepResult\n          last = stepResult\n          byStep[stepName] = stepResult\n        })\n      }\n\n      // i = 0 so that we skip the first step, which is the initial state\n      for (let i = 1; i < Object.keys(steps).length; i++) {\n        const prevStepName = Object.keys(steps)[i - 1]\n        const stepName = Object.keys(steps)[i]\n        test(`${prevStepName} => ${stepName}`, () => {\n          const stepResult = byStep[stepName]\n          const [rep] = fromOps(stepResult.prev!.rep, stepResult.ops)\n          expect(rep).toEqual(stepResult.rep)\n        })\n\n        test(`${prevStepName} <= ${stepName}`, () => {\n          const stepResult = byStep[stepName]\n          const [rep] = fromOps(stepResult.rep, stepResult.backwardOps)\n          const s = jsonFromCell(rep)\n          // note that as opposed to the previous test, we're not comparing cells, we're\n          // comparing snapshots. This is because the cells are not guaranteed to be the\n          // same when undoing a change, but the snapshots are.\n          expect(s).toEqual(stepResult.prev!.json)\n        })\n      }\n    })\n  }\n\n  scenario('scenario 1', {\n    step1: (draft) => {\n      expect(draft.a).toBe(undefined)\n      draft.a = 1\n      expect(draft.a).toBe(1)\n    },\n    step2: (_, snapshot, ops) => {\n      expect(snapshot).toEqual({a: 1})\n    },\n  })\n  scenario('scenario 2', {\n    step1: (draft) => {\n      draft.a = {a1: {a11: 1}}\n      expect(draft.a.a1).toEqual({a11: 1})\n      draft.a.a1.a11 = 2\n      expect(draft.a).toEqual({a1: {a11: 2}})\n    },\n    step2: (_, snapshot, ops) => {\n      expect(snapshot).toEqual({a: {a1: {a11: 2}}})\n    },\n  })\n  scenario('scenario 3', {\n    step1: (draft) => {\n      draft.a = {a1: {a11: 1}}\n      expect(draft.a.a1).toEqual({a11: 1})\n      draft.a = {b: 1}\n      expect(draft.a).toEqual({b: 1})\n    },\n    step2: (draft, snapshot, ops) => {\n      expect(draft.a).toEqual({b: 1})\n      draft.a = 1\n    },\n    step3: (draft, snapshot) => {\n      expect(snapshot).toEqual({a: 1})\n    },\n  })\n  describe(`saaz integration`, () => {\n    test(`test`, async () => {\n      type State = {\n        $schemaVersion: number\n        count: number\n      }\n\n      const schema: Schema<State> = {\n        version: 1,\n        // migrateOp(state: $IntentionalAny) {},\n        // migrateCell(s) {},\n        generators: {},\n        editors: {\n          increaseBy(state: State, generators: {}, opts: {by: number}) {\n            state.count += opts.by\n          },\n        },\n        opShape: null as any as State,\n        cellShape: null as any as {},\n      }\n      const backend = new SaazBack({\n        schema,\n        dbName: 'test',\n        storageAdapter: new BackMemoryAdapter(),\n      })\n      const saaz = new SaazFront({\n        schema,\n        dbName: 'test',\n        peerId: '1',\n        storageAdapter: new FrontMemoryAdapter(),\n        backend,\n      })\n\n      saaz.tx((editors) => {})\n\n      saaz.teardown()\n    })\n  })\n})\n"
  },
  {
    "path": "packages/saaz/src/rogue.ts",
    "content": "import deepEqual from '@theatre/utils/deepEqual'\nimport type {$IntentionalAny} from './types'\nimport * as immer from 'immer'\nimport setDeep from 'lodash-es/set'\nimport memoizeFn from '@theatre/utils/memoizeFn'\n\ntype BranchName = 'base' | string\n\ntype Branch = {\n  $boxedValue?: any\n  $mapProps?: {\n    [key in string]?: Cell\n  }\n}\n\nexport type Cell = {\n  $type: [type: 'map' | 'boxed' | 'deleted', branchName: BranchName]\n  $branches?: {\n    [asOf in BranchName]?: Branch\n  }\n}\n\ntype CellToJSON<T extends Cell> = T extends {\n  $type: ['boxed', any]\n}\n  ? CellBoxedToJSON<T>\n  : T extends {$type: ['map']}\n  ? MapCellToJSON<T>\n  : never\n\ntype CellBoxedToJSON<T extends Cell> = T['$branches'] extends {\n  [key: string]: {$boxedValue: infer V}\n}\n  ? V\n  : never\n\ntype MapCellToJSON<T extends Cell> = T['$branches'] extends {\n  [key: string]: {$mapProps: infer V}\n}\n  ? {\n      [Key in keyof V]: V[Key] extends Cell ? CellToJSON<V[Key]> : never\n    }\n  : never\n\nexport type Root = Cell\n\nconst NOT_DEFINED = {}\n\ntype Transaction = {clock: number; ops: Ops}\n\nexport type Ops = Op[]\n\ntype Op = ChnangeTypeOp | SetBoxedValue\n\ntype ChnangeTypeOp = {\n  type: 'ChangeType'\n  path: Array<[branchName: BranchName, mapProp: string]>\n  value: Cell['$type']\n}\n\ntype SetBoxedValue = {\n  type: 'SetBoxedValue'\n  path: Array<[branchName: BranchName, mapProp: string]>\n  branchName: BranchName\n  value: any\n}\n\ntype PathSegment = [branchName: BranchName, mapProp: string]\n\ntype Path = PathSegment[]\n\nfunction isCell(v: unknown): v is Cell {\n  if (typeof v !== 'object' || v === null) return false\n  const $type = (v as any).$type\n  if (!Array.isArray($type)) return false\n  if ($type.length !== 2 && $type.length !== 1) return false\n  if (typeof $type[0] !== 'string') return false\n  const [type, branchName] = $type\n  if (type === 'map' || type === 'boxed' || type === 'deleted') return true\n  return false\n}\n\nexport function makeDraft<S extends Cell>(\n  base: any,\n): [draft: any, finish: () => [cell: Cell, forwardOps: Ops, backwardOps: Ops]] {\n  if (!isPlainObject(base)) {\n    throw Error(`Base must be a plain object`)\n  }\n  base = isCell(base)\n    ? base\n    : ({\n        $type: ['map', 'base'],\n        $branches: {base: {$mapProps: base}},\n      } as Cell)\n\n  const immerDraft = immer.createDraft(base)\n  const state: State = {\n    imo: immerDraft,\n  }\n\n  const draft = new Proxy(state, traps)\n  const finish = (): [cell: Cell, forwardOps: Ops, backwardOps: Ops] => {\n    const cell = immer.finishDraft(immerDraft)\n    const forwardOps = compare(base, cell)\n    const backwardOps = compare(cell, base)\n\n    return [cell, forwardOps, backwardOps]\n  }\n\n  return [draft, finish]\n}\n\nexport function change(\n  base: any,\n  fn: (draft: any) => void,\n): [cell: any, ops: Ops, backwardOps: Ops] {\n  const [draft, finish] = makeDraft(base)\n  fn(draft)\n  return finish()\n}\n\nexport function fromOps(base: any, ops: Ops): [cell: any] {\n  if (!isPlainObject(base)) {\n    throw Error(`Base must be a plain object`)\n  }\n  base = isCell(base)\n    ? base\n    : ({\n        $type: ['map', 'base'],\n        $branches: {base: {$mapProps: base}},\n      } as Cell)\n\n  const immerDraft = immer.createDraft(base)\n  const state: State = {\n    imo: immerDraft,\n  }\n\n  for (const op of ops) {\n    const flatPath = op.path\n      .map(([branchName, mapProp]) => [\n        '$branches',\n        branchName,\n        '$mapProps',\n        mapProp,\n      ])\n      .flat()\n    if (op.type === 'ChangeType') {\n      const [type, branchName] = op.value\n      setDeep(immerDraft, [...flatPath, '$type'], [type, branchName])\n    } else if (op.type === 'SetBoxedValue') {\n      setDeep(\n        immerDraft,\n        [...flatPath, '$branches', op.branchName, '$boxedValue'],\n        op.value,\n      )\n    } else {\n      throw Error(`Unrecognized op type: ${(op as $IntentionalAny).type}`)\n    }\n  }\n\n  return [immer.finishDraft(immerDraft)]\n}\n\nfunction compare(before: Cell, after: Cell): Ops {\n  const ops: Ops = []\n  compareCell(before, after, [], ops)\n\n  return ops\n}\n\nfunction compareCell(\n  before: Cell | undefined,\n  after: Cell,\n  path: Path,\n  ops: Ops,\n) {\n  if (before === after) return\n\n  if (!deepEqual(before?.$type, after.$type)) {\n    const beforeType = before\n      ? [before.$type[0], before.$type[1] ?? 'base']\n      : null\n    const afterType = [after.$type[0], after.$type[1] ?? 'base']\n    if (!deepEqual(beforeType, afterType)) {\n      ops.push({\n        type: 'ChangeType',\n        path,\n        value: after.$type,\n      })\n    }\n  }\n\n  const [type, branchName] = [after.$type[0], after.$type[1] ?? 'base']\n  const afterBranch = after.$branches?.[branchName]\n  const beforeBranch = before?.$branches?.[branchName]\n  if (afterBranch === beforeBranch) return\n  if (!afterBranch) return\n\n  if (type === 'deleted') return\n\n  if (type === 'boxed') {\n    if (afterBranch.$boxedValue !== beforeBranch?.$boxedValue) {\n      ops.push({\n        type: 'SetBoxedValue',\n        path,\n        branchName,\n        value: afterBranch.$boxedValue,\n      })\n    }\n    return\n  }\n\n  if (type === 'map') {\n    const beforeMapProps = beforeBranch?.$mapProps ?? {}\n    const afterMapProps = afterBranch.$mapProps ?? {}\n    const afterKeys = Object.keys(afterMapProps)\n    for (const prop of afterKeys) {\n      compareCell(\n        Object.hasOwn(beforeMapProps, prop) ? beforeMapProps[prop] : undefined,\n        afterMapProps[prop]!,\n        [...path, [branchName, prop]],\n        ops,\n      )\n    }\n    const beforeKeys = Object.keys(beforeMapProps)\n    for (const prop of beforeKeys) {\n      if (!Object.hasOwn(afterMapProps, prop)) {\n        ops.push({\n          type: 'ChangeType',\n          path: [...path, [branchName, prop]],\n          value: ['deleted', generateBranchName()],\n        })\n      }\n    }\n    return\n  }\n\n  throw Error(`Unrecognized type: ${type}`)\n}\n\ninterface State {\n  imo: immer.Draft<Cell>\n  parent?: State\n}\n\nlet _lastBranchName = 0\nconst generateBranchName = () => {\n  _lastBranchName++\n  return _lastBranchName.toString()\n}\n\nconst traps: ProxyHandler<State> = {\n  get(state: State, prop) {\n    if (prop === DRAFT_STATE) return state\n\n    if (typeof prop !== 'string') return undefined\n\n    const imo = state.imo\n    const type = imo.$type[0]\n    const branchName = imo.$type[1] ?? 'base'\n\n    if (type === 'deleted')\n      throw new Error(`This value is marked as deleted and cannot be accessed`)\n\n    if (type === 'boxed')\n      throw new Error(`Implement getting inside a boxed value`)\n\n    if (type === 'map') {\n      const mapProps = imo.$branches?.[branchName]?.$mapProps\n      if (!mapProps) return undefined\n      if (Object.hasOwn(mapProps, prop)) {\n        const value = mapProps[prop]\n\n        if (!isCell(value)) {\n          throw Error(\n            `mapProps[${prop}] is not an ahistoric cell. this is a bug.`,\n          )\n        }\n        if (value.$type[0] === 'deleted') return undefined\n        if (value.$type[0] === 'boxed') {\n          const boxedValue =\n            value.$branches?.[value.$type[1] ?? 'base']?.$boxedValue\n          if (isPlainObject(boxedValue)) {\n            throw Error(`Implement getting a mapProp that is a boxed object`)\n          } else {\n            return boxedValue\n          }\n        } else if (value.$type[0] === 'map') {\n          const subState: State = {\n            imo: value,\n            parent: state,\n          }\n          return new Proxy(subState, traps)\n        }\n      } else {\n        return undefined\n      }\n    }\n\n    throw new Error(`Unrecognized type: ${type}`)\n  },\n  set(state: State, prop, _value: unknown): boolean {\n    if (prop === DRAFT_STATE) throw Error(`Unallowed`)\n    if (typeof prop !== 'string')\n      throw Error(`Non-string props are not allowed`)\n\n    const value = valueType(_value)\n\n    const imo = state.imo\n    const cellType = imo.$type[0]\n    const branchName = imo.$type[1] ?? 'base'\n\n    // setting self.a=value, when self is deleted\n    if (cellType === 'deleted')\n      throw new Error(`This value is marked as deleted and cannot be changed`)\n\n    // setting self.a=value, when self is a boxed value\n    if (cellType === 'boxed')\n      throw new Error(`Implement setting inside a boxed value`)\n\n    // setting self.a=value when self is a map\n    if (cellType === 'map') {\n      let branches = imo.$branches\n      if (!branches) {\n        branches = {}\n        imo.$branches = branches\n      }\n\n      let branch = branches[branchName]\n      if (!branch) {\n        branch = {}\n        branches[branchName] = branch\n      }\n\n      let mapProps = branch.$mapProps\n      if (!mapProps) {\n        mapProps = {}\n        branch.$mapProps = mapProps\n      }\n\n      // setting self.a=value when self.a is defined\n      if (Object.hasOwn(mapProps, prop)) {\n        if (!isCell(mapProps[prop]))\n          throw Error(\n            `mapProps[${prop}] is not an ahistoric cell. this is a bug.`,\n          )\n        const currentPropCell = mapProps[prop]!\n\n        // setting self.a={}\n        if (value.type === 'map') {\n          let currentBranch!: Branch\n          // setting self.a={} when self.a is not a map\n\n          if (currentPropCell.$type[0] !== 'map') {\n            // we're switching from a non-map to a map, which means if a map was previously set, it was\n            // already deleted/overridden to be a boxed value, and the current user hasn't _seen_ the previous\n            // map yet. So we should generate a new branchName for the new map.\n            const newBranchName = generateBranchName()\n            currentPropCell.$type = ['map', newBranchName]\n            currentPropCell.$branches ??= {}\n            const newBranch: Branch = {$mapProps: {}}\n            currentPropCell.$branches[newBranchName] = newBranch\n            currentBranch = newBranch\n          } else {\n            currentPropCell.$branches ??= {}\n            currentPropCell.$branches[currentPropCell.$type[1] ?? 'base'] ??= {}\n            currentBranch =\n              currentPropCell.$branches[currentPropCell.$type[1] ?? 'base']!\n          }\n          const subState: State = {\n            imo: currentPropCell,\n            parent: state,\n          }\n          const proxy = new Proxy(subState, traps)\n\n          const existingProps = Object.keys(proxy)\n\n          // let's delete existing props that are not in the new value\n          for (const key of existingProps) {\n            if (!Object.hasOwn(value.value, key)) {\n              delete (proxy as $IntentionalAny)[key]\n            }\n          }\n\n          for (const key of Object.keys(value.value)) {\n            ;(proxy as $IntentionalAny)[key] = value.value[key]\n          }\n\n          return true\n        } else if (value.type === 'boxed') {\n          if (currentPropCell.$type[0] === 'boxed') {\n            currentPropCell.$branches ??= {}\n            const branches = currentPropCell.$branches!\n            const branchName = currentPropCell.$type[1] ?? 'base'\n            branches[branchName] ??= {}\n            const branch = branches[branchName]!\n            branch.$boxedValue = value.value\n            return true\n          } else {\n            const branchName = generateBranchName()\n            currentPropCell.$type = ['boxed', branchName]\n            currentPropCell.$branches ??= {}\n            const branches = currentPropCell.$branches!\n            branches[branchName] ??= {}\n            const branch = branches[branchName]!\n            branch.$boxedValue = value.value\n            return true\n          }\n        }\n\n        throw new Error(`Unrecognized type: ${currentPropCell.$type[0]}`)\n      } else {\n        if (value.type === 'boxed') {\n          mapProps[prop] = {\n            $type: ['boxed', 'base'],\n            $branches: {\n              base: {\n                $boxedValue: value.value,\n              },\n            },\n          }\n          return true\n        } else if (value.type === 'map') {\n          mapProps[prop] = {\n            $type: ['map', 'base'],\n          }\n          const subState: State = {\n            imo: mapProps[prop]!,\n            parent: state,\n          }\n          const proxy = new Proxy(subState, traps)\n          for (const [k, v] of Object.entries(value.value)) {\n            ;(proxy as $IntentionalAny)[k] = v\n          }\n          return true\n        }\n        throw Error(`Unrecognized type: ${(value as $IntentionalAny).type}`)\n      }\n    }\n\n    throw new Error(`Unrecognized type: ${cellType}`)\n  },\n  has(state: State, prop) {\n    throw Error(`Implement has()`)\n  },\n  ownKeys(state: State) {\n    const type = state.imo.$type[0]\n    if (type === 'boxed') {\n      const value =\n        state.imo.$branches?.[state.imo.$type[1] ?? 'base']?.$boxedValue\n      if (isPlainObject(value)) {\n        return Reflect.ownKeys(value)\n      } else {\n        return []\n      }\n    } else if (type === 'deleted') {\n      return []\n    } else if (type === 'map') {\n      const props =\n        state.imo.$branches?.[state.imo.$type[1] ?? 'base']?.$mapProps ?? {}\n      return Reflect.ownKeys(props).filter(\n        (key) => props[key as $IntentionalAny]!.$type[0] !== 'deleted',\n      )\n    } else {\n      throw Error(`Unrecognized type: ${type}`)\n    }\n  },\n  deleteProperty(state: State, prop) {\n    if (prop === DRAFT_STATE) throw Error(`Unallowed`)\n    if (typeof prop !== 'string')\n      throw Error(`Non-string props are not allowed`)\n\n    const imo = state.imo\n    const type = imo.$type[0]\n    const branchName = imo.$type[1] ?? 'base'\n\n    if (type === 'deleted')\n      throw new Error(`This value is marked as deleted and cannot be changed`)\n\n    if (type === 'boxed')\n      throw new Error(`Implement deleting inside a boxed value`)\n\n    if (type === 'map') {\n      const mapProps = imo.$branches?.[branchName]?.$mapProps\n      if (!mapProps) return false\n      if (!Object.hasOwn(mapProps, prop)) return false\n\n      if (!isCell(mapProps[prop])) return false\n      const currentPropCell = mapProps[prop]!\n\n      if (currentPropCell.$type[0] === 'deleted') return false\n      currentPropCell.$type = ['deleted', generateBranchName()]\n      return true\n    }\n\n    throw new Error(`Unrecognized type: ${type}`)\n  },\n  getOwnPropertyDescriptor(state: State, prop) {\n    const type = state.imo.$type[0]\n    if (type === 'boxed') {\n      const $boxedValue =\n        state.imo.$branches?.[state.imo.$type[1] ?? 'base']?.$boxedValue\n      if (isPlainObject($boxedValue)) {\n        return Reflect.getOwnPropertyDescriptor($boxedValue, prop)\n      } else {\n        return undefined\n      }\n    } else if (type === 'deleted') {\n      return undefined\n    } else if (type === 'map') {\n      const props =\n        state.imo.$branches?.[state.imo.$type[1] ?? 'base']?.$mapProps ?? {}\n      if (Object.hasOwn(props, prop)) {\n        return {\n          writable: true,\n          configurable: true,\n          enumerable: true,\n          value: (traps as $IntentionalAny).get(state, prop, {}),\n        }\n      } else {\n        return undefined\n      }\n    } else {\n      throw Error(`Unrecognized type: ${type}`)\n    }\n  },\n  defineProperty(state: State, prop, descriptor) {\n    throw Error(`Implement defineProperty()`)\n  },\n  getPrototypeOf(state: State) {\n    const type = state.imo.$type[0]\n    if (type === 'boxed') {\n      return Object.getPrototypeOf(\n        state.imo.$branches?.[state.imo.$type[1] ?? 'base']?.$boxedValue,\n      )\n    } else if (type === 'deleted') {\n      return undefined\n    } else if (type === 'map') {\n      return Object.getPrototypeOf({})\n    } else {\n      throw Error(`Unrecognized type: ${type}`)\n    }\n  },\n  setPrototypeOf(state: State, prototype) {\n    throw Error(`Implement setPrototypeOf()`)\n  },\n}\n\nexport const current = <T extends {}>(draft: T): T => {\n  if (typeof draft !== 'object' || draft === null) {\n    return draft\n  }\n  const state = (draft as $IntentionalAny)[DRAFT_STATE] as State\n  if (!state) return draft\n  const currentImo = immer.current(state.imo)\n  return jsonFromCell(currentImo) as T\n}\n\nfunction valueType<V>(\n  v: V,\n):\n  | {type: 'boxed'; value: V}\n  | {type: 'map'; value: {[key: string | number | symbol]: unknown}} {\n  if (typeof v === 'object' && v) {\n    if (Array.isArray(v)) {\n      return {type: 'boxed', value: v}\n    }\n    return {type: 'map', value: v as $IntentionalAny}\n  }\n\n  if (\n    typeof v === 'string' ||\n    typeof v !== 'number' ||\n    typeof v !== 'boolean' ||\n    typeof v === 'undefined' ||\n    v === null\n  ) {\n    return {type: 'boxed', value: v}\n  }\n\n  throw Error(`Unrecognized value type: ${typeof v}`)\n}\n\nconst DRAFT_STATE: unique symbol = Symbol.for('draft-state')\n\nconst objectCtorString = Object.prototype.constructor.toString()\n\nexport function isPlainObject(value: any): boolean {\n  if (!value || typeof value !== 'object') return false\n  const proto = Object.getPrototypeOf(value)\n  if (proto === null) {\n    return true\n  }\n  const Ctor =\n    Object.hasOwnProperty.call(proto, 'constructor') && proto.constructor\n\n  if (Ctor === Object) return true\n\n  return (\n    typeof Ctor == 'function' &&\n    Function.toString.call(Ctor) === objectCtorString\n  )\n}\n\nconst BOXED: unique symbol = Symbol.for('boxed')\n\nexport function boxed<V>(value: V): {[BOXED]: true; value: V} {\n  return {[BOXED]: true, value}\n}\n\nfunction isBoxed(value: unknown): value is {[BOXED]: true; value: unknown} {\n  return typeof value === 'object' &&\n    value &&\n    (value as $IntentionalAny)[BOXED] === true\n    ? true\n    : false\n}\n\nconst RESET: unique symbol = Symbol.for('reset')\n\nexport function reset<V>(value: V): {[RESET]: true; value: V} {\n  return {[RESET]: true, value}\n}\n\nfunction isReset(value: unknown): value is {[RESET]: true; value: unknown} {\n  return typeof value === 'object' &&\n    value &&\n    (value as $IntentionalAny)[RESET] === true\n    ? true\n    : false\n}\n\nfunction is(x: any, y: any): boolean {\n  // Copied from https://github.com/immerjs/immer/blob/f6736a4beef727c6e5b41c312ce1b202ad3afb23/src/utils/common.ts#L115\n  // Originally from: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y\n  } else {\n    return x !== x && y !== y\n  }\n}\n\nexport function jsonFromCell<V extends Cell | {}>(\n  v: V,\n): V extends Cell ? CellToJSON<V> : typeof NOT_DEFINED {\n  if (typeof v !== 'object' || v === null) {\n    return NOT_DEFINED as $IntentionalAny\n  }\n\n  return _jsonFromCell(v as $IntentionalAny) as $IntentionalAny\n}\n\nconst _jsonFromCell = memoizeFn(\n  <V extends Cell>(v: V): CellToJSON<V> | typeof NOT_DEFINED => {\n    const type = v.$type?.[0]\n    const branchName = v.$branches?.[v.$type?.[1] ?? 'base']\n\n    if (typeof type !== 'string') {\n      return NOT_DEFINED\n    }\n\n    if (type === 'deleted') {\n      return NOT_DEFINED\n    }\n\n    if (type === 'boxed') {\n      return branchName?.$boxedValue\n    }\n\n    if (v.$type[0] === 'map') {\n      const props: {[key: string]: unknown} = {}\n      for (const [k, _value] of Object.entries(branchName?.$mapProps || {})) {\n        const value = jsonFromCell(_value as $IntentionalAny)\n        if (value !== NOT_DEFINED) {\n          props[k] = value\n        }\n      }\n      return props\n    }\n\n    return NOT_DEFINED\n  },\n)\n"
  },
  {
    "path": "packages/saaz/src/shared/GeneratorSpy.ts",
    "content": "import type {$IntentionalAny, GeneratorRecordings} from '../types'\nimport {cloneDeep} from 'lodash-es'\nimport type {SerializableValue} from '../types'\nimport type {ValidGenerators} from '../types'\nimport {stableValueHash} from '@theatre/utils/stableJsonStringify'\n\nexport function createGeneratorsSpy<Generators extends ValidGenerators>(\n  generators: ValidGenerators,\n  prevREcordings: GeneratorRecordings = {},\n  playbackOnly: boolean = false,\n): [spy: Generators, recordings: GeneratorRecordings] {\n  const recordings: GeneratorRecordings = cloneDeep(prevREcordings)\n  const calls: Record<string, number> = {}\n\n  const spy: Generators = Object.fromEntries(\n    Object.entries(generators).map(([fnName, fn]) => {\n      if (typeof fn !== 'function') {\n        throw new Error(`Generator method \"${fnName}\" is not a function`)\n      }\n      if (typeof fnName !== 'string') {\n        throw new Error('key is not a string')\n      }\n\n      const spyFn = (...args: SerializableValue[]) => {\n        const key = stableValueHash([fnName, args])\n        if (!calls[key]) {\n          calls[key] = 0\n        } else {\n          calls[key]!++\n        }\n\n        const callIndex = calls[key]!\n\n        if (\n          playbackOnly &&\n          (!Array.isArray(recordings[key]) ||\n            recordings[key]!.length < callIndex)\n        ) {\n          throw new Error(\n            `Generator method \"${fnName}\" was called with arguments that were not recorded: ${JSON.stringify(\n              args,\n            )}`,\n          )\n        }\n\n        if (!recordings[key]) {\n          recordings[key] = []\n        }\n\n        if (recordings[key]!.length > callIndex) {\n          return recordings[key]![callIndex]!\n        } else {\n          const ret = fn(args[0])\n          recordings[key]![callIndex] = ret\n          return ret\n        }\n      }\n\n      return [fnName, spyFn] as const\n    }),\n  ) as $IntentionalAny\n\n  return [spy, recordings]\n}\n"
  },
  {
    "path": "packages/saaz/src/shared/transactions.ts",
    "content": "import * as GeneratorSpy from './GeneratorSpy'\nimport type {Draft} from 'immer'\nimport {createDraft, finishDraft} from 'immer'\nimport {get} from 'lodash-es'\nimport type {\n  $FixMe,\n  EditorDefinitionToEditorInvocable,\n  Invokations,\n  Transaction,\n  EditorDefinitionFn,\n  $IntentionalAny,\n  EditorDefinitions,\n  Schema,\n  ValidOpSnapshot as ValidOpSnapshot,\n  ValidGenerators,\n  GeneratorRecordings,\n  FullSnapshot,\n} from '../types'\nimport {fromOps} from '../rogue'\n\nexport function applyOptimisticUpdateToState<\n  OpSnapshot extends ValidOpSnapshot,\n>(\n  {\n    invokations,\n    generatorRecordings,\n    draftOps,\n  }: Pick<Transaction, 'invokations' | 'generatorRecordings' | 'draftOps'>,\n  before: FullSnapshot<OpSnapshot>,\n  schema: Schema<OpSnapshot>,\n  playbackOnly: boolean = false,\n  testDeterminism: boolean = true,\n): [after: FullSnapshot<OpSnapshot>, generatorRecordings: GeneratorRecordings] {\n  const draft = createDraft(before.op)\n  const [generatorSpy, newRecordings] = GeneratorSpy.createGeneratorsSpy(\n    schema.generators,\n    generatorRecordings,\n    playbackOnly,\n  )\n\n  runInvokations(schema, draft, invokations, generatorSpy)\n  const opSnapshotAfter = finishDraft(draft) as $FixMe as OpSnapshot\n  const [cellAfter] = fromOps(before.cell, draftOps)\n  return [{op: opSnapshotAfter, cell: cellAfter}, newRecordings]\n}\n\nexport function recordInvokations<Editors extends {}>(\n  editors: Editors,\n  fn: (editors: EditorDefinitionToEditorInvocable<Editors>) => void,\n): Invokations {\n  const {invokableEditors, release, invokations} =\n    invokables.getInvokables(editors)\n  let released = false\n  try {\n    fn(invokableEditors)\n    release()\n    released = true\n  } catch (error) {\n    throw error\n  } finally {\n    if (!released) {\n      release()\n    }\n  }\n  return invokations\n}\n\nfunction runInvokations<Snapshot extends ValidOpSnapshot>(\n  schema: Schema<Snapshot>,\n  prevState: Draft<Snapshot>,\n  invokations: Invokations,\n  generatorSpy: ValidGenerators,\n): void {\n  for (const [fnPath, opts] of invokations) {\n    const fn = get(schema.editors, fnPath.split('.')) as EditorDefinitionFn\n    if (typeof fn !== 'function') {\n      throw new Error(\n        `editor ${fnPath} not found. Transaction may be corrupt, or the editor names may have changed`,\n      )\n    }\n    fn(prevState, generatorSpy, opts)\n  }\n}\nnamespace invokables {\n  class Pool<PoolItem> {\n    private _items: PoolItem[] = []\n    constructor(readonly _factory: () => PoolItem) {}\n\n    /**\n     * Get an item from the pool. If the pool is empty, a new item is created. Also starts a timer to ensure that the item is released back into the pool.\n     *\n     * @returns A tuple of the item and a function to release the item back into the pool.\n     *\n     */\n    get(releaseTimeoutms: number = 0): [PoolItem, () => void] {\n      const item =\n        this._items.length === 0 ? this._factory() : this._items.pop()!\n      let released = false\n\n      // if the invokables are not released within 0ms, it's probably a bug + memory leak.\n      const releaseTimeout = setTimeout(() => {\n        if (!released) {\n          throw new Error('Release timeout exceeded.')\n        }\n      }, releaseTimeoutms)\n\n      const release = () => {\n        released = true\n        clearTimeout(releaseTimeout)\n        this._items.push(item)\n      }\n\n      return [item, release]\n    }\n  }\n\n  type InvokationContext = {\n    snapshot: Draft<{}>\n    invokations: Invokations\n  }\n\n  type PoolItem = {\n    context: InvokationContext\n    invokableEditors: EditorDefinitionToEditorInvocable<$IntentionalAny>\n  }\n  const pools = new WeakMap<{}, Pool<PoolItem>>()\n\n  function getPool(editorDefinition: {}): Pool<PoolItem> {\n    if (!pools.has(editorDefinition)) {\n      function createPoolItem<Editors extends EditorDefinitions>(\n        editors: Editors,\n      ): PoolItem {\n        const context = {\n          snapshot: {},\n          invokations: [],\n        }\n        const invokableEditors = createInvokables(editors, context)\n\n        return {context, invokableEditors}\n      }\n\n      const pool = new Pool(() => createPoolItem(editorDefinition))\n      pools.set(editorDefinition, pool)\n      return pool\n    } else {\n      return pools.get(editorDefinition)!\n    }\n  }\n\n  function createInvokables<Editors extends EditorDefinitions>(\n    editors: Editors,\n    context: InvokationContext,\n    pathSoFar: string[] = [],\n  ): EditorDefinitionToEditorInvocable<Editors> {\n    const cache: $IntentionalAny = {}\n\n    const proxy = new Proxy(new Function(), {\n      get(_, prop: string) {\n        if (prop in cache) {\n          return cache[prop]\n        } else if (!(prop in editors)) {\n          const path = [...pathSoFar, prop]\n          throw new Error(`editor \"${path.join('.')}\" not found`)\n        } else {\n          const path = [...pathSoFar, prop]\n          const sub = createInvokables(\n            (editors as $IntentionalAny)[prop],\n            context,\n            path,\n          )\n          cache[prop] = sub\n          return sub\n        }\n      },\n      apply(_, __, args: [$IntentionalAny]) {\n        const opts = args[0]\n        if (typeof editors !== 'function') {\n          throw new Error(`editor \"${pathSoFar.join('.')}\" is not a function`)\n        } else {\n          context.invokations.push([pathSoFar.join('.'), opts])\n        }\n      },\n    })\n\n    return proxy as $IntentionalAny\n  }\n\n  export function getInvokables<Defs extends EditorDefinitions>(\n    editorDefinitions: Defs,\n  ): {\n    invokableEditors: EditorDefinitionToEditorInvocable<Defs>\n    release: () => void\n    invokations: Invokations\n  } {\n    const pool = getPool(editorDefinitions)\n    const [poolItem, release] = pool.get()\n\n    const {context, invokableEditors} = poolItem\n\n    context.invokations = []\n\n    return {\n      invokableEditors: invokableEditors as $IntentionalAny,\n      release,\n      invokations: context.invokations,\n    }\n  }\n}\n"
  },
  {
    "path": "packages/saaz/src/shared/utils.ts",
    "content": "import type {$IntentionalAny, FullSnapshot, Schema} from '../types'\n\nconst empty = {op: {}, cell: {}}\n\nexport function ensureStateIsUptodate<S extends {$schemaVersion: number}>(\n  original: FullSnapshot<S> | null,\n  schema: Schema<S>,\n): FullSnapshot<S> {\n  if (original === null) {\n    return empty as $IntentionalAny\n  }\n  return original as $IntentionalAny\n\n  // if (\n  //   !original ||\n  //   typeof original.op.$schemaVersion !== 'number' ||\n  //   original.op.$schemaVersion < schema.version\n  // ) {\n  //   return {\n  //     op: produce((original?.op ?? {}) as {}, (originalDraft) => {\n  //       schema.migrateOp(originalDraft)\n  //     }) as S,\n  //     cell: original?.cell ?? {},\n  //   }\n  // } else {\n  //   return original\n  // }\n}\n"
  },
  {
    "path": "packages/saaz/src/types.ts",
    "content": "import type {Cell, Ops} from './rogue'\n\nexport type $IntentionalAny = any\nexport type $FixMe = any\n// Primitive values that are serializable to JSON.\ntype SerializablePrimitive = null | string | boolean | number\n// Primitive and complex values that are serializable to JSON.\nexport type SerializableValue =\n  | SerializablePrimitive\n  | ReadonlyArray<SerializableValue>\n  | SerialzableMap\n// A map of serializable values.\nexport type SerialzableMap = {\n  readonly [key: string]: SerializableValue | undefined\n} // like: (state, ctx, opts) => {}\nexport type EditorDefinitionFn = (\n  state: $IntentionalAny,\n  generators: $IntentionalAny,\n  opts: $IntentionalAny,\n) => $IntentionalAny\n/**\n * An editor definition is either a function or an object of editor definitions.\n * ```ts\n * {\n *   foo: (state, ctx, opts) => {},\n *   nested: {\n *     a: {\n *       b: {c: (state, ctx, opts) => {}},\n *     },\n *   },\n * }\n * ```\n */\nexport type EditorDefinitions =\n  | EditorDefinitionFn\n  | {[key: string]: EditorDefinitions}\n/**\n * Takes an editor definition and returns a function that can be used to invoke it.\n * ```ts\n * // input\n * (state, ctx, opts) => {}\n * // output\n * (opts) => {}\n *\n * // OR:\n * // input\n * {foo: (state, ctx, opts) => {}}\n * // output\n * {foo: (opts) => {}}\n * ```\n */\nexport type EditorDefinitionToEditorInvocable<\n  Editors extends EditorDefinitions,\n> = Editors extends EditorDefinitionFn\n  ? (opts: Parameters<Editors>[2]) => void\n  : Editors extends {[key: string]: EditorDefinitions}\n  ? {\n      [K in keyof Editors]: EditorDefinitionToEditorInvocable<Editors[K]>\n    }\n  : never\nexport type ValidGenerators = {\n  [key: string]:\n    | (() => SerializableValue)\n    | ((opts: SerializableValue) => SerializableValue)\n}\n\nexport type Invokations = Array<[fn: string, opts: SerialzableMap]>\n\nexport type Transaction = {\n  invokations: Invokations\n  generatorRecordings: GeneratorRecordings\n  peerId: string\n  peerClock: number\n  draftOps: Ops\n}\n\nexport type GeneratorRecordings = {\n  [key in string]?: SerializableValue[]\n}\n\nexport type OnDiskSnapshot<OpSnapshot> = {\n  // the url of the backend that this snapshot was taken from\n  origin: string\n  // the name of the database that this snapshot was taken from\n  dbName: string\n  // the clock of the server when this snapshot was taken. A positive integer.\n  clock: number\n  snapshot: FullSnapshot<OpSnapshot>\n}\n\nexport type SessionState<OpSnapshot> = {\n  /**\n   * Unix timestamp of the last time the client synced with backend. Timestamp is produced on\n   * the client, so it may be inaccurate. Null means never synced.\n   */\n  lastSyncTime: number | null\n  /**\n   * The clock of the backend. null means unknown.\n   */\n  backendClock: number | null\n  /**\n   * The clock of the last optimistic update the backend has applied from this peer.\n   * The state (below) is calculated after this optimistic update has run.\n   */\n  lastIncorporatedPeerClock: number | null\n  /**\n   * The state of the backend.\n   */\n  snapshot: FullSnapshot<OpSnapshot> | null\n  peerId: string\n}\n\nexport type BackStateUpdateDescriptor = {\n  clock: number\n  snapshot:\n    | {type: 'Snapshot'; value: FullSnapshot<$IntentionalAny>}\n    | {type: 'Diff'; diff: 'todo'}\n  lastIncorporatedPeerClock: number | null\n  peerId: string\n}\n\nexport type BackApplyUpdateOps = {\n  peerId: string\n  backendClock: number | null\n  updates: Transaction[]\n}\n\nexport type BackGetUpdateSinceClockResult =\n  | ({\n      hasUpdates: false\n    } & Omit<BackStateUpdateDescriptor, 'snapshot'>)\n  | ({\n      hasUpdates: true\n    } & BackStateUpdateDescriptor)\n\nexport type PeerPresenceState = {\n  tempTransactions: Array<Omit<Transaction, 'peerClock'>>\n}\n\nexport type AllPeersPresenceState = {[peerId in string]?: PeerPresenceState}\n\nexport type PeerSubscribeCallback = (opts: {\n  presence: AllPeersPresenceState\n  shouldCheckForUpdates: boolean\n}) => void\n\nexport interface SaazBackInterface {\n  getUpdatesSinceClock(opts: {\n    clock: number | null\n    peerId: string\n  }): Promise<BackGetUpdateSinceClockResult>\n\n  getLastIncorporatedPeerClock(opts: {\n    peerId: string\n  }): Promise<{lastIncorporatedPeerClock: null | number; peerId: string}>\n\n  closePeer(opts: {peerId: string}): Promise<{ok: boolean}>\n\n  applyUpdates(\n    opts: BackApplyUpdateOps,\n  ): Promise<\n    ({ok: true} & BackGetUpdateSinceClockResult) | {ok: false; error: unknown}\n  >\n\n  updatePresence(opts: {\n    peerId: string\n    presence: PeerPresenceState\n  }): Promise<{ok: true} | {ok: false; error: unknown}>\n\n  subscribe(\n    opts: {\n      peerId: string\n    },\n    onUpdate: PeerSubscribeCallback,\n  ): Promise<() => void>\n}\n\nexport type FrontStorageAdapterTransaction = {\n  /**\n   * Gets a singular value.\n   */\n  get<T>(key: string, session: string): Promise<T | void>\n\n  /**\n   * Like `get()`, but returns the value for each session\n   */\n  getAll<T>(key: string): Promise<Record<string, T>>\n\n  /**\n   * Sets a singular value.\n   */\n  set<T>(key: string, value: T, session: string): Promise<void>\n\n  deleteSession(session: string): Promise<void>\n\n  /**\n   * Pushes one or more rows to a list.\n   */\n  pushToList<\n    T extends {\n      id: string\n    },\n  >(\n    key: string,\n    rows: T[],\n    session: string,\n  ): Promise<void>\n  /**\n   * Reads all the rows from a list.\n   */\n  getList<\n    T extends {\n      id: string\n    },\n  >(\n    key: string,\n    session: string,\n  ): Promise<T[]>\n  /**\n   * Removes one or more rows from a list.\n   */\n  pluckFromList<\n    T extends {\n      id: string\n    },\n  >(\n    key: string,\n    ids: Array<string>,\n    session: string,\n  ): Promise<Array<T | undefined>>\n}\n\nexport interface FrontStorageAdapter {\n  /**\n   * Transaction.\n   * Example:\n   * ```ts\n   * const newCount = await s.transaction(async ({get, set}) => {\n   *   const count = await get<number>('count')\n   *   await set('count', count + 1)\n   *   return count + 1\n   * })\n   * ```\n   */\n  transaction<T>(\n    fn: (opts: FrontStorageAdapterTransaction) => Promise<T>,\n  ): Promise<T>\n  /**\n   * Gets a singular value.\n   */\n  get<T>(key: string, session: string): Promise<T | void>\n  /**\n   * Sets a singular value.\n   */\n  getList<T extends {id: string}>(key: string, session: string): Promise<T[]>\n}\n\nexport interface BackStorageAdapter {}\n\nexport type Schema<\n  OpSnapshot extends {$schemaVersion: number},\n  Editors extends {} = {},\n  Generators extends ValidGenerators = {},\n  CellShape extends {} = {},\n> = {\n  editors: Editors\n  generators: Generators\n  opShape: OpSnapshot\n  cellShape: CellShape\n  version: number\n}\n\nexport type ValidOpSnapshot = {\n  $schemaVersion: number\n}\n\nexport type TempTransaction = Omit<Transaction, 'peerClock'> & {\n  tempId: number\n  backwardOps: Ops\n}\n\nexport type TempTransactionApi<Editors extends {}, CellShape extends {}> = {\n  commit: () => void\n  discard: () => void\n  recapture: (\n    editorFn?: (editors: EditorDefinitionToEditorInvocable<Editors>) => void,\n    draftFn?: (draft: CellShape) => void,\n  ) => void\n  reset: () => void\n}\n\nexport type FullSnapshot<OpSnapshot> = {op: OpSnapshot; cell: Cell | {}}\n"
  },
  {
    "path": "packages/saaz/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \"src\",\n    \"types\": [\"jest\", \"node\"],\n    \"target\": \"es6\",\n    \"composite\": true\n  },\n  \"references\": [{\"path\": \"../dataverse\"}, {\"path\": \"../utils\"}],\n  \"include\": [\"./src/**/*\"]\n}\n"
  },
  {
    "path": "packages/saaz/typedoc.json",
    "content": "{\n  \"visibilityFilters\": {\n    \"protected\": false,\n    \"private\": false,\n    \"inherited\": true,\n    \"external\": false,\n    \"@alpha\": false,\n    \"@beta\": false\n  },\n  \"excludeTags\": [\n    \"@override\",\n    \"@virtual\",\n    \"@privateRemarks\",\n    \"@satisfies\",\n    \"@overload\",\n    \"@remarks\"\n  ],\n  \"categorizeByGroup\": false,\n  \"excludeInternal\": true,\n  \"excludeProtected\": true,\n  \"excludePrivate\": true,\n  \"sourceLinkTemplate\": \"https://github.com/theatre-js/theatre/blob/main/{path}#L{line}\"\n}\n"
  },
  {
    "path": "packages/studio/.eslintrc.js",
    "content": "const path = require('path')\n\nmodule.exports = {\n  rules: {\n    'no-relative-imports': [\n      'warn',\n      {\n        aliases: [\n          {name: '@theatre/core', path: path.resolve(__dirname, '../core/src')},\n          {\n            name: '@theatre/studio',\n            path: path.resolve(__dirname, './src'),\n          },\n        ],\n      },\n    ],\n  },\n}\n"
  },
  {
    "path": "packages/studio/.gitignore",
    "content": "development.env.json\nproduction.env.json"
  },
  {
    "path": "packages/studio/.npmignore",
    "content": "/node_modules\n/xeno\n/.vscode\n/src\n/devEnv\n*.log\n/.*\n/*.env.json\n/tsconfig.json\n/.temp"
  },
  {
    "path": "packages/studio/LICENSE",
    "content": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n  A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate.  Many developers of free software are heartened and\nencouraged by the resulting cooperation.  However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n  The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community.  It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server.  Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n  An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals.  This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Remote Network Interaction; Use with the GNU General Public License.\n\n  Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software.  This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time.  Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published\n    by the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source.  For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code.  There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n<https://www.gnu.org/licenses/>."
  },
  {
    "path": "packages/studio/README.md",
    "content": "# Theatre.js - Studio\n\nTheatre.js is an animation library for high-fidelity motion graphics. It is designed to help you express detailed animation, enabling you to create intricate movement, and convey nuance.\n\nTheatre.js can be used both programmatically _and_ visually.\n\nYou can use Theatre.js to:\n\n* Animate 3D objects made with THREE.js or other 3D libraries\n  \n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-3d-short.gif)\n\n  <sub>Art by [drei.lu](https://sketchfab.com/models/91964c1ce1a34c3985b6257441efa500)</sub>\n\n* Animate HTML/SVG via React or other libraries\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-dom.gif)\n\n* Design micro-interactions\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-micro-interaction.gif)\n\n* Choreograph generative interactive art\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-generative.gif)\n\n* Or animate any other JS variable\n\n  ![s](https://raw.githubusercontent.com/AriaMinaei/theatre-docs/main/docs/.vuepress/public/preview-console.gif)\n\n## Documentation and Tutorials\n\nYou can find the documentation and video tutorials [here](https://www.theatrejs.com/docs/latest).\n\n## Community\n\nJoin us on [Discord](https://discord.gg/bm9f8F9Y9N), follow the updates on [twitter](https://twitter.com/AriaMinaei) or write us an [email](mailto:hello@theatrejs.com).\n\n## `@theatre/studio`\n\nTheatre.js comes in two packages: `@theatre/core` (the library) and `@theatre/studio` (the editor). This package is the editor, which is only used during design/development.\n\n## License\n\nYour use of Theatre.js is governed under the Apache License Version 2.0:\n\n* Theatre's core (`@theatre/core`) is released under the Apache License.\n* The studio (`@theatre/studio`) is released under the AGPL 3.0 License. This is the package that you use to edit your animations, setup your scenes, etc. You only use the studio during design/development. Your project's final bundle only includes `@theatre/core`, so only the Apache License applies.\n"
  },
  {
    "path": "packages/studio/devEnv/cli.ts",
    "content": "import sade from 'sade'\nimport {path} from '@cspotcode/zx'\nimport * as esbuild from 'esbuild'\n// eslint-disable-next-line no-relative-imports\nimport {definedGlobals} from '../../core/devEnv/definedGlobals'\n\nconst prog = sade('cli')\n\nprog\n  .command('build js', 'Generate the .js bundle')\n  .option('--watch', 'Watch')\n  .action(async (opts) => {\n    await bundle(opts.watch)\n  })\n\n// prog.command('build ts', 'Generate the .d.ts bundle').action(async () => {\n//   await bundleTypes()\n// })\n\nprog.command('build', 'Generate the .js and .d.ts bundles').action(async () => {\n  await Promise.all([bundle(false)])\n})\n\nprog.parse(process.argv)\n\n// async function bundleTypes() {\n//   await $`tsc --build`\n//   await $`rollup -c devEnv/declarations-bundler/rollup.config.js --bundleConfigAsCjs`\n// }\n\nasync function bundle(watch: boolean) {\n  const pathToPackage = path.join(__dirname, '..')\n  const esbuildConfig: Parameters<typeof esbuild.context>[0] = {\n    entryPoints: [path.join(pathToPackage, 'src/index.ts')],\n    target: ['es6'],\n    loader: {'.png': 'dataurl', '.svg': 'dataurl'},\n    bundle: true,\n    sourcemap: true,\n    supported: {\n      // 'unicode-escapes': false,\n      'template-literal': false,\n    },\n    define: {\n      ...definedGlobals,\n      __IS_VISUAL_REGRESSION_TESTING: 'false',\n      'process.env.NODE_ENV': '\"production\"',\n    },\n    external: ['@theatre/dataverse', '@theatre/core'],\n    minify: true,\n  }\n\n  const ctx = await esbuild.context({\n    ...esbuildConfig,\n    outfile: path.join(pathToPackage, 'dist/index.js'),\n    format: 'cjs',\n  })\n\n  if (watch) {\n    await ctx.watch()\n  } else {\n    await ctx.rebuild()\n    await ctx.dispose()\n  }\n}\n"
  },
  {
    "path": "packages/studio/globals.d.ts",
    "content": "// the global env of @theatre/studio. Note that tsconfig also uses ../core/globals.d.ts\n"
  },
  {
    "path": "packages/studio/package.json",
    "content": "{\n  \"name\": \"@theatre/studio\",\n  \"version\": \"0.7.0\",\n  \"license\": \"AGPL-3.0-only\",\n  \"description\": \"Motion design editor for the web\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/AriaMinaei/theatre\",\n    \"directory\": \"theatre/studio\"\n  },\n  \"author\": {\n    \"name\": \"TheaterJS Oy\",\n    \"email\": \"hello@theatrejs.com\",\n    \"url\": \"https://www.theatrejs.com\"\n  },\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"files\": [\n    \"dist/*\"\n  ],\n  \"scripts\": {\n    \"prepublish\": \"node ../../devEnv/ensurePublishing.js\",\n    \"typecheck\": \"tsc --build\",\n    \"cli\": \"tsx devEnv/cli.ts\",\n    \"build\": \"yarn cli build\"\n  },\n  \"sideEffects\": true,\n  \"peerDependencies\": {\n    \"@theatre/core\": \"*\"\n  },\n  \"dependencies\": {\n    \"@theatre/dataverse\": \"workspace:*\"\n  },\n  \"devDependencies\": {\n    \"@react-spring/web\": \"^9.7.3\",\n    \"@styled/typescript-styled-plugin\": \"^1.0.1\",\n    \"@theatre/app\": \"workspace:*\",\n    \"@theatre/react\": \"workspace:*\",\n    \"@theatre/saaz\": \"workspace:*\",\n    \"@theatre/sync-server\": \"workspace:*\",\n    \"@theatre/utils\": \"workspace:*\",\n    \"@trpc/client\": \"^10.43.0\",\n    \"@types/jest\": \"^26.0.24\",\n    \"@types/marked\": \"^4.0.7\",\n    \"@types/node\": \"^20.10.5\",\n    \"@types/react\": \"18.2.18\",\n    \"@types/react-dom\": \"18.2.7\",\n    \"@types/react-icons\": \"3.0.0\",\n    \"@types/shallowequal\": \"^1.1.1\",\n    \"@types/uuid\": \"^8.3.0\",\n    \"blob-compare\": \"1.1.0\",\n    \"esbuild\": \"^0.18.17\",\n    \"fuzzy\": \"^0.1.3\",\n    \"idb-keyval\": \"^6.2.0\",\n    \"identity-obj-proxy\": \"^3.0.0\",\n    \"immer\": \"9.0.6\",\n    \"jose\": \"4.14.4\",\n    \"jszip\": \"3.10.1\",\n    \"lodash-es\": \"4.17.21\",\n    \"marked\": \"^4.1.1\",\n    \"nanoid\": \"3.3.1\",\n    \"oauth4webapi\": \"2.4.0\",\n    \"polished\": \"4.1.3\",\n    \"react\": \"18.2.0\",\n    \"react-colorful\": \"^5.5.1\",\n    \"react-dom\": \"18.2.0\",\n    \"react-error-boundary\": \"3.1.3\",\n    \"react-hot-toast\": \"2.4.0\",\n    \"react-icons\": \"4.12.0\",\n    \"react-merge-refs\": \"2.0.2\",\n    \"react-shadow\": \"20.4.0\",\n    \"react-use\": \"17.2.4\",\n    \"reakit\": \"1.3.8\",\n    \"sade\": \"^1.8.1\",\n    \"shallowequal\": \"1.1.0\",\n    \"styled-components\": \"^5.3.11\",\n    \"superjson\": \"1.13.1\",\n    \"timing-function\": \"^0.2.3\",\n    \"tsx\": \"4.7.0\",\n    \"typescript\": \"5.1.6\",\n    \"typescript-styled-plugin\": \"^0.18.3\"\n  },\n  \"//\": \"Add packages here to make them externals of studio. Add them to theatre/package.json if you want to bundle them with studio.\"\n}\n"
  },
  {
    "path": "packages/studio/src/.eslintrc.js",
    "content": "module.exports = {\n  rules: {\n    'no-restricted-syntax': [\n      'error',\n      {\n        selector: `ImportDeclaration[importKind!='type'][source.value=/@theatre\\\\u002Fcore\\\\u002F/]`,\n        message:\n          '@theatre/studio may not import @theatre/core/* modules except via type imports.',\n      },\n    ],\n  },\n}\n"
  },
  {
    "path": "packages/studio/src/Auth.ts",
    "content": "import type {Prism} from '@theatre/dataverse'\nimport {Atom, prism, val} from '@theatre/dataverse'\nimport {TRPCClientError} from '@trpc/client'\nimport delay from '@theatre/utils/delay'\nimport type {$FixMe, $IntentionalAny} from '@theatre/core/types/public'\nimport {defer} from '@theatre/utils/defer'\nimport {\n  generateRandomCodeVerifier,\n  calculatePKCECodeChallenge,\n} from 'oauth4webapi'\nimport type {Studio} from './Studio'\nimport getStudio from './getStudio'\nimport {decodeJwt} from 'jose'\nimport type {studioAccessScopes, studioAuthTokens} from '@theatre/app/types'\nimport type {AtomPersistor} from '@theatre/utils/persistAtom'\nimport {persistAtom} from '@theatre/utils/persistAtom'\n\ntype PersistentState =\n  | {loggedIn: false}\n  | {loggedIn: true; idToken: string; accessToken: string}\n\ntype ProcedureState =\n  | {\n      type: 'authorize'\n      deviceTokenFlowState: DeviceTokenFlowState | undefined\n    }\n  | {\n      type: 'expandScope'\n      additionalScope: studioAccessScopes.Scopes\n      deviceTokenFlowState: DeviceTokenFlowState | undefined\n    }\n  | {\n      type: 'refreshTokens'\n    }\n  | {\n      type: 'destroyIdToken'\n    }\n\ntype CurrentProcedure = {\n  abortController: AbortController\n  promise: Promise<void>\n  procedureState: ProcedureState\n}\n\ntype EphemeralState = {\n  loaded: boolean\n  currentProcedure: undefined | CurrentProcedure\n}\n\ntype DeviceTokenFlowState =\n  | {\n      type: 'waitingForDeviceCode'\n      // codeChallenge: string\n      // codeVerifier: string\n    }\n  | {\n      type: 'codeReady'\n      verificationUriComplete: string\n      // codeChallenge: string\n      // codeVerifier: string\n      // userCode: string\n      // deviceCode: string\n      // lastTokenRequestTime: number | undefined\n      // interval: number\n    }\n\nconst bcId = Math.random().toString(36).slice(2)\n\nexport type AuthDerivedState =\n  | 'loading'\n  | {\n      loggedIn: false\n      procedureState: undefined | ProcedureState\n    }\n  | {\n      loggedIn: true\n      user: {email: string}\n      procedureState: undefined | ProcedureState\n    }\n\nexport default class Auth {\n  private _persistentState = new Atom<PersistentState>({loggedIn: false})\n  private _atomPersistor: AtomPersistor | undefined\n  private _broadcastChannel: BroadcastChannel | undefined\n\n  private _ephemeralState = new Atom<EphemeralState>({\n    currentProcedure: undefined,\n    loaded: false,\n  })\n\n  private _readyDeferred = defer<void>()\n  readonly derivedState: Prism<AuthDerivedState>\n\n  constructor(readonly studio: Studio) {\n    const persistAtomDeferred = defer<void>()\n\n    void this.studio._optsPromise.then((o) => {\n      if (o.usePersistentStorage === true) {\n        this._atomPersistor = persistAtom(\n          this._persistentState as $IntentionalAny as Atom<{}>,\n          this._persistentState.pointer as $IntentionalAny,\n          () => persistAtomDeferred.resolve(),\n          o.persistenceKey + 'auth',\n        )\n\n        const bc = new BroadcastChannel(`theatrejs-auth-${o.persistenceKey}`)\n        this._broadcastChannel = bc\n        // listen to changes from other tabs\n        bc.addEventListener('message', (e) => {\n          if (e.data !== bcId) {\n            this._atomPersistor?.refresh()\n          }\n        })\n      } else {\n        persistAtomDeferred.resolve()\n      }\n    })\n\n    void persistAtomDeferred.promise.then(() => {\n      this._readyDeferred.resolve()\n    })\n\n    void this._readyDeferred.promise.then(() => {\n      this._ephemeralState.setByPointer((p) => p.loaded, true)\n    })\n\n    this.derivedState = prism((): AuthDerivedState => {\n      const ephemeralState = val(this._ephemeralState.pointer)\n      if (!ephemeralState.loaded) {\n        return 'loading'\n      }\n      const persistentState = val(this._persistentState.pointer)\n      if (persistentState.loggedIn) {\n        return {\n          loggedIn: true,\n          user: getIdTokenClaimsWithoutVerifying(persistentState.idToken) ?? {\n            email: 'unknown',\n          },\n          procedureState: ephemeralState.currentProcedure?.procedureState,\n        }\n      } else {\n        return {\n          loggedIn: false,\n          procedureState: ephemeralState.currentProcedure?.procedureState,\n        }\n      }\n    })\n  }\n\n  get ready() {\n    return this._readyDeferred.promise\n  }\n\n  private async _acquireLock<T>(\n    abortController: AbortController,\n    initialState: ProcedureState,\n    cb: (\n      abortSignal: AbortSignal,\n      setState: (procedureState: ProcedureState) => void,\n    ) => Promise<T>,\n  ): Promise<T> {\n    if (this._readyDeferred.status !== 'resolved') {\n      throw new Error('Not ready')\n    }\n    if (this._ephemeralState.get().currentProcedure) {\n      throw new Error('Already running a procedure')\n    }\n\n    const d = defer<T>()\n\n    try {\n      await navigator.locks.request(\n        'theatrejs-auth',\n        {mode: 'exclusive', ifAvailable: true},\n        async (possibleLock) => {\n          if (!possibleLock) {\n            d.reject(new Error('Failed to acquire lock'))\n            return\n          }\n\n          if (abortController.signal.aborted) {\n            d.reject(new Error('Aborted'))\n            return\n          }\n\n          const currentProcedure: CurrentProcedure = {\n            abortController,\n            promise: d.promise.then(() => {}),\n            procedureState: initialState,\n          }\n          this._ephemeralState.setByPointer(\n            (p) => p.currentProcedure,\n            currentProcedure,\n          )\n          this._atomPersistor?.refresh()\n          const setProcedureState = (procedureState: ProcedureState) => {\n            this._ephemeralState.setByPointer((p) => p.currentProcedure, {\n              ...currentProcedure,\n              procedureState,\n            })\n          }\n\n          try {\n            const ret = await cb(abortController.signal, setProcedureState)\n            this._atomPersistor?.flush()\n            this._broadcastChannel?.postMessage(bcId)\n            d.resolve(ret)\n          } catch (err) {\n            d.reject(err)\n          }\n        },\n      )\n    } finally {\n      this._ephemeralState.setByPointer((p) => p.currentProcedure, undefined)\n    }\n\n    return d.promise\n  }\n\n  /**\n   * Runs the authorization procedure. Will error if already authorized, or if another procedure is already running.\n   */\n  async authorize() {\n    const abortController = new AbortController()\n    const initialState: ProcedureState = {\n      type: 'authorize',\n      deviceTokenFlowState: undefined,\n    }\n    await this._acquireLock(\n      abortController,\n      initialState,\n      async (abortSignal, setState) => {\n        const persistentState = this._persistentState.get()\n\n        if (persistentState.loggedIn) {\n          throw new Error('Already authorized')\n        }\n\n        const result = await tokenProcedures.deviceAuthorizationFlow(\n          ['workspaces-list'],\n          undefined,\n          (state) => {\n            setState({...initialState, deviceTokenFlowState: state})\n          },\n          abortSignal,\n        )\n\n        if (!result.success) {\n          throw new Error(`Failed to authorize: ${result.error}: ${result.msg}`)\n        }\n\n        const {accessToken, idToken} = result\n        this._persistentState.set({loggedIn: true, accessToken, idToken})\n      },\n    )\n  }\n\n  /**\n   * Runs the authorization procedure. Will if another procedure is already running.\n   */\n  async deauthorize() {\n    const abortController = new AbortController()\n    const initialState: ProcedureState = {\n      type: 'destroyIdToken',\n    }\n    await this._acquireLock(\n      abortController,\n      initialState,\n      async (abortSignal) => {\n        const persistentState = this._persistentState.get()\n\n        if (!persistentState.loggedIn) {\n          return\n        }\n\n        const result = await tokenProcedures.destroyIdToken(\n          persistentState.idToken,\n          abortSignal,\n        )\n\n        if (!result.success) {\n          throw new Error(\n            `Failed to deauthorize: ${result.error}: ${result.msg}`,\n          )\n        }\n\n        this._persistentState.set({loggedIn: false})\n      },\n    )\n  }\n\n  // /**\n  //  * Resolves with the access token. If no token is set, it'll wait until one is. Note that this will _NOT_ trigger authentication,\n  //  * so if this function is called and the user is not authenticated, it'll wait forever.\n  //  */\n  // private async _getValidAccessToken(): Promise<string> {\n  //   // no ongoing authentication atm\n  //   if (!this._ephemeralState.get().authFlowState) {\n  //     const authState = this._persistentState.get()\n  //     // and the access token is available\n  //     if (authState) {\n  //       return authState.accessToken\n  //     } else {\n  //       throw new Error('Not authenticated')\n  //     }\n  //   } else {\n  //     const accessToken = await this._waitForAccessToken()\n  //     return accessToken\n  //   }\n  // }\n\n  /**\n   * If logged in, returns the access token. If not, it'll wait until the user\n   * initiaites a login flow, and then return the access token.\n   */\n  // private async _waitForAccessToken(): Promise<string> {\n  //   await this._readyDeferred.promise\n  //   const notReady = {}\n  //   const accessToken = await waitForPrism(\n  //     prism<typeof notReady | string>(() => {\n  //       const s = val(this._mishmashState.pointer)\n\n  //       if (s.type === 'loggedIn') {\n  //         return s.accessToken\n  //       }\n  //       return notReady\n  //     }),\n  //     (v): v is string => v !== notReady,\n  //   )\n  //   return accessToken as $IntentionalAny\n  // }\n\n  private _getAccessToken(): string | undefined {\n    const s = val(this._persistentState.pointer)\n    if (s.loggedIn) {\n      return s.accessToken\n    }\n    return undefined\n  }\n\n  async _refreshTokens() {\n    // TODO\n  }\n\n  async wrapTrpcProcedureWithAuth<\n    Input,\n    Ret,\n    Fn extends (\n      input: Input & {studioAuth: {accessToken: string}},\n      opts: $IntentionalAny,\n    ) => Promise<Ret>,\n  >(\n    fn: Fn,\n    args: [Input, $IntentionalAny],\n    path: string[],\n    retriesLeft: number = 3,\n  ): Promise<Ret> {\n    await this.ready\n    const accessToken = this._getAccessToken()\n    if (!accessToken) {\n      throw new Error('Not authenticated')\n    }\n    const [input, opts] = args\n    try {\n      const isSubscribe = path[path.length - 1] === 'subscribe'\n      if (isSubscribe) {\n        const response = fn({...input, studioAuth: {accessToken}}, opts)\n        return response\n      } else {\n        const response = await fn({...input, studioAuth: {accessToken}}, opts)\n        return response\n      }\n    } catch (err) {\n      console.log('err', err)\n      if (err instanceof TRPCClientError && err.data.code === 'UNAUTHORIZED') {\n        console.log('is unaothorized error')\n        if (retriesLeft <= 0) {\n          return Promise.reject(err)\n        }\n        // this is a 401, which means as long as we have a valid accessToken, we should be able to retry the request\n        await this._refreshTokens()\n        return this.wrapTrpcProcedureWithAuth(fn, args, path, retriesLeft - 1)\n      } else {\n        return Promise.reject(err)\n      }\n    }\n  }\n}\n\nnamespace tokenProcedures {\n  /**\n   * Runs a device authorization flow, and returns the access token and id token if successful.\n   *\n   * @param scope - The scopes to request. If originalIdToken is provided, the scopes will be expanded to include the scopes of the original token.\n   * @param originalIdToken - The original id token, if any. If provided, the scopes will be expanded to include the scopes of the original token.\n   * @param stateChange - A callback that will be called whenever the state of the flow changes.\n   * @param abortSignal - The abort signal to use for the flow.\n   * @returns\n   */\n  export async function deviceAuthorizationFlow(\n    scope: studioAccessScopes.Scopes,\n    originalIdToken: string | undefined,\n    stateChange: (s: DeviceTokenFlowState) => void,\n    abortSignal?: AbortSignal,\n  ): Promise<\n    | {success: true; accessToken: string; idToken: string}\n    | {success: false; error: 'userDenied' | 'unknown'; msg?: string}\n  > {\n    const appLink = await getStudio()._rawLinks.app\n\n    let outerTries = 0\n    outer: while (outerTries < 2) {\n      outerTries++\n\n      if (abortSignal?.aborted) {\n        return {success: false, error: 'unknown', msg: 'Aborted'}\n      }\n\n      const nounce = generateRandomCodeVerifier()\n      const codeVerifier = generateRandomCodeVerifier()\n      const codeChallenge = await calculatePKCECodeChallenge(codeVerifier)\n\n      stateChange({\n        type: 'waitingForDeviceCode',\n        // codeChallenge,\n        // codeVerifier,\n      })\n\n      const flowInitResult = await appLink.api.studioAuth.deviceCode.mutate(\n        {\n          nounce,\n          codeChallenge,\n          codeChallengeMethod: 'S256',\n          scopes: scope,\n          originalIdToken,\n        },\n        {signal: abortSignal},\n      )\n\n      stateChange({\n        type: 'codeReady',\n        // codeChallenge,\n        // codeVerifier,\n        // deviceCode: flowInitResult.deviceCode,\n        verificationUriComplete: flowInitResult.verificationUriComplete,\n        // userCode: '',\n        // interval: flowInitResult.interval,\n        // lastTokenRequestTime: undefined,\n      })\n\n      // window.open(flowInitResult.verificationUriComplete, '_blank')\n\n      inner: while (true) {\n        if (abortSignal?.aborted) {\n          return {success: false, error: 'unknown', msg: 'Aborted'}\n        }\n        await delay(flowInitResult.interval + 1000, abortSignal)\n        try {\n          const result = await appLink.api.studioAuth.tokens.mutate(\n            {\n              deviceCode: flowInitResult.deviceCode,\n              codeVerifier,\n            },\n            {signal: abortSignal},\n          )\n          if (result.isError) {\n            if (result.error === 'invalidDeviceCode') {\n              console.error(result)\n              continue outer\n            } else if (result.error === 'userDeniedAuth') {\n              return {success: false, error: 'userDenied'}\n            } else if (result.error === 'notYetReady') {\n              continue inner\n            } else {\n              const msg = `Unknown error returned from app-studio-trpc: ${result.error} - ${result.errorMessage}`\n              console.error(msg)\n              return {success: false, error: 'unknown', msg}\n            }\n          } else {\n            const {idToken, accessToken} = result\n\n            // TODO verify that the refresh token has the correct nounce\n            if (false) {\n              console.warn('The request returned an invalid nounce')\n              continue outer\n            }\n\n            return {success: true, accessToken, idToken}\n          }\n        } catch (err) {\n          console.error(err)\n          return {\n            success: false,\n            error: 'unknown',\n            msg: (err as $IntentionalAny).message,\n          }\n        }\n      }\n    }\n    return {success: false, error: 'unknown'}\n  }\n\n  export async function refreshTokens(\n    originalIdToken: string,\n    abortSignal?: AbortSignal,\n  ): Promise<\n    | {success: true; accessToken: string; idToken: string}\n    | {success: false; error: 'invalidIdToken' | 'unknown'; msg: string}\n  > {\n    const appLink = await getStudio()._rawLinks.app\n    let tries = 0\n    const MAX_TRIES = 8\n    while (true) {\n      if (abortSignal?.aborted) {\n        return {success: false, error: 'unknown', msg: 'Aborted'}\n      }\n      tries++\n      if (tries > MAX_TRIES) {\n        return {success: false, error: 'unknown', msg: 'Too many tries'}\n      }\n      const result = await appLink.api.studioAuth.refreshAccessToken.mutate(\n        {refreshToken: originalIdToken},\n        {signal: abortSignal},\n      )\n      if (result.isError) {\n        if (result.error === 'invalidRefreshToken') {\n          throw new Error('Invalid refresh token')\n        } else {\n          if (tries > MAX_TRIES) {\n            return {success: false, error: 'unknown', msg: result.errorMessage}\n          }\n          continue\n        }\n      } else {\n        return {\n          accessToken: result.accessToken,\n          idToken: result.refreshToken,\n          success: true,\n        }\n      }\n    }\n  }\n\n  export async function destroyIdToken(\n    idToken: string,\n    abortSignal?: AbortSignal,\n  ): Promise<\n    | {success: true}\n    | {success: false; error: 'invalidIdToken' | 'unknown'; msg: string}\n  > {\n    const appLink = await getStudio()._rawLinks.app\n    const result = await appLink.api.studioAuth.destroyIdToken.mutate(\n      {idToken: idToken},\n      {signal: abortSignal},\n    )\n    if (result.isError) {\n      return {success: false, error: 'unknown', msg: result.errorMessage}\n    } else {\n      return {success: true}\n    }\n  }\n}\n\nfunction getIdTokenClaimsWithoutVerifying(\n  idToken: string,\n): undefined | studioAuthTokens.IdTokenPayload {\n  try {\n    const s = decodeJwt(idToken)\n    return s as $FixMe\n  } catch (err) {\n    console.log(`getIdTokenClaimsWithoutVerifying failed:`, err)\n    return undefined\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/IDBStorage.ts",
    "content": "import * as idb from 'idb-keyval'\n\n/**\n * Custom IDB keyval storage creator. Right now this exists solely as a more convenient way to use idb-keyval with a custom db name.\n * It also automatically prefixes the provided name with `theatrejs-` to avoid conflicts with other libraries.\n *\n * @param name - The name of the database\n * @returns An object with the same methods as idb-keyval, but with a custom database name\n */\nexport const createStore = (name: string) => {\n  const customStore = idb.createStore(`theatrejs-${name}`, 'default-store')\n\n  return {\n    set: (key: string, value: any) => idb.set(key, value, customStore),\n    get: <T = any>(key: string) => idb.get<T>(key, customStore),\n    del: (key: string) => idb.del(key, customStore),\n    keys: <T extends IDBValidKey>() => idb.keys<T>(customStore),\n    entries: <KeyType extends IDBValidKey, ValueType = any>() =>\n      idb.entries<KeyType, ValueType>(customStore),\n    values: <T = any>() => idb.values<T>(customStore),\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/PaneManager.ts",
    "content": "import {prism, val} from '@theatre/dataverse'\nimport SimpleCache from '@theatre/utils/SimpleCache'\nimport type {$IntentionalAny, StrictRecord} from '@theatre/core/types/public'\nimport type {Studio} from './Studio'\nimport type {PaneInstanceId, PaneInstance} from '@theatre/core/types/public'\nimport {emptyObject} from '@theatre/utils'\n\nexport default class PaneManager {\n  private readonly _cache = new SimpleCache()\n\n  constructor(private readonly _studio: Studio) {\n    this._instantiatePanesAsTheyComeIn()\n  }\n\n  private _instantiatePanesAsTheyComeIn() {\n    const allPanesD = this._getAllPanes()\n    allPanesD.onStale(() => {\n      allPanesD.getValue()\n    })\n  }\n\n  private _getAllPanes() {\n    return this._cache.get('_getAllPanels()', () =>\n      prism((): StrictRecord<PaneInstanceId, PaneInstance<string>> => {\n        const core = val(this._studio.coreP)\n        if (!core) return {}\n        const instanceDescriptors =\n          val(this._studio.atomP.historic.panelInstanceDesceriptors)! ??\n          emptyObject\n        const paneClasses =\n          val(this._studio.ephemeralAtom.pointer.extensions.paneClasses) ??\n          emptyObject\n\n        const instances: StrictRecord<PaneInstanceId, PaneInstance<string>> = {}\n        for (const instanceDescriptor of Object.values(instanceDescriptors)) {\n          if (!instanceDescriptor) continue\n          const panelClass = paneClasses[instanceDescriptor.paneClass]\n          if (!panelClass) continue\n          const {instanceId} = instanceDescriptor\n          const {extensionId, classDefinition: definition} = panelClass\n\n          const instance = prism.memo(\n            `instance-${instanceDescriptor.instanceId}`,\n            () => {\n              const inst: PaneInstance<$IntentionalAny> = {\n                extensionId,\n                instanceId,\n                definition,\n              }\n              return inst\n            },\n            [definition],\n          )\n\n          instances[instanceId] = instance\n        }\n        return instances\n      }),\n    )\n  }\n\n  get allPanesD() {\n    return this._getAllPanes()\n  }\n\n  createPane<PaneClass extends string>(\n    paneClass: PaneClass,\n  ): PaneInstance<PaneClass> {\n    const core = this._studio.core\n    if (!core) {\n      throw new Error(\n        `Can't create a pane because @theatre/core is not yet loaded`,\n      )\n    }\n\n    const extensionId = val(\n      this._studio.ephemeralAtom.pointer.extensions.paneClasses[paneClass]\n        .extensionId,\n    )\n\n    const allPaneInstances =\n      val(this._studio.atomP.historic.panelInstanceDesceriptors)! ?? emptyObject\n    let instanceId!: PaneInstanceId\n    for (let i = 1; i < 1000; i++) {\n      instanceId = `${paneClass} #${i}` as PaneInstanceId\n      if (!allPaneInstances[instanceId]) break\n    }\n\n    if (!extensionId) {\n      throw new Error(`Pane class \"${paneClass}\" is not registered.`)\n    }\n\n    this._studio.transaction(({stateEditors}) => {\n      stateEditors.studio.historic.panelInstanceDescriptors.setDescriptor({\n        instanceId,\n        paneClass,\n      })\n    })\n\n    return this._getAllPanes().getValue()[instanceId]!\n  }\n\n  destroyPane(instanceId: PaneInstanceId): void {\n    const core = this._studio.core\n    if (!core) {\n      throw new Error(\n        `Can't do this yet because @theatre/core is not yet loaded`,\n      )\n    }\n\n    this._studio.transaction(({stateEditors}) => {\n      stateEditors.studio.historic.panelInstanceDescriptors.remove({instanceId})\n    })\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/Scrub.ts",
    "content": "import type {$FixMe} from '@theatre/core/types/public'\nimport type {Pointer} from '@theatre/dataverse'\nimport {getPointerParts} from '@theatre/dataverse'\nimport type {Studio} from './Studio'\nimport type {CommitOrDiscardOrRecapture} from './StudioStore/StudioStore'\nimport type {IScrub, IScrubApi} from '@theatre/core'\nimport {__private} from '@theatre/core'\nconst {forEachPropDeep} = __private.propTypeUtils\nconst {isSheetObject} = __private.instanceTypes\n\ntype State_Captured = {\n  type: 'Captured'\n  transaction: CommitOrDiscardOrRecapture\n  flagsTransaction: CommitOrDiscardOrRecapture\n}\n\ntype State =\n  | {type: 'Ready'}\n  | State_Captured\n  | {type: 'Committed'}\n  | {type: 'Discarded'}\n\nlet lastScrubIdAsNumber = 0\n\nexport default class Scrub implements IScrub {\n  private readonly _id: string\n  private _state: State = {type: 'Ready'}\n  // private readonly _scrubApi: IScrubApi\n\n  get status() {\n    return this._state.type\n  }\n\n  constructor(private readonly _studio: Studio) {\n    this._id = String(lastScrubIdAsNumber++)\n  }\n\n  reset(): void {\n    const {_state: state} = this\n\n    if (state.type === 'Ready') {\n      return\n    } else if (state.type === 'Captured') {\n      this._state = {type: 'Ready'}\n      state.transaction.reset()\n      state.flagsTransaction.reset()\n    } else if (state.type === 'Committed') {\n      throw new Error(`This scrub is already committed and can't be reset.`)\n    } else {\n      throw new Error(`This scrub is already discarded and can't be reset.`)\n    }\n  }\n\n  commit(): void {\n    const {_state: state} = this\n\n    if (state.type === 'Captured') {\n      state.transaction.commit()\n      state.flagsTransaction.discard()\n      this._state = {type: 'Committed'}\n    } else if (state.type === 'Ready') {\n      console.warn(`Scrub is empty. Nothing to commit.`)\n      return\n    } else if (state.type === 'Committed') {\n      throw new Error(`This scrub is already committed.`)\n    } else {\n      throw new Error(`This scrub is already discarded and can't be comitted.`)\n    }\n  }\n\n  capture(fn: (api: IScrubApi) => void): void {\n    if (this._state.type === 'Ready' || this._state.type === 'Captured') {\n      let errored = true\n      try {\n        this._state = {\n          type: 'Captured',\n          ...this._capture(\n            fn,\n            this._state.type === 'Captured' ? this._state : undefined,\n          ),\n        }\n        errored = false\n      } finally {\n        if (errored) {\n          console.error(\n            `This scrub's callback threw an error. We're undo-ing all of the changes made by this scrub, and marking it as discarded.`,\n          )\n          this._state = {type: 'Discarded'}\n        }\n      }\n    } else {\n      if (this._state.type === 'Committed') {\n        throw new Error(\n          `This scrub is already committed and cannot capture again. ` +\n            `If you wish to capture more, you can start a new studio.scrub() or do so before scrub.commit()`,\n        )\n      } else {\n        throw new Error(\n          `This scrub is already discarded and cannot capture again. ` +\n            `If you wish to capture more, you can start a new studio.scrub() or do so before scrub.discard()`,\n        )\n      }\n    }\n  }\n\n  private _capture(\n    fn: (api: IScrubApi) => void,\n    existingTransactions?: {\n      transaction: CommitOrDiscardOrRecapture\n      flagsTransaction: CommitOrDiscardOrRecapture\n    },\n  ): {\n    transaction: CommitOrDiscardOrRecapture\n    flagsTransaction: CommitOrDiscardOrRecapture\n  } {\n    const sets: Array<Pointer<$FixMe>> = []\n    const transaction = this._studio.tempTransaction(\n      (transactionApi) => {\n        let running = true\n\n        const api: IScrubApi = {\n          set: (pointer, value) => {\n            if (!running) {\n              throw new Error(\n                `You seem to have called the scrub api after scrub.capture()`,\n              )\n            }\n\n            const {root, path} = getPointerParts(pointer)\n\n            if (!isSheetObject(root)) {\n              throw new Error(\n                `We can only scrub props of Sheet Objects for now`,\n              )\n            }\n\n            transactionApi.set(pointer, value)\n            sets.push(pointer as Pointer<$FixMe>)\n          },\n        }\n\n        try {\n          fn(api)\n        } finally {\n          running = false\n        }\n      },\n      existingTransactions?.transaction,\n    )\n\n    const flagsTransaction = this._studio.tempTransaction(\n      ({stateEditors}) => {\n        sets.forEach((pointer) => {\n          const {root, path} = getPointerParts(pointer)\n          if (!isSheetObject(root)) {\n            return\n          }\n\n          const defaultValueOfProp = root.template.getDefaultsAtPointer(pointer)\n\n          forEachPropDeep(\n            defaultValueOfProp,\n            (val, pathToProp) => {\n              stateEditors.studio.ephemeral.projects.stateByProjectId.stateBySheetId.stateByObjectKey.propsBeingScrubbed.flag(\n                {...root.address, pathToProp},\n              )\n            },\n            path,\n          )\n        })\n      },\n      existingTransactions?.flagsTransaction,\n    )\n\n    return {transaction, flagsTransaction}\n  }\n\n  discard(): void {\n    const {_state: state} = this\n\n    if (state.type === 'Captured' || state.type === 'Ready') {\n      if (state.type === 'Captured') {\n        state.transaction.discard()\n        state.flagsTransaction.discard()\n      }\n      this._state = {type: 'Discarded'}\n    } else if (state.type === 'Committed') {\n      throw new Error(`This scrub is already committed and can't be discarded.`)\n    } else {\n      throw new Error(`This scrub is already discarded`)\n    }\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/Storno/Storno.ts",
    "content": "import type {Prism} from '@theatre/dataverse'\nimport {Atom, prism, val} from '@theatre/dataverse'\nimport type {$FixMe} from '@theatre/core/types/public'\n\ntype State = {\n  loginState:\n    | {loggedIn: false}\n    | {loggedIn: true; accessToken: string; refreshToken: string}\n\n  authenticateProcessState:\n    | {\n        // the authentication flow is not started, becuase either the user is already logged in, or the user hasn't tried to log in yet\n        type: 'idle'\n      }\n    | {\n        // the user tried to log in, and we're waiting for the server to generate a checkToken, after which we'll redirect the user to the authentication page of the server\n        type: 'autnenticating/waiting-for-checkToken'\n        // the time at which the user tried to log in\n        time: number\n        // a random string generated on the client, which will be used to identify the authentication flow\n        clientFlowToken: string\n        // the time at which waiting for checkToken will expire\n        expiresAt: number\n      }\n    | {\n        // the user tried to log in, but the server failed to generate a checkToken. We should display an error message to the user\n        type: 'authenticating/waiting-for-checkToken/error'\n        error: {code: string; message: string}\n        // the time at which the error was received\n        time: number\n      }\n    | {\n        // we've received a checkToken\n        type: 'autnenticating/waiting-for-accessToken'\n        checkToken: string\n        // the url to which we should redirect the user\n        userAuthUrl: string\n        // the interval at which we should poll the server for the access token\n        interval: number\n        // the clientFlowToken that we sent to the server\n        clientFlowToken: string\n        // the time at which waiting for accessToken will expire\n        expiresAt: number\n      }\n    | {\n        // for some reason, the server did not send us an access token. We should display an error message to the user\n        type: 'autnenticating/waiting-for-accessToken/error'\n        error:\n          | {\n              // user denied this session access\n              code: 0\n              message: string\n            }\n          | {\n              // other error\n              code: 1\n              message: string\n            }\n      }\n    | {\n        // we've received an access/refreshtoken (saved to loginState). This state is used to display a success message to the user, after which we'll switch to idle\n        type: 'success'\n        time: number\n      }\n}\n\ntype UserInfo = {\n  email: string\n  displayName: string\n  avatarUrl: string\n  id: string\n}\n\nexport default class Storno {\n  protected _atom: Atom<State>\n\n  protected _userInfo: Prism<null | UserInfo>\n\n  constructor() {\n    this._atom = new Atom<State>({\n      loginState: {loggedIn: false},\n      authenticateProcessState: {type: 'idle'},\n    })\n\n    this._userInfo = prism(() => {\n      const loginState = val(this._atom.pointer.loginState)\n      if (!loginState.loggedIn) {\n        return null\n      }\n\n      const {accessToken} = loginState\n      const payload = accessToken as $FixMe // TODO: decode payload\n      // let's trust that the payload is correct\n\n      return payload.userInfo\n    })\n  }\n\n  get userInfoPr(): Prism<null | UserInfo> {\n    return null as $FixMe\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/Studio.ts",
    "content": "import Scrub from '@theatre/studio/Scrub'\nimport type {StudioHistoricState} from '@theatre/core/types/private/studio'\nimport UI from '@theatre/studio/UI/UI'\nimport type {Pointer, Ticker} from '@theatre/dataverse'\nimport {Atom, PointerProxy, pointerToPrism} from '@theatre/dataverse'\nimport type {\n  CommitOrDiscardOrRecapture,\n  ITransactionPrivateApi,\n} from './StudioStore/StudioStore'\nimport StudioStore from './StudioStore/StudioStore'\nimport type {\n  IExtension,\n  IStudio,\n  PaneClassDefinition,\n  InitOpts,\n} from '@theatre/core/types/public'\nimport TheatreStudio from './TheatreStudio'\nimport {nanoid} from 'nanoid/non-secure'\nimport type Project from '@theatre/core/projects/Project'\nimport type {CoreBits} from '@theatre/core/CoreBundle'\nimport SimpleCache from '@theatre/utils/SimpleCache'\nimport type {IProject, ISheet, ProjectId} from '@theatre/core'\nimport PaneManager from './PaneManager'\nimport type * as _coreExports from '@theatre/core/coreExports'\nimport type {\n  OnDiskState,\n  ProjectEphemeralState,\n} from '@theatre/core/types/private/core'\nimport type {Deferred} from '@theatre/utils/defer'\nimport {defer} from '@theatre/utils/defer'\nimport checkForUpdates from './checkForUpdates'\nimport shallowEqual from 'shallowequal'\nimport {createStore} from './IDBStorage'\nimport {getAllPossibleAssetIDs} from '@theatre/studio/utils/assets'\nimport {notify} from './notify'\nimport type {RafDriverPrivateAPI} from '@theatre/core/rafDrivers'\nimport {persistAtom} from '@theatre/utils/persistAtom'\nimport produce from 'immer'\nimport Storno from './Storno/Storno'\nimport Auth from './Auth'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport AppLink from './SyncStore/AppLink'\nimport SyncServerLink from './SyncStore/SyncServerLink'\nimport type {TrpcClientWrapped} from './SyncStore/utils'\nimport {wrapTrpcClientWithAuth} from './SyncStore/utils'\nimport {env} from './env'\n\nconst DEFAULT_PERSISTENCE_KEY = 'theatre-0.4'\n\nexport type CoreExports = typeof _coreExports\n\nconst STUDIO_NOT_INITIALIZED_MESSAGE = `You seem to have imported '@theatre/studio' but haven't initialized it. You can initialize the studio by:\n\\`\\`\\`\nimport theatre from '@theatre/core'\ntheatre.init({studio: true})\n\\`\\`\\`\n\n* If you didn't mean to import '@theatre/studio', this means that your bundler is not tree-shaking it. This is most likely a bundler misconfiguration.\n\n* If you meant to import '@theatre/studio' without showing its UI, you can do that by running:\n\n\\`\\`\\`\nimport theatre from '@theatre/core'\ntheatre.init({studio: true})\nstudio.ui.hide()\n\\`\\`\\`\n`\n\nconst STUDIO_INITIALIZED_LATE_MSG = `You seem to have imported '@theatre/studio' but called \\`studio.initialize()\\` after some delay.\nTheatre.js projects remain in pending mode (won't play their sequences) until the studio is initialized, so you should place the \\`studio.initialize()\\` line right after the import line:\n\n\\`\\`\\`\nimport theatre from '@theatre/core'\n// ... and other imports\n\nstudio.initialize()\n\\`\\`\\`\n`\n\nexport type StudioOpts = {\n  serverUrl: string\n  persistenceKey: string\n  usePersistentStorage: boolean\n  rafDriver: RafDriverPrivateAPI\n}\n\nexport type UpdateCheckerResponse =\n  | {hasUpdates: true; newVersion: string; releasePage: string}\n  | {hasUpdates: false}\n\nexport class Studio {\n  readonly ui: UI\n  // this._uiInitDeferred.promise will resolve once this._ui is set\n\n  readonly publicApi: IStudio\n  readonly address: {studioId: string}\n  readonly _projectsProxy: PointerProxy<Record<ProjectId, Project>> =\n    new PointerProxy(new Atom({}).pointer)\n\n  readonly projectsP: Pointer<Record<ProjectId, Project>> =\n    this._projectsProxy.pointer\n\n  readonly _store: StudioStore\n  readonly auth!: Auth\n  private readonly _storno = new Storno()\n\n  private _corePrivateApi: CoreBits['privateAPI'] | undefined\n\n  private readonly _cache = new SimpleCache()\n  readonly paneManager: PaneManager\n\n  /**\n   * An atom holding the exports of '\\@theatre/core'. Will be undefined if '\\@theatre/core' is never imported\n   */\n  private _coreAtom = new Atom<{core?: CoreExports}>({})\n\n  readonly ephemeralAtom = new Atom<{\n    // reflects the value of _initializedDeferred.promise. Since it's in an atom, it can be accessed via a pointer\n    initialized: boolean\n    coreByProject: {[projectId in string]: ProjectEphemeralState}\n    extensions: {\n      byId: {[extensionId in string]?: IExtension}\n      paneClasses: {\n        [paneClassName in string]?: {\n          extensionId: string\n          classDefinition: PaneClassDefinition\n        }\n      }\n    }\n  }>({\n    initialized: false,\n    coreByProject: {},\n    extensions: {\n      byId: {},\n      paneClasses: {},\n    },\n  })\n\n  readonly ahistoricAtom = new Atom<{\n    updateChecker?: {\n      // timestamp of the last time we checked for updates\n      lastChecked: number\n      result: UpdateCheckerResponse | 'error'\n    }\n  }>({})\n  /**\n   * Tracks whether studio.initialize() is called.\n   */\n  private _initializeFnCalled = false\n  /**\n   * Will be set to true if studio.initialize() isn't called after 100ms.\n   */\n  private _didWarnAboutNotInitializing = false\n\n  /**\n   * This will be set as soon as `@theatre/core` registers itself on `@theatre/studio`\n   */\n  private _coreBits: CoreBits | undefined\n\n  private _optsDeferred: Deferred<StudioOpts>\n\n  private readonly _initializedPromise: Promise<void>\n\n  readonly _rawLinks: {\n    app: Promise<AppLink>\n    syncServer: Promise<SyncServerLink>\n  }\n\n  readonly authedLinks!: {\n    app: TrpcClientWrapped<AppLink['api']>\n    syncServer: TrpcClientWrapped<SyncServerLink['api']>\n  }\n\n  get ticker(): Ticker {\n    if (!this._rafDriver) {\n      throw new Error(\n        '`studio.ticker` was read before studio.initialize() was called.',\n      )\n    }\n    return this._rafDriver.ticker\n  }\n\n  private _rafDriver: RafDriverPrivateAPI | undefined\n\n  get atomP() {\n    return this._store.atomP\n  }\n\n  get _optsPromise() {\n    return this._optsDeferred.promise\n  }\n\n  constructor() {\n    this.address = {studioId: nanoid(10)}\n    this._optsDeferred = defer()\n\n    const syncServerLinkDeferred = defer<SyncServerLink>()\n    const syncServerLink = syncServerLinkDeferred.promise\n    const appLink = this._optsPromise.then(\n      ({serverUrl}): AppLink =>\n        typeof window === 'undefined'\n          ? (null as $IntentionalAny)\n          : new AppLink(serverUrl),\n    )\n\n    if (typeof window !== 'undefined') {\n      void appLink\n        .then((appLink) => {\n          return appLink.api.syncServerUrl.query().then((url) => {\n            syncServerLinkDeferred.resolve(new SyncServerLink(url))\n          })\n        })\n        .catch((err) => {\n          syncServerLinkDeferred.reject(err)\n          console.error(err)\n        })\n    } else {\n      syncServerLinkDeferred.resolve(null as $IntentionalAny)\n    }\n\n    this._rawLinks = {app: appLink, syncServer: syncServerLink}\n\n    if (typeof window !== 'undefined' && process.env.NODE_ENV !== 'test') {\n      this.auth = new Auth(this)\n      this.authedLinks = {\n        syncServer: wrapTrpcClientWithAuth(\n          this._rawLinks.syncServer.then((s) => s.api),\n          (fn: any, args: any[], path): any => {\n            return this.auth.wrapTrpcProcedureWithAuth(\n              fn,\n              args as $IntentionalAny,\n              path,\n            )\n          },\n        ),\n\n        app: wrapTrpcClientWithAuth(\n          this._rawLinks.app.then((s) => s.api),\n          (fn: any, args: any[], path): any =>\n            this.auth.wrapTrpcProcedureWithAuth(\n              fn,\n              args as $IntentionalAny,\n              path,\n            ),\n        ),\n      }\n    }\n\n    this._store = new StudioStore(this)\n    this.publicApi = new TheatreStudio(this)\n\n    this.ui = new UI(this)\n\n    this._attachToIncomingProjects()\n    this.paneManager = new PaneManager(this)\n\n    // check whether studio.initialize() is called, but only if we're in the browser\n    if (typeof window !== 'undefined') {\n      setTimeout(() => {\n        if (!this._initializeFnCalled) {\n          console.error(STUDIO_NOT_INITIALIZED_MESSAGE)\n          this._didWarnAboutNotInitializing = true\n        }\n      }, 100)\n    }\n\n    this._initializedPromise = this._init()\n\n    this._initializedPromise.catch((reason) => {\n      console.error(reason)\n      return Promise.reject(reason)\n    })\n  }\n\n  async _init() {\n    const storeOpts = await this._optsDeferred.promise\n\n    const ahistoricAtomInitializedD = defer<void>()\n    if (storeOpts.usePersistentStorage) {\n      persistAtom(\n        this.ahistoricAtom,\n        this.ahistoricAtom.pointer,\n        () => {\n          ahistoricAtomInitializedD.resolve()\n        },\n        'theatrejs-studio-ahistoric',\n      )\n    } else {\n      ahistoricAtomInitializedD.resolve()\n    }\n\n    this._rafDriver = storeOpts.rafDriver\n\n    if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined') {\n      await this.ui.ready\n    }\n\n    await ahistoricAtomInitializedD.promise\n    this.ephemeralAtom.setByPointer((p) => p.initialized, true)\n\n    if (process.env.NODE_ENV !== 'test') {\n      this.ui.render()\n      if (navigator.onLine) {\n        checkForUpdates().catch((err) => {\n          console.error(err)\n        })\n      }\n    }\n  }\n\n  async initialize(opts?: InitOpts) {\n    if (!this._coreBits) {\n      throw new Error(\n        `You seem to have imported \\`@theatre/studio\\` without importing \\`@theatre/core\\`. Make sure to include an import of \\`@theatre/core\\` before calling \\`studio.initializer()\\`.`,\n      )\n    }\n\n    if (this._initializeFnCalled) {\n      return this._initializedPromise\n    }\n    this._initializeFnCalled = true\n\n    if (this._didWarnAboutNotInitializing) {\n      console.warn(STUDIO_INITIALIZED_LATE_MSG)\n    }\n\n    if (this._optsDeferred.status === 'pending') {\n      this._optsDeferred.resolve(sanitizeOpts(opts, this._coreBits))\n    }\n\n    return this._initializedPromise\n  }\n\n  get initialized(): Promise<void> {\n    return this._initializedPromise\n  }\n\n  get initializedP(): Pointer<boolean> {\n    return this.ephemeralAtom.pointer.initialized\n  }\n\n  _attachToIncomingProjects() {\n    const projectsD = pointerToPrism(this.projectsP)\n\n    const attachToProjects = (projects: Record<string, Project>) => {\n      for (const project of Object.values(projects)) {\n        if (!project.isAttachedToStudio) {\n          project.attachToStudio(this)\n        }\n      }\n    }\n    projectsD.onStale(() => {\n      attachToProjects(projectsD.getValue())\n    })\n    attachToProjects(projectsD.getValue())\n  }\n\n  setCoreBits(coreBits: CoreBits) {\n    this._coreBits = coreBits\n    this._corePrivateApi = coreBits.privateAPI\n    this._coreAtom.setByPointer((p) => p.core, coreBits.coreExports)\n    this._setProjectsP(coreBits.projectsP)\n  }\n\n  private _setProjectsP(projectsP: Pointer<Record<ProjectId, Project>>) {\n    this._projectsProxy.setPointer(projectsP)\n  }\n\n  scrub() {\n    return new Scrub(this)\n  }\n\n  tempTransaction(\n    fn: (api: ITransactionPrivateApi) => void,\n    existingTransaction: CommitOrDiscardOrRecapture | undefined = undefined,\n  ): CommitOrDiscardOrRecapture {\n    return this._store.tempTransaction(fn, existingTransaction)\n  }\n\n  transaction(\n    fn: (api: ITransactionPrivateApi) => void,\n    undoable: boolean = true,\n  ): unknown {\n    return this._store.transaction(fn, undoable)\n  }\n\n  __dev_startHistoryFromScratch(newHistoricPart: StudioHistoricState) {\n    return this._store.__dev_startHistoryFromScratch(newHistoricPart)\n  }\n\n  get corePrivateAPI() {\n    return this._corePrivateApi\n  }\n\n  get core() {\n    return this._coreAtom.get().core\n  }\n\n  get coreP() {\n    return this._coreAtom.pointer.core\n  }\n\n  extend(extension: IExtension, opts?: {__experimental_reconfigure?: boolean}) {\n    if (!extension || typeof extension !== 'object') {\n      throw new Error(`Extensions must be JS objects`)\n    }\n\n    if (typeof extension.id !== 'string') {\n      throw new Error(`extension.id must be a string`)\n    }\n\n    const reconfigure = opts?.__experimental_reconfigure === true\n\n    const extensionId = extension.id\n\n    const prevExtension = this.ephemeralAtom.get().extensions.byId[extensionId]\n    if (prevExtension) {\n      if (reconfigure) {\n      } else {\n        if (\n          extension === prevExtension ||\n          shallowEqual(extension, prevExtension)\n        ) {\n          // probably running studio.extend() several times because of hot reload.\n          // as long as it's the same extension, we can safely ignore.\n          return\n        }\n        throw new Error(\n          `Extension id \"${extension.id}\" is already defined. If you mean to re-configure the extension, do it like this: studio.extend(extension, {__experimental_reconfigure: true})})`,\n        )\n      }\n    }\n\n    this.ephemeralAtom.reduceByPointer(\n      (p) => p.extensions,\n      (extensions) => {\n        return produce(extensions, (draft) => {\n          draft.byId[extension.id] = extension\n\n          const allPaneClasses = draft.paneClasses\n\n          if (reconfigure && prevExtension) {\n            // remove all pane classes that were set by the previous version of the extension\n            prevExtension.panes?.forEach((classDefinition) => {\n              delete allPaneClasses[classDefinition.class]\n            })\n          }\n\n          // if the extension defines pane classes, add them to the list of all pane classes\n          extension.panes?.forEach((classDefinition) => {\n            if (typeof classDefinition.class !== 'string') {\n              throw new Error(`pane.class must be a string`)\n            }\n\n            if (classDefinition.class.length < 3) {\n              throw new Error(\n                `pane.class should be a string with 3 or more characters`,\n              )\n            }\n\n            const existing = allPaneClasses[classDefinition.class]\n            if (existing) {\n              if (reconfigure && existing.extensionId === extension.id) {\n                // well this should never happen because we already deleted the pane class above\n                console.warn(\n                  `Pane class \"${classDefinition.class}\" already exists. This is a bug in Theatre.js. Please report it at https://github.com/theatre-js/theatre/issues/new`,\n                )\n              } else {\n                throw new Error(\n                  `Pane class \"${classDefinition.class}\" already exists and is supplied by extension ${existing}`,\n                )\n              }\n            }\n\n            allPaneClasses[classDefinition.class] = {\n              extensionId: extension.id,\n              classDefinition: classDefinition,\n            }\n          })\n        })\n      },\n    )\n  }\n\n  getStudioProject(core: CoreExports): IProject {\n    return this._cache.get('getStudioProject', () => core.getProject('Studio'))\n  }\n\n  getExtensionSheet(extensionId: string, core: CoreExports): ISheet {\n    return this._cache.get('extensionSheet-' + extensionId, () =>\n      this.getStudioProject(core)!.sheet('Extension ' + extensionId),\n    )\n  }\n\n  undo() {\n    this._store.undo()\n  }\n\n  redo() {\n    this._store.redo()\n  }\n\n  createContentOfSaveFile(projectId: string): OnDiskState {\n    return this._store.createContentOfSaveFile(projectId as ProjectId)\n  }\n\n  /** A function that returns a promise to an object containing asset storage methods for a project to be used by studio. */\n  async createAssetStorage(project: Project, baseUrl?: string) {\n    // in SSR we bail out and return a dummy asset manager\n    if (typeof window === 'undefined') {\n      return {\n        getAssetUrl: () => '',\n        createAsset: () => Promise.resolve(null),\n      }\n    }\n\n    // Check for support.\n    if (!('indexedDB' in window)) {\n      if (process.env.NODE_ENV !== 'test')\n        console.log(\"This browser doesn't support IndexedDB.\")\n\n      return {\n        getAssetUrl: (assetId: string) => {\n          throw new Error(\n            `IndexedDB is required by the default asset manager, but it's not supported by this browser. To use assets, please provide your own asset manager to the project config.`,\n          )\n        },\n        createAsset: (asset: Blob) => {\n          throw new Error(\n            `IndexedDB is required by the default asset manager, but it's not supported by this browser. To use assets, please provide your own asset manager to the project config.`,\n          )\n        },\n      }\n    }\n\n    const idb = createStore(`${project.address.projectId}-assets`)\n\n    // get all possible asset ids referenced by either static props or keyframes\n    const possibleAssetIDs = getAllPossibleAssetIDs(project)\n\n    // Clean up assets not referenced by the project. We can only do this at the start because otherwise\n    // we'd break undo/redo.\n    const idbKeys = await idb.keys<string>()\n    await Promise.all(\n      idbKeys.map(async (key) => {\n        if (!possibleAssetIDs.includes(key)) {\n          await idb.del(key)\n        }\n      }),\n    )\n\n    // Clean up idb entries exported to disk\n    await Promise.all(\n      idbKeys.map(async (key) => {\n        const assetUrl = `${baseUrl}/${key}`\n\n        try {\n          const response = await fetch(assetUrl, {method: 'HEAD'})\n          if (response.ok) {\n            await idb.del(key)\n          }\n        } catch (e) {\n          notify.error(\n            'Failed to access assets',\n            `Failed to access assets at ${\n              project.config.assets?.baseUrl ?? '/'\n            }. This is likely due to a CORS issue.`,\n          )\n        }\n      }),\n    )\n\n    // A map for caching the assets outside of the db. We also need this to be able to retrieve idb asset urls synchronously.\n    const assetsMap = new Map(await idb.entries<string, Blob>())\n\n    // A map for caching the object urls created from idb assets.\n    const urlCache = new Map<Blob, string>()\n\n    /** Gets idb aset url from asset blob */\n    const getUrlForAsset = (asset: Blob) => {\n      if (urlCache.has(asset)) {\n        return urlCache.get(asset)!\n      } else {\n        const url = URL.createObjectURL(asset)\n        urlCache.set(asset, url)\n        return url\n      }\n    }\n\n    /** Gets idb asset url from id */\n    const getUrlForId = (assetId: string) => {\n      const asset = assetsMap.get(assetId)\n      if (!asset) {\n        throw new Error(`Asset with id ${assetId} not found`)\n      }\n      return getUrlForAsset(asset)\n    }\n\n    return {\n      getAssetUrl: (assetId: string) => {\n        return assetsMap.has(assetId)\n          ? getUrlForId(assetId)\n          : `${baseUrl}/${assetId}`\n      },\n      createAsset: async (asset: File) => {\n        const existingIDs = getAllPossibleAssetIDs(project)\n\n        let sameSame = false\n\n        if (existingIDs.includes(asset.name)) {\n          let existingAsset: Blob | undefined\n          try {\n            existingAsset =\n              assetsMap.get(asset.name) ??\n              (await fetch(`${baseUrl}/${asset.name}`).then((r) =>\n                r.ok ? r.blob() : undefined,\n              ))\n          } catch (e) {\n            notify.error(\n              'Failed to access assets',\n              `Failed to access assets at ${\n                project.config.assets?.baseUrl ?? '/'\n              }. This is likely due to a CORS issue.`,\n            )\n\n            return Promise.resolve(null)\n          }\n\n          if (existingAsset) {\n            const blobCompare = (await import('blob-compare')).default\n\n            // @ts-ignore\n            sameSame = await blobCompare.isEqual(asset, existingAsset)\n\n            // if same same, we do nothing\n            if (sameSame) {\n              return asset.name\n              // if different, we ask the user to pls rename\n            } else {\n              /** Initiates rename using a dialog. Returns a boolean indicating if the rename was succesful. */\n              const renameAsset = (text: string): boolean => {\n                const newAssetName = prompt(text, asset.name)\n\n                if (newAssetName === null) {\n                  // asset creation canceled\n                  return false\n                } else if (newAssetName === '') {\n                  return renameAsset(\n                    'Asset name cannot be empty. Please choose a different file name for this asset.',\n                  )\n                } else if (existingIDs.includes(newAssetName)) {\n                  console.log(existingIDs)\n                  return renameAsset(\n                    'An asset with this name already exists. Please choose a different file name for this asset.',\n                  )\n                }\n\n                // rename asset\n                asset = new File([asset], newAssetName, {type: asset.type})\n                return true\n              }\n\n              // rename asset returns false if the user cancels the rename\n              const success = renameAsset(\n                'An asset with this name already exists. Please choose a different file name for this asset.',\n              )\n\n              if (!success) {\n                return null\n              }\n            }\n          }\n        }\n\n        assetsMap.set(asset.name, asset)\n        await idb.set(asset.name, asset)\n        return asset.name\n      },\n    }\n  }\n\n  clearPersistentStorage(persistenceKey = DEFAULT_PERSISTENCE_KEY) {\n    this._store.__experimental_clearPersistentStorage(persistenceKey)\n  }\n}\n\nfunction sanitizeOpts(\n  opts: InitOpts | undefined,\n  coreBits: CoreBits,\n): StudioOpts {\n  const storeOpts: StudioOpts = {\n    persistenceKey: DEFAULT_PERSISTENCE_KEY,\n    usePersistentStorage: true,\n    serverUrl: env.BACKEND_URL ?? 'https://app.theatrejs.com',\n    rafDriver: coreBits.getCoreRafDriver(),\n  }\n\n  if (typeof opts?.serverUrl == 'string') {\n    if (\n      // a fully formed url\n      opts.serverUrl.match(/^(https?:)?\\/\\//) &&\n      // not ending with a slash\n      !opts.serverUrl.endsWith('/')\n    ) {\n      storeOpts.serverUrl = opts.serverUrl\n    } else {\n      throw new Error(\n        'parameter `serverUrl` in `theatre.init({studio: true, serverUrl})` must be either undefined or a fully formed url (e.g. `https://app.theatrejs.com`)',\n      )\n    }\n  }\n\n  if (typeof opts?.persistenceKey === 'string') {\n    storeOpts.persistenceKey = opts.persistenceKey\n  }\n\n  if (opts?.usePersistentStorage === false || typeof window === 'undefined') {\n    storeOpts.usePersistentStorage = false\n  }\n\n  if (opts?.__experimental_rafDriver) {\n    if (opts?.__experimental_rafDriver.type !== 'Theatre_RafDriver_PublicAPI') {\n      throw new Error(\n        'parameter `rafDriver` in `theatre.init({studio: true, __experimental_rafDriver})` must be either be undefined, or the return type of core.createRafDriver()',\n      )\n    }\n\n    const rafDriverPrivateApi = coreBits.privateAPI(\n      opts.__experimental_rafDriver,\n    )\n    if (!rafDriverPrivateApi) {\n      // TODO - need to educate the user about this edge case\n      throw new Error(\n        'parameter `rafDriver` in `theatre.init({studio: true, __experimental_rafDriver})` seems to come from a different version of `@theatre/core` than the version that is attached to `@theatre/studio`',\n      )\n    }\n    storeOpts.rafDriver = rafDriverPrivateApi\n  }\n\n  return storeOpts\n}\n"
  },
  {
    "path": "packages/studio/src/StudioBundle.ts",
    "content": "import type CoreBundle from '@theatre/core/CoreBundle'\nimport type {CoreBits} from '@theatre/core/CoreBundle'\nimport type {Studio} from './Studio'\n\nexport default class StudioBundle {\n  private _coreBundle: undefined | CoreBundle\n  constructor(private readonly _studio: Studio) {}\n  get type(): 'Theatre_StudioBundle' {\n    return 'Theatre_StudioBundle'\n  }\n\n  registerCoreBundle(coreBundle: CoreBundle) {\n    if (this._coreBundle) {\n      throw new Error(\n        `StudioBundle.coreBundle is already registered. This is a bug.`,\n      )\n    }\n    this._coreBundle = coreBundle\n    let coreBits!: CoreBits\n\n    coreBundle.getBitsForStudio(this._studio, (bits) => {\n      coreBits = bits\n    })\n\n    this._studio.setCoreBits(coreBits)\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/StudioStore/StudioStore.ts",
    "content": "import type {\n  StudioAhistoricState,\n  StudioEphemeralState,\n  StudioHistoricState,\n  StudioState,\n} from '@theatre/core/types/private'\nimport type {$FixMe, $IntentionalAny, VoidFn} from '@theatre/core/types/public'\nimport {Atom} from '@theatre/dataverse'\nimport type {Pointer} from '@theatre/dataverse'\nimport type {Draft} from 'immer'\nimport type {OnDiskState} from '@theatre/core/types/private'\nimport * as Saaz from '@theatre/saaz'\nimport type {ProjectId} from '@theatre/core/types/public'\nimport {schema} from '@theatre/sync-server/state/schema'\nimport type {\n  IInvokableDraftEditors,\n  IStateEditors,\n  StateEditorsAPI,\n} from '@theatre/sync-server/state/schema'\nimport createTransactionPrivateApi from './createTransactionPrivateApi'\nimport {SaazBack} from '@theatre/saaz'\nimport type {Studio} from '@theatre/studio/Studio'\nimport getStudio from '@theatre/studio/getStudio'\n\nexport type Drafts = {\n  historic: Draft<StudioHistoricState>\n  ahistoric: Draft<StudioAhistoricState>\n  ephemeral: Draft<StudioEphemeralState>\n}\n\nexport interface ITransactionPrivateApi {\n  set<T>(pointer: Pointer<T>, value: T): void\n  unset<T>(pointer: Pointer<T>): void\n  stateEditors: IInvokableDraftEditors\n}\n\nexport type CommitOrDiscardOrRecapture = {\n  commit: (undoable?: boolean) => void\n  discard: VoidFn\n  recapture: (fn: (api: ITransactionPrivateApi) => void) => void\n  reset: VoidFn\n}\n\nexport default class StudioStore {\n  private readonly _atom: Atom<StudioState>\n  readonly atomP: Pointer<StudioState>\n\n  private _saaz: Saaz.SaazFront<\n    {$schemaVersion: number},\n    IStateEditors,\n    StateEditorsAPI,\n    StudioState\n  >\n\n  constructor(readonly studio: Studio) {\n    const backend =\n      typeof window === 'undefined'\n        ? new SaazBack({\n            storageAdapter: new Saaz.BackMemoryAdapter(),\n            dbName: 'test',\n            schema,\n          })\n        : createTrpcBackend(\n            this.studio._optsPromise.then((opts) => opts.persistenceKey),\n          )\n\n    const saaz = new Saaz.SaazFront({\n      schema,\n      dbName: 'test',\n      storageAdapter:\n        typeof window === 'undefined' || process.env.NODE_ENV === 'test' || true\n          ? new Saaz.FrontMemoryAdapter()\n          : new Saaz.FrontIDBAdapter('blah', 'test'),\n      backend,\n    })\n    this._saaz = saaz as $IntentionalAny\n\n    this._atom = new Atom({} as StudioState)\n    this._atom.set(saaz.state.cell as $FixMe)\n\n    saaz.subscribe((state) => {\n      this._atom.set(state.cell as $IntentionalAny)\n    })\n    this.atomP = this._atom.pointer\n  }\n\n  getState(): StudioState {\n    return this._atom.get()\n    // return this._reduxStore.getState()\n  }\n\n  __experimental_clearPersistentStorage(persistenceKey: string): StudioState {\n    throw new Error(`Implement me?`)\n    // __experimental_clearPersistentStorage(this._reduxStore, persistenceKey)\n    return this.getState()\n  }\n\n  /**\n   * This method causes the store to start the history from scratch. This is useful\n   * for testing and development where you want to explicitly provide a state to the\n   * store.\n   */\n  __dev_startHistoryFromScratch(newHistoricPart: StudioHistoricState) {\n    throw new Error(`Implement me?`)\n    // this._reduxStore.dispatch(\n    //   studioActions.historic.startHistoryFromScratch(\n    //     studioActions.reduceParts((s) => ({...s, historic: newHistoricPart})),\n    //   ),\n    // )\n  }\n\n  transaction(\n    fn: (api: ITransactionPrivateApi) => void,\n    undoable: boolean = true,\n  ) {\n    this._saaz.tx(\n      () => {},\n      (draft) => {\n        let running = true\n\n        let ensureRunning = () => {\n          if (!running) {\n            throw new Error(\n              `You seem to have called the transaction api after studio.transaction() has finished running`,\n            )\n          }\n        }\n        const transactionApi = createTransactionPrivateApi(ensureRunning, draft)\n        const ret = fn(transactionApi)\n        running = false\n        return ret\n      },\n      undoable,\n    )\n    return\n  }\n\n  tempTransaction(\n    fn: (api: ITransactionPrivateApi) => void,\n    existingTransaction: CommitOrDiscardOrRecapture | undefined = undefined,\n  ): CommitOrDiscardOrRecapture {\n    if (existingTransaction) {\n      existingTransaction.recapture(fn)\n      return existingTransaction\n    }\n\n    const t = this._saaz.tempTx(\n      () => {},\n      (draft) => {\n        let running = true\n\n        let ensureRunning = () => {\n          if (!running) {\n            throw new Error(\n              `You seem to have called the transaction api after studio.transaction() has finished running`,\n            )\n          }\n        }\n        const transactionApi = createTransactionPrivateApi(ensureRunning, draft)\n        const ret = fn(transactionApi)\n        running = false\n        return ret\n      },\n    )\n\n    return {\n      commit: t.commit,\n      discard: t.discard,\n      reset: t.reset,\n      recapture: (fn: (api: ITransactionPrivateApi) => void): void => {\n        t.recapture(\n          () => {},\n          (draft) => {\n            let running = true\n\n            let ensureRunning = () => {\n              if (!running) {\n                throw new Error(\n                  `You seem to have called the transaction api after studio.transaction() has finished running`,\n                )\n              }\n            }\n            const transactionApi = createTransactionPrivateApi(\n              ensureRunning,\n              draft,\n            )\n            const ret = fn(transactionApi)\n            running = false\n          },\n        )\n      },\n    }\n  }\n\n  undo() {\n    this._saaz.undo()\n  }\n\n  redo() {\n    this._saaz.redo()\n  }\n\n  createContentOfSaveFile(projectId: ProjectId): OnDiskState {\n    throw new Error(`Implement me`)\n    // const projectState =\n    //   this._reduxStore.getState().$persistent.historic.innerState.coreByProject[\n    //     projectId\n    //   ]\n\n    // if (!projectState) {\n    //   throw new Error(`Project ${projectId} has not been initialized.`)\n    // }\n\n    // const revision = generateDiskStateRevision()\n\n    // this.tempTransaction(({stateEditors}) => {\n    //   stateEditors.coreByProject.historic.revisionHistory.add({\n    //     projectId,\n    //     revision,\n    //   })\n    // }).commit()\n\n    // const projectHistoricState =\n    //   this._reduxStore.getState().$persistent.historic.innerState.coreByProject[\n    //     projectId\n    //   ]\n\n    // const generatedOnDiskState: OnDiskState = {\n    //   ...projectHistoricState,\n    // }\n\n    // return generatedOnDiskState\n  }\n\n  // get appApi(): TrpcClientWrapped<AppLink['api']> {\n  //   return this.auth.appApi\n  // }\n\n  // get syncServerApi(): TrpcClientWrapped<SyncServerLink['api']> {\n  //   return this.auth.syncServerApi\n  // }\n}\n\nfunction createTrpcBackend(\n  dbNamePromise: Promise<string>,\n): Saaz.SaazBackInterface {\n  const applyUpdates: Saaz.SaazBackInterface['applyUpdates'] = async (opts) => {\n    const syncServerApi = getStudio().authedLinks.syncServer\n    const dbName = await dbNamePromise\n    return await syncServerApi.projectState.saaz_applyUpdates.mutate({\n      dbName,\n      opts,\n    })\n  }\n\n  const updatePresence: Saaz.SaazBackInterface['updatePresence'] = async (\n    opts,\n  ) => {\n    const dbName = await dbNamePromise\n    const syncServerApi = getStudio().authedLinks.syncServer\n\n    return await syncServerApi.projectState.saaz_updatePresence.mutate({\n      dbName,\n      opts,\n    })\n  }\n\n  const getUpdatesSinceClock: Saaz.SaazBackInterface['getUpdatesSinceClock'] =\n    async (opts) => {\n      const dbName = await dbNamePromise\n      const syncServerApi = getStudio().authedLinks.syncServer\n\n      return await syncServerApi.projectState.saaz_getUpdatesSinceClock.query({\n        dbName,\n        opts,\n      })\n    }\n\n  const getLastIncorporatedPeerClock: Saaz.SaazBackInterface['getLastIncorporatedPeerClock'] =\n    async (opts) => {\n      const dbName = await dbNamePromise\n      const syncServerApi = getStudio().authedLinks.syncServer\n\n      return await syncServerApi.projectState.saaz_getLastIncorporatedPeerClock.query(\n        {\n          dbName,\n          opts,\n        },\n      )\n    }\n\n  const closePeer: Saaz.SaazBackInterface['closePeer'] = async (opts) => {\n    const dbName = await dbNamePromise\n    const syncServerApi = getStudio().authedLinks.syncServer\n\n    return await syncServerApi.projectState.saaz_closePeer.mutate({\n      dbName,\n      opts,\n    })\n  }\n\n  const subscribe: Saaz.SaazBackInterface['subscribe'] = async (\n    opts,\n    onUpdate,\n  ) => {\n    const dbName = await dbNamePromise\n    const syncServerApi = getStudio().authedLinks.syncServer\n\n    const subscription = syncServerApi.projectState.saaz_subscribe.subscribe(\n      {\n        dbName,\n        opts,\n      },\n      {\n        onData(d) {\n          onUpdate(d as $FixMe)\n        },\n      },\n    )\n\n    return subscription.unsubscribe\n  }\n  return {\n    applyUpdates,\n    getUpdatesSinceClock,\n    subscribe,\n    updatePresence,\n    closePeer,\n    getLastIncorporatedPeerClock,\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/StudioStore/createTransactionPrivateApi.ts",
    "content": "import type {Pointer} from '@theatre/dataverse'\nimport type {$FixMe, $IntentionalAny} from '@theatre/core/types/public'\nimport get from 'lodash-es/get'\nimport type {ITransactionPrivateApi} from './StudioStore'\nimport getDeep from '@theatre/utils/getDeep'\nimport type {SequenceTrackId} from '@theatre/core/types/public'\nimport {getPointerParts} from '@theatre/dataverse'\nimport type {\n  PropTypeConfig,\n  PropTypeConfig_AllSimples,\n  PropTypeConfig_Compound,\n} from '@theatre/core/types/public'\nimport type {PathToProp} from '@theatre/utils/pathToProp'\nimport {__private} from '@theatre/core'\nimport {isPlainObject} from 'lodash-es'\nimport userReadableTypeOfValue from '@theatre/utils/userReadableTypeOfValue'\nimport type {StudioState} from '@theatre/core/types/private'\nimport type {IInvokableDraftEditors} from '@theatre/sync-server/state/schema'\nimport {stateEditors} from '@theatre/sync-server/state/schema'\n\nconst {getPropConfigByPath, forEachPropDeep} = __private.propTypeUtils\nconst {isSheetObject} = __private.instanceTypes\n\n/**\n * Deep-clones a plain JS object or a `string | number | boolean`. In case of a plain\n * object, all its sub-props that aren't `string | number | boolean` get pruned. Also,\n * all empty objects (i.e. `{}`) get pruned.\n *\n * This is only used by {@link ITransactionPrivateApi.set} and it follows the global rule\n * that values pointed to by `object.props[...]` are never `null | undefined` or an empty object.\n */\nfunction cloneDeepSerializableAndPrune<T>(v: T): T | undefined {\n  if (\n    typeof v === 'boolean' ||\n    typeof v === 'string' ||\n    typeof v === 'number'\n  ) {\n    return v\n  } else if (isPlainObject(v)) {\n    const cloned: $IntentionalAny = {}\n    let clonedAtLeastOneProp = false\n    for (const [key, val] of Object.entries(v as {})) {\n      const clonedVal = cloneDeepSerializableAndPrune(val)\n      if (clonedVal !== undefined) {\n        cloned[key] = val\n        clonedAtLeastOneProp = true\n      }\n    }\n    if (clonedAtLeastOneProp) {\n      return cloned\n    }\n  } else {\n    return undefined\n  }\n}\n\n/**\n * TODO replace with {@link iteratePropType}\n */\nfunction forEachDeepSimplePropOfCompoundProp(\n  propType: PropTypeConfig_Compound<$IntentionalAny>,\n  path: Array<string | number>,\n  callback: (\n    propType: PropTypeConfig_AllSimples,\n    path: Array<string | number>,\n  ) => void,\n) {\n  for (const [key, subType] of Object.entries(propType.props)) {\n    if (subType.type === 'compound') {\n      forEachDeepSimplePropOfCompoundProp(subType, [...path, key], callback)\n    } else if (subType.type === 'enum') {\n      throw new Error(`Not yet implemented`)\n    } else {\n      callback(subType, [...path, key])\n    }\n  }\n}\n\nexport default function createTransactionPrivateApi(\n  ensureRunning: () => void,\n  draft: StudioState,\n): ITransactionPrivateApi {\n  const _invokableStateEditors = proxyStateEditors(\n    draft,\n    stateEditors,\n    ensureRunning,\n  ) as IInvokableDraftEditors\n  return {\n    set: (pointer, value) => {\n      ensureRunning()\n      const _value = cloneDeepSerializableAndPrune(value)\n      if (typeof _value === 'undefined') return\n\n      const {root, path} = getPointerParts(pointer as Pointer<$FixMe>)\n      if (isSheetObject(root)) {\n        const sequenceTracksTree = root.template\n          .getMapOfValidSequenceTracks_forStudio()\n          .getValue()\n\n        const propConfig = getPropConfigByPath(root.template.staticConfig, path)\n\n        if (!propConfig) {\n          throw new Error(\n            `Object ${\n              root.address.objectKey\n            } does not have a prop at ${JSON.stringify(path)}`,\n          )\n        }\n\n        const setStaticOrKeyframeProp = <T>(\n          value: T,\n          propConfig: PropTypeConfig_AllSimples,\n          path: PathToProp,\n        ) => {\n          if (value === undefined || value === null) {\n            return\n          }\n\n          const deserialized = cloneDeepSerializableAndPrune(\n            propConfig.deserializeAndSanitize(value),\n          )\n          if (deserialized === undefined) {\n            throw new Error(\n              `Invalid value ${userReadableTypeOfValue(\n                value,\n              )} for object.props${path\n                .map((key) => `[${JSON.stringify(key)}]`)\n                .join('')} is invalid`,\n            )\n          }\n\n          const propAddress = {...root.address, pathToProp: path}\n\n          const trackId = get(sequenceTracksTree, path) as $FixMe as\n            | SequenceTrackId\n            | undefined\n\n          if (typeof trackId === 'string') {\n            const seq = root.sheet.getSequence()\n            seq.position = seq.closestGridPosition(seq.position)\n            _invokableStateEditors.coreByProject.historic.sheetsById.sequence.setKeyframeAtPosition(\n              {\n                ...propAddress,\n                trackId,\n                position: seq.position,\n                value: value as $FixMe,\n                snappingFunction: seq.closestGridPosition,\n                type: 'bezier',\n              },\n            )\n          } else {\n            _invokableStateEditors.coreByProject.historic.sheetsById.staticOverrides.byObject.setValueOfPrimitiveProp(\n              {...propAddress, value: value as $FixMe},\n            )\n          }\n        }\n\n        if (propConfig.type === 'compound') {\n          const pathToTopPointer = getPointerParts(\n            pointer as $IntentionalAny,\n          ).path\n\n          const lengthOfTopPointer = pathToTopPointer.length\n          // If we are dealing with a compound prop, we recurse through its\n          // nested properties.\n          forEachDeepSimplePropOfCompoundProp(\n            propConfig,\n            pathToTopPointer,\n            (primitivePropConfig, pathToProp) => {\n              const pathToPropInProvidedValue =\n                pathToProp.slice(lengthOfTopPointer)\n\n              const v = getDeep(_value as {}, pathToPropInProvidedValue)\n              if (typeof v !== 'undefined') {\n                setStaticOrKeyframeProp(v, primitivePropConfig, pathToProp)\n              } else {\n                throw new Error(\n                  `Property object.props${pathToProp\n                    .map((key) => `[${JSON.stringify(key)}]`)\n                    .join('')} is required but not provided`,\n                )\n              }\n            },\n          )\n        } else if (propConfig.type === 'enum') {\n          throw new Error(`Enums aren't implemented yet`)\n        } else {\n          setStaticOrKeyframeProp(_value, propConfig, path)\n        }\n      } else {\n        throw new Error(\n          'Only setting props of SheetObject-s is supported in a transaction so far',\n        )\n      }\n    },\n    unset: (pointer) => {\n      ensureRunning()\n      const {root, path} = getPointerParts(pointer as Pointer<$FixMe>)\n      if (isSheetObject(root)) {\n        const sequenceTracksTree = root.template\n          .getMapOfValidSequenceTracks_forStudio()\n          .getValue()\n\n        const defaultValue = getDeep(\n          root.template.getDefaultValues().getValue(),\n          path,\n        )\n\n        const propConfig = getPropConfigByPath(\n          root.template.staticConfig,\n          path,\n        ) as PropTypeConfig\n\n        const unsetStaticOrKeyframeProp = <T>(value: T, path: PathToProp) => {\n          const propAddress = {...root.address, pathToProp: path}\n\n          const trackId = get(sequenceTracksTree, path) as $FixMe as\n            | SequenceTrackId\n            | undefined\n\n          if (typeof trackId === 'string') {\n            _invokableStateEditors.coreByProject.historic.sheetsById.sequence.unsetKeyframeAtPosition(\n              {\n                ...propAddress,\n                trackId,\n                position: root.sheet.getSequence().positionSnappedToGrid,\n              },\n            )\n          } else if (propConfig !== undefined) {\n            _invokableStateEditors.coreByProject.historic.sheetsById.staticOverrides.byObject.unsetValueOfPrimitiveProp(\n              propAddress,\n            )\n          }\n        }\n\n        if (propConfig.type === 'compound') {\n          forEachPropDeep(\n            defaultValue,\n            (v, pathToProp) => {\n              unsetStaticOrKeyframeProp(v, pathToProp)\n            },\n            getPointerParts(pointer).path,\n          )\n        } else {\n          unsetStaticOrKeyframeProp(defaultValue, path)\n        }\n      } else {\n        throw new Error(\n          'Only setting props of SheetObject-s is supported in a transaction so far',\n        )\n      }\n    },\n    get stateEditors() {\n      return _invokableStateEditors\n    },\n  }\n}\n\nfunction proxyStateEditors(\n  draft: StudioState,\n  part: $IntentionalAny = stateEditors,\n  ensureRunning: () => void,\n): {} {\n  return new Proxy(part, {\n    get(_, prop) {\n      ensureRunning()\n      if (Object.hasOwn(part, prop)) {\n        const v = part[prop as $IntentionalAny]\n        if (typeof v === 'function') {\n          return (opts: {}) => {\n            ensureRunning()\n            return v(draft, {}, opts)\n          }\n        } else if (typeof v === 'object' && v !== null) {\n          return proxyStateEditors(draft, v, ensureRunning)\n        } else {\n          return v\n        }\n      }\n      return undefined\n    },\n  })\n}\n"
  },
  {
    "path": "packages/studio/src/StudioStore/generateDiskStateRevision.ts",
    "content": "import {nanoid} from 'nanoid'\n\nexport function generateDiskStateRevision() {\n  return nanoid(16)\n}\n"
  },
  {
    "path": "packages/studio/src/SyncStore/AppLink.ts",
    "content": "import type {StudioTRPCRouter} from '@theatre/app/server/studio-api/root'\nimport type {CreateTRPCProxyClient} from '@trpc/client'\nimport {\n  createTRPCProxyClient,\n  loggerLink,\n  unstable_httpBatchStreamLink,\n} from '@trpc/client'\nimport superjson from 'superjson'\n\nexport default class AppLink {\n  private _client!: CreateTRPCProxyClient<StudioTRPCRouter>\n\n  constructor(private _webAppUrl: string) {\n    if (process.env.NODE_ENV === 'test') return\n    this._client = createTRPCProxyClient<StudioTRPCRouter>({\n      links: [\n        loggerLink({\n          console: {\n            log: (arg0, ...rest) => console.info('AppLink ' + arg0, ...rest),\n            error: (arg0, ...rest) => console.error('AppLink ' + arg0, ...rest),\n          },\n          enabled: (opts) =>\n            (process.env.NODE_ENV === 'development' &&\n              typeof window !== 'undefined') ||\n            (opts.direction === 'down' && opts.result instanceof Error),\n        }),\n        unstable_httpBatchStreamLink({\n          url: _webAppUrl + '/api/studio-trpc',\n        }),\n      ],\n      transformer: superjson,\n    })\n  }\n\n  get api() {\n    return this._client\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/SyncStore/SyncServerLink.ts",
    "content": "import type {SyncServerRootRouter} from '@theatre/sync-server/trpc/routes'\nimport superjson from 'superjson'\nimport type {CreateTRPCProxyClient} from '@trpc/client'\nimport {\n  createTRPCProxyClient,\n  createWSClient,\n  loggerLink,\n  wsLink,\n} from '@trpc/client'\n\nexport default class SyncServerLink {\n  private _client: CreateTRPCProxyClient<SyncServerRootRouter>\n\n  constructor(private _url: string) {\n    const wsClient = createWSClient({\n      url: _url,\n    })\n\n    this._client = createTRPCProxyClient<SyncServerRootRouter>({\n      links: [\n        loggerLink({\n          console: {\n            log: (arg0, ...rest) =>\n              console.info('SyncServerLink ' + arg0, ...rest),\n            error: (arg0, ...rest) =>\n              console.error('SyncServerLink ' + arg0, ...rest),\n          },\n          enabled: (opts) =>\n            (process.env.NODE_ENV === 'development' &&\n              typeof window !== 'undefined') ||\n            (opts.direction === 'down' && opts.result instanceof Error),\n        }),\n        wsLink({client: wsClient}),\n      ],\n      transformer: superjson,\n    })\n\n    if (process.env.NODE_ENV === 'development') {\n      void this._client.healthcheck.query({}).then((res) => {\n        console.log('syncServer/healthCheck', res)\n      })\n    }\n  }\n\n  get api(): CreateTRPCProxyClient<SyncServerRootRouter> {\n    return this._client\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/SyncStore/enhancedTrpcWsClient.ts",
    "content": "export default function enhancedTrpcWsClient<\n  Client extends {},\n  GetOpts extends () => any,\n>(\n  clinet: Client,\n  getOpts: GetOpts,\n): EnhancedTrpcWsClient<Client, ReturnType<GetOpts>> {\n  const handlers = {\n    get: (target: any, prop: string): any => {\n      console.log(`prop`, prop)\n      if (prop === 'query' || prop === 'mutation' || prop === 'subscription') {\n        return proxyProcedure(target, prop)\n      } else if (target[prop] && typeof target[prop] === 'object') {\n        return new Proxy(target[prop], handlers)\n      } else {\n        return target[prop]\n      }\n    },\n  }\n\n  const proxyProcedure = (target: any, prop: string) => {\n    return new Proxy(target[prop], {\n      apply: (_target: any, thisArg: any, argArray: any) => {\n        const [originalOpts, ...restArgs] = argArray\n        const opts = {...getOpts(), ...originalOpts}\n        console.log(`prx`, target)\n        return target[prop](opts, ...restArgs)\n      },\n      ...handlers,\n    })\n  }\n\n  const pr = new Proxy(clinet, handlers)\n  return pr\n}\n\nexport type EnhancedTrpcWsClient<Client extends {}, EnhancedOpts extends {}> = {\n  [K in keyof Client]: K extends 'query' | 'mutation' | 'subscription'\n    ? EnhancedProcedure<Client[K], EnhancedOpts>\n    : Client[K] extends {}\n      ? EnhancedTrpcWsClient<Client[K], EnhancedOpts>\n      : Client[K]\n}\n\ntype EnhancedProcedure<\n  Procedure extends any,\n  EnhancedOpts extends {},\n> = Procedure extends (\n  opts: infer OriginalOpts,\n  ...rest: infer Rest\n) => infer Ret\n  ? (opts: Omit<OriginalOpts, keyof EnhancedOpts>, ...rest: Rest) => Ret\n  : Procedure\n"
  },
  {
    "path": "packages/studio/src/SyncStore/utils.ts",
    "content": "import {get} from 'lodash-es'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\n\ntype AnyFn = (...args: any[]) => any\n\nexport function wrapTrpcClientWithAuth<Client extends {}>(\n  clientPromise: Promise<Client>,\n  enhancer: (originalFn: AnyFn, args: any[], path: string[]) => any,\n): TrpcClientWrapped<Client> {\n  const handlers = {\n    get: (target: PathedTarget, prop: string): any => {\n      const subTarget: PathedTarget = (() => {}) as $IntentionalAny\n      subTarget.path = [...target.path, prop]\n\n      if (prop === 'query' || prop === 'mutate' || prop === 'subscribe') {\n        return proxyProcedure(subTarget, prop)\n      } else {\n        return new Proxy(subTarget, handlers)\n      }\n    },\n  }\n\n  const proxyProcedure = (target: PathedTarget, prop: string) => {\n    return new Proxy(target, {\n      apply: async (_target: PathedTarget, thisArg: any, argArray: any) => {\n        const client = await clientPromise\n        const fn = get(client, target.path)\n        return await enhancer(fn, argArray, target.path)\n      },\n      ...handlers,\n    })\n  }\n\n  type PathedTarget = {path: string[]} & (() => {})\n  const rootTarget: PathedTarget = (() => {}) as $IntentionalAny\n  rootTarget.path = []\n\n  const pr = new Proxy(rootTarget, handlers)\n  return pr as $IntentionalAny\n}\n\nexport type TrpcClientWrapped<Client extends {}> = {\n  [K in keyof Client]: K extends 'query' | 'mutate' | 'subscribe'\n    ? TrpcProcedureWrapped<Client[K]>\n    : Client[K] extends {}\n      ? TrpcClientWrapped<Client[K]>\n      : Client[K]\n}\n\ntype TrpcProcedureWrapped<Procedure extends any> = Procedure extends (\n  input: infer OriginalInput,\n) => infer Ret\n  ? (input: Omit<OriginalInput, 'studioAuth'>) => Ret\n  : Procedure extends (\n        input: infer OriginalInput,\n        secondArg: infer SecondArg,\n      ) => infer Ret\n    ? (input: Omit<OriginalInput, 'studioAuth'>, secondArg: SecondArg) => Ret\n    : Procedure\n"
  },
  {
    "path": "packages/studio/src/TheatreStudio.ts",
    "content": "import type {ISheet, ISheetObject} from '@theatre/core'\nimport type {Prism, Pointer} from '@theatre/dataverse'\nimport {getPointerParts, prism} from '@theatre/dataverse'\nimport SimpleCache from '@theatre/utils/SimpleCache'\nimport type {$IntentionalAny, VoidFn} from '@theatre/core/types/public'\nimport type {IScrub} from '@theatre/core/types/public'\nimport type {Studio} from '@theatre/studio/Studio'\nimport {outlineSelection} from './selectors'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport getStudio from './getStudio'\nimport {debounce, uniq} from 'lodash-es'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport type {\n  IExtension,\n  IStudio,\n  ITransactionAPI,\n  PaneInstance,\n  ProjectId,\n} from '@theatre/core/types/public'\nimport {\n  __experimental_disablePlayPauseKeyboardShortcut,\n  __experimental_enablePlayPauseKeyboardShortcut,\n} from './UIRoot/useKeyboardShortcuts'\nimport type TheatreSheetObject from '@theatre/core/sheetObjects/TheatreSheetObject'\nimport type TheatreSheet from '@theatre/core/sheets/TheatreSheet'\nimport type {__UNSTABLE_Project_OnDiskState} from '@theatre/core'\nimport type {OutlineSelectionState} from '@theatre/core/types/private/studio'\nimport type Project from '@theatre/core/projects/Project'\nimport type SheetTemplate from '@theatre/core/sheets/SheetTemplate'\nimport type SheetObjectTemplate from '@theatre/core/sheetObjects/SheetObjectTemplate'\nimport type {PaneInstanceId} from '@theatre/core/types/public'\nimport {__private} from '@theatre/core'\nconst {\n  isSheet,\n  isProject,\n  isSheetPublicAPI,\n  isSheetObject,\n  isSheetObjectPublicAPI,\n  isSheetObjectTemplate,\n  isSheetTemplate,\n} = __private.instanceTypes\n\nexport default class TheatreStudio implements IStudio {\n  readonly ui = {\n    hide() {\n      getStudio().ui.hide()\n    },\n\n    get isHidden(): boolean {\n      return getStudio().ui.isHidden\n    },\n\n    restore() {\n      getStudio().ui.restore()\n    },\n\n    renderToolset(toolsetId: string, htmlNode: HTMLElement) {\n      return getStudio().ui.renderToolset(toolsetId, htmlNode)\n    },\n  }\n\n  private readonly _cache = new SimpleCache()\n\n  __experimental = {\n    __experimental_disablePlayPauseKeyboardShortcut(): void {\n      // This is an experimental API to respond to this issue: https://discord.com/channels/870988717190426644/870988717190426647/1067906775602430062\n      // Ideally we need a coherent way for the user to control keyboard inputs, so we will remove this method in the future.\n      // Here is the procedure for removing it:\n      // 1. Replace this code with a `throw new Error(\"This is experimental method is now deprecated, and here is how to migrate: ...\")`\n      // 2. Then keep it for a few months, and then remove it.\n      __experimental_disablePlayPauseKeyboardShortcut()\n    },\n    __experimental_enablePlayPauseKeyboardShortcut(): void {\n      // see __experimental_disablePlayPauseKeyboardShortcut()\n      __experimental_enablePlayPauseKeyboardShortcut()\n    },\n    __experimental_clearPersistentStorage(persistenceKey?: string): void {\n      return getStudio().clearPersistentStorage(persistenceKey)\n    },\n    __experimental_createContentOfSaveFileTyped(\n      projectId: string,\n    ): __UNSTABLE_Project_OnDiskState {\n      return getStudio().createContentOfSaveFile(projectId) as $IntentionalAny\n    },\n  }\n\n  /**\n   * @internal\n   */\n  constructor(internals: Studio) {}\n\n  extend(\n    extension: IExtension,\n    opts?: {__experimental_reconfigure?: boolean},\n  ): void {\n    getStudio().extend(extension, opts)\n  }\n\n  transaction(fn: (api: ITransactionAPI) => void) {\n    getStudio().transaction(({set, unset, stateEditors}) => {\n      const __experimental_forgetObject = (object: TheatreSheetObject) => {\n        if (!isSheetObjectPublicAPI(object)) {\n          throw new Error(\n            `object in transactionApi.__experimental_forgetObject(object) must be the return type of sheet.object(...)`,\n          )\n        }\n\n        stateEditors.coreByProject.historic.sheetsById.forgetObject(\n          object.address,\n        )\n      }\n\n      const __experimental_forgetSheet = (sheet: TheatreSheet) => {\n        if (!isSheetPublicAPI(sheet)) {\n          throw new Error(\n            `sheet in transactionApi.__experimental_forgetSheet(sheet) must be the return type of project.sheet()`,\n          )\n        }\n\n        stateEditors.coreByProject.historic.sheetsById.forgetSheet(\n          sheet.address,\n        )\n      }\n\n      const __experimental_sequenceProp = <V>(prop: Pointer<V>) => {\n        const {path, root} = getPointerParts(prop)\n\n        if (!isSheetObject(root)) {\n          throw new Error(\n            'Argument prop must be a pointer to a SheetObject property',\n          )\n        }\n\n        const propAdress = {...root.address, pathToProp: path}\n\n        stateEditors.coreByProject.historic.sheetsById.sequence.setPrimitivePropAsSequenced(\n          propAdress,\n        )\n      }\n\n      return fn({\n        set,\n        unset,\n        __experimental_forgetObject,\n        __experimental_forgetSheet,\n        __experimental_sequenceProp,\n      })\n    })\n  }\n\n  private _getSelectionPrism(): Prism<(ISheetObject | ISheet)[]> {\n    return this._cache.get('_getSelectionPrism()', () =>\n      prism((): (ISheetObject | ISheet)[] => {\n        return outlineSelection\n          .getValue()\n          .filter(\n            (s): s is SheetObject | Sheet =>\n              s.type === 'Theatre_SheetObject' || s.type === 'Theatre_Sheet',\n          )\n          .map((s) => s.publicApi)\n      }),\n    )\n  }\n\n  private _getSelection(): (ISheetObject | ISheet)[] {\n    return this._getSelectionPrism().getValue()\n  }\n\n  setSelection(selection: Array<ISheetObject | ISheet>): void {\n    const sanitizedSelection: Array<\n      Project | Sheet | SheetObject | SheetTemplate | SheetObjectTemplate\n    > = [...selection]\n      .filter((s) => isSheetObjectPublicAPI(s) || isSheetPublicAPI(s))\n      .map((s) => getStudio().corePrivateAPI!(s))\n\n    getStudio().transaction(({stateEditors}) => {\n      const newSelectionState: OutlineSelectionState[] = []\n\n      for (const item of uniq(sanitizedSelection)) {\n        if (isProject(item)) {\n          newSelectionState.push({type: 'Project', ...item.address})\n        } else if (isSheet(item)) {\n          newSelectionState.push({\n            type: 'Sheet',\n            ...item.template.address,\n          })\n          stateEditors.studio.historic.projects.stateByProjectId.stateBySheetId.setSelectedInstanceId(\n            item.address,\n          )\n        } else if (isSheetTemplate(item)) {\n          newSelectionState.push({type: 'Sheet', ...item.address})\n        } else if (isSheetObject(item)) {\n          newSelectionState.push({\n            type: 'SheetObject',\n            ...item.template.address,\n          })\n          stateEditors.studio.historic.projects.stateByProjectId.stateBySheetId.setSelectedInstanceId(\n            item.sheet.address,\n          )\n        } else if (isSheetObjectTemplate(item)) {\n          newSelectionState.push({type: 'SheetObject', ...item.address})\n        }\n      }\n      stateEditors.studio.historic.panels.outline.selection.set(\n        newSelectionState,\n      )\n    })\n  }\n\n  onSelectionChange(fn: (s: (ISheetObject | ISheet)[]) => void): VoidFn {\n    const studio = getStudio()\n\n    return this._getSelectionPrism().onChange(studio.ticker, fn, true)\n  }\n\n  get selection(): Array<ISheetObject | ISheet> {\n    return this._getSelection()\n  }\n\n  scrub(): IScrub {\n    return getStudio().scrub()\n  }\n\n  getStudioProject() {\n    const core = getStudio().core\n    if (!core) {\n      throw new Error(`You're calling studio.getStudioProject() before \\`@theatre/core\\` is loaded. To fix this:\n1. Check if \\`@theatre/core\\` is import/required in your bundle.\n2. Check the stack trace of this error and make sure the funciton that calls getStudioProject() is run after \\`@theatre/core\\` is loaded.`)\n    }\n    return getStudio().getStudioProject(core)\n  }\n\n  debouncedScrub(threshold: number = 1000): Pick<IScrub, 'capture'> {\n    let currentScrub: IScrub | undefined\n    const scheduleCommit = debounce(() => {\n      const s = currentScrub\n      if (!s) return\n      currentScrub = undefined\n      s.commit()\n    }, threshold)\n\n    const capture = (arg: $IntentionalAny) => {\n      if (!currentScrub) {\n        currentScrub = this.scrub()\n      }\n      let errored = true\n      try {\n        currentScrub.capture(arg)\n        errored = false\n      } finally {\n        if (errored) {\n          const s = currentScrub\n          currentScrub = undefined\n          s.discard()\n        } else {\n          scheduleCommit()\n        }\n      }\n    }\n\n    return {capture}\n  }\n\n  createPane<PaneClass extends string>(\n    paneClass: PaneClass,\n  ): PaneInstance<PaneClass> {\n    return getStudio().paneManager.createPane(paneClass)\n  }\n\n  destroyPane(paneId: string): void {\n    return getStudio().paneManager.destroyPane(paneId as PaneInstanceId)\n  }\n\n  createContentOfSaveFile(projectId: string): Record<string, unknown> {\n    return getStudio().createContentOfSaveFile(\n      projectId as ProjectId,\n    ) as $IntentionalAny\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/UI/UI.ts",
    "content": "import type {Studio} from '@theatre/studio/Studio'\nimport {val} from '@theatre/dataverse'\n\nconst NonSSRBitsClass =\n  typeof window !== 'undefined'\n    ? import('./UINonSSRBits').then((M) => M.default)\n    : null\n\nexport default class UI {\n  private _rendered = false\n  private _nonSSRBits = NonSSRBitsClass\n    ? NonSSRBitsClass.then((NonSSRBitsClass) => new NonSSRBitsClass())\n    : Promise.reject()\n  readonly ready: Promise<void> = this._nonSSRBits.then(\n    () => undefined,\n    () => undefined,\n  )\n\n  constructor(readonly studio: Studio) {}\n\n  render() {\n    if (this._rendered) {\n      return\n    }\n    this._rendered = true\n\n    this._nonSSRBits\n      .then((b) => {\n        b.render()\n      })\n      .catch((err) => {\n        console.error(err)\n        throw err\n      })\n  }\n\n  hide() {\n    this.studio.transaction(({stateEditors}) => {\n      stateEditors.studio.ahistoric.setVisibilityState('everythingIsHidden')\n    })\n  }\n\n  restore() {\n    this.render()\n    this.studio.transaction(({stateEditors}) => {\n      stateEditors.studio.ahistoric.setVisibilityState('everythingIsVisible')\n    })\n  }\n\n  get isHidden() {\n    return (\n      val(this.studio.atomP.ahistoric.visibilityState) === 'everythingIsHidden'\n    )\n  }\n\n  renderToolset(toolsetId: string, htmlNode: HTMLElement) {\n    let shouldUnmount = false\n\n    let unmount: null | (() => void) = null\n\n    this._nonSSRBits\n      .then((nonSSRBits) => {\n        if (shouldUnmount) return // unmount requested before the toolset is mounted, so, abort\n        unmount = nonSSRBits.renderToolset(toolsetId, htmlNode)\n      })\n      .catch((err) => {\n        console.error(err)\n      })\n\n    return () => {\n      if (unmount) {\n        unmount()\n        return\n      }\n      if (shouldUnmount) return\n      shouldUnmount = true\n    }\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/UI/UINonSSRBits.ts",
    "content": "import UIRoot from '@theatre/studio/UIRoot/UIRoot'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport {getMounter} from '@theatre/studio/utils/renderInPortalInContext'\nimport {withStyledShadow} from '@theatre/studio/css'\nimport ExtensionToolbar from '@theatre/studio/toolbars/ExtensionToolbar/ExtensionToolbar'\n\nexport default class UINonSSRBits {\n  readonly containerEl = document.createElement('div')\n  private _renderTimeout: NodeJS.Timer | undefined = undefined\n  private _documentBodyUIIsRenderedIn: HTMLElement | undefined = undefined\n  readonly containerShadow: ShadowRoot & HTMLElement\n\n  constructor() {\n    // @todo we can't bootstrap Theatre.js (as in, to design Theatre.js using theatre), if we rely on IDed elements\n    this.containerEl.id = 'theatrejs-studio-root'\n\n    this.containerEl.style.cssText = `\n      position: fixed;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      pointer-events: none;\n      z-index: 100;\n    `\n\n    const createShadowRoot = (): ShadowRoot & HTMLElement => {\n      if (window.__IS_VISUAL_REGRESSION_TESTING === true) {\n        const fauxRoot = document.createElement('div')\n        fauxRoot.id = 'theatrejs-faux-shadow-root'\n        document.body.appendChild(fauxRoot)\n        return fauxRoot as $IntentionalAny\n      } else {\n        return this.containerEl.attachShadow({\n          mode: 'open',\n          // To see why I had to cast this value to HTMLElement, take a look at its\n          // references of this prop. There are a few functions that actually work\n          // with a ShadowRoot but are typed to accept HTMLElement\n        }) as $IntentionalAny\n      }\n    }\n\n    this.containerShadow = createShadowRoot()\n  }\n\n  render() {\n    const renderCallback = () => {\n      if (!document.body) {\n        this._renderTimeout = setTimeout(renderCallback, 5)\n        return\n      }\n      this._renderTimeout = undefined\n      this._documentBodyUIIsRenderedIn = document.body\n      this._documentBodyUIIsRenderedIn.appendChild(this.containerEl)\n      ReactDOM.createRoot(this.containerShadow).render(\n        React.createElement(UIRoot, {containerShadow: this.containerShadow}),\n      )\n    }\n    this._renderTimeout = setTimeout(renderCallback, 10)\n  }\n\n  renderToolset(toolsetId: string, htmlNode: HTMLElement) {\n    const s = getMounter()\n\n    s.mountOrRender(\n      withStyledShadow(ExtensionToolbar),\n      {toolbarId: toolsetId},\n      htmlNode,\n    )\n\n    return s.unmount\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/UIRoot/PanelsRoot.tsx",
    "content": "import OutlinePanel from '@theatre/studio/panels/OutlinePanel/OutlinePanel'\nimport DetailPanel from '@theatre/studio/panels/DetailPanel/DetailPanel'\nimport React from 'react'\nimport getStudio from '@theatre/studio/getStudio'\nimport {useVal} from '@theatre/react'\nimport ExtensionPaneWrapper from '@theatre/studio/panels/BasePanel/ExtensionPaneWrapper'\nimport SequenceEditorPanel from '@theatre/studio/panels/SequenceEditorPanel/SequenceEditorPanel'\n\nconst PanelsRoot: React.FC = () => {\n  const panes = useVal(getStudio().paneManager.allPanesD)\n  const paneEls = Object.entries(panes).map(([instanceId, paneInstance]) => {\n    return (\n      <ExtensionPaneWrapper\n        key={`pane-${instanceId}`}\n        paneInstance={paneInstance!}\n      />\n    )\n  })\n\n  return (\n    <>\n      {paneEls}\n      <OutlinePanel />\n      <DetailPanel />\n      <SequenceEditorPanel />\n    </>\n  )\n}\n\nexport default PanelsRoot\n"
  },
  {
    "path": "packages/studio/src/UIRoot/PointerCapturing.tsx",
    "content": "import {useEffect, useMemo} from 'react'\n\n/** See {@link PointerCapturing} */\nexport type CapturedPointer = {\n  release(): void\n  /** Double check that you still have the current capture and weren't forcibly released */\n  isCapturing(): boolean\n}\n\n/**\n * Introduced `PointerCapturing` for addressing issues with over-shooting easing curves closing the popup preset modal.\n *\n * Goal is to be able to determine if the pointer is being captured somewhere in studio (e.g. dragging).\n *\n * Some other ideas we considered before going with the PointerCapturing provider and context\n * - provider: `onPointerCaptureChanged`\n * - `onDragging={isMouseActive = true}` / `onMouseActive={isMouseActive = true}`\n * - dragging tracked application wide (ephemeral state) in popover\n *\n * Caveats: I wonder if there's a shared abstraction we should use for \"releasing\" e.g. unsubscribe / untap in rxjs / tapable patterns.\n */\nexport type PointerCapturing = {\n  isPointerBeingCaptured(): boolean\n  capturePointer(debugReason: string): CapturedPointer\n}\n\ntype CaptureInfo = {\n  debugOwnerName: string\n  debugReason: string\n}\n\nlet currentCapture: null | CaptureInfo = null\n\nconst isPointerBeingCaptured = () => currentCapture != null\n\n/**\n * @deprecated Once all the `usePopover()`/`useDrag()` calls are removed, we should move this to one of the actors under `useChordial()`\n */\nexport function createPointerCapturing(forDebugName: string) {\n  /** keep track of the captures being made by this user of {@link usePointerCapturing} */\n  let localCapture: CaptureInfo | null\n  const updateCapture = (to: CaptureInfo | null): CaptureInfo | null => {\n    localCapture = to\n    currentCapture = to\n    return to\n  }\n  const capturing: PointerCapturing = {\n    capturePointer(reason) {\n      if (currentCapture != null) {\n        throw new Error(\n          `\"${forDebugName}\" attempted capturing pointer for \"${reason}\" while already captured by \"${currentCapture.debugOwnerName}\" for \"${currentCapture.debugReason}\"`,\n        )\n      }\n\n      const releaseCapture = updateCapture({\n        debugOwnerName: forDebugName,\n        debugReason: reason,\n      })\n\n      return {\n        isCapturing() {\n          return releaseCapture === currentCapture\n        },\n        release() {\n          if (releaseCapture === currentCapture) {\n            updateCapture(null)\n            return true\n          }\n          return false\n        },\n      }\n    },\n    isPointerBeingCaptured,\n  }\n\n  return {\n    capturing,\n    forceRelease() {\n      if (localCapture && currentCapture === localCapture) {\n        updateCapture(null)\n      }\n    },\n  }\n}\n\n/**\n * @deprecated Once all the `usePopover()`/`useDrag()` calls are removed, we should move this to one of the actors under `useChordial()`\n * Used to ensure we're locking drag and pointer events to a single place in the UI logic.\n * Without this, we can much more easily accidentally create multiple drag handlers on\n * child / parent dom elements which both `useDrag`, for example.\n *\n * An example of this helping us was when we first started building the Curve editor popover.\n * In that activity, we were experiencing a weird issue where the popover would unmount while\n * dragging away from the popover, and the drag end listener would not be called.\n * By having \"Pointer Capturing\" we're able to identify that the pointer was not being properly\n * released, because there would be a lock contention when trying to drag something else.\n */\nexport function usePointerCapturing(forDebugName: string): PointerCapturing {\n  const control = useMemo(() => {\n    return createPointerCapturing(forDebugName)\n  }, [forDebugName, createPointerCapturing])\n\n  useEffect(() => {\n    return () => {\n      // force release on unmount\n      control.forceRelease()\n    }\n  }, [control])\n\n  return control.capturing\n}\n"
  },
  {
    "path": "packages/studio/src/UIRoot/ProvideTheme.tsx",
    "content": "import React from 'react'\nimport styled from 'styled-components'\n\nconst Container = styled.div`\n  --colors-panel-1: red;\n`\n\nconst ProvideTheme: React.FC<{children?: React.ReactNode}> = (props) => {\n  return <Container>{props.children}</Container>\n}\n\nexport default ProvideTheme\n"
  },
  {
    "path": "packages/studio/src/UIRoot/UIRoot.tsx",
    "content": "import getStudio from '@theatre/studio/getStudio'\nimport {usePrism, useVal} from '@theatre/react'\nimport {val} from '@theatre/dataverse'\nimport React, {useEffect} from 'react'\nimport styled, {createGlobalStyle} from 'styled-components'\nimport PanelsRoot from './PanelsRoot'\nimport GlobalToolbar from '@theatre/studio/toolbars/GlobalToolbar/GlobalToolbar'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {PortalContext} from 'reakit'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport useKeyboardShortcuts from './useKeyboardShortcuts'\nimport PointerEventsHandler from '@theatre/studio/uiComponents/PointerEventsHandler'\nimport {MountAll} from '@theatre/studio/utils/renderInPortalInContext'\nimport {PortalLayer, ProvideStyles} from '@theatre/studio/css'\nimport {\n  createTheatreInternalLogger,\n  TheatreLoggerLevel,\n} from '@theatre/utils/logger'\nimport {ProvideLogger} from '@theatre/studio/uiComponents/useLogger'\nimport {Notifier} from '@theatre/studio/notify'\nimport {useChordialCaptureEvents} from '@theatre/studio/uiComponents/chordial/useChodrial'\nimport {ChordialOverlay} from '@theatre/studio/uiComponents/chordial/ChordialOverlay'\n\nconst MakeRootHostContainStatic =\n  typeof window !== 'undefined'\n    ? createGlobalStyle`\n  :host {\n    contain: strict;\n  }\n`\n    : ({} as ReturnType<typeof createGlobalStyle>)\n\nconst Container = styled(PointerEventsHandler)`\n  z-index: 50;\n  position: fixed;\n  inset: 0;\n\n  &.invisible {\n    pointer-events: none !important;\n    opacity: 0;\n    transform: translateX(1000000px);\n  }\n`\n\nconst INTERNAL_LOGGING = /Playground.+Theatre\\.js/.test(\n  (typeof document !== 'undefined' ? document?.title : null) ?? '',\n)\n\nexport default function UIRoot(props: {\n  containerShadow: ShadowRoot & HTMLElement\n}) {\n  const studio = getStudio()\n  const [portalLayerRef, portalLayer] = useRefAndState<HTMLDivElement>(\n    undefined as $IntentionalAny,\n  )\n\n  const uiRootLogger = createTheatreInternalLogger()\n  uiRootLogger.configureLogging({\n    min: TheatreLoggerLevel.DEBUG,\n    dev: INTERNAL_LOGGING,\n    internal: INTERNAL_LOGGING,\n  })\n  const logger = uiRootLogger.getLogger().named('Theatre.js UIRoot')\n\n  useKeyboardShortcuts()\n\n  const visiblityState = useVal(studio.atomP.ahistoric.visibilityState)\n  useEffect(() => {\n    if (visiblityState === 'everythingIsHidden') {\n      console.warn(\n        `Theatre.js Studio is hidden. Use the keyboard shortcut 'alt + \\\\' to restore the studio, or call studio.ui.restore().`,\n      )\n    }\n    return () => {}\n  }, [visiblityState])\n\n  const chordialRootRef = useChordialCaptureEvents()\n\n  const inside = usePrism(() => {\n    const visiblityState = val(studio.atomP.ahistoric.visibilityState)\n\n    const initialised = val(studio.initializedP)\n\n    return !initialised ? null : (\n      <ProvideLogger logger={logger}>\n        <MountExtensionComponents />\n        <PortalContext.Provider value={portalLayer}>\n          <ProvideStyles\n            target={\n              window.__IS_VISUAL_REGRESSION_TESTING === true\n                ? undefined\n                : props.containerShadow\n            }\n          >\n            <>\n              <MakeRootHostContainStatic />\n              <Container\n                className={\n                  visiblityState === 'everythingIsHidden' ? 'invisible' : ''\n                }\n                // @ts-ignore\n                ref={chordialRootRef}\n              >\n                <PortalLayer ref={portalLayerRef} />\n                <ChordialOverlay />\n                <GlobalToolbar />\n                <PanelsRoot />\n                <Notifier />\n              </Container>\n            </>\n          </ProvideStyles>\n        </PortalContext.Provider>\n      </ProvideLogger>\n    )\n  }, [studio, portalLayerRef, portalLayer])\n\n  return inside\n}\n\nconst MountExtensionComponents: React.FC<{}> = () => {\n  return <MountAll />\n}\n"
  },
  {
    "path": "packages/studio/src/UIRoot/useKeyboardShortcuts.ts",
    "content": "import {useEffect} from 'react'\nimport getStudio from '@theatre/studio/getStudio'\nimport {cmdIsDown} from '@theatre/utils/keyboardUtils'\nimport {getSelectedSequence} from '@theatre/studio/selectors'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport type {Prism} from '@theatre/dataverse'\nimport {Atom, prism, val} from '@theatre/dataverse'\nimport type Sequence from '@theatre/core/sequences/Sequence'\nimport memoizeFn from '@theatre/utils/memoizeFn'\nimport type {IPlaybackRange} from '@theatre/core/types/public'\n\nlet playPauseKeyboardShortcutIsEnabled = true\nexport function __experimental_disablePlayPauseKeyboardShortcut() {\n  playPauseKeyboardShortcutIsEnabled = false\n}\n\nexport function __experimental_enablePlayPauseKeyboardShortcut() {\n  playPauseKeyboardShortcutIsEnabled = true\n}\n\nexport default function useKeyboardShortcuts() {\n  const studio = getStudio()\n  useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      const target: null | HTMLElement =\n        e.composedPath()[0] as unknown as $IntentionalAny\n      if (\n        target &&\n        (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA')\n      ) {\n        return\n      }\n\n      if (e.key === 'z' || e.key === 'Z' || e.code === 'KeyZ') {\n        if (cmdIsDown(e)) {\n          if (e.shiftKey === true) {\n            studio.redo()\n          } else {\n            studio.undo()\n          }\n        } else {\n          return\n        }\n      } else if (\n        e.code === 'Space' &&\n        !e.shiftKey &&\n        !e.metaKey &&\n        !e.altKey &&\n        !e.ctrlKey\n      ) {\n        if (!playPauseKeyboardShortcutIsEnabled) return\n        // Control the playback using the `Space` key\n        const seq = getSelectedSequence()\n        if (seq) {\n          if (seq.playing) {\n            seq.pause()\n          } else {\n            /*\n             * The sequence will be played in its whole length unless all of the\n             * following conditions are met:\n             *  1. the focus range is set and enabled\n             *  2. the playback starts within the focus range.\n             */\n            const {projectId, sheetId} = seq.address\n\n            /*\n             * The value of this prism is an array that contains the\n             * range of the playback (start and end), and a boolean that is\n             * `true` if the playback should be played within that range.\n             */\n            const controlledPlaybackStateD = prism(\n              (): {range: IPlaybackRange; isFollowingARange: boolean} => {\n                const focusRange = val(\n                  getStudio().atomP.ahistoric.projects.stateByProjectId[\n                    projectId\n                  ].stateBySheetId[sheetId].sequence.focusRange,\n                )\n\n                // Determines whether the playback should be played\n                // within the focus range.\n                const shouldFollowFocusRange = prism.memo<boolean>(\n                  'shouldFollowFocusRange',\n                  (): boolean => {\n                    const posBeforePlay = seq.position\n                    if (focusRange) {\n                      const withinRange =\n                        posBeforePlay >= focusRange.range[0] &&\n                        posBeforePlay <= focusRange.range[1]\n                      if (focusRange.enabled) {\n                        if (withinRange) {\n                          return true\n                        } else {\n                          return false\n                        }\n                      } else {\n                        return true\n                      }\n                    } else {\n                      return true\n                    }\n                  },\n                  [],\n                )\n\n                if (\n                  shouldFollowFocusRange &&\n                  focusRange &&\n                  focusRange.enabled\n                ) {\n                  return {\n                    range: [focusRange.range[0], focusRange.range[1]],\n                    isFollowingARange: true,\n                  }\n                } else {\n                  const sequenceLength = val(seq.pointer.length)\n                  return {range: [0, sequenceLength], isFollowingARange: false}\n                }\n              },\n            )\n\n            const playbackPromise = seq.playDynamicRange(\n              prism(() => val(controlledPlaybackStateD).range),\n              getStudio().ticker,\n            )\n\n            const playbackStateBox = getPlaybackStateBox(seq)\n\n            void playbackPromise.finally(() => {\n              playbackStateBox.set(undefined)\n            })\n\n            playbackStateBox.set(controlledPlaybackStateD)\n          }\n        } else {\n          return\n        }\n      }\n      // alt + \\\n      else if (\n        e.altKey &&\n        (e.key === '\\\\' || e.code === 'Backslash' || e.code === 'IntlBackslash')\n      ) {\n        const prev = val(studio.atomP.ahistoric.visibilityState)\n        studio.transaction(({stateEditors}) => {\n          stateEditors.studio.ahistoric.setVisibilityState(\n            prev === 'everythingIsHidden'\n              ? 'everythingIsVisible'\n              : 'everythingIsHidden',\n          )\n        })\n      } else {\n        return\n      }\n\n      e.preventDefault()\n      e.stopPropagation()\n    }\n    window.addEventListener('keydown', handleKeyDown)\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown)\n    }\n  }, [])\n}\n\ntype ControlledPlaybackStateBox = Atom<\n  undefined | Prism<{range: IPlaybackRange; isFollowingARange: boolean}>\n>\n\nconst getPlaybackStateBox = memoizeFn(\n  (sequence: Sequence): ControlledPlaybackStateBox => {\n    const box = new Atom(undefined) as ControlledPlaybackStateBox\n    return box\n  },\n)\n\n/*\n * A memoized function that returns a prism with a boolean value.\n * This value is set to `true` if:\n * 1. the playback is playing and using the focus range instead of the whole sequence\n * 2. the playback is stopped, but would use the focus range if it were started.\n */\nexport const getIsPlayheadAttachedToFocusRange = memoizeFn(\n  (sequence: Sequence) =>\n    prism<boolean>(() => {\n      const controlledPlaybackState =\n        getPlaybackStateBox(sequence).prism.getValue()\n      if (controlledPlaybackState) {\n        return controlledPlaybackState.getValue().isFollowingARange\n      } else {\n        const {projectId, sheetId} = sequence.address\n        const focusRange = val(\n          getStudio().atomP.ahistoric.projects.stateByProjectId[projectId]\n            .stateBySheetId[sheetId].sequence.focusRange,\n        )\n\n        if (!focusRange || !focusRange.enabled) return false\n\n        const pos = val(sequence.pointer.position)\n\n        const withinRange =\n          pos >= focusRange.range[0] && pos <= focusRange.range[1]\n        return withinRange\n      }\n    }),\n)\n"
  },
  {
    "path": "packages/studio/src/checkForUpdates.ts",
    "content": "import {pointerToPrism, val} from '@theatre/dataverse'\nimport {defer} from '@theatre/utils/defer'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport getStudio from './getStudio'\nimport type {UpdateCheckerResponse} from './Studio'\nimport {env} from './env'\n\nconst UPDATE_CHECK_INTERVAL = 30 * 60 * 1000 // check for updates every 30 minutes\nconst TIME_TO_WAIT_ON_ERROR = 1000 * 60 * 60 // an hour\n\n/**\n * Returns a promise that will resolve when the UI is visible. If the UI is hidden, it'll\n * wait for it to become visible.\n */\nasync function waitTilUIIsVisible(): Promise<undefined> {\n  const visibilityStatePt = getStudio().atomP.ahistoric.visibilityState\n  if (val(visibilityStatePt) === 'everythingIsVisible') return\n  const deferred = defer<undefined>()\n\n  const unsub = pointerToPrism(visibilityStatePt).onStale(() => {\n    const newVal = val(visibilityStatePt)\n    if (newVal === 'everythingIsVisible') {\n      unsub()\n      deferred.resolve(undefined)\n    }\n  })\n\n  return deferred.promise\n}\n\nexport default async function checkForUpdates() {\n  if (env.BUILT_FOR_PLAYGROUND === 'true') {\n    // Build for playground. Skipping update check\n    return\n  }\n\n  if (env.THEATRE_VERSION?.match(/COMPAT/)) {\n    // Built for compat tests. Skipping update check\n    return\n  }\n\n  // let's wait a bit in case the user has called for the UI to be hidden.\n  await wait(500)\n  await waitTilUIIsVisible()\n  while (true) {\n    const state = val(getStudio().ahistoricAtom.pointer.updateChecker)\n    if (state) {\n      if (state.result !== 'error') {\n        const lastChecked = state.lastChecked\n        const now = Date.now()\n        const timeElapsedSinceLastCheckedForUpdate = Math.abs(now - lastChecked)\n\n        // doing Math.max in case the clock has shifted\n        if (timeElapsedSinceLastCheckedForUpdate < UPDATE_CHECK_INTERVAL) {\n          await wait(\n            UPDATE_CHECK_INTERVAL - timeElapsedSinceLastCheckedForUpdate,\n          )\n        }\n      }\n    }\n    try {\n      const response = await fetch(\n        new Request(\n          `https://updates.theatrejs.com/updates/${env.THEATRE_VERSION}`,\n        ),\n      )\n      if (response.ok) {\n        const json = await response.json()\n        if (!isValidUpdateCheckerResponse(json)) {\n          throw new Error(`Bad response`)\n        }\n        getStudio().ahistoricAtom.setByPointer((p) => p.updateChecker, {\n          lastChecked: Date.now(),\n          result: {...json},\n        })\n\n        await wait(1000)\n      } else {\n        throw new Error(`HTTP Error ${response.statusText}`)\n      }\n    } catch (error) {\n      // TODO log an error here\n\n      await wait(TIME_TO_WAIT_ON_ERROR)\n    }\n  }\n}\n\nconst wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))\n\nfunction isValidUpdateCheckerResponse(\n  json: unknown,\n): json is UpdateCheckerResponse {\n  if (typeof json !== 'object') return false\n  const obj = json as $IntentionalAny\n  if (typeof obj['hasUpdates'] !== 'boolean') return false\n  // could use a runtime type checker but not important yet\n  return (\n    (obj.hasUpdates === true &&\n      typeof obj.newVersion === 'string' &&\n      typeof obj.releasePage === 'string') ||\n    obj.hasUpdates === false\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/css.tsx",
    "content": "import {lighten} from 'polished'\nimport {css} from 'styled-components'\nimport styled, {createGlobalStyle, StyleSheetManager} from 'styled-components'\nimport React, {useLayoutEffect, useState} from 'react'\nimport ReactDOM from 'react-dom'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport {PortalContext} from 'reakit'\nimport useRefAndState from './utils/useRefAndState'\n\n/**\n * This CSS string is used to correctly set pointer-events on an element\n * when the pointer is dragging something.\n * Naming explanation: \"NormalMode\" as opposed to dragging mode.\n *\n * @see PointerEventsHandler - the place that sets `.normal` on #pointer-root\n */\nexport const pointerEventsAutoInNormalMode = css`\n  #pointer-root & {\n    pointer-events: none;\n  }\n  #pointer-root.normal & {\n    pointer-events: auto;\n  }\n`\n\nexport const theme = {\n  panel: {\n    bg: `#282b2f`,\n    head: {\n      title: {\n        color: `#bbb`,\n      },\n      punctuation: {\n        color: `#808080`,\n      },\n    },\n    body: {\n      compoudThing: {\n        label: {\n          get color(): string {\n            return lighten(0.6, theme.panel.bg)\n          },\n        },\n      },\n    },\n  },\n}\n\nexport const panelUtils = {\n  panelBorder: `2px solid #1f1f1f`,\n}\n\nconst GlobalStyle =\n  typeof window !== 'undefined'\n    ? createGlobalStyle`\n        :host {\n          all: initial;\n          color: white;\n          font:\n            11px -apple-system,\n            BlinkMacSystemFont,\n            Segoe WPC,\n            Segoe Editor,\n            HelveticaNeue-Light,\n            Ubuntu,\n            Droid Sans,\n            sans-serif;\n\n          // external links\n          a[href^='http'] {\n            text-decoration: none;\n            text-decoration-line: underline;\n            text-decoration-color: #888;\n            position: relative;\n            display: inline-block;\n            margin-left: 0.4em;\n\n            &:hover,\n            &:active {\n              text-decoration-color: #ccc;\n            }\n          }\n\n          // from tailwind\n          .text-xs {\n            font-size: 0.75rem; /* 12px */\n            line-height: 1rem; /* 16px */\n          }\n          .text-sm {\n            font-size: 0.875rem; /* 14px */\n            line-height: 1.25rem; /* 20px */\n          }\n          .text-base {\n            font-size: 1rem; /* 16px */\n            line-height: 1.5rem; /* 24px */\n          }\n          .text-lg {\n            font-size: 1.125rem; /* 18px */\n            line-height: 1.75rem; /* 28px */\n          }\n          .text-xl {\n            font-size: 1.25rem; /* 20px */\n            line-height: 1.75rem; /* 28px */\n          }\n          .text-2xl {\n            font-size: 1.5rem; /* 24px */\n            line-height: 2rem; /* 32px */\n          }\n          .text-3xl {\n            font-size: 1.875rem; /* 30px */\n            line-height: 2.25rem; /* 36px */\n          }\n          .text-4xl {\n            font-size: 2.25rem; /* 36px */\n            line-height: 2.5rem; /* 40px */\n          }\n          .text-5xl {\n            font-size: 3rem; /* 48px */\n            line-height: 1;\n          }\n          .text-6xl {\n            font-size: 3.75rem; /* 60px */\n            line-height: 1;\n          }\n          .text-7xl {\n            font-size: 4.5rem; /* 72px */\n            line-height: 1;\n          }\n          .text-8xl {\n            font-size: 6rem; /* 96px */\n            line-height: 1;\n          }\n          .text-9xl {\n            font-size: 8rem; /* 128px */\n            line-height: 1;\n          }\n\n          .font-thin {\n            font-weight: 100;\n          }\n          .font-extralight {\n            font-weight: 200;\n          }\n          .font-light {\n            font-weight: 300;\n          }\n          .font-normal {\n            font-weight: 400;\n          }\n          .font-medium {\n            font-weight: 500;\n          }\n          .font-semibold {\n            font-weight: 600;\n          }\n          .font-bold {\n            font-weight: 700;\n          }\n          .font-extrabold {\n            font-weight: 800;\n          }\n          .font-black {\n            font-weight: 900;\n          }\n\n          .text-left {\n            text-align: left;\n          }\n          .text-center {\n            text-align: center;\n          }\n          .text-right {\n            text-align: right;\n          }\n\n          .text-color-pale {\n            color: #CCC;\n          }\n        }\n\n        * {\n          padding: 0;\n          margin: 0;\n          font-size: 100%;\n          font: inherit;\n          vertical-align: baseline;\n          list-style: none;\n        }\n      `\n    : ({} as ReturnType<typeof createGlobalStyle>)\n\nexport const PortalLayer = styled.div`\n  z-index: 51;\n  position: fixed;\n  top: 0px;\n  right: 0px;\n  bottom: 0px;\n  left: 0px;\n  pointer-events: none;\n`\n\nexport const ProvideStyles: React.FC<{\n  target: undefined | HTMLElement\n  children: React.ReactNode\n}> = (props) => {\n  return (\n    <StyleSheetManager disableVendorPrefixes target={props.target}>\n      <>\n        <GlobalStyle />\n        {props.children}\n      </>\n    </StyleSheetManager>\n  )\n}\n\nexport function withStyledShadow<Props extends {}>(\n  Comp: React.ComponentType<Props>,\n): React.ComponentType<Props> {\n  return (props) => (\n    <ProvideStyledShadow>\n      <Comp {...props} />\n    </ProvideStyledShadow>\n  )\n}\n\nconst ProvideStyledShadow: React.FC<{\n  children: React.ReactNode\n}> = (props) => {\n  const [template, ref] = useState<null | HTMLTemplateElement>(null)\n  const [shadowRoot, setShadowRoot] = useState<null | ShadowRoot>(null)\n\n  useLayoutEffect(() => {\n    if (!template) return\n    const {parentNode} = template\n    if (!parentNode) return\n\n    const hadShadowRoot =\n      // @ts-ignore\n      !!parentNode.shadowRoot\n\n    const shadowRoot = hadShadowRoot\n      ? // @ts-ignore\n        parent.shadowRoot\n      : (parentNode as HTMLElement).attachShadow({\n          mode: 'open',\n        })\n\n    setShadowRoot(shadowRoot)\n\n    // no need to cleanup. The parent will be removed anyway if cleanup\n    // is needed.\n  }, [template])\n\n  const [portalLayerRef, portalLayer] = useRefAndState<HTMLDivElement>(\n    undefined as $IntentionalAny,\n  )\n\n  if (!shadowRoot) {\n    return (\n      <template ref={ref} shadow-root={'open'}>\n        {props.children}\n      </template>\n    )\n  }\n\n  return ReactDOM.createPortal(\n    <ProvideStyles target={shadowRoot as $IntentionalAny as HTMLElement}>\n      <>\n        <PortalLayer ref={portalLayerRef} />\n        <PortalContext.Provider value={portalLayer}>\n          {props.children}\n        </PortalContext.Provider>\n      </>\n    </ProvideStyles>,\n    shadowRoot as $IntentionalAny as HTMLElement,\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/env.ts",
    "content": "import type {Env} from '@theatre/core/envSchema'\nimport type {$IntentionalAny} from '@theatre/utils/types'\n\n// process.env is guaranteed to be of type Env, because we validate it in `devEnv/cli`\nexport const env = process.env as $IntentionalAny as Env\n"
  },
  {
    "path": "packages/studio/src/getStudio.ts",
    "content": "import type {Studio} from './Studio'\n\nlet studio: Studio\n\nexport function setStudio(s: Studio) {\n  studio = s\n}\n\n/**\n * This may only be called from modules inside the studio bundle.\n */\nexport default function getStudio(): Studio {\n  return studio\n}\n"
  },
  {
    "path": "packages/studio/src/index.ts",
    "content": "/**\n * The library providing the editor components of Theatre.js.\n *\n * @packageDocumentation\n */\n\nimport {setStudio} from '@theatre/studio/getStudio'\nimport {Studio} from '@theatre/studio/Studio'\n\nimport type {GlobalVariableNames} from '@theatre/core/globals'\nimport type {$FixMe} from '@theatre/core/types/public'\nimport StudioBundle from './StudioBundle'\nimport type CoreBundle from '@theatre/core/CoreBundle'\nimport type {IStudio} from '@theatre/core/types/public'\n\nconst globalVariableNames: GlobalVariableNames = {\n  StudioBundle: '__TheatreJS_StudioBundle',\n  coreBundle: '__TheatreJS_CoreBundle',\n  notifications: '__TheatreJS_Notifications',\n}\n\nconst studioPrivateAPI = new Studio()\nsetStudio(studioPrivateAPI)\n\n/**\n * The main instance of Studio. Read more at {@link IStudio}\n */\nconst studio: IStudio = studioPrivateAPI.publicApi\n\nexport {}\n\nregisterStudioBundle()\n\nfunction registerStudioBundle() {\n  if (\n    typeof window == 'undefined' &&\n    global.__THEATREJS__FORCE_CONNECT_CORE_AND_STUDIO !== true\n  )\n    return\n\n  const globalContext = typeof window !== 'undefined' ? window : global\n\n  const existingStudioBundle = (globalContext as $FixMe)[\n    globalVariableNames.StudioBundle\n  ]\n\n  if (typeof existingStudioBundle !== 'undefined') {\n    if (\n      typeof existingStudioBundle === 'object' &&\n      existingStudioBundle &&\n      typeof existingStudioBundle.version === 'string'\n    ) {\n      throw new Error(\n        `It seems that the module '@theatre/studio' is loaded more than once. This could have two possible causes:\\n` +\n          `1. You might have two separate versions of Theatre.js in node_modules.\\n` +\n          `2. Or this might be a bundling misconfiguration, in case you're using a bundler like Webpack/ESBuild/Rollup.\\n\\n` +\n          `Note that it **is okay** to import '@theatre/studio' multiple times. But those imports should point to the same module.`,\n      )\n    } else {\n      throw new Error(\n        `The variable window.${globalVariableNames.StudioBundle} seems to be already set by a module other than @theatre/core.`,\n      )\n    }\n  }\n\n  const studioBundle = new StudioBundle(studioPrivateAPI)\n\n  // @ts-ignore ignore\n  globalContext[globalVariableNames.StudioBundle] = studioBundle\n\n  const possibleCoreBundle: undefined | CoreBundle =\n    // @ts-ignore ignore\n    globalContext[globalVariableNames.coreBundle]\n\n  if (\n    possibleCoreBundle &&\n    possibleCoreBundle !== null &&\n    possibleCoreBundle.type === 'Theatre_CoreBundle'\n  ) {\n    studioBundle.registerCoreBundle(possibleCoreBundle)\n  }\n}\n\nimport {notify} from '@theatre/studio/notify'\n\nif (typeof window !== 'undefined') {\n  // @ts-ignore\n  window[globalVariableNames.notifications] = {\n    notify,\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/integration-tests/Sequence.test.ts",
    "content": "import {setupTestSheet} from '@theatre/studio/integration-tests/testUtils'\nimport {encodePathToProp} from '@theatre/utils/pathToProp'\nimport type {\n  ObjectAddressKey,\n  SequenceTrackId,\n} from '@theatre/core/types/public'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nconst {asKeyframeId, asSequenceTrackId} = __private.ids\n\ndescribe(`Sequence`, () => {\n  test('sequence.getKeyframesOfSimpleProp()', async () => {\n    const {objPublicAPI, sheet} = await setupTestSheet({\n      staticOverrides: {\n        byObject: {},\n      },\n      sequence: {\n        type: 'PositionalSequence',\n        // length: 20,\n        // subUnitsPerUnit: 30,\n        tracksByObject: {\n          ['obj' as ObjectAddressKey]: {\n            trackIdByPropPath: {\n              [encodePathToProp(['position', 'y'])]: asSequenceTrackId('1'),\n            },\n            trackData: {\n              ['1' as SequenceTrackId]: {\n                type: 'BasicKeyframedTrack',\n\n                keyframes: keyframeUtils.fromArray([\n                  {\n                    id: asKeyframeId('0'),\n                    position: 10,\n                    connectedRight: true,\n                    handles: [0.5, 0.5, 0.5, 0.5],\n                    type: 'bezier',\n                    value: 3,\n                  },\n                  {\n                    id: asKeyframeId('1'),\n                    position: 20,\n                    connectedRight: false,\n                    handles: [0.5, 0.5, 0.5, 0.5],\n                    type: 'bezier',\n                    value: 6,\n                  },\n                ]),\n              },\n            },\n          },\n        },\n      },\n    })\n\n    const seq = sheet.publicApi.sequence\n\n    const keyframes = seq.__experimental_getKeyframes(\n      objPublicAPI.props.position.y,\n    )\n    expect(keyframes).toHaveLength(2)\n    expect(keyframes[0].value).toEqual(3)\n    expect(keyframes[1].value).toEqual(6)\n    expect(keyframes[0].position).toEqual(10)\n  })\n})\n"
  },
  {
    "path": "packages/studio/src/integration-tests/SheetObject.test.ts",
    "content": "import {setupTestSheet} from '@theatre/studio/integration-tests/testUtils'\nimport {encodePathToProp} from '@theatre/utils/pathToProp'\nimport type {\n  ObjectAddressKey,\n  SequenceTrackId,\n} from '@theatre/core/types/public'\nimport {iterateOver, prism} from '@theatre/dataverse'\nimport type {SheetState_Historic} from '@theatre/core/types/private/core'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nconst {asKeyframeId, asSequenceTrackId} = __private.ids\n\ndescribe(`SheetObject`, () => {\n  describe('static overrides', () => {\n    const setup = async (\n      staticOverrides: SheetState_Historic['staticOverrides']['byObject'][ObjectAddressKey] = {},\n    ) => {\n      const {studio, objPublicAPI} = await setupTestSheet({\n        staticOverrides: {\n          byObject: {\n            ['obj' as ObjectAddressKey]: staticOverrides,\n          },\n        },\n      })\n\n      const objValues = iterateOver(prism(() => objPublicAPI.value))\n      const teardown = () => objValues.return()\n\n      return {studio, objPublicAPI, objValues, teardown}\n    }\n\n    describe(`conformance`, () => {\n      test(`invalid static overrides should get ignored`, async () => {\n        const {teardown, objValues} = await setup({\n          nonExistentProp: 1,\n          position: {\n            // valid\n            x: 10,\n            // invalid\n            y: '20',\n          },\n          // invalid\n          color: 'ss',\n          deeply: {\n            nested: {\n              // invalid\n              checkbox: 0,\n            },\n          },\n        })\n        const {value} = objValues.next()\n        expect(value).toMatchObject({\n          position: {x: 10, y: 0, z: 0},\n          color: {r: 0, g: 0, b: 0, a: 1},\n          deeply: {\n            nested: {\n              checkbox: true,\n            },\n          },\n        })\n        expect(value).not.toHaveProperty('nonExistentProp')\n        teardown()\n      })\n\n      test(`setting a compound prop should only work if all its sub-props are present`, async () => {\n        const {teardown, objValues, objPublicAPI, studio} = await setup({})\n        expect(() => {\n          studio.transaction(({set}) => {\n            set(objPublicAPI.props.position, {x: 1, y: 2} as any as {\n              x: number\n              y: number\n              z: number\n            })\n          })\n        }).toThrow()\n      })\n\n      test(`setting a compound prop should only work if all its sub-props are valid`, async () => {\n        const {teardown, objValues, objPublicAPI, studio} = await setup({})\n        expect(() => {\n          studio.transaction(({set}) => {\n            set(objPublicAPI.props.position, {x: 1, y: 2, z: 'bad'} as any as {\n              x: number\n              y: number\n              z: number\n            })\n          })\n        }).toThrow()\n      })\n\n      test(`setting a simple prop should only work if it is valid`, async () => {\n        const {teardown, objValues, objPublicAPI, studio} = await setup({})\n        expect(() => {\n          studio.transaction(({set}) => {\n            set(objPublicAPI.props.position.x, 'bad' as any as number)\n          })\n        }).toThrow()\n      })\n    })\n\n    test(`should be a deep merge of default values and static overrides`, async () => {\n      const {teardown, objValues} = await setup({position: {x: 10}})\n      expect(objValues.next().value).toMatchObject({\n        position: {x: 10, y: 0, z: 0},\n      })\n      teardown()\n    })\n\n    test(`should allow introducing a static override to a simple prop`, async () => {\n      const {teardown, objValues, studio, objPublicAPI} = await setup({\n        position: {x: 10},\n      })\n      studio.transaction(({set}) => {\n        set(objPublicAPI.props.position.y, 5)\n      })\n\n      expect(objValues.next().value).toMatchObject({\n        position: {x: 10, y: 5, z: 0},\n      })\n\n      teardown()\n    })\n\n    test(`should allow introducing a static override to a compound prop`, async () => {\n      const {teardown, objValues, studio, objPublicAPI} = await setup()\n      studio.transaction(({set}) => {\n        set(objPublicAPI.props.position, {x: 1, y: 2, z: 3})\n      })\n\n      expect(objValues.next().value).toMatchObject({\n        position: {x: 1, y: 2, z: 3},\n      })\n\n      teardown()\n    })\n\n    test(`should allow removing a static override to a simple prop`, async () => {\n      const {teardown, objValues, studio, objPublicAPI} = await setup()\n      studio.transaction(({set}) => {\n        set(objPublicAPI.props.position, {x: 1, y: 2, z: 3})\n      })\n\n      studio.transaction(({unset}) => {\n        unset(objPublicAPI.props.position.z)\n      })\n\n      expect(objValues.next().value).toMatchObject({\n        position: {x: 1, y: 2, z: 0},\n      })\n\n      teardown()\n    })\n\n    test(`should allow removing a static override to a compound prop`, async () => {\n      const {teardown, objValues, studio, objPublicAPI} = await setup()\n      studio.transaction(({set}) => {\n        set(objPublicAPI.props.position, {x: 1, y: 2, z: 3})\n      })\n\n      studio.transaction(({unset}) => {\n        unset(objPublicAPI.props.position)\n      })\n\n      expect(objValues.next().value).toMatchObject({\n        position: {x: 0, y: 0, z: 0},\n      })\n\n      teardown()\n    })\n\n    describe(`simple props as json objects`, () => {\n      test(`with no overrides`, async () => {\n        const {teardown, objValues, studio, objPublicAPI} = await setup()\n\n        expect(objValues.next().value).toMatchObject({\n          color: {r: 0, g: 0, b: 0, a: 1},\n        })\n\n        teardown()\n      })\n\n      describe(`setting overrides`, () => {\n        test(`should allow setting an override`, async () => {\n          const {teardown, objValues, studio, objPublicAPI} = await setup()\n          studio.transaction(({set}) => {\n            set(objPublicAPI.props.color, {r: 0.1, g: 0.2, b: 0.3, a: 0.5})\n          })\n\n          expect(objValues.next().value).toMatchObject({\n            color: {r: 0.1, g: 0.2, b: 0.3, a: 0.5},\n          })\n\n          teardown()\n        })\n\n        test(`should disallow setting an override on json sub-props`, async () => {\n          const {teardown, objValues, studio, objPublicAPI} = await setup()\n\n          // TODO also disallow in typescript\n          expect(() => {\n            studio.transaction(({set}) => {\n              set(objPublicAPI.props.color.r, 1)\n            })\n          }).toThrow()\n\n          expect(objValues.next().value).toMatchObject({\n            color: {r: 0, g: 0, b: 0, a: 1},\n          })\n\n          teardown()\n        })\n      })\n\n      describe(`unsetting overrides`, () => {\n        test(`should allow unsetting an override`, async () => {\n          const {teardown, objValues, studio, objPublicAPI} = await setup()\n          studio.transaction(({set}) => {\n            set(objPublicAPI.props.color, {r: 0.1, g: 0.2, b: 0.3, a: 0.5})\n          })\n\n          studio.transaction(({unset}) => {\n            unset(objPublicAPI.props.color)\n          })\n\n          expect(objValues.next().value).toMatchObject({\n            color: {r: 0, g: 0, b: 0, a: 1},\n          })\n\n          teardown()\n        })\n\n        test(`should disallow unsetting an override on sub-props`, async () => {\n          const {teardown, objValues, studio, objPublicAPI} = await setup()\n          studio.transaction(({set}) => {\n            set(objPublicAPI.props.color, {r: 0.1, g: 0.2, b: 0.3, a: 0.5})\n          })\n\n          // TODO: also disallow in types\n          expect(() => {\n            studio.transaction(({unset}) => {\n              unset(objPublicAPI.props.color.r)\n            })\n          }).toThrow()\n\n          expect(objValues.next().value).toMatchObject({\n            color: {r: 0.1, g: 0.2, b: 0.3, a: 0.5},\n          })\n\n          teardown()\n        })\n      })\n    })\n  })\n\n  describe(`sequenced overrides`, () => {\n    test('calculation of sequenced overrides', async () => {\n      const {objPublicAPI, sheet} = await setupTestSheet({\n        staticOverrides: {\n          byObject: {},\n        },\n        sequence: {\n          type: 'PositionalSequence',\n          length: 20,\n          subUnitsPerUnit: 30,\n          tracksByObject: {\n            ['obj' as ObjectAddressKey]: {\n              trackIdByPropPath: {\n                [encodePathToProp(['position', 'y'])]: asSequenceTrackId('1'),\n              },\n              trackData: {\n                ['1' as SequenceTrackId]: {\n                  type: 'BasicKeyframedTrack',\n                  keyframes: keyframeUtils.fromArray([\n                    {\n                      id: asKeyframeId('0'),\n                      position: 10,\n                      connectedRight: true,\n                      handles: [0.5, 0.5, 0.5, 0.5],\n                      type: 'bezier',\n                      value: 3,\n                    },\n                    {\n                      id: asKeyframeId('1'),\n                      position: 20,\n                      connectedRight: false,\n                      handles: [0.5, 0.5, 0.5, 0.5],\n                      type: 'bezier',\n                      value: 6,\n                    },\n                  ]),\n                },\n              },\n            },\n          },\n        },\n      })\n\n      const seq = sheet.publicApi.sequence\n\n      const objValues = iterateOver(prism(() => objPublicAPI.value))\n\n      expect(seq.position).toEqual(0)\n\n      expect(objValues.next().value).toMatchObject({\n        position: {x: 0, y: 3, z: 0},\n      })\n\n      seq.position = 5\n      expect(seq.position).toEqual(5)\n      expect(objValues.next().value).toMatchObject({\n        position: {x: 0, y: 3, z: 0},\n      })\n\n      seq.position = 11\n      expect(objValues.next().value).toMatchObject({\n        position: {x: 0, y: 3.29999747758308, z: 0},\n      })\n\n      seq.position = 15\n      expect(objValues.next().value).toMatchObject({\n        position: {x: 0, y: 4.5, z: 0},\n      })\n\n      seq.position = 22\n      expect(objValues.next().value).toMatchObject({\n        position: {x: 0, y: 6, z: 0},\n      })\n\n      objValues.return()\n    })\n  })\n})\n"
  },
  {
    "path": "packages/studio/src/integration-tests/SheetObjectTemplate.test.ts",
    "content": "import {setupTestSheet} from '@theatre/studio/integration-tests/testUtils'\nimport {encodePathToProp} from '@theatre/utils/pathToProp'\nimport type {\n  ObjectAddressKey,\n  SequenceTrackId,\n} from '@theatre/core/types/public'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport {iterateOver} from '@theatre/dataverse'\nimport {__private} from '@theatre/core'\nconst {asSequenceTrackId} = __private.ids\n\ndescribe(`SheetObjectTemplate`, () => {\n  describe(`getArrayOfValidSequenceTracks()`, () => {\n    it('should only include valid tracks', async () => {\n      const {obj} = await setupTestSheet({\n        staticOverrides: {\n          byObject: {},\n        },\n        sequence: {\n          type: 'PositionalSequence',\n          subUnitsPerUnit: 30,\n          // length: 10,\n          tracksByObject: {\n            ['obj' as ObjectAddressKey]: {\n              trackIdByPropPath: {\n                [encodePathToProp(['position', 'x'])]: asSequenceTrackId('x'),\n                [encodePathToProp(['position', 'invalid'])]:\n                  asSequenceTrackId('invalidTrack'),\n              },\n              trackData: {\n                ['x' as SequenceTrackId]: null as $IntentionalAny,\n                ['invalid' as SequenceTrackId]: null as $IntentionalAny,\n              },\n            },\n          },\n        },\n      })\n\n      const iter = iterateOver(obj.template.getArrayOfValidSequenceTracks())\n\n      const validTracks = iter.next().value\n      expect(validTracks).toHaveLength(1)\n      expect(validTracks).toMatchObject([\n        {\n          pathToProp: ['position', 'x'],\n          trackId: 'x',\n        },\n      ])\n    })\n\n    it('should return empty array when no tracks are set up', async () => {\n      const {obj} = await setupTestSheet({\n        staticOverrides: {\n          byObject: {},\n        },\n        sequence: {\n          type: 'PositionalSequence',\n          tracksByObject: {},\n        },\n      })\n      const iter = iterateOver(obj.template.getArrayOfValidSequenceTracks())\n\n      expect(iter.next().value).toHaveLength(0)\n    })\n  })\n  describe(`getMapOfValidSequenceTracks_forStudio()`, () => {\n    it('should return valid sequences in map form', async () => {\n      const {obj} = await setupTestSheet({\n        staticOverrides: {\n          byObject: {},\n        },\n        sequence: {\n          type: 'PositionalSequence',\n          subUnitsPerUnit: 30,\n          length: 10,\n          tracksByObject: {\n            ['obj' as ObjectAddressKey]: {\n              trackIdByPropPath: {\n                [encodePathToProp(['position', 'x'])]: asSequenceTrackId('x'),\n                [encodePathToProp(['position', 'invalid'])]:\n                  asSequenceTrackId('invalidTrack'),\n              },\n              trackData: {\n                ['x' as SequenceTrackId]: null as $IntentionalAny,\n                ['invalid' as SequenceTrackId]: null as $IntentionalAny,\n              },\n            },\n          },\n        },\n      })\n\n      const iter = iterateOver(\n        obj.template.getMapOfValidSequenceTracks_forStudio(),\n      )\n\n      const validTracks = iter.next().value\n      expect(validTracks).toMatchObject({\n        position: {\n          x: 'x',\n        },\n      })\n    })\n  })\n})\n"
  },
  {
    "path": "packages/studio/src/integration-tests/setupIntegrationTestEnv.ts",
    "content": "export {}\n\nglobal.__THEATREJS__FORCE_CONNECT_CORE_AND_STUDIO = true\n"
  },
  {
    "path": "packages/studio/src/integration-tests/testUtils.ts",
    "content": "/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable no-restricted-syntax */\nimport '@theatre/studio'\nimport type {SheetId} from '@theatre/core'\nimport {getProject} from '@theatre/core'\nimport {privateAPI} from '@theatre/core/privateAPIs'\nimport type {ProjectState_Historic} from '@theatre/core/types/private/core'\nimport type {SheetState_Historic} from '@theatre/core/types/private/core'\nimport * as t from '@theatre/core/propTypes'\nimport getStudio from '@theatre/studio/getStudio'\nimport {getCoreTicker} from '@theatre/core/coreTicker'\nimport {globals} from '@theatre/core/globals'\nimport theatre from '@theatre/core'\n\nconst defaultProps = {\n  position: {\n    x: 0,\n    y: 0,\n    z: 0,\n  },\n  color: t.rgba(),\n  deeply: {\n    nested: {\n      checkbox: true,\n    },\n  },\n}\n\nlet lastProjectN = 0\n\nconst studio = getStudio()!\nvoid theatre.init({studio: true, usePersistentStorage: false})\n\nexport async function setupTestSheet(sheetState: SheetState_Historic) {\n  const projectState: ProjectState_Historic = {\n    definitionVersion: globals.currentProjectStateDefinitionVersion,\n    sheetsById: {\n      ['Sheet' as SheetId]: sheetState,\n    },\n    revisionHistory: [],\n  }\n  const project = getProject('Test Project ' + lastProjectN++, {\n    state: projectState,\n  })\n\n  const ticker = getCoreTicker()\n\n  ticker.tick()\n  await project.ready\n  const sheetPublicAPI = project.sheet('Sheet')\n  const objPublicAPI = sheetPublicAPI.object('obj', defaultProps)\n\n  const obj = privateAPI(objPublicAPI)\n\n  return {\n    obj,\n    objPublicAPI,\n    sheet: privateAPI(sheetPublicAPI),\n    project,\n    ticker,\n    studio,\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/notify.tsx",
    "content": "import React, {Fragment} from 'react'\nimport toast, {useToaster} from 'react-hot-toast/headless'\nimport styled from 'styled-components'\nimport {pointerEventsAutoInNormalMode} from './css'\nimport type {\n  Notification,\n  NotificationType,\n  Notify,\n  Notifiers,\n} from '@theatre/core/utils/notify'\nimport {useVal} from '@theatre/react'\nimport getStudio from './getStudio'\nimport {marked} from 'marked'\nimport useTooltip from './uiComponents/Popover/useTooltip'\nimport MinimalTooltip from './uiComponents/Popover/MinimalTooltip'\n\n/**\n * Creates a string key unique to a notification with a certain title and message.\n */\nconst hashNotification = ({title, message}: Notification) =>\n  `${title} ${message}`\n\n/**\n * Used to check if a notification with a certain title and message is already displayed.\n */\nconst notificationUniquenessChecker = (() => {\n  const map = new Map<string, number>()\n  return {\n    add: (notification: Notification) => {\n      const key = hashNotification(notification)\n      if (map.has(key)) {\n        map.set(key, map.get(key)! + 1)\n      } else {\n        map.set(key, 1)\n      }\n    },\n    delete: (notification: Notification) => {\n      const key = hashNotification(notification)\n      if (map.has(key) && map.get(key)! > 1) {\n        map.set(key, map.get(key)! - 1)\n      } else {\n        map.delete(key)\n      }\n    },\n    clear: () => {\n      map.clear()\n    },\n    check: (notification: Notification) =>\n      map.has(hashNotification(notification)),\n  }\n})()\n\n/**\n * Used to check if a notification with a certain type is already displayed.\n *\n * Massive hack, we should be able to attach this info to toasts.\n */\nconst notificationTypeChecker = (() => {\n  const map = new Map<NotificationType, number>()\n  return {\n    add: (type: NotificationType) => {\n      if (map.has(type)) {\n        map.set(type, map.get(type)! + 1)\n      } else {\n        map.set(type, 1)\n      }\n    },\n    delete: (type: NotificationType) => {\n      if (map.has(type) && map.get(type)! > 1) {\n        map.set(type, map.get(type)! - 1)\n      } else {\n        map.delete(type)\n      }\n    },\n    clear: () => {\n      map.clear()\n    },\n    check: (type: NotificationType) => map.has(type),\n    get types() {\n      return Array.of(...map.keys())\n    },\n  }\n})()\n\n//region Styles\nconst NotificationContainer = styled.div`\n  width: 100%;\n  border-radius: 4px;\n  display: flex;\n  gap: 12px;\n  ${pointerEventsAutoInNormalMode};\n  background-color: rgba(40, 43, 47, 0.8);\n  box-shadow:\n    0 1px 1px rgba(0, 0, 0, 0.25),\n    0 2px 6px rgba(0, 0, 0, 0.15);\n  backdrop-filter: blur(14px);\n\n  @supports not (backdrop-filter: blur()) {\n    background: rgba(40, 43, 47, 0.95);\n  }\n`\n\nconst NotificationTitle = styled.div`\n  font-size: 14px;\n  font-weight: bold;\n  color: #fff;\n`\n\nconst NotificationMain = styled.div`\n  flex: 1;\n  flex-direction: column;\n  width: 0;\n  display: flex;\n  padding: 16px 0;\n  gap: 12px;\n`\n\nconst NotificationMessage = styled.div`\n  color: #b4b4b4;\n  font-size: 12px;\n  line-height: 1.4;\n\n  a {\n    color: rgba(255, 255, 255, 0.9);\n  }\n\n  em {\n    font-style: italic;\n  }\n\n  strong {\n    font-weight: bold;\n    color: #d5d5d5;\n  }\n\n  p {\n    margin-bottom: 8px;\n  }\n\n  code {\n    font-family: monospace;\n    background: rgba(0, 0, 0, 0.3);\n    padding: 1px 1px 2px;\n    border-radius: 4px;\n    border: 1px solid rgba(255, 255, 255, 0.08);\n    white-space: pre-wrap;\n  }\n\n  pre > code {\n    white-space: pre;\n    display: block;\n    overflow: auto;\n    padding: 4px;\n  }\n\n  pre {\n    white-space: pre-wrap;\n    margin-bottom: 8px;\n  }\n`\n\nconst DismissButton = styled.button`\n  color: rgba(255, 255, 255, 0.9);\n  font-weight: 500;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: none;\n  border: none;\n  padding-left: 12px;\n  padding-right: 12px;\n  border-left: 1px solid rgba(255, 255, 255, 0.05);\n\n  &:hover {\n    background: rgba(255, 255, 255, 0.05);\n  }\n`\n\nconst COLORS = {\n  info: '#3b82f6',\n  success: '#10b981',\n  warning: '#f59e0b',\n  error: '#ef4444',\n}\n\nconst IndicatorDot = styled.div<{type: NotificationType}>`\n  display: flex;\n  justify-content: center;\n  margin-left: 12px;\n  padding-top: 21px;\n\n  ::before {\n    content: '';\n    width: 8px;\n    height: 8px;\n    border-radius: 999999px;\n    background-color: ${({type}) => COLORS[type]};\n  }\n`\n//endregion\n\n/**\n * Creates handlers for different types of notifications.\n */\nconst createHandler =\n  (type: NotificationType): Notify =>\n  (title, message, docs = [], allowDuplicates = false) => {\n    // We can disallow duplicates. We do this through checking the notification contents\n    // against a registry of already displayed notifications.\n    if (\n      allowDuplicates ||\n      !notificationUniquenessChecker.check({title, message})\n    ) {\n      notificationUniquenessChecker.add({title, message})\n      // We have not way sadly to attach custom notification types to react-hot-toast toasts,\n      // so we use our own data structure for it.\n      notificationTypeChecker.add(type)\n      toast.custom(\n        (t) => (\n          <NotificationContainer>\n            <IndicatorDot type={type} />\n            <NotificationMain>\n              <NotificationTitle>{title}</NotificationTitle>\n              <NotificationMessage\n                dangerouslySetInnerHTML={{\n                  __html: marked.parse(message),\n                }}\n              />\n              {docs.length > 0 && (\n                <NotificationMessage>\n                  <span>\n                    Docs:{' '}\n                    {docs.map((doc, i) => (\n                      <Fragment key={i}>\n                        {i > 0 && ', '}\n                        <a target=\"_blank\" href={doc.url}>\n                          {doc.title}\n                        </a>\n                      </Fragment>\n                    ))}\n                  </span>\n                </NotificationMessage>\n              )}\n            </NotificationMain>\n            <DismissButton\n              onClick={() => {\n                toast.remove(t.id)\n                notificationUniquenessChecker.delete({title, message})\n                notificationTypeChecker.delete(type)\n              }}\n            >\n              Close\n            </DismissButton>\n          </NotificationContainer>\n        ),\n        {duration: Infinity},\n      )\n    }\n  }\n\nexport const notify: Notifiers = {\n  warning: createHandler('warning'),\n  success: createHandler('success'),\n  info: createHandler('info'),\n  error: createHandler('error'),\n}\n\n//region Styles\nconst ButtonContainer = styled.div<{\n  align: 'center' | 'side'\n  danger?: boolean\n}>`\n  display: flex;\n  justify-content: ${({align}) => (align === 'center' ? 'center' : 'flex-end')};\n  gap: 12px;\n`\n\nconst Button = styled.button<{danger?: boolean}>`\n  position: relative;\n  border-radius: 4px;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  ${pointerEventsAutoInNormalMode};\n  background-color: rgba(40, 43, 47, 0.8);\n  box-shadow:\n    0 1px 1px rgba(0, 0, 0, 0.25),\n    0 2px 6px rgba(0, 0, 0, 0.15);\n  backdrop-filter: blur(14px);\n  border: none;\n  padding: 12px;\n  color: #fff;\n  overflow: hidden;\n\n  ::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n  }\n\n  :hover::before {\n    background: ${({danger}) =>\n      danger ? 'rgba(255, 0, 0, 0.1)' : 'rgba(255, 255, 255, 0.1)'};\n  }\n\n  @supports not (backdrop-filter: blur()) {\n    background: rgba(40, 43, 47, 0.95);\n  }\n`\n\nconst NotifierContainer = styled.div`\n  z-index: 10;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  position: fixed;\n  right: 92px;\n  top: 50px;\n  width: 500px;\n  height: 85vh;\n  min-height: 400px;\n`\n\nconst NotificationScroller = styled.div`\n  overflow: hidden;\n  pointer-events: auto;\n  border-radius: 4px;\n\n  & > div {\n    display: flex;\n    flex-direction: column-reverse;\n    gap: 8px;\n    overflow: scroll;\n    height: 100%;\n  }\n`\n\nconst EmptyState = styled.div`\n  width: fit-content;\n  padding: 8px;\n  border-radius: 4px;\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  color: #b4b4b4;\n  font-size: 12px;\n  line-height: 1.4;\n`\n//endregion\n\nexport const useEmptyNotificationsTooltip = () => {\n  const {hasNotifications} = useNotifications()\n\n  return useTooltip({enabled: !hasNotifications}, () => (\n    <MinimalTooltip>\n      <EmptyState>\n        <NotificationTitle>No notifications</NotificationTitle>\n        Notifications will appear here when you get them.\n      </EmptyState>\n    </MinimalTooltip>\n  ))\n}\n\n/**\n * The component responsible for rendering the notifications.\n */\nexport const Notifier = () => {\n  const {toasts, handlers} = useToaster()\n  const {startPause, endPause} = handlers\n\n  const pinNotifications =\n    useVal(getStudio().atomP.ahistoric.pinNotifications) ?? false\n\n  return (\n    <NotifierContainer>\n      {!pinNotifications\n        ? null\n        : toasts.length > 0 && (\n            <NotificationScroller\n              onMouseEnter={startPause}\n              onMouseLeave={endPause}\n            >\n              <div>\n                {toasts.map((toast) => {\n                  return (\n                    <div key={toast.id}>\n                      {/* message is always a function in our case */}\n                      {/* @ts-ignore */}\n                      {toast.message(toast)}\n                    </div>\n                  )\n                })}\n              </div>\n            </NotificationScroller>\n          )}\n      <ButtonContainer align=\"side\">\n        {pinNotifications && toasts.length > 0 && (\n          <Button\n            onClick={() => {\n              notificationTypeChecker.clear()\n              notificationUniquenessChecker.clear()\n              toast.remove()\n            }}\n            danger\n          >\n            Clear\n          </Button>\n        )}\n      </ButtonContainer>\n    </NotifierContainer>\n  )\n}\n\nexport const useNotifications = () => {\n  const {toasts} = useToaster()\n\n  return {\n    hasNotifications: toasts.length > 0,\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/panels/BasePanel/BasePanel.tsx",
    "content": "import {prism, val} from '@theatre/dataverse'\nimport {usePrism} from '@theatre/react'\nimport type {$IntentionalAny, VoidFn} from '@theatre/core/types/public'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {PanelPosition} from '@theatre/core/types/private'\nimport useLockSet from '@theatre/studio/uiComponents/useLockSet'\nimport React, {useContext} from 'react'\nimport useWindowSize from 'react-use/esm/useWindowSize'\nimport type {UIPanelId} from '@theatre/core/types/private'\n\ntype PanelStuff = {\n  panelId: UIPanelId\n  dims: {\n    width: number\n    height: number\n    top: number\n    left: number\n  }\n  minDims: {\n    width: number\n    height: number\n  }\n  boundsHighlighted: boolean\n  addBoundsHighlightLock: () => VoidFn\n}\n\nexport const panelDimsToPanelPosition = (\n  dims: PanelStuff['dims'],\n  windowDims: {height: number; width: number},\n): PanelPosition => {\n  const left = dims.left / windowDims.width\n  const right = (dims.left + dims.width) / windowDims.width\n  const top = dims.top / windowDims.height\n  const bottom = (dims.height + dims.top) / windowDims.height\n\n  const position: PanelPosition = {\n    edges: {\n      left:\n        left <= 0.5\n          ? {from: 'screenLeft', distance: left}\n          : {from: 'screenRight', distance: 1 - left},\n\n      right:\n        right <= 0.5\n          ? {from: 'screenLeft', distance: right}\n          : {from: 'screenRight', distance: 1 - right},\n\n      top:\n        top <= 0.5\n          ? {from: 'screenTop', distance: top}\n          : {from: 'screenBottom', distance: 1 - top},\n\n      bottom:\n        bottom <= 0.5\n          ? {from: 'screenTop', distance: bottom}\n          : {from: 'screenBottom', distance: 1 - bottom},\n    },\n  }\n\n  return position\n}\n\nconst PanelContext = React.createContext<PanelStuff>(null as $IntentionalAny)\n\nexport const usePanel = () => useContext(PanelContext)\n\nconst BasePanel: React.FC<{\n  panelId: UIPanelId\n  defaultPosition: PanelPosition\n  minDims: {width: number; height: number}\n  children: React.ReactNode\n}> = ({panelId, children, defaultPosition, minDims}) => {\n  const windowSize = useWindowSize(800, 200)\n  const [boundsHighlighted, addBoundsHighlightLock] = useLockSet()\n\n  const {stuff} = usePrism(() => {\n    const {edges} =\n      val(getStudio()!.atomP.historic.panelPositions[panelId]) ??\n      defaultPosition\n\n    const left = Math.floor(\n      windowSize.width *\n        (edges.left.from === 'screenLeft'\n          ? edges.left.distance\n          : 1 - edges.left.distance),\n    )\n\n    const right = Math.floor(\n      windowSize.width *\n        (edges.right.from === 'screenLeft'\n          ? edges.right.distance\n          : 1 - edges.right.distance),\n    )\n\n    const top = Math.floor(\n      windowSize.height *\n        (edges.top.from === 'screenTop'\n          ? edges.top.distance\n          : 1 - edges.top.distance),\n    )\n\n    const bottom = Math.floor(\n      windowSize.height *\n        (edges.bottom.from === 'screenTop'\n          ? edges.bottom.distance\n          : 1 - edges.bottom.distance),\n    )\n\n    const width = Math.max(right - left, minDims.width)\n    const height = Math.max(bottom - top, minDims.height)\n\n    // memo-ing dims so its ref can be used as a cache key\n    const dims = prism.memo(\n      'dims',\n      () => ({\n        width,\n        left,\n        top,\n        height,\n      }),\n      [width, left, top, height],\n    )\n\n    const stuff: PanelStuff = {\n      dims: dims,\n      panelId,\n      minDims,\n      boundsHighlighted,\n      addBoundsHighlightLock,\n    }\n    return {stuff}\n  }, [panelId, windowSize, boundsHighlighted, addBoundsHighlightLock])\n\n  return <PanelContext.Provider value={stuff}>{children}</PanelContext.Provider>\n}\n\nexport default BasePanel\n"
  },
  {
    "path": "packages/studio/src/panels/BasePanel/ExtensionPaneWrapper.tsx",
    "content": "import type {$FixMe} from '@theatre/core/types/public'\nimport type {PanelPosition, UIPanelId} from '@theatre/core/types/private'\nimport type {PaneInstance} from '@theatre/core/types/public'\nimport React, {useCallback, useLayoutEffect, useState} from 'react'\nimport styled from 'styled-components'\nimport {F2 as F2Impl, TitleBar} from './common'\nimport BasePanel from './BasePanel'\nimport PanelDragZone from './PanelDragZone'\nimport PanelWrapper from './PanelWrapper'\nimport {ErrorBoundary} from 'react-error-boundary'\nimport {IoClose} from 'react-icons/io5'\nimport getStudio from '@theatre/studio/getStudio'\nimport {panelZIndexes} from '@theatre/studio/panels/BasePanel/common'\nimport type {PaneInstanceId} from '@theatre/core/types/public'\n\nconst defaultPosition: PanelPosition = {\n  edges: {\n    left: {from: 'screenLeft', distance: 0.3},\n    right: {from: 'screenRight', distance: 0.3},\n    top: {from: 'screenTop', distance: 0.3},\n    bottom: {from: 'screenBottom', distance: 0.3},\n  },\n}\n\nconst minDims = {width: 300, height: 300}\n\nconst ExtensionPaneWrapper: React.FC<{\n  paneInstance: PaneInstance<$FixMe>\n}> = ({paneInstance}) => {\n  return (\n    <BasePanel\n      panelId={`pane-${paneInstance.instanceId}` as UIPanelId}\n      defaultPosition={defaultPosition}\n      minDims={minDims}\n    >\n      <Content paneInstance={paneInstance} />\n    </BasePanel>\n  )\n}\n\nconst Container = styled(PanelWrapper)`\n  display: flex;\n  flex-direction: column;\n\n  box-shadow: 0px 5px 12px -4px rgb(0 0 0 / 22%);\n  z-index: ${panelZIndexes.pluginPanes};\n`\n\nconst Title = styled.div`\n  width: 100%;\n`\n\nconst PaneTools = styled.div`\n  display: flex;\n  align-items: center;\n  opacity: 1;\n  position: absolute;\n  right: 4px;\n  top: 0;\n  bottom: 0;\n`\n\nconst ClosePanelButton = styled.button`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 2px;\n  font-size: 11px;\n  height: 10px;\n  width: 18px;\n  color: #adadadb3;\n  background: transparent;\n  border: none;\n  cursor: pointer;\n  &:hover {\n    color: white;\n  }\n`\n\n/**\n * The &:after part blocks pointer events from reaching the content of the\n * pane when a drag gesture is active in theatre's UI. It's a hack and its downside\n * is that pane content cannot interact with the rest of theatre's UI while a drag\n * gesture is active.\n * TODO find a less hacky way?\n */\nconst F2 = styled(F2Impl)`\n  position: relative;\n  overflow: hidden;\n\n  &:after {\n    z-index: 10;\n    position: absolute;\n    inset: 0;\n    display: block;\n    content: ' ';\n    pointer-events: none;\n\n    #pointer-root:not(.normal) & {\n      pointer-events: auto;\n    }\n  }\n`\n\nconst ErrorContainer = styled.div`\n  padding: 12px;\n\n  & > pre {\n    border: 1px solid #ff62624f;\n    background-color: rgb(255 0 0 / 5%);\n    margin: 8px 0;\n    padding: 8px;\n    font-family: monospace;\n    overflow: scroll;\n    color: #ff9896;\n  }\n`\n\nconst ErrorFallback: React.FC<{error: Error}> = (props) => {\n  return (\n    <ErrorContainer>\n      An Error occurred rendering this pane. Open the console for more info.\n      <pre>\n        {JSON.stringify(\n          {message: props.error.message, stack: props.error.stack},\n          null,\n          2,\n        )}\n      </pre>\n    </ErrorContainer>\n  )\n}\n\nconst Content: React.FC<{paneInstance: PaneInstance<$FixMe>}> = ({\n  paneInstance,\n}) => {\n  const [mountingPoint, setMountingPoint] = useState<HTMLElement | null>(null)\n\n  const mount = paneInstance.definition.mount\n\n  useLayoutEffect(() => {\n    if (!mountingPoint) return\n    const unmount = mount({\n      paneId: paneInstance.instanceId,\n      node: mountingPoint!,\n    })\n    if (typeof unmount === 'function') {\n      return unmount\n    }\n  }, [mountingPoint, mount, paneInstance.instanceId])\n\n  const closePane = useCallback(() => {\n    getStudio().paneManager.destroyPane(\n      paneInstance.instanceId as PaneInstanceId,\n    )\n  }, [paneInstance])\n\n  return (\n    <Container data-testid={`theatre-pane-wrapper-${paneInstance.instanceId}`}>\n      <PanelDragZone>\n        <TitleBar>\n          <PaneTools>\n            <ClosePanelButton onClick={closePane} title={'Close Pane'}>\n              <IoClose />\n            </ClosePanelButton>\n          </PaneTools>\n          <Title>{paneInstance.instanceId}</Title>\n        </TitleBar>\n      </PanelDragZone>\n      <ErrorBoundary FallbackComponent={ErrorFallback}>\n        <F2\n          data-testid={`theatre-pane-content-${paneInstance.instanceId}`}\n          ref={setMountingPoint}\n        />\n      </ErrorBoundary>\n    </Container>\n  )\n}\n\nexport default ExtensionPaneWrapper\n"
  },
  {
    "path": "packages/studio/src/panels/BasePanel/PanelDragZone.tsx",
    "content": "import useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport type {$IntentionalAny, VoidFn} from '@theatre/core/types/public'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport React, {useMemo, useRef} from 'react'\nimport styled from 'styled-components'\nimport {panelDimsToPanelPosition, usePanel} from './BasePanel'\nimport {useCssCursorLock} from '@theatre/studio/uiComponents/PointerEventsHandler'\nimport {clamp} from 'lodash-es'\nimport {minVisibleSize} from './common'\n\nconst Container = styled.div`\n  cursor: move;\n`\n\nconst PanelDragZone: React.FC<\n  React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>\n> = (props) => {\n  const panelStuff = usePanel()\n  const panelStuffRef = useRef(panelStuff)\n  panelStuffRef.current = panelStuff\n\n  const [ref, node] = useRefAndState<HTMLDivElement>(null as $IntentionalAny)\n\n  const dragOpts: Parameters<typeof useDrag>[1] = useMemo(() => {\n    return {\n      debugName: 'PanelDragZone',\n      lockCursorTo: 'move',\n      onDragStart() {\n        const stuffBeforeDrag = panelStuffRef.current\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n        const unlock = panelStuff.addBoundsHighlightLock()\n\n        return {\n          onDrag(dx, dy) {\n            const newDims: (typeof panelStuff)['dims'] = {\n              ...stuffBeforeDrag.dims,\n              top: clamp(\n                stuffBeforeDrag.dims.top + dy,\n                0,\n                window.innerHeight - minVisibleSize,\n              ),\n              left: clamp(\n                stuffBeforeDrag.dims.left + dx,\n                -stuffBeforeDrag.dims.width + minVisibleSize,\n                window.innerWidth - minVisibleSize,\n              ),\n            }\n            const position = panelDimsToPanelPosition(newDims, {\n              width: window.innerWidth,\n              height: window.innerHeight,\n            })\n\n            tempTransaction?.discard()\n            tempTransaction = getStudio()!.tempTransaction(({stateEditors}) => {\n              stateEditors.studio.historic.panelPositions.setPanelPosition({\n                position,\n                panelId: stuffBeforeDrag.panelId,\n              })\n            })\n          },\n          onDragEnd(dragHappened) {\n            unlock()\n            if (dragHappened) {\n              tempTransaction?.commit()\n            } else {\n              tempTransaction?.discard()\n            }\n          },\n        }\n      },\n    }\n  }, [])\n\n  const [isDragging] = useDrag(node, dragOpts)\n  useCssCursorLock(isDragging, 'dragging', 'move')\n\n  const [onMouseEnter, onMouseLeave] = useMemo(() => {\n    let unlock: VoidFn | undefined\n    return [\n      function onMouseEnter() {\n        if (unlock) {\n          const u = unlock\n          unlock = undefined\n          u()\n        }\n        unlock = panelStuff.addBoundsHighlightLock()\n      },\n      function onMouseLeave() {\n        if (unlock) {\n          const u = unlock\n          unlock = undefined\n          u()\n        }\n      },\n    ]\n  }, [])\n\n  return (\n    <Container\n      {...props}\n      ref={ref}\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n    />\n  )\n}\n\nexport default PanelDragZone\n"
  },
  {
    "path": "packages/studio/src/panels/BasePanel/PanelResizeHandle.tsx",
    "content": "import useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport {lighten} from 'polished'\nimport React, {useMemo, useRef} from 'react'\nimport styled from 'styled-components'\nimport {panelDimsToPanelPosition, usePanel} from './BasePanel'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport {clamp} from 'lodash-es'\nimport {minVisibleSize} from './common'\n\nconst Base = styled.div`\n  position: absolute;\n  ${pointerEventsAutoInNormalMode};\n  &:after {\n    position: absolute;\n    inset: -5px;\n    display: block;\n    content: ' ';\n  }\n\n  opacity: 0;\n  background-color: #478698;\n\n  &.isHighlighted {\n    opacity: 0.7;\n  }\n\n  &.isDragging {\n    opacity: 1;\n    /* background-color: ${lighten(0.2, '#478698')}; */\n  }\n\n  &:hover {\n    opacity: 1;\n  }\n`\n\nconst Side = styled(Base)`\n  /**\n  The horizintal/vertical resize handles have z-index:-1 and are offset 1px outside of the panel\n  to make sure they don't occlude any element that pops out of the panel (like the Playhead in SequenceEditorPanel).\n\n  This means that panels will always need an extra 1px margin for their resize handles to be visible, but that's not a problem\n  that we have to deal with right now (if it is at all a problem).\n  \n   */\n  z-index: -1;\n`\n\nconst Horizontal = styled(Side)`\n  left: 0px;\n  right: 0px;\n  height: 1px;\n`\n\nconst Top = styled(Horizontal)`\n  top: -1px;\n`\n\nconst Bottom = styled(Horizontal)`\n  bottom: -1px;\n`\n\nconst Vertical = styled(Side)`\n  z-index: -1;\n  top: -1px;\n  bottom: -1px;\n  width: 1px;\n`\n\nconst Left = styled(Vertical)`\n  left: -1px;\n`\n\nconst Right = styled(Vertical)`\n  right: -1px;\n`\n\nconst Angle = styled(Base)`\n  // The angles have z-index: 10 to make sure they _do_ occlude other elements in the panel.\n  z-index: 10;\n  width: 8px;\n  height: 8px;\n`\n\nconst TopLeft = styled(Angle)`\n  top: 0;\n  left: 0;\n`\n\nconst TopRight = styled(Angle)`\n  top: 0;\n  right: 0;\n`\n\nconst BottomLeft = styled(Angle)`\n  bottom: 0;\n  left: 0;\n`\n\nconst BottomRight = styled(Angle)`\n  bottom: 0;\n  right: 0;\n`\n\nconst els = {\n  Top,\n  TopLeft,\n  TopRight,\n  Bottom,\n  BottomLeft,\n  BottomRight,\n  Left,\n  Right,\n}\n\ntype Which =\n  | 'Top'\n  | 'Bottom'\n  | 'Left'\n  | 'Right'\n  | 'TopLeft'\n  | 'TopRight'\n  | 'BottomLeft'\n  | 'BottomRight'\n\nconst cursors: {[which in Which]: string} = {\n  Top: 'ns-resize',\n  Bottom: 'ns-resize',\n  Left: 'ew-resize',\n  Right: 'ew-resize',\n  TopLeft: 'nw-resize',\n  TopRight: 'ne-resize',\n  BottomLeft: 'sw-resize',\n  BottomRight: 'se-resize',\n}\n\nconst PanelResizeHandle: React.FC<{\n  which: Which\n}> = ({which}) => {\n  const panelStuff = usePanel()\n  const panelStuffRef = useRef(panelStuff)\n  panelStuffRef.current = panelStuff\n\n  const [ref, node] = useRefAndState<HTMLDivElement>(null as $IntentionalAny)\n  const dragOpts: Parameters<typeof useDrag>[1] = useMemo(() => {\n    return {\n      debugName: 'PanelResizeHandle',\n      lockCursorTo: cursors[which],\n      onDragStart() {\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n        const stuffBeforeDrag = panelStuffRef.current\n        const unlock = panelStuff.addBoundsHighlightLock()\n\n        return {\n          onDrag(dx, dy) {\n            const newDims: (typeof panelStuff)['dims'] = {\n              ...stuffBeforeDrag.dims,\n            }\n\n            if (which.startsWith('Bottom')) {\n              newDims.height = Math.max(\n                newDims.height + dy,\n                stuffBeforeDrag.minDims.height,\n              )\n            } else if (which.startsWith('Top')) {\n              const bottom = newDims.top + newDims.height\n              const top = clamp(\n                newDims.top + dy,\n                0,\n                Math.min(\n                  bottom - stuffBeforeDrag.minDims.height,\n                  window.innerHeight - minVisibleSize,\n                ),\n              )\n              const height = bottom - top\n\n              newDims.height = height\n              newDims.top = top\n            }\n            if (which.endsWith('Left')) {\n              const right = newDims.left + newDims.width\n              const left = Math.min(\n                newDims.left + dx,\n                Math.min(\n                  right - stuffBeforeDrag.minDims.width,\n                  window.innerWidth - minVisibleSize,\n                ),\n              )\n              const width = right - left\n\n              newDims.width = width\n              newDims.left = left\n            } else if (which.endsWith('Right')) {\n              newDims.width = Math.max(\n                newDims.width + dx,\n                Math.max(\n                  stuffBeforeDrag.minDims.width,\n                  minVisibleSize - stuffBeforeDrag.dims.left,\n                ),\n              )\n            }\n\n            const position = panelDimsToPanelPosition(newDims, {\n              width: window.innerWidth,\n              height: window.innerHeight,\n            })\n\n            tempTransaction?.discard()\n            tempTransaction = getStudio()!.tempTransaction(({stateEditors}) => {\n              stateEditors.studio.historic.panelPositions.setPanelPosition({\n                position,\n                panelId: stuffBeforeDrag.panelId,\n              })\n            })\n          },\n          onDragEnd(dragHappened) {\n            unlock()\n            if (dragHappened) {\n              tempTransaction?.commit()\n            } else {\n              tempTransaction?.discard()\n            }\n          },\n        }\n      },\n    }\n  }, [which])\n\n  const [isDragging] = useDrag(node, dragOpts)\n  const Comp = els[which]\n\n  const isOnCorner = which.length <= 6\n\n  return (\n    <Comp\n      ref={ref}\n      className={[\n        isDragging ? 'isDragging' : '',\n        panelStuff.boundsHighlighted && isOnCorner ? 'isHighlighted' : '',\n      ].join(' ')}\n      style={{cursor: cursors[which]}}\n    />\n  )\n}\n\nexport default PanelResizeHandle\n"
  },
  {
    "path": "packages/studio/src/panels/BasePanel/PanelResizers.tsx",
    "content": "import React from 'react'\nimport PanelResizeHandle from './PanelResizeHandle'\n\nconst PanelResizers: React.FC<{}> = (props) => {\n  return (\n    <>\n      <PanelResizeHandle which=\"Bottom\" />\n      <PanelResizeHandle which=\"Top\" />\n      <PanelResizeHandle which=\"Left\" />\n      <PanelResizeHandle which=\"Right\" />\n      <PanelResizeHandle which=\"TopLeft\" />\n      <PanelResizeHandle which=\"TopRight\" />\n      <PanelResizeHandle which=\"BottomLeft\" />\n      <PanelResizeHandle which=\"BottomRight\" />\n    </>\n  )\n}\n\nexport default PanelResizers\n"
  },
  {
    "path": "packages/studio/src/panels/BasePanel/PanelWrapper.tsx",
    "content": "import {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport React from 'react'\nimport styled from 'styled-components'\nimport {usePanel} from './BasePanel'\nimport PanelResizers from './PanelResizers'\n\nconst Container = styled.div`\n  position: absolute;\n  user-select: none;\n  box-sizing: border-box;\n  ${pointerEventsAutoInNormalMode};\n  /* box-shadow: 1px 2px 10px -5px black; */\n\n  z-index: 1000;\n`\n\nconst PanelWrapper = React.forwardRef(\n  (\n    props: React.DetailedHTMLProps<\n      React.HTMLAttributes<HTMLDivElement>,\n      HTMLDivElement\n    >,\n    ref,\n  ) => {\n    const stuff = usePanel()\n    const {style, children, ...otherProps} = props\n\n    return (\n      // @ts-ignore\n      <Container\n        // @ts-ignore\n        ref={ref}\n        {...otherProps}\n        style={{\n          width: stuff.dims.width + 'px',\n          height: stuff.dims.height + 'px',\n          top: stuff.dims.top + 'px',\n          left: stuff.dims.left + 'px',\n          ...(style ?? {}),\n        }}\n      >\n        <PanelResizers />\n        {children}\n      </Container>\n    )\n  },\n)\n\nexport default PanelWrapper\n"
  },
  {
    "path": "packages/studio/src/panels/BasePanel/common.tsx",
    "content": "import {theme} from '@theatre/studio/css'\nimport styled from 'styled-components'\n\nexport const panelZIndexes = {\n  get outlinePanel() {\n    return 1\n  },\n\n  get propsPanel() {\n    return panelZIndexes.outlinePanel\n  },\n\n  get sequenceEditorPanel() {\n    return this.outlinePanel - 1\n  },\n\n  get toolbar() {\n    return this.outlinePanel + 1\n  },\n\n  get pluginPanes() {\n    return this.sequenceEditorPanel - 1\n  },\n}\n\nexport const propsEditorBackground = theme.panel.bg\n\nexport const TitleBar_Piece = styled.span`\n  white-space: nowrap;\n`\n\nexport const TitleBar_Punctuation = styled.span`\n  white-space: nowrap;\n  color: ${theme.panel.head.punctuation.color};\n`\n\nexport const F2 = styled.div`\n  background: ${propsEditorBackground};\n  flex-grow: 1;\n  overflow-y: scroll;\n  padding: 0;\n`\n\nexport const titleBarHeight = 18\n\nexport const TitleBar = styled.div`\n  height: ${titleBarHeight}px;\n  box-sizing: border-box;\n  display: flex;\n  align-items: center;\n  padding: 0 10px;\n  position: relative;\n  color: #adadadb3;\n  border-bottom: 1px solid rgb(0 0 0 / 13%);\n  background-color: #25272b;\n  font-size: 10px;\n  font-weight: 500;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n`\n\n// the minimum visible width or height when the panel is partially offscreen\nexport const minVisibleSize = 100\n"
  },
  {
    "path": "packages/studio/src/panels/DetailPanel/DetailPanel.tsx",
    "content": "import {outlineSelection} from '@theatre/studio/selectors'\nimport {usePrism, useVal} from '@theatre/react'\nimport React, {\n  createContext,\n  useContext,\n  useEffect,\n  useLayoutEffect,\n  useState,\n} from 'react'\nimport styled from 'styled-components'\nimport {\n  panelZIndexes,\n  TitleBar_Piece,\n  TitleBar_Punctuation,\n} from '@theatre/studio/panels/BasePanel/common'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport ObjectDetails from './ObjectDetails'\nimport ProjectDetails from './ProjectDetails'\nimport getStudio from '@theatre/studio/getStudio'\nimport useHotspot from '@theatre/studio/uiComponents/useHotspot'\nimport {Atom, prism, val} from '@theatre/dataverse'\nimport EmptyState from './EmptyState'\nimport useLockSet from '@theatre/studio/uiComponents/useLockSet'\nimport {usePresenceListenersOnRootElement} from '@theatre/studio/uiComponents/usePresence'\nimport {__private} from '@theatre/core'\nconst {isProject, isSheetObject} = __private.instanceTypes\n\nconst headerHeight = `32px`\n\nconst Container = styled.div<{pin: boolean}>`\n  ${pointerEventsAutoInNormalMode};\n  background-color: rgba(40, 43, 47, 0.8);\n  position: fixed;\n  right: 8px;\n  top: 50px;\n  // Temporary, see comment about CSS grid in SingleRowPropEditor.\n  width: 280px;\n  height: fit-content;\n  z-index: ${panelZIndexes.propsPanel};\n\n  box-shadow:\n    0 1px 1px rgba(0, 0, 0, 0.25),\n    0 2px 6px rgba(0, 0, 0, 0.15);\n  backdrop-filter: blur(14px);\n  border-radius: 2px;\n\n  display: ${({pin}) => (pin ? 'block' : 'none')};\n\n  &:hover {\n    display: block;\n  }\n\n  @supports not (backdrop-filter: blur()) {\n    background: rgba(40, 43, 47, 0.95);\n  }\n`\n\nconst Title = styled.div`\n  margin: 0 10px;\n  color: #919191;\n  font-weight: 500;\n  font-size: 10px;\n  user-select: none;\n  ${pointerEventsAutoInNormalMode};\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n`\n\nconst Header = styled.div`\n  height: ${headerHeight};\n  display: flex;\n  align-items: center;\n`\n\nconst Body = styled.div`\n  ${pointerEventsAutoInNormalMode};\n  max-height: calc(100vh - 100px);\n  overflow-y: scroll;\n  &::-webkit-scrollbar {\n    display: none;\n  }\n\n  scrollbar-width: none;\n  padding: 0;\n  user-select: none;\n\n  /* Set the font-size for input values in the detail panel */\n  font-size: 12px;\n`\n\nexport const contextMenuShownContext = createContext<\n  ReturnType<typeof useLockSet>\n>([false, () => () => {}])\n\nconst DetailPanel: React.FC<{}> = (props) => {\n  const pin = useVal(getStudio().atomP.ahistoric.pinDetails) !== false\n\n  const hotspotActive = useHotspot('right')\n\n  useLayoutEffect(() => {\n    isDetailPanelHotspotActiveB.set(hotspotActive)\n  }, [hotspotActive])\n\n  // cleanup\n  useEffect(() => {\n    return () => {\n      isDetailPanelHoveredB.set(false)\n      isDetailPanelHotspotActiveB.set(false)\n    }\n  }, [])\n\n  const [isContextMenuShown] = useContext(contextMenuShownContext)\n\n  const showDetailsPanel = pin || hotspotActive || isContextMenuShown\n\n  const [containerElt, setContainerElt] = useState<null | HTMLDivElement>(null)\n  usePresenceListenersOnRootElement(containerElt)\n\n  return usePrism(() => {\n    const selection = outlineSelection.getValue()\n\n    const obj = selection.find(isSheetObject)\n\n    if (obj) {\n      return (\n        <Container\n          data-testid=\"DetailPanel-Object\"\n          pin={showDetailsPanel}\n          ref={setContainerElt}\n          onMouseEnter={() => {\n            isDetailPanelHoveredB.set(true)\n          }}\n          onMouseLeave={() => {\n            isDetailPanelHoveredB.set(false)\n          }}\n        >\n          <Header>\n            <Title\n              title={`${obj.sheet.address.sheetId}: ${obj.sheet.address.sheetInstanceId} > ${obj.address.objectKey}`}\n            >\n              <TitleBar_Piece>{obj.sheet.address.sheetId} </TitleBar_Piece>\n\n              <TitleBar_Punctuation>{':'}&nbsp;</TitleBar_Punctuation>\n              <TitleBar_Piece>\n                {obj.sheet.address.sheetInstanceId}{' '}\n              </TitleBar_Piece>\n\n              <TitleBar_Punctuation>&nbsp;&rarr;&nbsp;</TitleBar_Punctuation>\n              <TitleBar_Piece>{obj.address.objectKey}</TitleBar_Piece>\n            </Title>\n          </Header>\n          <Body>\n            <ObjectDetails objects={[obj]} />\n          </Body>\n        </Container>\n      )\n    }\n    const project = selection.find(isProject)\n    if (project) {\n      return (\n        <Container pin={showDetailsPanel}>\n          <Header>\n            <Title title={`${project.address.projectId}`}>\n              <TitleBar_Piece>{project.address.projectId} </TitleBar_Piece>\n            </Title>\n          </Header>\n          <Body>\n            <ProjectDetails projects={[project]} />\n          </Body>\n        </Container>\n      )\n    }\n\n    return (\n      <Container\n        pin={showDetailsPanel}\n        onMouseEnter={() => {\n          isDetailPanelHoveredB.set(true)\n        }}\n        onMouseLeave={() => {\n          isDetailPanelHoveredB.set(false)\n        }}\n      >\n        <EmptyState />\n      </Container>\n    )\n  }, [showDetailsPanel])\n}\n\nexport default () => {\n  const lockSet = useLockSet()\n\n  return (\n    <contextMenuShownContext.Provider value={lockSet}>\n      <DetailPanel />\n    </contextMenuShownContext.Provider>\n  )\n}\n\nconst isDetailPanelHotspotActiveB = new Atom<boolean>(false)\nconst isDetailPanelHoveredB = new Atom<boolean>(false)\n\nexport const shouldShowDetailD = prism<boolean>(() => {\n  const isHovered = val(isDetailPanelHoveredB.prism)\n  const isHotspotActive = val(isDetailPanelHotspotActiveB.prism)\n\n  return isHovered || isHotspotActive\n})\n"
  },
  {
    "path": "packages/studio/src/panels/DetailPanel/DeterminePropEditorForDetail/DetailCompoundPropEditor.tsx",
    "content": "import type {\n  PropTypeConfig_Compound,\n  PropTypeConfig_Number,\n} from '@theatre/core/types/public'\n\nimport type {$FixMe} from '@theatre/core/types/public'\nimport {Atom, getPointerParts} from '@theatre/dataverse'\nimport type {Pointer} from '@theatre/dataverse'\nimport last from 'lodash-es/last'\nimport {darken, transparentize} from 'polished'\nimport React, {useMemo} from 'react'\nimport styled from 'styled-components'\nimport {rowIndentationFormulaCSS} from '@theatre/studio/panels/DetailPanel/DeterminePropEditorForDetail/rowIndentationFormulaCSS'\nimport {propNameTextCSS} from '@theatre/studio/propEditors/utils/propNameTextCSS'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport DeterminePropEditorForDetail from '@theatre/studio/panels/DetailPanel/DeterminePropEditorForDetail'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport {useEditingToolsForCompoundProp} from '@theatre/studio/propEditors/useEditingToolsForCompoundProp'\nimport type {PropHighlighted} from '@theatre/studio/panels/SequenceEditorPanel/whatPropIsHighlighted'\nimport {whatPropIsHighlighted} from '@theatre/studio/panels/SequenceEditorPanel/whatPropIsHighlighted'\nimport {deriver} from '@theatre/studio/utils/derive-utils'\nimport NumberPropEditor from '@theatre/studio/propEditors/simpleEditors/NumberPropEditor'\nimport type {IDetailSimplePropEditorProps} from './DetailSimplePropEditor'\nimport {useEditingToolsForSimplePropInDetailsPanel} from '@theatre/studio/propEditors/useEditingToolsForSimpleProp'\nimport {usePrism} from '@theatre/react'\nimport {val} from '@theatre/dataverse'\nimport {HiOutlineChevronRight} from 'react-icons/hi'\nimport memoizeFn from '@theatre/utils/memoizeFn'\nimport {collapsedMap} from './collapsedMap'\nimport useChordial from '@theatre/studio/uiComponents/chordial/useChodrial'\nimport {__private} from '@theatre/core'\n\nconst {isPropConfigComposite} = __private.propTypeUtils\n\nconst Container = styled.div`\n  --step: 15px;\n  --left-pad: 10px;\n  ${pointerEventsAutoInNormalMode};\n  --right-width: 60%;\n`\n\nconst Header = styled.div<{isHighlighted: PropHighlighted}>`\n  height: 30px;\n  display: flex;\n  align-items: stretch;\n  position: relative;\n`\n\nconst Padding = styled.div<{isVectorProp: boolean}>`\n  padding-left: ${rowIndentationFormulaCSS};\n  display: flex;\n  align-items: center;\n  overflow: hidden;\n  ${({isVectorProp}) =>\n    isVectorProp ? 'width: calc(100% - var(--right-width))' : ''};\n`\n\nconst ControlIndicators = styled.div`\n  flexshrink: 0;\n`\n\nconst PropName = deriver(styled.div<{isHighlighted: PropHighlighted}>`\n  margin-left: 4px;\n  cursor: default;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  user-select: none;\n  &:hover {\n    color: white;\n  }\n  overflow: hidden;\n\n  ${() => propNameTextCSS};\n`)\n\nconst CollapseIcon = styled.span<{isCollapsed: boolean; isVector: boolean}>`\n  width: 28px;\n  height: 28px;\n  font-size: 9px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  transition:\n    transform 0.05s ease-out,\n    color 0.1s ease-out;\n  transform: rotateZ(${(props) => (props.isCollapsed ? 0 : 90)}deg);\n  color: #66686a;\n\n  visibility: ${(props) =>\n    // If it's a vector, show the collapse icon only when it's expanded\n    (!props.isVector && props.isCollapsed) ||\n    // If it's a regular compond prop, show the collapse icon only when it's collapsed\n    (props.isVector && !props.isCollapsed)\n      ? 'visible'\n      : 'hidden'};\n\n  ${Header}:hover & {\n    visibility: visible;\n  }\n\n  &:hover {\n    transform: rotateZ(${(props) => (props.isCollapsed ? 15 : 75)}deg);\n    color: #c0c4c9;\n  }\n`\n\nconst color = transparentize(0.05, `#282b2f`)\n\nconst SubProps = styled.div<{depth: number; lastSubIsComposite: boolean}>`\n  /* background: ${({depth}) => darken(depth * 0.03, color)}; */\n  /* padding: ${(props) => (props.lastSubIsComposite ? 0 : '4px')} 0; */\n`\n\nconst isVectorProp = memoizeFn((propConfig: PropTypeConfig_Compound<any>) => {\n  const props = Object.entries(propConfig.props)\n\n  return (\n    props.length <= 3 &&\n    props.every(\n      ([name, conf]) =>\n        conf.type === 'number' && ['x', 'y', 'z'].includes(name),\n    )\n  )\n})\n\nfunction VectorComponentEditor<TPropTypeConfig extends PropTypeConfig_Number>({\n  propConfig,\n  pointerToProp,\n  obj,\n  SimpleEditorComponent: EditorComponent,\n}: IDetailSimplePropEditorProps<TPropTypeConfig>) {\n  const editingTools = useEditingToolsForSimplePropInDetailsPanel(\n    pointerToProp,\n    obj,\n    propConfig,\n  )\n\n  return (\n    <NumberPropEditor\n      editingTools={editingTools}\n      propConfig={propConfig}\n      value={editingTools.value}\n    />\n  )\n}\n\nconst InputContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: stretch;\n  padding: 0 8px 0 2px;\n  box-sizing: border-box;\n  height: 100%;\n  width: var(--right-width);\n  flex-shrink: 0;\n  flex-grow: 0;\n`\n\nexport type ICompoundPropDetailEditorProps<\n  TPropTypeConfig extends PropTypeConfig_Compound<any>,\n> = {\n  propConfig: TPropTypeConfig\n  pointerToProp: Pointer<TPropTypeConfig['valueType']>\n  obj: SheetObject\n  visualIndentation: number\n}\n\nfunction DetailCompoundPropEditor<\n  TPropTypeConfig extends PropTypeConfig_Compound<any>,\n>({\n  pointerToProp,\n  obj,\n  propConfig,\n  visualIndentation,\n}: ICompoundPropDetailEditorProps<TPropTypeConfig>) {\n  const propName =\n    propConfig.label ?? (last(getPointerParts(pointerToProp).path) as string)\n\n  const allSubs = Object.entries(propConfig.props)\n  const compositeSubs = allSubs.filter(([_, conf]) =>\n    isPropConfigComposite(conf),\n  )\n  const nonCompositeSubs = allSubs.filter(\n    ([_, conf]) => !isPropConfigComposite(conf),\n  )\n\n  const tools = useEditingToolsForCompoundProp(\n    pointerToProp as $FixMe,\n    obj,\n    propConfig,\n  )\n\n  const label: string = propName || 'Props'\n\n  const lastSubPropIsComposite = compositeSubs.length > 0\n\n  const isPropHighlightedD = useMemo(\n    () =>\n      whatPropIsHighlighted.getIsPropHighlightedD({\n        ...obj.address,\n        pathToProp: getPointerParts(pointerToProp).path,\n      }),\n    [pointerToProp],\n  )\n\n  // isVectorProp is already memoized, so no need to wrap this in `useMemo()`\n  const isVector = isVectorProp(propConfig)\n\n  const isCollapsedAtom = useMemo(() => {\n    if (!collapsedMap.has(pointerToProp)) {\n      collapsedMap.set(pointerToProp, new Atom(isVector))\n    }\n    return collapsedMap.get(pointerToProp)!\n  }, [pointerToProp])\n\n  const isCollapsed = usePrism(() => {\n    return isCollapsedAtom ? val(isCollapsedAtom.pointer) : isVector\n  }, [isCollapsedAtom, isVector])\n\n  const {targetRef} = useChordial(() => {\n    const title = ['obj', 'props', ...getPointerParts(pointerToProp).path].join(\n      '.',\n    )\n    return {title, items: tools.contextMenuItems}\n  })\n\n  return (\n    <Container>\n      <Header\n        // @ts-ignore\n        style={{'--depth': visualIndentation - 1}}\n      >\n        <Padding isVectorProp={isVector}>\n          <ControlIndicators>{tools.controlIndicators}</ControlIndicators>\n\n          <PropName isHighlighted={isPropHighlightedD} ref={targetRef}>\n            <span>{label}</span>\n          </PropName>\n          <CollapseIcon\n            isCollapsed={isCollapsed}\n            isVector={isVector}\n            onClick={() => {\n              isCollapsedAtom.set(!isCollapsedAtom.get())\n            }}\n          >\n            <HiOutlineChevronRight />\n          </CollapseIcon>\n        </Padding>\n        {isVector && isCollapsed && (\n          <InputContainer>\n            {[...allSubs].map(([subPropKey, subPropConfig]) => {\n              return (\n                <VectorComponentEditor\n                  key={'prop-' + subPropKey}\n                  // @ts-ignore\n                  propConfig={subPropConfig}\n                  pointerToProp={pointerToProp[subPropKey] as Pointer<$FixMe>}\n                  obj={obj}\n                />\n              )\n            })}\n          </InputContainer>\n        )}\n      </Header>\n\n      {!isCollapsed && (\n        <SubProps\n          // @ts-ignore\n          style={{'--depth': visualIndentation}}\n          depth={visualIndentation}\n          lastSubIsComposite={lastSubPropIsComposite}\n        >\n          {[...nonCompositeSubs, ...compositeSubs].map(\n            ([subPropKey, subPropConfig]) => {\n              return (\n                <DeterminePropEditorForDetail\n                  key={'prop-' + subPropKey}\n                  propConfig={subPropConfig}\n                  pointerToProp={pointerToProp[subPropKey] as Pointer<$FixMe>}\n                  obj={obj}\n                  visualIndentation={visualIndentation + 1}\n                />\n              )\n            },\n          )}\n        </SubProps>\n      )}\n    </Container>\n  )\n}\n\nexport default React.memo(DetailCompoundPropEditor)\n"
  },
  {
    "path": "packages/studio/src/panels/DetailPanel/DeterminePropEditorForDetail/DetailSimplePropEditor.tsx",
    "content": "import type {\n  IBasePropType,\n  PropTypeConfig_AllSimples,\n} from '@theatre/core/types/public'\nimport React, {useMemo} from 'react'\nimport {useEditingToolsForSimplePropInDetailsPanel} from '@theatre/studio/propEditors/useEditingToolsForSimpleProp'\nimport {SingleRowPropEditor} from '@theatre/studio/panels/DetailPanel/DeterminePropEditorForDetail/SingleRowPropEditor'\nimport type {Pointer} from '@theatre/dataverse'\nimport {getPointerParts} from '@theatre/dataverse'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type {ISimplePropEditorReactProps} from '@theatre/studio/propEditors/simpleEditors/ISimplePropEditorReactProps'\nimport {whatPropIsHighlighted} from '@theatre/studio/panels/SequenceEditorPanel/whatPropIsHighlighted'\n\nexport type IDetailSimplePropEditorProps<\n  TPropTypeConfig extends IBasePropType<string, any>,\n> = {\n  propConfig: TPropTypeConfig\n  pointerToProp: Pointer<TPropTypeConfig['valueType']>\n  obj: SheetObject\n  visualIndentation: number\n  SimpleEditorComponent: React.VFC<ISimplePropEditorReactProps<TPropTypeConfig>>\n}\n\n/**\n * Shown in the Object details panel, changes to this editor are usually reflected at either\n * the playhead position (the `sequence.position`) or if static, the static override value.\n */\nfunction DetailSimplePropEditor<\n  TPropTypeConfig extends PropTypeConfig_AllSimples,\n>({\n  propConfig,\n  pointerToProp,\n  obj,\n  SimpleEditorComponent: EditorComponent,\n}: IDetailSimplePropEditorProps<TPropTypeConfig>) {\n  const editingTools = useEditingToolsForSimplePropInDetailsPanel(\n    pointerToProp,\n    obj,\n    propConfig,\n  )\n\n  const isPropHighlightedD = useMemo(\n    () =>\n      whatPropIsHighlighted.getIsPropHighlightedD({\n        ...obj.address,\n        pathToProp: getPointerParts(pointerToProp).path,\n      }),\n    [pointerToProp],\n  )\n\n  return (\n    <SingleRowPropEditor\n      {...{\n        editingTools: editingTools,\n        propConfig,\n        pointerToProp,\n        isPropHighlightedD,\n      }}\n    >\n      <EditorComponent\n        editingTools={editingTools}\n        propConfig={propConfig}\n        value={editingTools.value}\n      />\n    </SingleRowPropEditor>\n  )\n}\n\nexport default React.memo(DetailSimplePropEditor)\n"
  },
  {
    "path": "packages/studio/src/panels/DetailPanel/DeterminePropEditorForDetail/SingleRowPropEditor.tsx",
    "content": "import type * as propTypes from '@theatre/core/types/public'\nimport {getPointerParts} from '@theatre/dataverse'\nimport type {Pointer, Prism} from '@theatre/dataverse'\nimport {last} from 'lodash-es'\nimport React from 'react'\nimport type {useEditingToolsForSimplePropInDetailsPanel} from '@theatre/studio/propEditors/useEditingToolsForSimpleProp'\nimport styled from 'styled-components'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport {propNameTextCSS} from '@theatre/studio/propEditors/utils/propNameTextCSS'\nimport type {PropHighlighted} from '@theatre/studio/panels/SequenceEditorPanel/whatPropIsHighlighted'\nimport {rowIndentationFormulaCSS} from './rowIndentationFormulaCSS'\nimport {getDetailRowHighlightBackground} from './getDetailRowHighlightBackground'\nimport {useVal} from '@theatre/react'\nimport useChordial from '@theatre/studio/uiComponents/chordial/useChodrial'\nimport type {$FixMe} from '@theatre/core/types/public'\n\nconst Container = styled.div<{\n  isHighlighted: PropHighlighted\n}>`\n  display: flex;\n  height: 30px;\n  justify-content: flex-start;\n  align-items: stretch;\n  // We cannot calculate both the container (details panel) width and the descendant\n  // (this) width dynamically. This leads to the container width being calculated\n  // without this percentage being taken into consideration leads to horizontal\n  // clipping/scrolling--the same way as if we explicitly fixed either the container\n  // width, or the descendant width.\n  // The correct solution for tabulated UIs with dynamic container widths is to use\n  // CSS grid. For now I fixed this issue by just giving a great enough width\n  // to the details panel so most things don't break.\n  --right-width: 60%;\n  position: relative;\n  ${pointerEventsAutoInNormalMode};\n\n  /* background-color: ${getDetailRowHighlightBackground}; */\n`\n\nconst Left = styled.div`\n  box-sizing: border-box;\n  padding-left: ${rowIndentationFormulaCSS};\n  padding-right: 4px;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-items: stretch;\n  gap: 4px;\n  flex-grow: 0;\n  flex-shrink: 0;\n  width: calc(100% - var(--right-width));\n`\n\nconst PropNameContainer = styled.div<{\n  isHighlighted: PropHighlighted\n}>`\n  text-align: left;\n  flex: 1 0;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  display: flex;\n  align-items: center;\n  user-select: none;\n  cursor: default;\n\n  ${propNameTextCSS};\n  &:hover {\n    color: white;\n  }\n`\n\nconst ControlsContainer = styled.div`\n  flex-basis: 8px;\n  flex: 0 0;\n  display: flex;\n  align-items: center;\n`\n\nconst InputContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: stretch;\n  padding: 0 8px 0 2px;\n  box-sizing: border-box;\n  height: 100%;\n  width: var(--right-width);\n  flex-shrink: 0;\n  flex-grow: 0;\n`\n\ntype ISingleRowPropEditorProps<T> = {\n  propConfig: propTypes.PropTypeConfig\n  pointerToProp: Pointer<T>\n  editingTools: ReturnType<typeof useEditingToolsForSimplePropInDetailsPanel>\n  isPropHighlightedD: Prism<PropHighlighted>\n}\n\nexport function SingleRowPropEditor<T>({\n  propConfig,\n  pointerToProp,\n  editingTools,\n  children,\n  isPropHighlightedD,\n}: React.PropsWithChildren<ISingleRowPropEditorProps<T>>): React.ReactElement<\n  any,\n  any\n> | null {\n  const label = propConfig.label ?? last(getPointerParts(pointerToProp).path)\n\n  const title = ['obj', 'props', ...getPointerParts(pointerToProp).path].join(\n    '.',\n  )\n\n  const isHighlighted = useVal(isPropHighlightedD)\n\n  const {targetRef} = useChordial(() => {\n    return {\n      title,\n      items: editingTools.contextMenuItems,\n    }\n  })\n\n  return (\n    <Container isHighlighted={isHighlighted}>\n      <Left>\n        <ControlsContainer>{editingTools.controlIndicators}</ControlsContainer>\n        <PropNameContainer\n          isHighlighted={isHighlighted}\n          ref={targetRef as $FixMe}\n        >\n          {label}\n        </PropNameContainer>\n      </Left>\n\n      <InputContainer>{children}</InputContainer>\n    </Container>\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/panels/DetailPanel/DeterminePropEditorForDetail/collapsedMap.tsx",
    "content": "import type {Atom, Pointer} from '@theatre/dataverse'\n\nexport const collapsedMap = new WeakMap<Pointer<{}>, Atom<boolean>>()\n"
  },
  {
    "path": "packages/studio/src/panels/DetailPanel/DeterminePropEditorForDetail/getDetailRowHighlightBackground.tsx",
    "content": "import type {PropHighlighted} from '@theatre/studio/panels/SequenceEditorPanel/whatPropIsHighlighted'\n\nexport function getDetailRowHighlightBackground({\n  isHighlighted,\n}: {\n  isHighlighted: PropHighlighted\n}): string {\n  return isHighlighted === 'self'\n    ? '#1857a4'\n    : isHighlighted === 'descendent'\n      ? '#0a2f5c'\n      : 'initial'\n}\n"
  },
  {
    "path": "packages/studio/src/panels/DetailPanel/DeterminePropEditorForDetail/rowIndentationFormulaCSS.tsx",
    "content": "export const rowIndentationFormulaCSS = `calc(var(--left-pad) + var(--depth) * var(--step))`\n"
  },
  {
    "path": "packages/studio/src/panels/DetailPanel/DeterminePropEditorForDetail.tsx",
    "content": "import React from 'react'\nimport type {Pointer} from '@theatre/dataverse'\nimport type {\n  PropTypeConfig,\n  PropTypeConfig_AllSimples,\n} from '@theatre/core/types/public'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport {simplePropEditorByPropType} from '@theatre/studio/propEditors/simpleEditors/simplePropEditorByPropType'\nimport type {PropConfigForType} from '@theatre/studio/propEditors/utils/PropConfigForType'\nimport type {ISimplePropEditorReactProps} from '@theatre/studio/propEditors/simpleEditors/ISimplePropEditorReactProps'\nimport DetailCompoundPropEditor from './DeterminePropEditorForDetail/DetailCompoundPropEditor'\nimport DetailSimplePropEditor from './DeterminePropEditorForDetail/DetailSimplePropEditor'\n\n/**\n * Given a propConfig, this function gives the corresponding prop editor for\n * use in the details panel. {@link DeterminePropEditorForKeyframe} does the\n * same thing for the dope sheet inline prop editor on a keyframe. The main difference\n * between this function and {@link DeterminePropEditorForKeyframe} is that this\n * one shows prop editors *with* keyframe navigation controls (that look\n * like `< ・ >`).\n *\n * @param p - propConfig object for any type of prop.\n */\nconst DeterminePropEditorForDetail: React.VFC<\n  IDeterminePropEditorForDetailProps<PropTypeConfig['type']>\n> = ({propConfig, visualIndentation, pointerToProp, obj}) => {\n  if (propConfig.type === 'compound') {\n    return (\n      <DetailCompoundPropEditor\n        obj={obj}\n        visualIndentation={visualIndentation}\n        pointerToProp={pointerToProp}\n        propConfig={propConfig}\n      />\n    )\n  } else if (propConfig.type === 'enum') {\n    // notice: enums are not implemented, yet.\n    return <></>\n  } else {\n    const PropEditor = simplePropEditorByPropType[propConfig.type]\n\n    return (\n      <DetailSimplePropEditor\n        SimpleEditorComponent={\n          PropEditor as React.VFC<\n            ISimplePropEditorReactProps<PropTypeConfig_AllSimples>\n          >\n        }\n        obj={obj}\n        visualIndentation={visualIndentation}\n        pointerToProp={pointerToProp}\n        propConfig={propConfig}\n      />\n    )\n  }\n}\n\nexport default DeterminePropEditorForDetail\n\ntype IDeterminePropEditorForDetailProps<K extends PropTypeConfig['type']> =\n  IDetailEditablePropertyProps<K> & {\n    visualIndentation: number\n  }\ntype IDetailEditablePropertyProps<K extends PropTypeConfig['type']> = {\n  obj: SheetObject\n  pointerToProp: Pointer<PropConfigForType<K>['valueType']>\n  propConfig: PropConfigForType<K>\n}\n"
  },
  {
    "path": "packages/studio/src/panels/DetailPanel/EmptyState.tsx",
    "content": "import type {FC} from 'react'\nimport React from 'react'\nimport styled from 'styled-components'\nimport {Outline} from '@theatre/studio/uiComponents/icons'\n\nconst Container = styled.div`\n  padding: 16px;\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n`\n\nconst Message = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 11px;\n  color: rgba(255, 255, 255, 0.9);\n`\n\nconst Icon = styled.div`\n  color: rgba(145, 145, 145, 0.8);\n`\n\nconst LinkToDoc = styled.a`\n  color: #919191;\n  font-size: 10px;\n  text-decoration-color: #40434a;\n  text-underline-offset: 3px;\n`\n\nconst EmptyState: FC = () => {\n  return (\n    <Container>\n      <Message>\n        <Icon>\n          <Outline />\n        </Icon>\n        <div>\n          Please select an object from the <u>Outline Menu</u> to see its\n          properties.\n        </div>\n      </Message>\n      {/* Links like this should probably be managed centrally so that we can\n      have a process for updating them when the docs change. */}\n      <LinkToDoc\n        href=\"https://www.theatrejs.com/docs/latest/manual/objects\"\n        target=\"_blank\"\n      >\n        Learn more about Objects\n      </LinkToDoc>\n    </Container>\n  )\n}\n\nexport default EmptyState\n"
  },
  {
    "path": "packages/studio/src/panels/DetailPanel/ObjectDetails.tsx",
    "content": "import React from 'react'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type {Pointer} from '@theatre/dataverse'\nimport type {$FixMe} from '@theatre/core/types/public'\nimport DeterminePropEditorForDetail from './DeterminePropEditorForDetail'\nimport {useVal} from '@theatre/react'\nimport uniqueKeyForAnyObject from '@theatre/utils/uniqueKeyForAnyObject'\nimport styled from 'styled-components'\n\nconst ActionButtonContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  padding: 8px;\n`\n\nconst ActionButton = styled.button`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  outline: none;\n  border-radius: 2px;\n\n  color: #a8a8a9;\n  background: rgba(255, 255, 255, 0.1);\n\n  border: none;\n  height: 28px;\n\n  &:hover {\n    background: rgba(255, 255, 255, 0.15);\n  }\n\n  &:active {\n    background: rgba(255, 255, 255, 0.2);\n  }\n`\n\nconst ObjectDetails: React.FC<{\n  /** TODO: add support for multiple objects (it would show their common props) */\n  objects: [SheetObject]\n}> = ({objects}) => {\n  const obj = objects[0]\n  const config = useVal(obj.template.configPointer)\n  const actions = useVal(obj.template._temp_actionsPointer)\n\n  return (\n    <>\n      <DeterminePropEditorForDetail\n        // we don't use the object's address as the key because if a user calls `sheet.detachObject(key)` and later\n        // calls `sheet.object(key)` with the same key, we want to re-render the object details panel.\n        key={uniqueKeyForAnyObject(obj)}\n        obj={obj}\n        pointerToProp={obj.propsP as Pointer<$FixMe>}\n        propConfig={config}\n        visualIndentation={1}\n      />\n      <ActionButtonContainer>\n        {actions &&\n          Object.entries(actions).map(([actionName, action]) => {\n            return (\n              <ActionButton\n                key={actionName}\n                onClick={() => {\n                  action(obj.publicApi)\n                }}\n              >\n                {actionName}\n              </ActionButton>\n            )\n          })}\n      </ActionButtonContainer>\n    </>\n  )\n}\n\nexport default ObjectDetails\n"
  },
  {
    "path": "packages/studio/src/panels/DetailPanel/ProjectDetails/StateConflictRow.tsx",
    "content": "import {useVal} from '@theatre/react'\nimport getStudio from '@theatre/studio/getStudio'\nimport React from 'react'\nimport styled from 'styled-components'\nimport {generateDiskStateRevision} from '@theatre/studio/StudioStore/generateDiskStateRevision'\nimport type {ProjectEphemeralState} from '@theatre/core/types/private/core'\nimport useTooltip from '@theatre/studio/uiComponents/Popover/useTooltip'\nimport BasicTooltip from '@theatre/studio/uiComponents/Popover/BasicTooltip'\nimport type {$FixMe} from '@theatre/core/types/public'\nimport DetailPanelButton from '@theatre/studio/uiComponents/DetailPanelButton'\nimport type {ProjectId} from '@theatre/core/types/public'\n\nconst a = 'hi'\n\nconst Container = styled.div`\n  padding: 8px 10px;\n  position: relative;\n  background-color: #6d232352;\n  &:before {\n    position: absolute;\n    content: ' ';\n    display: block;\n    left: 0;\n    top: 0;\n    bottom: 0;\n    width: 2px;\n    background-color: #ff000070;\n  }\n`\n\nconst Message = styled.div`\n  margin-bottom: 1em;\n  & a {\n    color: inherit;\n  }\n`\n\nconst ChooseStateRow = styled.div`\n  display: flex;\n  gap: 8px;\n`\n\nconst StateConflictRow: React.FC<{projectId: ProjectId}> = ({projectId}) => {\n  const loadingState = useVal(\n    getStudio().ephemeralAtom.pointer.coreByProject[projectId].loadingState,\n  )\n\n  if (!loadingState) return null\n\n  if (loadingState.type === 'browserStateIsNotBasedOnDiskState') {\n    return <InConflict loadingState={loadingState} projectId={projectId} />\n  } else {\n    return null\n  }\n}\n\nconst InConflict: React.FC<{\n  projectId: ProjectId\n  loadingState: Extract<\n    ProjectEphemeralState['loadingState'],\n    {type: 'browserStateIsNotBasedOnDiskState'}\n  >\n}> = ({projectId, loadingState}) => {\n  /**\n   * This stuff is not undo-safe, but once we switch to the new persistence\n   * scheme, these will be unnecessary anyway.\n   */\n  const useBrowserState = () => {\n    getStudio().transaction(({stateEditors}) => {\n      stateEditors.coreByProject.historic.revisionHistory.add({\n        projectId,\n        revision: loadingState.onDiskState.revisionHistory[0],\n      })\n\n      stateEditors.coreByProject.historic.revisionHistory.add({\n        projectId,\n        revision: generateDiskStateRevision(),\n      })\n    })\n    getStudio().ephemeralAtom.setByPointer(\n      (p) => p.coreByProject[projectId]!.loadingState,\n      {\n        type: 'loaded',\n      },\n    )\n  }\n\n  const useOnDiskState = () => {\n    getStudio().transaction(({stateEditors}) => {\n      stateEditors.coreByProject.historic.setProjectState({\n        projectId,\n        state: loadingState.onDiskState,\n      })\n      // drafts.historic.coreByProject[projectId] = loadingState.onDiskState\n    })\n    getStudio().ephemeralAtom.setByPointer(\n      (p) => p.coreByProject[projectId]!.loadingState,\n      {\n        type: 'loaded',\n      },\n    )\n  }\n\n  const [browserStateNode, browserStateRef] = useTooltip({}, () => (\n    <BasicTooltip>\n      The browser's state will override the disk state.\n    </BasicTooltip>\n  ))\n\n  const [diskStateNode, diskStateRef] = useTooltip({}, () => (\n    <BasicTooltip>\n      The disk's state will override the browser's state.\n    </BasicTooltip>\n  ))\n\n  return (\n    <Container>\n      <Message>\n        Browser state is not based on disk state.{' '}\n        <a\n          href=\"https://www.theatrejs.com/docs/latest/manual/projects#state\"\n          target=\"_blank\"\n        >\n          Learn more.\n        </a>\n      </Message>\n      <ChooseStateRow>\n        {browserStateNode}\n        <DetailPanelButton\n          onClick={useBrowserState}\n          ref={browserStateRef as $FixMe}\n        >\n          Use browser's state\n        </DetailPanelButton>\n        {diskStateNode}\n        <DetailPanelButton\n          onClick={useOnDiskState}\n          ref={diskStateRef as $FixMe}\n        >\n          Use disk state\n        </DetailPanelButton>\n      </ChooseStateRow>\n    </Container>\n  )\n}\n\nexport default StateConflictRow\n"
  },
  {
    "path": "packages/studio/src/panels/DetailPanel/ProjectDetails.tsx",
    "content": "import type Project from '@theatre/core/projects/Project'\nimport getStudio from '@theatre/studio/getStudio'\nimport BasicPopover from '@theatre/studio/uiComponents/Popover/BasicPopover'\nimport usePopover from '@theatre/studio/uiComponents/Popover/usePopover'\nimport React, {useCallback, useState} from 'react'\nimport styled from 'styled-components'\nimport DetailPanelButton from '@theatre/studio/uiComponents/DetailPanelButton'\nimport StateConflictRow from './ProjectDetails/StateConflictRow'\nimport JSZip from 'jszip'\nimport {notify} from '@theatre/studio/notify'\nimport {getAllPossibleAssetIDs} from '@theatre/studio/utils/assets'\n\nconst Container = styled.div``\n\nconst TheExportRow = styled.div`\n  padding: 8px 10px;\n  display: flex;\n  flex-direction: column;\n  align-items: stretch;\n`\n\nconst ExportTooltip = styled(BasicPopover)`\n  display: flex;\n  flex-direction: column;\n  gap: 1em;\n  width: 280px;\n  padding: 1em;\n`\n\n/**\n * Initiates a file download for the provided data with the provided file name\n *\n * @param content - The content to save\n * @param fileName - The name of the file to save\n */\nfunction saveFile(content: string | Blob, fileName: string) {\n  const file = new File([content], fileName)\n  const objUrl = URL.createObjectURL(file)\n  const a = Object.assign(document.createElement('a'), {\n    href: objUrl,\n    target: '_blank',\n    rel: 'noopener',\n  })\n  a.setAttribute('download', fileName)\n  a.click()\n\n  setTimeout(() => {\n    URL.revokeObjectURL(objUrl)\n  }, 40000)\n}\n\nconst ProjectDetails: React.FC<{\n  projects: Project[]\n}> = ({projects}) => {\n  const project = projects[0]\n\n  const projectId = project.address.projectId\n  const slugifiedProjectId = projectId.replace(/[^\\w\\d'_\\-]+/g, ' ').trim()\n  // const [dateString, _timeString] = new Date().toISOString().split('T')\n  // e.g. `Butterfly.theatre-project-state.json`\n  const suggestedFileName = `${slugifiedProjectId}.theatre-project-state.json`\n\n  const [downloaded, setDownloaded] = useState(false)\n\n  const exportProject = useCallback(async () => {\n    // get all possible asset ids referenced by either static props or keyframes\n    const allValues = getAllPossibleAssetIDs(project)\n\n    const blobs = new Map<string, Blob>()\n\n    try {\n      // only export assets that are referenced by the project\n      await Promise.all(\n        allValues.map(async (value) => {\n          const assetUrl = project.assetStorage.getAssetUrl(value)\n\n          const response = await fetch(assetUrl)\n          if (response.ok) {\n            blobs.set(value, await response.blob())\n          }\n        }),\n      )\n    } catch (e) {\n      notify.error(\n        `Failed to access assets`,\n        `Export aborted. Failed to access assets at ${\n          project.config.assets?.baseUrl ?? '/'\n        }. This is likely due to a CORS issue.`,\n      )\n\n      // abort the export\n      return\n    }\n\n    if (blobs.size > 0) {\n      const zip = new JSZip()\n\n      for (const [assetID, blob] of blobs) {\n        zip.file(assetID, blob)\n      }\n\n      const assetsFile = await zip.generateAsync({type: 'blob'})\n      saveFile(assetsFile, `${slugifiedProjectId}.assets.zip`)\n    }\n\n    const str = JSON.stringify(\n      getStudio().createContentOfSaveFile(project.address.projectId),\n      null,\n      2,\n    )\n\n    saveFile(str, suggestedFileName)\n\n    setDownloaded(true)\n    setTimeout(() => {\n      setDownloaded(false)\n    }, 2000)\n  }, [project, suggestedFileName])\n\n  const exportTooltip = usePopover(\n    {debugName: 'ProjectDetails', pointerDistanceThreshold: 50},\n    () => (\n      <ExportTooltip>\n        <p>\n          This will create a JSON file with the state of your project. You can\n          commit this file to your git repo and include it in your production\n          bundle.\n        </p>\n        <p>\n          If your project uses assets, this will also create a zip file with all\n          the assets that you can unpack in your public folder.\n        </p>\n        <a\n          href=\"https://www.theatrejs.com/docs/latest/manual/projects#state\"\n          target=\"_blank\"\n        >\n          Here is a quick guide on how to export to production.\n        </a>\n      </ExportTooltip>\n    ),\n  )\n\n  return (\n    <>\n      {exportTooltip.node}\n      <Container>\n        <StateConflictRow projectId={projectId} />\n        <TheExportRow>\n          <DetailPanelButton\n            onMouseEnter={(e) =>\n              exportTooltip.open(e, e.target as unknown as HTMLButtonElement)\n            }\n            onClick={!downloaded ? exportProject : undefined}\n            disabled={downloaded}\n          >\n            {downloaded ? '(Exported)' : `Export ${projectId} to JSON`}\n          </DetailPanelButton>\n        </TheExportRow>\n      </Container>\n    </>\n  )\n}\n\nexport default ProjectDetails\n"
  },
  {
    "path": "packages/studio/src/panels/OutlinePanel/BaseItem.tsx",
    "content": "import type {$FixMe, VoidFn} from '@theatre/core/types/public'\nimport React from 'react'\nimport styled, {css} from 'styled-components'\nimport noop from '@theatre/utils/noop'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport {ChevronDown, Package} from '@theatre/studio/uiComponents/icons'\n\nexport const Container = styled.li`\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  display: flex;\n  justify-content: flex-start;\n  flex-direction: column;\n  align-items: flex-start;\n`\n\nexport const BaseHeader = styled.div``\n\nconst Header = styled(BaseHeader)`\n  position: relative;\n  margin-top: 2px;\n  margin-bottom: 2px;\n  margin-left: calc(4px + var(--depth) * 16px);\n  padding-left: 4px;\n  padding-right: 8px;\n  gap: 4px;\n  height: 21px;\n  line-height: 0;\n  box-sizing: border-box;\n  display: flex;\n  flex-wrap: nowrap;\n  align-items: center;\n  pointer-events: none;\n  white-space: nowrap;\n\n  border-radius: 2px;\n  box-shadow: 0 3px 4px -1px rgba(0, 0, 0, 0.48);\n\n  color: rgba(255, 255, 255, 0.9);\n  background: rgba(40, 43, 47, 0.65);\n  backdrop-filter: blur(14px);\n  border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n\n  &.descendant-is-selected {\n    background: rgba(29, 53, 59, 0.7);\n  }\n\n  ${pointerEventsAutoInNormalMode};\n  &:not(.not-selectable):not(.selected):hover {\n    background: rgba(59, 63, 69, 0.9);\n\n    border-bottom: 1px solid rgba(255, 255, 255, 0.24);\n  }\n\n  &:not(.not-selectable):not(.selected):active {\n    background: rgba(82, 88, 96, 0.9);\n    border-bottom: 1px solid rgba(255, 255, 255, 0.24);\n  }\n\n  &.selected {\n    background: rgba(30, 88, 102, 0.7);\n    border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n  }\n\n  @supports not (backdrop-filter: blur()) {\n    background: rgba(40, 43, 47, 0.95);\n  }\n`\n\nexport const outlineItemFont = css`\n  font-weight: 500;\n  font-size: 11px;\n  & {\n  }\n`\n\nconst Head_Label = styled.span`\n  ${outlineItemFont};\n\n  ${pointerEventsAutoInNormalMode};\n  position: relative;\n  // Compensate for border bottom\n  top: 0.5px;\n  display: flex;\n  height: 20px;\n  align-items: center;\n  box-sizing: border-box;\n`\n\nconst Head_IconContainer = styled.div`\n  font-weight: 500;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  position: relative;\n  opacity: 0.99;\n`\n\nconst Head_Icon_WithDescendants = styled.span`\n  font-size: 9px;\n  position: relative;\n  display: block;\n  transition: transform 0.1s ease-out;\n\n  &:hover {\n    transform: rotate(-20deg);\n  }\n\n  ${Container}.collapsed & {\n    transform: rotate(-90deg);\n\n    &:hover {\n      transform: rotate(-70deg);\n    }\n  }\n`\n\nconst ChildrenContainer = styled.ul`\n  margin: 0;\n  padding: 0;\n  list-style: none;\n\n  ${Container}.collapsed & {\n    display: none;\n  }\n`\n\ntype SelectionStatus =\n  | 'not-selectable'\n  | 'not-selected'\n  | 'selected'\n  | 'descendant-is-selected'\n\nconst BaseItem: React.FC<{\n  label: React.ReactNode\n  select?: VoidFn\n  depth: number\n  selectionStatus: SelectionStatus\n  labelDecoration?: React.ReactNode\n  children?: React.ReactNode | undefined\n  collapsed?: boolean\n  setIsCollapsed?: (v: boolean) => void\n  headerRef?: React.MutableRefObject<$FixMe>\n}> = ({\n  label,\n  children,\n  depth,\n  select,\n  selectionStatus,\n  labelDecoration,\n  collapsed = false,\n  setIsCollapsed,\n  headerRef,\n}) => {\n  const canContainChildren = children !== undefined\n\n  return (\n    <Container\n      style={\n        /* @ts-ignore */\n        {'--depth': depth}\n      }\n      className={collapsed ? 'collapsed' : ''}\n    >\n      <Header\n        className={selectionStatus}\n        onClick={select ?? noop}\n        data-header\n        ref={headerRef}\n      >\n        <Head_IconContainer>\n          {canContainChildren ? (\n            <Head_Icon_WithDescendants\n              onClick={(evt) => {\n                evt.stopPropagation()\n                evt.preventDefault()\n                setIsCollapsed?.(!collapsed)\n              }}\n            >\n              <ChevronDown />\n            </Head_Icon_WithDescendants>\n          ) : (\n            <Package />\n          )}\n        </Head_IconContainer>\n\n        <Head_Label>\n          <span>{label}</span>\n        </Head_Label>\n        {labelDecoration}\n      </Header>\n      {canContainChildren && <ChildrenContainer>{children}</ChildrenContainer>}\n    </Container>\n  )\n}\n\nexport default BaseItem\n"
  },
  {
    "path": "packages/studio/src/panels/OutlinePanel/ObjectsList/ObjectItem.tsx",
    "content": "import type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport getStudio from '@theatre/studio/getStudio'\nimport React from 'react'\nimport BaseItem from '@theatre/studio/panels/OutlinePanel/BaseItem'\nimport {useVal} from '@theatre/react'\nimport {outlineSelection} from '@theatre/studio/selectors'\nimport useChordial from '@theatre/studio/uiComponents/chordial/useChodrial'\n\nexport const ObjectItem: React.VFC<{\n  sheetObject: SheetObject\n  depth: number\n  overrideLabel?: string\n}> = ({sheetObject, depth, overrideLabel}) => {\n  const select = () => {\n    getStudio()!.transaction(({stateEditors}) => {\n      stateEditors.studio.historic.panels.outline.selection.set([\n        {...sheetObject.address, type: 'SheetObject'},\n      ])\n    })\n  }\n\n  const selection = useVal(outlineSelection)\n\n  const {targetRef} = useChordial(() => {\n    return {\n      title: `Object: ${sheetObject.address.objectKey}`,\n      items: [],\n    }\n  })\n\n  return (\n    <BaseItem\n      select={select}\n      label={overrideLabel ?? sheetObject.address.objectKey}\n      depth={depth}\n      headerRef={targetRef}\n      selectionStatus={\n        selection.includes(sheetObject) ? 'selected' : 'not-selected'\n      }\n    />\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/panels/OutlinePanel/ObjectsList/ObjectsList.tsx",
    "content": "import type Sheet from '@theatre/core/sheets/Sheet'\nimport {usePrism} from '@theatre/react'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport {ObjectItem} from './ObjectItem'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport BaseItem from '@theatre/studio/panels/OutlinePanel/BaseItem'\nimport {useCollapseStateInOutlinePanel} from '@theatre/studio/panels/OutlinePanel/outlinePanelUtils'\n\nexport const Li = styled.li<{isSelected: boolean}>`\n  color: ${(props) => (props.isSelected ? 'white' : 'hsl(1, 1%, 80%)')};\n`\n\nconst ObjectsList: React.FC<{\n  depth: number\n  sheet: Sheet\n}> = ({sheet, depth}) => {\n  return usePrism(() => {\n    const objectsMap = val(sheet.objectsP)\n    const objects = Object.values(objectsMap).filter(\n      (a): a is SheetObject => a != null,\n    )\n\n    const rootObject: NamespacedObjects = new Map()\n    objects.forEach((object) => {\n      addToNamespace(rootObject, object)\n    })\n\n    return (\n      <NamespaceTree\n        namespace={rootObject}\n        visualIndentation={depth}\n        path={[]}\n        sheet={sheet}\n      />\n    )\n  }, [sheet, depth])\n}\n\nfunction NamespaceTree(props: {\n  namespace: NamespacedObjects\n  visualIndentation: number\n  path: string[]\n  sheet: Sheet\n}) {\n  return (\n    <>\n      {[...props.namespace.entries()].map(([label, {object, nested}]) => {\n        return (\n          <Namespace\n            key={label}\n            label={label}\n            object={object}\n            nested={nested}\n            visualIndentation={props.visualIndentation}\n            path={props.path}\n            sheet={props.sheet}\n          />\n        )\n      })}\n    </>\n  )\n}\n\nfunction Namespace(props: {\n  nested?: NamespacedObjects\n  label: string\n  object?: SheetObject\n  visualIndentation: number\n  path: string[]\n  sheet: Sheet\n}) {\n  const {nested, label, object, sheet} = props\n  const {collapsed, setCollapsed} = useCollapseStateInOutlinePanel({\n    type: 'namespace',\n    sheet,\n    path: [...props.path, label],\n  })\n\n  const nestedChildrenElt = nested && (\n    <NamespaceTree\n      namespace={nested}\n      path={[...props.path, label]}\n      // Question: will there be key conflict if two components have the same labels?\n      key={'namespaceTree(' + label + ')'}\n      visualIndentation={props.visualIndentation + 1}\n      sheet={sheet}\n    />\n  )\n  const sameNameElt = object && (\n    <ObjectItem\n      depth={props.visualIndentation}\n      // key is useful for navigating react dev component tree\n      key={'objectPath(' + object.address.objectKey + ')'}\n      // object entries should not allow this to be undefined\n      sheetObject={object}\n      overrideLabel={label}\n    />\n  )\n\n  return (\n    <React.Fragment key={`${label} - ${props.visualIndentation}`}>\n      {sameNameElt}\n      {nestedChildrenElt && (\n        <BaseItem\n          selectionStatus=\"not-selectable\"\n          label={label}\n          // key necessary for no duplicate keys (next to other React.Fragments)\n          key={`baseItem(${label})`}\n          depth={props.visualIndentation}\n          children={nestedChildrenElt}\n          collapsed={collapsed}\n          setIsCollapsed={setCollapsed}\n        />\n      )}\n    </React.Fragment>\n  )\n}\n\nexport default ObjectsList\n\n/** See {@link addToNamespace} for adding to the namespace, easily. */\ntype NamespacedObjects = Map<\n  string,\n  {\n    object?: SheetObject\n    nested?: NamespacedObjects\n    path: string[]\n  }\n>\n\nfunction addToNamespace(\n  mutObjects: NamespacedObjects,\n  object: SheetObject,\n  path = getObjectNamespacePath(object),\n) {\n  const [next, ...rest] = path\n  let existing = mutObjects.get(next)\n  if (!existing) {\n    existing = {\n      nested: undefined,\n      object: undefined,\n      path: [...path],\n    }\n    mutObjects.set(next, existing)\n  }\n\n  if (rest.length === 0) {\n    console.assert(\n      !existing.object,\n      'expect not to have existing object with same name',\n      {existing, object},\n    )\n    existing.object = object\n  } else {\n    if (!existing.nested) {\n      existing.nested = new Map()\n    }\n\n    addToNamespace(existing.nested, object, rest)\n  }\n}\n\nfunction getObjectNamespacePath(object: SheetObject): string[] {\n  let existing = OBJECT_SPLITS_MEMO.get(object)\n  if (!existing) {\n    existing = object.address.objectKey.split(\n      RE_SPLIT_BY_SLASH_WITHOUT_WHITESPACE,\n    )\n    console.assert(existing.length > 0, 'expected not empty')\n    OBJECT_SPLITS_MEMO.set(object, existing)\n  }\n  return existing\n}\n/**\n * Relying on the fact we try to \"sanitize paths\" earlier.\n * Go look for `sanifySlashedPath` in a `utils/slashedPaths.ts`.\n */\nconst RE_SPLIT_BY_SLASH_WITHOUT_WHITESPACE = /\\s*\\/\\s*/g\nconst OBJECT_SPLITS_MEMO = new WeakMap<SheetObject, string[]>()\n"
  },
  {
    "path": "packages/studio/src/panels/OutlinePanel/OutlinePanel.tsx",
    "content": "import React, {useEffect, useLayoutEffect} from 'react'\nimport styled from 'styled-components'\nimport {panelZIndexes} from '@theatre/studio/panels/BasePanel/common'\nimport ProjectsList from './ProjectsList/ProjectsList'\nimport {useVal} from '@theatre/react'\nimport getStudio from '@theatre/studio/getStudio'\nimport useHotspot from '@theatre/studio/uiComponents/useHotspot'\nimport {Atom, prism, val} from '@theatre/dataverse'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\n\nconst headerHeight = `44px`\n\nconst Container = styled.div<{pin: boolean}>`\n  ${pointerEventsAutoInNormalMode};\n  background-color: transparent;\n  position: absolute;\n  left: 8px;\n  z-index: ${panelZIndexes.outlinePanel};\n\n  top: calc(${headerHeight} + 8px);\n  height: fit-content;\n  max-height: calc(100% - ${headerHeight});\n  overflow-y: scroll;\n  overflow-x: hidden;\n  padding: 0;\n  user-select: none;\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n\n  scrollbar-width: none;\n\n  display: ${({pin}) => (pin ? 'block' : 'none')};\n\n  &:hover {\n    display: block;\n  }\n\n  // Create a small buffer on the bottom to aid selecting the bottom item in a long, scrolling list\n  &::after {\n    content: '';\n    display: block;\n    height: 20px;\n  }\n`\n\nconst OutlinePanel: React.FC<{}> = () => {\n  const pin = useVal(getStudio().atomP.ahistoric.pinOutline) ?? true\n  const show = useVal(shouldShowOutlineD)\n  const active = useHotspot('left')\n\n  useLayoutEffect(() => {\n    isOutlinePanelHotspotActiveB.set(active)\n  }, [active])\n\n  // cleanup\n  useEffect(() => {\n    return () => {\n      isOutlinePanelHoveredB.set(false)\n      isOutlinePanelHotspotActiveB.set(false)\n    }\n  }, [])\n\n  return (\n    <Container\n      pin={pin || show}\n      onMouseEnter={() => {\n        isOutlinePanelHoveredB.set(true)\n      }}\n      onMouseLeave={() => {\n        isOutlinePanelHoveredB.set(false)\n      }}\n    >\n      <ProjectsList />\n    </Container>\n  )\n}\n\nexport default OutlinePanel\n\nconst isOutlinePanelHotspotActiveB = new Atom<boolean>(false)\nconst isOutlinePanelHoveredB = new Atom<boolean>(false)\n\nexport const shouldShowOutlineD = prism<boolean>(() => {\n  const isHovered = val(isOutlinePanelHoveredB.prism)\n  const isHotspotActive = val(isOutlinePanelHotspotActiveB.prism)\n\n  return isHovered || isHotspotActive\n})\n"
  },
  {
    "path": "packages/studio/src/panels/OutlinePanel/ProjectsList/ProjectListItem.tsx",
    "content": "import type Project from '@theatre/core/projects/Project'\nimport React, {useCallback} from 'react'\nimport BaseItem from '@theatre/studio/panels/OutlinePanel/BaseItem'\nimport SheetsList from '@theatre/studio/panels/OutlinePanel/SheetsList/SheetsList'\nimport getStudio from '@theatre/studio/getStudio'\nimport {usePrism, useVal} from '@theatre/react'\nimport {outlineSelection} from '@theatre/studio/selectors'\nimport {val} from '@theatre/dataverse'\nimport styled from 'styled-components'\nimport {useCollapseStateInOutlinePanel} from '@theatre/studio/panels/OutlinePanel/outlinePanelUtils'\nimport useChordial from '@theatre/studio/uiComponents/chordial/useChodrial'\n\nconst ConflictNotice = styled.div`\n  color: #ff6363;\n  margin-left: 11px;\n  background: #4c282d;\n  padding: 2px 8px;\n  border-radius: 2px;\n  font-size: 10px;\n  box-shadow: 0 2px 8px -4px black;\n`\n\nconst ProjectListItem: React.FC<{\n  depth: number\n  project: Project\n}> = ({depth, project}) => {\n  const selection = useVal(outlineSelection)\n\n  const hasConflict = usePrism(() => {\n    const projectId = project.address.projectId\n    const loadingState = val(\n      getStudio().ephemeralAtom.pointer.coreByProject[projectId].loadingState,\n    )\n    return loadingState?.type === 'browserStateIsNotBasedOnDiskState'\n  }, [project])\n\n  const select = useCallback(() => {\n    getStudio().transaction(({stateEditors}) => {\n      stateEditors.studio.historic.panels.outline.selection.set([\n        {...project.address, type: 'Project'},\n      ])\n    })\n  }, [project])\n\n  const {collapsed, setCollapsed} = useCollapseStateInOutlinePanel(project)\n\n  const {targetRef} = useChordial(() => {\n    return {\n      title: `Project: ${project.address.projectId}`,\n      items: [],\n    }\n  })\n\n  return (\n    <BaseItem\n      depth={depth}\n      label={project.address.projectId}\n      setIsCollapsed={setCollapsed}\n      collapsed={collapsed}\n      headerRef={targetRef}\n      labelDecoration={\n        hasConflict ? <ConflictNotice>Has Conflicts</ConflictNotice> : null\n      }\n      children={<SheetsList project={project} depth={depth + 1} />}\n      selectionStatus={\n        selection.includes(project)\n          ? 'selected'\n          : selection.some(\n                (s) => s.address.projectId === project.address.projectId,\n              )\n            ? 'descendant-is-selected'\n            : 'not-selected'\n      }\n      select={select}\n    />\n  )\n}\n\nexport default ProjectListItem\n"
  },
  {
    "path": "packages/studio/src/panels/OutlinePanel/ProjectsList/ProjectsList.tsx",
    "content": "import {val} from '@theatre/dataverse'\nimport {usePrism} from '@theatre/react'\nimport getStudio from '@theatre/studio/getStudio'\nimport React from 'react'\nimport styled from 'styled-components'\nimport ProjectListItem from './ProjectListItem'\n\nconst Container = styled.ul`\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  padding-right: 4px;\n`\n\nconst ProjectsList: React.FC<{}> = (props) => {\n  return usePrism(() => {\n    const projects = val(getStudio().projectsP)\n\n    return (\n      <Container>\n        {Object.keys(projects).map((projectId) => {\n          const project = projects[projectId]\n          return (\n            <ProjectListItem\n              depth={0}\n              project={project}\n              key={`projectListItem-${projectId}`}\n            />\n          )\n        })}\n      </Container>\n    )\n  }, [])\n}\n\nexport default ProjectsList\n"
  },
  {
    "path": "packages/studio/src/panels/OutlinePanel/SheetsList/SheetInstanceItem.tsx",
    "content": "import getStudio from '@theatre/studio/getStudio'\nimport {outlineSelection} from '@theatre/studio/selectors'\nimport {useVal} from '@theatre/react'\nimport React, {useCallback} from 'react'\nimport styled from 'styled-components'\nimport ObjectsList from '@theatre/studio/panels/OutlinePanel/ObjectsList/ObjectsList'\nimport BaseItem from '@theatre/studio/panels/OutlinePanel/BaseItem'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport {useCollapseStateInOutlinePanel} from '@theatre/studio/panels/OutlinePanel/outlinePanelUtils'\nimport useChordial from '@theatre/studio/uiComponents/chordial/useChodrial'\n\nconst Head = styled.div`\n  display: flex;\n`\n\nconst Body = styled.div``\n\nexport const SheetInstanceItem: React.FC<{\n  depth: number\n  sheet: Sheet\n}> = ({sheet, depth}) => {\n  const {collapsed, setCollapsed} = useCollapseStateInOutlinePanel(sheet)\n\n  const setSelectedSheet = useCallback(() => {\n    getStudio()!.transaction(({stateEditors}) => {\n      stateEditors.studio.historic.panels.outline.selection.set([\n        {...sheet.address, type: 'Sheet'},\n      ])\n    })\n  }, [sheet])\n\n  const selection = useVal(outlineSelection)\n\n  const {targetRef} = useChordial(() => {\n    return {\n      title: `Sheet: ${sheet.address.sheetId} (instance: ${sheet.address.sheetInstanceId})`,\n      items: [],\n    }\n  })\n\n  return (\n    <BaseItem\n      depth={depth}\n      select={setSelectedSheet}\n      setIsCollapsed={setCollapsed}\n      collapsed={collapsed}\n      headerRef={targetRef}\n      selectionStatus={\n        selection.some((s) => s === sheet)\n          ? 'selected'\n          : selection.some(\n                (s) => s.type === 'Theatre_SheetObject' && s.sheet === sheet,\n              )\n            ? 'descendant-is-selected'\n            : 'not-selected'\n      }\n      label={\n        <Head>\n          {sheet.address.sheetId}: {sheet.address.sheetInstanceId}\n        </Head>\n      }\n    >\n      <Body>\n        <ObjectsList\n          depth={depth + 1}\n          sheet={sheet}\n          key={'objectList' + sheet.address.sheetInstanceId}\n        />\n      </Body>\n    </BaseItem>\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/panels/OutlinePanel/SheetsList/SheetItem.tsx",
    "content": "import type Project from '@theatre/core/projects/Project'\n\nimport {usePrism} from '@theatre/react'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport {SheetInstanceItem} from './SheetInstanceItem'\n\nconst Head = styled.div`\n  display: flex;\n`\n\nconst Container = styled.li<{isSelected: boolean}>`\n  color: ${(props) => (props.isSelected ? 'white' : 'hsl(1, 1%, 80%)')};\n`\n\nconst Body = styled.div``\n\nexport const SheetItem: React.FC<{\n  depth: number\n  sheetId: string\n  project: Project\n}> = ({sheetId, depth, project}) => {\n  return usePrism(() => {\n    const template = val(project.sheetTemplatesP[sheetId])\n    if (!template) return <></>\n    const allInstances = val(template.instancesP)\n\n    return (\n      <>\n        {Object.entries(allInstances).map(([_, inst]) => {\n          return (\n            <SheetInstanceItem\n              key={inst.address.sheetInstanceId}\n              sheet={inst}\n              depth={depth}\n            />\n          )\n        })}\n      </>\n    )\n  }, [depth, sheetId, project])\n}\n"
  },
  {
    "path": "packages/studio/src/panels/OutlinePanel/SheetsList/SheetsList.tsx",
    "content": "import {getRegisteredSheetIds} from '@theatre/studio/selectors'\nimport {usePrism} from '@theatre/react'\nimport React from 'react'\nimport {SheetItem} from './SheetItem'\nimport type Project from '@theatre/core/projects/Project'\n\nconst SheetsList: React.FC<{\n  project: Project\n  depth: number\n}> = ({project, depth}) => {\n  return usePrism(() => {\n    if (!project) return null\n\n    const registeredSheetIds = getRegisteredSheetIds(project)\n\n    return (\n      <>\n        {registeredSheetIds.map((sheetId) => {\n          return (\n            <SheetItem\n              depth={depth}\n              sheetId={sheetId}\n              key={`sheet-${sheetId}`}\n              project={project}\n            ></SheetItem>\n          )\n        })}\n      </>\n    )\n  }, [project, depth])\n}\n\nexport default SheetsList\n"
  },
  {
    "path": "packages/studio/src/panels/OutlinePanel/outlinePanelUtils.ts",
    "content": "import type Project from '@theatre/core/projects/Project'\nimport {useCallback} from 'react'\nimport getStudio from '@theatre/studio/getStudio'\nimport {useVal} from '@theatre/react'\nimport type Sheet from '@theatre/core/sheets/Sheet'\n\nexport function useCollapseStateInOutlinePanel(\n  item: Project | Sheet | {type: 'namespace'; sheet: Sheet; path: string[]},\n): {\n  collapsed: boolean\n  setCollapsed: (collapsed: boolean) => void\n} {\n  const itemKey =\n    item.type === 'namespace'\n      ? `namespace:${item.sheet.address.sheetId}:${item.path.join('/')}`\n      : item.type === 'Theatre_Project'\n        ? 'project'\n        : item.type === 'Theatre_Sheet'\n          ? `sheetInstance:${item.address.sheetId}:${item.address.sheetInstanceId}`\n          : 'unknown'\n\n  const projectId =\n    item.type === 'namespace'\n      ? item.sheet.address.projectId\n      : item.address.projectId\n\n  const isCollapsed =\n    useVal(\n      getStudio().atomP.ahistoric.projects.stateByProjectId[projectId]\n        .collapsedItemsInOutline[itemKey],\n    ) ?? false\n\n  const setCollapsed = useCallback(\n    (isCollapsed: boolean) => {\n      getStudio().transaction(({stateEditors}) => {\n        stateEditors.studio.ahistoric.projects.stateByProjectId.collapsedItemsInOutline.set(\n          {projectId, isCollapsed, itemKey: itemKey},\n        )\n      })\n    },\n    [itemKey],\n  )\n\n  return {collapsed: isCollapsed, setCollapsed}\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/AGGREGATE_COPY_PASTE.md",
    "content": "## The keyframe copy/paste algorithm\n\nThe copy and paste algorithms are specified below. Note that the copy algorithm\nis written with some capital letters to emphasize organization, its not an\nactual language or anything. The copy algorithm changed recently and the\nexamples are more up-to-date than the paste algorithm because pasting stayed the\nsame.\n\n```\nALGORITHM copy:\n\nLET PATH =\n  CASE copy selection / single track THEN the path relative to the closest common ancestor for the tracks selected\n  CASE copy aggregate track          THEN the path relative the aggregate track compoundProp/sheetObject/sheet\n\nFOR EXAMPLE CASE copy selection / single track:\n- obj1.props.transform.position.x => x\n- obj1.props.transform.position.{x, z} => {x, z}\n- obj1.props.transform.position.{x, z} + obj1.props.transform.rotation.z =>\n  {position: {x, z}, rotation: {z}}\n\nFOR EXAMPLE CASE copy aggregate track:\n- sheet.obj1.props.transform.position => {x, y, z}\n- sheet.obj1.props.transform => {position: {x, y, z}, rotation: {x, y, z}}\n- sheet => { obj1: { props: { transform: {position: {x, y, z}, rotation: {x, y, z}}}}}\n\nALGORITHM: paste:\n\n- simple => simple => 1-1\n- simple => {x, y} => {x: simple, y: simple} (distribute to all)\n- compound => simple => compound[0] (the first simple property of the comopund,\n  recursively)\n- compound => compound =>\n  - if they match perfectly, then we know what to do\n  - if they match partially, then we paste partially\n    - {x, y, z} => {x, z} => {x, z}\n    - {x, y} => {x, d} => {x}\n  - if they don't match at all\n    - {x, y} => {a, b} => nothing\n    - {x, y} => {transforms: {position: {x, y, z}}} => nothing\n    - {x, y} => {object(not a prop): {x, y}} => {x, y}\n      - What this means is that, in case of objects and sheets, we do a forEach\n        at each object, then try pasting onto its object.props\n```\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/DopeSheet.tsx",
    "content": "import {useVal} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport Left from './Left/Left'\nimport DopeSheetBackground from './Right/DopeSheetBackground'\nimport Right from './Right/Right'\nimport VerticalScrollContainer from '@theatre/studio/panels/SequenceEditorPanel/VerticalScrollContainer'\n\nconst Container = styled.div`\n  position: absolute;\n  left: 0;\n  right: 0;\n`\n\nconst DopeSheet: React.VFC<{layoutP: Pointer<SequenceEditorPanelLayout>}> = ({\n  layoutP,\n}) => {\n  const height = useVal(layoutP.dopeSheetDims.height)\n\n  return (\n    <Container style={{height: height + 'px'}}>\n      <DopeSheetBackground layoutP={layoutP} />\n      <VerticalScrollContainer>\n        <Left layoutP={layoutP} />\n        <Right layoutP={layoutP} />\n      </VerticalScrollContainer>\n    </Container>\n  )\n}\n\nexport default DopeSheet\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Left/AnyCompositeRow.tsx",
    "content": "import {theme} from '@theatre/studio/css'\nimport type {\n  SequenceEditorTree_PrimitiveProp,\n  SequenceEditorTree_PropWithChildren,\n  SequenceEditorTree_Sheet,\n  SequenceEditorTree_SheetObject,\n} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport type {VoidFn} from '@theatre/core/types/public'\nimport React, {useRef} from 'react'\nimport {HiOutlineChevronRight} from 'react-icons/hi'\nimport styled from 'styled-components'\nimport {propNameTextCSS} from '@theatre/studio/propEditors/utils/propNameTextCSS'\nimport {usePropHighlightMouseEnter} from './usePropHighlightMouseEnter'\n\nexport const LeftRowContainer = styled.li<{depth: number}>`\n  --depth: ${(props) => props.depth};\n  margin: 0;\n  padding: 0;\n  list-style: none;\n`\n\nexport const BaseHeader = styled.div<{isEven: boolean}>`\n  border-bottom: 1px solid #7695b705;\n`\n\nconst LeftRowHeader = styled(BaseHeader)<{\n  isSelectable: boolean\n  isSelected: boolean\n}>`\n  padding-left: calc(0px + var(--depth) * 20px);\n\n  display: flex;\n  align-items: stretch;\n  color: ${theme.panel.body.compoudThing.label.color};\n\n  box-sizing: border-box;\n\n  ${(props) => props.isSelected && `background: blue`};\n`\n\nconst LeftRowHead_Label = styled.span`\n  ${propNameTextCSS};\n  overflow-x: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  padding-right: 4px;\n  line-height: 26px;\n  flex-wrap: nowrap;\n\n  ${LeftRowHeader}:hover & {\n    color: #ccc;\n  }\n`\n\nconst LeftRowHead_Icon = styled.span<{isCollapsed: boolean}>`\n  width: 12px;\n  padding: 8px;\n  font-size: 9px;\n  display: flex;\n  align-items: center;\n\n  transition:\n    transform 0.05s ease-out,\n    color 0.1s ease-out;\n  transform: rotateZ(${(props) => (props.isCollapsed ? 0 : 90)}deg);\n  color: #66686a;\n\n  &:hover {\n    transform: rotateZ(${(props) => (props.isCollapsed ? 15 : 75)}deg);\n    color: #c0c4c9;\n  }\n`\n\nconst LeftRowChildren = styled.ul`\n  margin: 0;\n  padding: 0;\n  list-style: none;\n`\n\nconst AnyCompositeRow: React.FC<{\n  leaf:\n    | SequenceEditorTree_Sheet\n    | SequenceEditorTree_PrimitiveProp\n    | SequenceEditorTree_PropWithChildren\n    | SequenceEditorTree_SheetObject\n  label: React.ReactNode\n  toggleSelect?: VoidFn\n  toggleCollapsed: VoidFn\n  isSelected?: boolean\n  isSelectable?: boolean\n  isCollapsed: boolean\n  children?: React.ReactNode\n}> = ({\n  leaf,\n  label,\n  children,\n  isSelectable,\n  isSelected,\n  toggleSelect,\n  toggleCollapsed,\n  isCollapsed,\n}) => {\n  const hasChildren = Array.isArray(children) && children.length > 0\n\n  const rowHeaderRef = useRef<HTMLDivElement | null>(null)\n\n  usePropHighlightMouseEnter(rowHeaderRef.current, leaf)\n\n  return leaf.shouldRender ? (\n    <LeftRowContainer depth={leaf.depth}>\n      <LeftRowHeader\n        ref={rowHeaderRef}\n        style={{\n          height: leaf.nodeHeight + 'px',\n        }}\n        isSelectable={isSelectable === true}\n        isSelected={isSelected === true}\n        onClick={toggleSelect}\n        isEven={leaf.n % 2 === 0}\n      >\n        <LeftRowHead_Icon isCollapsed={isCollapsed} onClick={toggleCollapsed}>\n          <HiOutlineChevronRight />\n        </LeftRowHead_Icon>\n        <LeftRowHead_Label>{label}</LeftRowHead_Label>\n      </LeftRowHeader>\n      {hasChildren && <LeftRowChildren>{children}</LeftRowChildren>}\n    </LeftRowContainer>\n  ) : null\n}\n\nexport default AnyCompositeRow\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Left/Left.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {usePrism} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport SheetRow from './SheetRow'\n\nconst Container = styled.div`\n  position: absolute;\n  left: 0;\n  overflow-x: visible;\n`\n\nconst ListContainer = styled.ul`\n  margin: 0;\n  padding: 0;\n  list-style: none;\n`\n\nconst Left: React.VFC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({layoutP}) => {\n  return usePrism(() => {\n    const tree = val(layoutP.tree)\n    const width = val(layoutP.leftDims.width)\n\n    return (\n      <Container style={{width: width + 'px', top: tree.top + 'px'}}>\n        <ListContainer>\n          <SheetRow leaf={tree} />\n        </ListContainer>\n      </Container>\n    )\n  }, [layoutP])\n}\n\nexport default Left\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Left/PrimitivePropRow.tsx",
    "content": "import type {SequenceEditorTree_PrimitiveProp} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport getStudio from '@theatre/studio/getStudio'\nimport {encodePathToProp} from '@theatre/utils/pathToProp'\nimport pointerDeep from '@theatre/utils/pointerDeep'\nimport {usePrism} from '@theatre/react'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React, {useCallback, useRef} from 'react'\nimport styled from 'styled-components'\nimport {useEditingToolsForSimplePropInDetailsPanel} from '@theatre/studio/propEditors/useEditingToolsForSimpleProp'\nimport {nextPrevCursorsTheme} from '@theatre/studio/propEditors/NextPrevKeyframeCursors'\nimport {BaseHeader, LeftRowContainer as BaseContainer} from './AnyCompositeRow'\nimport {propNameTextCSS} from '@theatre/studio/propEditors/utils/propNameTextCSS'\nimport {usePropHighlightMouseEnter} from './usePropHighlightMouseEnter'\nimport type {GraphEditorColors} from '@theatre/core/types/private'\nimport {graphEditorColors} from '@theatre/sync-server/state/schema'\n\nconst theme = {\n  label: {\n    color: `#9a9a9a`,\n  },\n}\n\nconst PrimitivePropRowContainer = styled(BaseContainer)<{}>``\n\nconst PrimitivePropRowHead = styled(BaseHeader)<{\n  isSelected: boolean\n  isEven: boolean\n}>`\n  display: flex;\n  color: ${theme.label.color};\n  padding-right: 12px;\n  align-items: center;\n  justify-content: flex-end;\n  box-sizing: border-box;\n`\n\nconst PrimitivePropRowIconContainer = styled.button<{\n  isSelected: boolean\n  graphEditorColor: keyof GraphEditorColors\n}>`\n  background: none;\n  border: none;\n  outline: none;\n  display: flex;\n  box-sizing: border-box;\n  font-size: 14px;\n  align-items: center;\n  height: 100%;\n  margin-left: 12px;\n  color: ${(props) =>\n    props.isSelected\n      ? graphEditorColors[props.graphEditorColor].iconColor\n      : nextPrevCursorsTheme.offColor};\n\n  &:not([disabled]):hover {\n    color: white;\n  }\n`\n\nconst GraphIcon = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"10\"\n    height=\"12\"\n    viewBox=\"0 0 640 512\"\n  >\n    <g transform=\"translate(0 100)\">\n      <path\n        fill=\"currentColor\"\n        d=\"M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"\n      />\n    </g>\n  </svg>\n)\n\nconst PrimitivePropRowHead_Label = styled.span`\n  margin-right: 4px;\n  ${propNameTextCSS};\n\n  ${PrimitivePropRowHead}:hover & {\n    color: #ccc;\n  }\n`\n\nconst PrimitivePropRow: React.FC<{\n  leaf: SequenceEditorTree_PrimitiveProp\n}> = ({leaf}) => {\n  const pointerToProp = pointerDeep(\n    leaf.sheetObject.propsP,\n    leaf.pathToProp,\n  ) as Pointer<$IntentionalAny>\n\n  const obj = leaf.sheetObject\n  const {controlIndicators} = useEditingToolsForSimplePropInDetailsPanel(\n    pointerToProp,\n    obj,\n    leaf.propConf,\n  )\n\n  const possibleColor = usePrism(() => {\n    const c = leaf.sheetObject.address\n    const encodedPathToProp = encodePathToProp(leaf.pathToProp)\n    return val(\n      getStudio()!.atomP.historic.projects.stateByProjectId[c.projectId]\n        .stateBySheetId[c.sheetId].sequenceEditor.selectedPropsByObject[\n        c.objectKey\n      ][encodedPathToProp],\n    )\n  }, [leaf])\n\n  const isSelectedRef = useRef<boolean>(false)\n  const isSelected = typeof possibleColor === 'string'\n  isSelectedRef.current = isSelected\n\n  const toggleSelect = useCallback(() => {\n    const c = leaf.sheetObject.address\n    getStudio()!.transaction(({stateEditors}) => {\n      if (isSelectedRef.current) {\n        stateEditors.studio.historic.projects.stateByProjectId.stateBySheetId.sequenceEditor.removePropFromGraphEditor(\n          {...c, pathToProp: leaf.pathToProp},\n        )\n      } else {\n        stateEditors.studio.historic.projects.stateByProjectId.stateBySheetId.sequenceEditor.addPropToGraphEditor(\n          {...c, pathToProp: leaf.pathToProp},\n        )\n        stateEditors.studio.historic.panels.sequenceEditor.graphEditor.setIsOpen(\n          {\n            isOpen: true,\n          },\n        )\n      }\n    })\n  }, [leaf])\n\n  const label =\n    leaf.propConf.label ?? leaf.pathToProp[leaf.pathToProp.length - 1]\n  const isSelectable = true\n\n  const headRef = useRef<HTMLDivElement | null>(null)\n\n  usePropHighlightMouseEnter(headRef.current, leaf)\n\n  return (\n    <PrimitivePropRowContainer depth={leaf.depth}>\n      <PrimitivePropRowHead\n        ref={headRef}\n        isEven={leaf.n % 2 === 0}\n        style={{\n          height: leaf.nodeHeight + 'px',\n        }}\n        isSelected={isSelected === true}\n      >\n        <PrimitivePropRowHead_Label>{label}</PrimitivePropRowHead_Label>\n        {controlIndicators}\n        <PrimitivePropRowIconContainer\n          onClick={toggleSelect}\n          isSelected={isSelected === true}\n          graphEditorColor={possibleColor ?? '1'}\n          style={{opacity: isSelectable ? 1 : 0.25}}\n          disabled={!isSelectable}\n        >\n          <GraphIcon />\n        </PrimitivePropRowIconContainer>\n      </PrimitivePropRowHead>\n    </PrimitivePropRowContainer>\n  )\n}\n\nexport default PrimitivePropRow\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Left/PropWithChildrenRow.tsx",
    "content": "import type {\n  SequenceEditorTree_PrimitiveProp,\n  SequenceEditorTree_PropWithChildren,\n} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport React from 'react'\nimport AnyCompositeRow from './AnyCompositeRow'\nimport PrimitivePropRow from './PrimitivePropRow'\nimport {setCollapsedSheetItem} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/setCollapsedSheetObjectOrCompoundProp'\n\nexport const decideRowByPropType = (\n  leaf: SequenceEditorTree_PropWithChildren | SequenceEditorTree_PrimitiveProp,\n): React.ReactElement => {\n  const key = 'prop' + leaf.pathToProp[leaf.pathToProp.length - 1]\n  return leaf.shouldRender ? (\n    leaf.type === 'propWithChildren' ? (\n      <PropWithChildrenRow leaf={leaf} key={key} />\n    ) : (\n      <PrimitivePropRow leaf={leaf} key={key} />\n    )\n  ) : (\n    <React.Fragment key={key} />\n  )\n}\n\nconst PropWithChildrenRow: React.VFC<{\n  leaf: SequenceEditorTree_PropWithChildren\n}> = ({leaf}) => {\n  return (\n    <AnyCompositeRow\n      leaf={leaf}\n      label={leaf.pathToProp[leaf.pathToProp.length - 1]}\n      isCollapsed={leaf.isCollapsed}\n      toggleCollapsed={() =>\n        setCollapsedSheetItem(!leaf.isCollapsed, {\n          sheetAddress: leaf.sheetObject.address,\n          sheetItemKey: leaf.sheetItemKey,\n        })\n      }\n    >\n      {leaf.children.map((propLeaf) => decideRowByPropType(propLeaf))}\n    </AnyCompositeRow>\n  )\n}\n\nexport default PropWithChildrenRow\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Left/SheetObjectRow.tsx",
    "content": "import type {SequenceEditorTree_SheetObject} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport React from 'react'\nimport AnyCompositeRow from './AnyCompositeRow'\nimport {decideRowByPropType} from './PropWithChildrenRow'\nimport {setCollapsedSheetItem} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/setCollapsedSheetObjectOrCompoundProp'\nimport getStudio from '@theatre/studio/getStudio'\n\nconst LeftSheetObjectRow: React.VFC<{\n  leaf: SequenceEditorTree_SheetObject\n}> = ({leaf}) => {\n  return (\n    <AnyCompositeRow\n      leaf={leaf}\n      label={leaf.sheetObject.address.objectKey}\n      isCollapsed={leaf.isCollapsed}\n      toggleSelect={() => {\n        // set selection to this sheet object on click\n        getStudio().transaction(({stateEditors}) => {\n          stateEditors.studio.historic.panels.outline.selection.set([\n            {type: 'SheetObject', ...leaf.sheetObject.address},\n          ])\n        })\n      }}\n      toggleCollapsed={() =>\n        setCollapsedSheetItem(!leaf.isCollapsed, {\n          sheetAddress: leaf.sheetObject.address,\n          sheetItemKey: leaf.sheetItemKey,\n        })\n      }\n    >\n      {leaf.children.map((leaf) => decideRowByPropType(leaf))}\n    </AnyCompositeRow>\n  )\n}\n\nexport default LeftSheetObjectRow\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Left/SheetRow.tsx",
    "content": "import type {SequenceEditorTree_Sheet} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport {usePrism} from '@theatre/react'\nimport React from 'react'\nimport LeftSheetObjectRow from './SheetObjectRow'\nimport AnyCompositeRow from './AnyCompositeRow'\nimport {setCollapsedSheetItem} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/setCollapsedSheetObjectOrCompoundProp'\nimport uniqueKeyForAnyObject from '@theatre/utils/uniqueKeyForAnyObject'\n\nconst SheetRow: React.VFC<{\n  leaf: SequenceEditorTree_Sheet\n}> = ({leaf}) => {\n  return usePrism(() => {\n    return (\n      <AnyCompositeRow\n        leaf={leaf}\n        label={leaf.sheet.address.sheetId}\n        isCollapsed={leaf.isCollapsed}\n        toggleCollapsed={() => {\n          setCollapsedSheetItem(!leaf.isCollapsed, {\n            sheetAddress: leaf.sheet.address,\n            sheetItemKey: leaf.sheetItemKey,\n          })\n        }}\n      >\n        {leaf.children.map((sheetObjectLeaf) => (\n          <LeftSheetObjectRow\n            key={\n              'sheetObject-' +\n              // we don't use the object's address as the key because if a user calls `sheet.detachObject(key)` and later\n              // calls `sheet.object(key)` with the same key, we want to re-render this row.\n              uniqueKeyForAnyObject(sheetObjectLeaf.sheetObject)\n            }\n            leaf={sheetObjectLeaf}\n          />\n        ))}\n      </AnyCompositeRow>\n    )\n  }, [leaf])\n}\n\nexport default SheetRow\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Left/usePropHighlightMouseEnter.tsx",
    "content": "import type {SequenceEditorTree_AllRowTypes} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport type {PropAddress} from '@theatre/core/types/public'\nimport {useLayoutEffect} from 'react'\nimport {whatPropIsHighlighted} from '@theatre/studio/panels/SequenceEditorPanel/whatPropIsHighlighted'\n\n/** This should ignore if  */\nexport function usePropHighlightMouseEnter(\n  node: HTMLElement | null,\n  leaf: SequenceEditorTree_AllRowTypes,\n) {\n  useLayoutEffect(() => {\n    if (!node) return\n    if (\n      leaf.type !== 'propWithChildren' &&\n      leaf.type !== 'primitiveProp' &&\n      leaf.type !== 'sheetObject'\n    )\n      return\n\n    let unlock: null | (() => void) = null\n    const propAddress: PropAddress = {\n      ...leaf.sheetObject.address,\n      pathToProp: leaf.type === 'sheetObject' ? [] : leaf.pathToProp,\n    }\n\n    function onMouseEnter() {\n      unlock = whatPropIsHighlighted.replaceLock(propAddress, () => {\n        // cleanup on forced unlock\n      })\n    }\n    function onMouseLeave() {\n      unlock?.()\n    }\n\n    node.addEventListener('mouseenter', onMouseEnter)\n    node.addEventListener('mouseleave', onMouseLeave)\n\n    return () => {\n      unlock?.()\n      node.removeEventListener('mouseenter', onMouseEnter)\n      node.removeEventListener('mouseleave', onMouseLeave)\n    }\n  }, [node])\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregateKeyframeEditor/AggregateKeyframeConnector.tsx",
    "content": "import {val} from '@theatre/dataverse'\nimport React, {useMemo, useRef} from 'react'\nimport {ConnectorLine} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/keyframeRowUI/ConnectorLine'\nimport {AggregateKeyframePositionIsSelected} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregatedKeyframeTrack'\nimport usePopover from '@theatre/studio/uiComponents/Popover/usePopover'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport type {DragOpts} from '@theatre/studio/uiComponents/useDrag'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport getStudio from '@theatre/studio/getStudio'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport type {IAggregateKeyframeEditorUtils} from './useAggregateKeyframeEditorUtils'\nimport CurveEditorPopover from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/CurveEditorPopover'\nimport {useAggregateKeyframeEditorUtils} from './useAggregateKeyframeEditorUtils'\nimport type {IAggregateKeyframeEditorProps} from './AggregateKeyframeEditor'\nimport styled from 'styled-components'\nimport BasicPopover from '@theatre/studio/uiComponents/Popover/BasicPopover'\nimport {\n  copyableKeyframesFromSelection,\n  keyframesWithPaths,\n} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/selections'\nimport useContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/useContextMenu'\nimport {commonRootOfPathsToProps} from '@theatre/utils/pathToProp'\nimport type {KeyframeWithPathToPropFromCommonRoot} from '@theatre/core/types/private'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nconst POPOVER_MARGIN_PX = 5\nconst EasingPopoverWrapper = styled(BasicPopover)`\n  --popover-outer-stroke: transparent;\n  --popover-inner-stroke: rgba(26, 28, 30, 0.97);\n`\nexport const AggregateCurveEditorPopover: React.FC<\n  IAggregateKeyframeEditorProps & {closePopover: (reason: string) => void}\n> = React.forwardRef((props, ref) => {\n  const {allConnections} = useAggregateKeyframeEditorUtils(props)\n\n  return (\n    <EasingPopoverWrapper\n      showPopoverEdgeTriangle={false}\n      // @ts-ignore @todo\n      ref={ref}\n    >\n      <CurveEditorPopover\n        curveConnection={allConnections[0]}\n        additionalConnections={allConnections}\n        onRequestClose={props.closePopover}\n      />\n    </EasingPopoverWrapper>\n  )\n})\n\nexport const AggregateKeyframeConnector: React.VFC<\n  IAggregateKeyframeConnectorProps\n> = (props) => {\n  const [nodeRef, node] = useRefAndState<HTMLDivElement | null>(null)\n  const {editorProps} = props\n\n  const [contextMenu] = useConnectorContextMenu(props, node)\n  const [isDragging] = useDragKeyframe(node, props.editorProps)\n\n  const {\n    node: popoverNode,\n    toggle: togglePopover,\n    close: closePopover,\n  } = usePopover(\n    () => {\n      const rightDims = val(editorProps.layoutP.rightDims)\n\n      return {\n        debugName: 'Connector',\n        constraints: {\n          minX: rightDims.screenX + POPOVER_MARGIN_PX,\n          maxX: rightDims.screenX + rightDims.width - POPOVER_MARGIN_PX,\n        },\n      }\n    },\n    () => {\n      return (\n        <AggregateCurveEditorPopover\n          {...editorProps}\n          closePopover={closePopover}\n        />\n      )\n    },\n  )\n\n  const {connected, isAggregateEditingInCurvePopover} = props.utils\n\n  // We don't want to interrupt an existing drag, so in order to persist the dragged\n  // html node, we just set the connector length to 0, but we don't remove it yet.\n  return connected || isDragging ? (\n    <>\n      <ConnectorLine\n        ref={nodeRef}\n        connectorLengthInUnitSpace={connected ? connected.length : 0}\n        isSelected={connected ? connected.selected : false}\n        isPopoverOpen={isAggregateEditingInCurvePopover}\n        openPopover={(e) => {\n          if (node) togglePopover(e, node)\n        }}\n      />\n      {popoverNode}\n      {contextMenu}\n    </>\n  ) : (\n    <></>\n  )\n}\ntype IAggregateKeyframeConnectorProps = {\n  utils: IAggregateKeyframeEditorUtils\n  editorProps: IAggregateKeyframeEditorProps\n}\nfunction useDragKeyframe(\n  node: HTMLDivElement | null,\n  editorProps: IAggregateKeyframeEditorProps,\n) {\n  const propsRef = useRef(editorProps)\n  propsRef.current = editorProps\n\n  const gestureHandlers = useMemo<DragOpts>(() => {\n    return {\n      debugName: 'useDragKeyframe',\n      lockCSSCursorTo: 'ew-resize',\n      onDragStart(event) {\n        const props = propsRef.current\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n        const keyframes = props.aggregateKeyframes[props.index].keyframes\n\n        const {selection, viewModel} = props\n        const address =\n          viewModel.type === 'sheet'\n            ? viewModel.sheet.address\n            : viewModel.sheetObject.address\n\n        if (\n          selection &&\n          props.aggregateKeyframes[props.index].selected ===\n            AggregateKeyframePositionIsSelected.AllSelected\n        ) {\n          return selection\n            .getDragHandlers({\n              ...address,\n              domNode: node!,\n              positionAtStartOfDrag:\n                props.aggregateKeyframes[props.index].position,\n            })\n            .onDragStart(event)\n        }\n\n        const propsAtStartOfDrag = props\n        const sequence = val(propsAtStartOfDrag.layoutP.sheet).getSequence()\n\n        const toUnitSpace = val(\n          propsAtStartOfDrag.layoutP.scaledSpace.toUnitSpace,\n        )\n\n        return {\n          onDrag(dx, dy, event) {\n            const delta = toUnitSpace(dx)\n            if (tempTransaction) {\n              tempTransaction.discard()\n              tempTransaction = undefined\n            }\n\n            tempTransaction = getStudio().tempTransaction(({stateEditors}) => {\n              for (const keyframe of keyframes) {\n                const sortedKeyframes = keyframeUtils.getSortedKeyframesCached(\n                  keyframe.track.data.keyframes,\n                )\n                stateEditors.coreByProject.historic.sheetsById.sequence.transformKeyframes(\n                  {\n                    ...keyframe.track.sheetObject.address,\n                    trackId: keyframe.track.id,\n                    keyframeIds: [\n                      keyframe.kf.id,\n                      sortedKeyframes[sortedKeyframes.indexOf(keyframe.kf) + 1]\n                        .id,\n                    ],\n                    translate: delta,\n                    scale: 1,\n                    origin: 0,\n                    snappingFunction: sequence.closestGridPosition,\n                  },\n                )\n              }\n            })\n          },\n          onDragEnd(dragHappened) {\n            if (dragHappened) {\n              if (tempTransaction) {\n                tempTransaction.commit()\n              }\n            } else {\n              if (tempTransaction) {\n                tempTransaction.discard()\n              }\n            }\n          },\n        }\n      },\n    }\n  }, [])\n\n  return useDrag(node, gestureHandlers)\n}\n\nfunction useConnectorContextMenu(\n  props: IAggregateKeyframeConnectorProps,\n  node: HTMLDivElement | null,\n) {\n  return useContextMenu(node, {\n    displayName: 'Aggregate Tween',\n    items: () => {\n      // see AGGREGATE_COPY_PASTE.md for explanation of this\n      // code that makes some keyframes with paths for copying\n      // to clipboard\n      const kfs = props.utils.allConnections.reduce(\n        (acc, con) =>\n          acc.concat(\n            keyframesWithPaths({\n              ...con,\n              keyframeIds: [con.left.id, con.right.id],\n            }) ?? [],\n          ),\n        [] as KeyframeWithPathToPropFromCommonRoot[],\n      )\n\n      const commonPath = commonRootOfPathsToProps(\n        kfs.map((kf) => kf.pathToProp),\n      )\n\n      const keyframesWithCommonRootPath = kfs.map(({keyframe, pathToProp}) => ({\n        keyframe,\n        pathToProp: pathToProp.slice(commonPath.length),\n      }))\n\n      const viewModel = props.editorProps.viewModel\n      const address =\n        viewModel.type === 'sheet'\n          ? viewModel.sheet.address\n          : viewModel.sheetObject.address\n\n      return [\n        {\n          type: 'normal',\n          label: 'Copy',\n          callback: () => {\n            if (props.editorProps.selection) {\n              const copyableKeyframes = copyableKeyframesFromSelection(\n                address.projectId,\n                address.sheetId,\n                props.editorProps.selection,\n              )\n              getStudio().transaction((api) => {\n                api.stateEditors.studio.ahistoric.setClipboardKeyframes(\n                  copyableKeyframes,\n                )\n              })\n            } else {\n              getStudio().transaction((api) => {\n                api.stateEditors.studio.ahistoric.setClipboardKeyframes(\n                  keyframesWithCommonRootPath,\n                )\n              })\n            }\n          },\n        },\n        {\n          type: 'normal',\n          label: 'Delete',\n          callback: () => {\n            if (props.editorProps.selection) {\n              props.editorProps.selection.delete()\n            } else {\n              getStudio().transaction(({stateEditors}) => {\n                for (const con of props.utils.allConnections) {\n                  stateEditors.coreByProject.historic.sheetsById.sequence.deleteKeyframes(\n                    {\n                      ...address,\n                      objectKey: con.objectKey,\n                      keyframeIds: [con.left.id, con.right.id],\n                      trackId: con.trackId,\n                    },\n                  )\n                }\n              })\n            }\n          },\n        },\n      ]\n    },\n  })\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregateKeyframeEditor/AggregateKeyframeDot.tsx",
    "content": "import React from 'react'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport usePresence, {\n  PresenceFlag,\n} from '@theatre/studio/uiComponents/usePresence'\nimport useContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/useContextMenu'\nimport type {IAggregateKeyframeEditorProps} from './AggregateKeyframeEditor'\nimport type {IAggregateKeyframeEditorUtils} from './useAggregateKeyframeEditorUtils'\nimport {AggregateKeyframeVisualDot, HitZone} from './AggregateKeyframeVisualDot'\nimport getStudio from '@theatre/studio/getStudio'\nimport {\n  copyableKeyframesFromSelection,\n  keyframesWithPaths,\n} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/selections'\nimport type {KeyframeWithPathToPropFromCommonRoot} from '@theatre/core/types/private'\nimport {commonRootOfPathsToProps} from '@theatre/utils/pathToProp'\nimport DopeSnap from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/DopeSnap'\nimport type {\n  PrimitivePropEditingOptions,\n  PropWithChildrenEditingOptionsTree,\n  SheetObjectEditingOptionsTree,\n} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/useSingleKeyframeInlineEditorPopover'\nimport {useKeyframeInlineEditorPopover} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/useSingleKeyframeInlineEditorPopover'\nimport type {\n  SequenceEditorTree_PrimitiveProp,\n  SequenceEditorTree_PropWithChildren,\n  SequenceEditorTree_SheetObject,\n} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport type {KeyframeWithTrack} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/collectAggregateKeyframes'\n\ntype IAggregateKeyframeDotProps = {\n  editorProps: IAggregateKeyframeEditorProps\n  utils: IAggregateKeyframeEditorUtils\n}\n\nconst isOptionsTreeNodeNotNull = (\n  a: PropWithChildrenEditingOptionsTree | PrimitivePropEditingOptions | null,\n): a is PropWithChildrenEditingOptionsTree | PrimitivePropEditingOptions =>\n  a !== null\n\nfunction sheetObjectBuild(\n  viewModel: SequenceEditorTree_SheetObject,\n  keyframes: KeyframeWithTrack[],\n): SheetObjectEditingOptionsTree | null {\n  const children = viewModel.children\n    .map((a) =>\n      a.type === 'propWithChildren'\n        ? propWithChildrenBuild(a, keyframes)\n        : primitivePropBuild(a, keyframes),\n    )\n    .filter(isOptionsTreeNodeNotNull)\n  if (children.length === 0) return null\n  return {\n    type: 'sheetObject',\n    sheetObject: viewModel.sheetObject,\n    children,\n  }\n}\nfunction propWithChildrenBuild(\n  viewModel: SequenceEditorTree_PropWithChildren,\n  keyframes: KeyframeWithTrack[],\n): PropWithChildrenEditingOptionsTree | null {\n  const children = viewModel.children\n    .map((a) =>\n      a.type === 'propWithChildren'\n        ? propWithChildrenBuild(a, keyframes)\n        : primitivePropBuild(a, keyframes),\n    )\n    .filter(isOptionsTreeNodeNotNull)\n  if (children.length === 0) return null\n  return {\n    type: 'propWithChildren',\n    pathToProp: viewModel.pathToProp,\n    propConfig: viewModel.propConf,\n    children,\n  }\n}\nfunction primitivePropBuild(\n  viewModelLeaf: SequenceEditorTree_PrimitiveProp,\n  keyframes: KeyframeWithTrack[],\n): PrimitivePropEditingOptions | null {\n  const keyframe = keyframes.find((kf) => kf.track.id === viewModelLeaf.trackId)\n  if (!keyframe) return null\n  return {\n    type: 'primitiveProp',\n    keyframe: keyframe.kf,\n    pathToProp: viewModelLeaf.pathToProp,\n    propConfig: viewModelLeaf.propConf,\n    sheetObject: viewModelLeaf.sheetObject,\n    trackId: viewModelLeaf.trackId,\n  }\n}\n\nexport function AggregateKeyframeDot(\n  props: React.PropsWithChildren<IAggregateKeyframeDotProps>,\n) {\n  const {cur} = props.utils\n\n  const inlineEditorPopover = useKeyframeInlineEditorPopover(\n    props.editorProps.viewModel.type === 'sheet'\n      ? null\n      : props.editorProps.viewModel.type === 'sheetObject'\n        ? sheetObjectBuild(props.editorProps.viewModel, cur.keyframes)\n            ?.children ?? null\n        : propWithChildrenBuild(props.editorProps.viewModel, cur.keyframes)\n            ?.children ?? null,\n  )\n\n  const presence = usePresence(props.utils.itemKey)\n  presence.useRelations(\n    () =>\n      cur.keyframes.map((kf) => ({\n        affects: kf.itemKey,\n        flag: PresenceFlag.Primary,\n      })),\n    [\n      // Hmm: Is this a valid fix for the changing size of the useEffect's dependency array?\n      // also: does it work properly with selections?\n      cur.keyframes\n        .map((keyframeWithTrack) => keyframeWithTrack.track.id)\n        .join('-'),\n    ],\n  )\n\n  const [ref, node] = useRefAndState<HTMLDivElement | null>(null)\n\n  const [contextMenu] = useAggregateKeyframeContextMenu(props, node)\n\n  return (\n    <>\n      <HitZone\n        ref={ref}\n        {...presence.attrs}\n        // Need this for the dragging logic to be able to get the keyframe props\n        // based on the position.\n        {...DopeSnap.includePositionSnapAttrs(cur.position)}\n        onClick={(e) =>\n          props.editorProps.viewModel.type !== 'sheet'\n            ? inlineEditorPopover.open(e, ref.current!)\n            : null\n        }\n      />\n      <AggregateKeyframeVisualDot\n        flag={presence.flag}\n        isAllHere={cur.allHere}\n        isSelected={cur.selected}\n      />\n      {contextMenu}\n      {inlineEditorPopover.node}\n    </>\n  )\n}\n\nfunction useAggregateKeyframeContextMenu(\n  props: IAggregateKeyframeDotProps,\n  target: HTMLDivElement | null,\n) {\n  return useContextMenu(target, {\n    displayName: 'Aggregate Keyframe',\n    items: () => {\n      const viewModel = props.editorProps.viewModel\n      const selection = props.editorProps.selection\n\n      return [\n        {\n          type: 'normal',\n          label: selection ? 'Copy (selection)' : 'Copy',\n          callback: () => {\n            // see AGGREGATE_COPY_PASTE.md for explanation of this\n            // code that makes some keyframes with paths for copying\n            // to clipboard\n            if (selection) {\n              const {projectId, sheetId} =\n                viewModel.type === 'sheet'\n                  ? viewModel.sheet.address\n                  : viewModel.sheetObject.address\n              const copyableKeyframes = copyableKeyframesFromSelection(\n                projectId,\n                sheetId,\n                selection,\n              )\n              getStudio().transaction((api) => {\n                api.stateEditors.studio.ahistoric.setClipboardKeyframes(\n                  copyableKeyframes,\n                )\n              })\n            } else {\n              const kfs: KeyframeWithPathToPropFromCommonRoot[] =\n                props.utils.cur.keyframes.flatMap(\n                  (kfWithTrack) =>\n                    keyframesWithPaths({\n                      ...kfWithTrack.track.sheetObject.address,\n                      trackId: kfWithTrack.track.id,\n                      keyframeIds: [kfWithTrack.kf.id],\n                    }) ?? [],\n                )\n\n              const basePathRelativeToSheet =\n                viewModel.type === 'sheet'\n                  ? []\n                  : viewModel.type === 'sheetObject'\n                    ? [viewModel.sheetObject.address.objectKey]\n                    : viewModel.type === 'propWithChildren'\n                      ? [\n                          viewModel.sheetObject.address.objectKey,\n                          ...viewModel.pathToProp,\n                        ]\n                      : [] // should be unreachable unless new viewModel/leaf types are added\n              const commonPath = commonRootOfPathsToProps([\n                basePathRelativeToSheet,\n                ...kfs.map((kf) => kf.pathToProp),\n              ])\n\n              const keyframesWithCommonRootPath = kfs.map(\n                ({keyframe, pathToProp}) => ({\n                  keyframe,\n                  pathToProp: pathToProp.slice(commonPath.length),\n                }),\n              )\n              getStudio().transaction((api) => {\n                api.stateEditors.studio.ahistoric.setClipboardKeyframes(\n                  keyframesWithCommonRootPath,\n                )\n              })\n            }\n          },\n        },\n        {\n          type: 'normal',\n          label: selection ? 'Delete (selection)' : 'Delete',\n          callback: () => {\n            if (selection) {\n              selection.delete()\n            } else {\n              getStudio().transaction(({stateEditors}) => {\n                for (const kfWithTrack of props.utils.cur.keyframes) {\n                  stateEditors.coreByProject.historic.sheetsById.sequence.deleteKeyframes(\n                    {\n                      ...kfWithTrack.track.sheetObject.address,\n                      keyframeIds: [kfWithTrack.kf.id],\n                      trackId: kfWithTrack.track.id,\n                    },\n                  )\n                }\n              })\n            }\n          },\n        },\n      ]\n    },\n  })\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregateKeyframeEditor/AggregateKeyframeEditor.tsx",
    "content": "import type {BasicKeyframe} from '@theatre/core/types/public'\nimport type {\n  DopeSheetSelection,\n  SequenceEditorPanelLayout,\n} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {\n  SequenceEditorTree_PropWithChildren,\n  SequenceEditorTree_Sheet,\n  SequenceEditorTree_SheetObject,\n} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport type {SequenceTrackId} from '@theatre/core/types/public'\nimport type {AggregateKeyframePositionIsSelected} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregatedKeyframeTrack'\nimport type {KeyframeWithTrack} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/collectAggregateKeyframes'\nimport type {SheetObjectAddress} from '@theatre/core/types/public'\nimport {AggregateKeyframeConnector} from './AggregateKeyframeConnector'\nimport {useAggregateKeyframeEditorUtils} from './useAggregateKeyframeEditorUtils'\nimport {AggregateKeyframeDot} from './AggregateKeyframeDot'\n\nconst AggregateKeyframeEditorContainer = styled.div`\n  position: absolute;\n`\n\nexport type IAggregateKeyframesAtPosition = {\n  position: number\n  /** all tracks have a keyframe for this position (otherwise, false means 'partial') */\n  allHere: boolean\n  selected: AggregateKeyframePositionIsSelected | undefined\n  keyframes: KeyframeWithTrack[]\n}\n\nexport type AggregatedKeyframeConnection = SheetObjectAddress & {\n  trackId: SequenceTrackId\n  left: BasicKeyframe\n  right: BasicKeyframe\n}\n\nexport type IAggregateKeyframeEditorProps = {\n  index: number\n  aggregateKeyframes: IAggregateKeyframesAtPosition[]\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  viewModel:\n    | SequenceEditorTree_PropWithChildren\n    | SequenceEditorTree_SheetObject\n    | SequenceEditorTree_Sheet\n  selection: undefined | DopeSheetSelection\n}\n\n/**\n * TODO we're spending a lot of cycles on each render of each aggreagte keyframes.\n *\n * Each keyframe node is doing O(N) operations, N being the number of underlying\n * keyframes it represetns.\n *\n * The biggest example is the `isConnectionEditingInCurvePopover()` call which is run\n * for every underlying keyframe, every time this component is rendered.\n *\n * We can optimize this away by doing all of this work _once_ when a curve editor popover\n * is open. This would require having some kind of stable identity for each aggregate row.\n * Let's defer that work until other interactive keyframe editing PRs are merged in.\n */\nconst AggregateKeyframeEditor: React.VFC<IAggregateKeyframeEditorProps> =\n  React.memo((props) => {\n    const utils = useAggregateKeyframeEditorUtils(props)\n    return (\n      <AggregateKeyframeEditorContainer\n        style={{\n          top: `${props.viewModel.nodeHeight / 2}px`,\n          left: `calc(${val(\n            props.layoutP.scaledSpace.leftPadding,\n          )}px + calc(var(--unitSpaceToScaledSpaceMultiplier) * ${\n            utils.cur.position\n          }px))`,\n        }}\n      >\n        <AggregateKeyframeDot editorProps={props} utils={utils} />\n        <AggregateKeyframeConnector editorProps={props} utils={utils} />\n      </AggregateKeyframeEditorContainer>\n    )\n  })\n\nexport default AggregateKeyframeEditor\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregateKeyframeEditor/AggregateKeyframeVisualDot.tsx",
    "content": "import React from 'react'\nimport {AggregateKeyframePositionIsSelected} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregatedKeyframeTrack'\nimport {PresenceFlag} from '@theatre/studio/uiComponents/usePresence'\nimport styled from 'styled-components'\nimport {absoluteDims} from '@theatre/studio/utils/absoluteDims'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\n\nconst DOT_SIZE_PX = 16\nconst DOT_HOVER_SIZE_PX = DOT_SIZE_PX + 2\n\n/** The keyframe diamond ◆ */\nconst DotContainer = styled.div`\n  position: absolute;\n  ${absoluteDims(DOT_SIZE_PX)}\n  z-index: 1;\n`\n\n// hmm kinda weird to organize like this (exporting `HitZone`). Maybe there's a way to re-use\n// this interpolation of `DotContainer` using something like extended components or something.\nexport const HitZone = styled.div`\n  z-index: 2;\n  cursor: ew-resize;\n\n  position: absolute;\n  ${absoluteDims(12)};\n  ${pointerEventsAutoInNormalMode};\n\n  &:hover\n    + ${DotContainer},\n    #pointer-root.draggingPositionInSequenceEditor\n    &:hover\n    + ${DotContainer} {\n    ${absoluteDims(DOT_HOVER_SIZE_PX)}\n  }\n`\n\nexport function AggregateKeyframeVisualDot(props: {\n  flag: PresenceFlag | undefined\n  isSelected: AggregateKeyframePositionIsSelected | undefined\n  isAllHere: boolean\n}) {\n  const theme: IDotThemeValues = {\n    isSelected: props.isSelected,\n    flag: props.flag,\n  }\n\n  return (\n    <DotContainer>\n      {props.isAllHere ? (\n        <AggregateDotAllHereSvg {...theme} />\n      ) : (\n        <AggregateDotSomeHereSvg {...theme} />\n      )}\n    </DotContainer>\n  )\n}\ntype IDotThemeValues = {\n  isSelected: AggregateKeyframePositionIsSelected | undefined\n  flag: PresenceFlag | undefined\n}\nconst SELECTED_COLOR = '#F2C95C'\nconst DEFAULT_PRIMARY_COLOR = '#40AAA4'\nconst DEFAULT_SECONDARY_COLOR = '#45747C'\nconst selectionColorAll = (theme: IDotThemeValues) =>\n  theme.isSelected === AggregateKeyframePositionIsSelected.AllSelected\n    ? SELECTED_COLOR\n    : theme.isSelected ===\n        AggregateKeyframePositionIsSelected.AtLeastOneUnselected\n      ? DEFAULT_PRIMARY_COLOR\n      : DEFAULT_SECONDARY_COLOR\nconst selectionColorSome = (theme: IDotThemeValues) =>\n  theme.isSelected === AggregateKeyframePositionIsSelected.AllSelected\n    ? SELECTED_COLOR\n    : theme.isSelected ===\n        AggregateKeyframePositionIsSelected.AtLeastOneUnselected\n      ? DEFAULT_PRIMARY_COLOR\n      : DEFAULT_SECONDARY_COLOR\nconst AggregateDotAllHereSvg = (theme: IDotThemeValues) => (\n  <svg\n    width=\"100%\"\n    height=\"100%\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <rect\n      x=\"4.46443\"\n      y=\"10.0078\"\n      width=\"5\"\n      height=\"5\"\n      transform=\"rotate(-45 4.46443 10.0078)\"\n      fill=\"#212327\" // background knockout fill\n      stroke={selectionColorSome(theme)}\n    />\n    <rect\n      x=\"3.75732\"\n      y=\"6.01953\"\n      width=\"6\"\n      height=\"6\"\n      transform=\"rotate(-45 3.75732 6.01953)\"\n      fill={selectionColorAll(theme)}\n      stroke={theme.flag === PresenceFlag.Primary ? 'white' : undefined}\n      strokeWidth={theme.flag === PresenceFlag.Primary ? '2px' : undefined}\n    />\n  </svg>\n)\n// when the aggregate keyframes are sparse across tracks at this position\nconst AggregateDotSomeHereSvg = (theme: IDotThemeValues) => (\n  <svg\n    width=\"100%\"\n    height=\"100%\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <rect\n      x=\"4.46443\"\n      y=\"8\"\n      width=\"5\"\n      height=\"5\"\n      transform=\"rotate(-45 4.46443 8)\"\n      fill=\"#23262B\"\n      stroke={\n        theme.flag === PresenceFlag.Primary ? 'white' : selectionColorAll(theme)\n      }\n      strokeWidth={theme.flag === PresenceFlag.Primary ? '2px' : undefined}\n    />\n  </svg>\n)\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregateKeyframeEditor/iif.tsx",
    "content": "export function iif<F extends () => any>(fn: F): ReturnType<F> {\n  return fn()\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregateKeyframeEditor/useAggregateKeyframeEditorUtils.tsx",
    "content": "import {prism} from '@theatre/dataverse'\nimport {createStudioSheetItemKey} from '@theatre/studio/utils/createStudioSheetItemKey'\nimport {AggregateKeyframePositionIsSelected} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregatedKeyframeTrack'\nimport {isConnectionEditingInCurvePopover} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/CurveEditorPopover'\nimport {usePrism} from '@theatre/react'\nimport {selectedKeyframeConnections} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/selections'\nimport type {\n  IAggregateKeyframeEditorProps,\n  AggregatedKeyframeConnection,\n} from './AggregateKeyframeEditor'\nimport {iif} from './iif'\n\nexport type IAggregateKeyframeEditorUtils = ReturnType<\n  typeof useAggregateKeyframeEditorUtils\n>\n\n// I think this was pulled out for performance\n// 1/10: Not sure this is properly split up\nexport function useAggregateKeyframeEditorUtils(\n  props: Pick<\n    IAggregateKeyframeEditorProps,\n    'index' | 'aggregateKeyframes' | 'selection' | 'viewModel'\n  >,\n) {\n  const {index, aggregateKeyframes, selection} = props\n\n  return usePrism(getAggregateKeyframeEditorUtilsPrismFn(props), [\n    index,\n    aggregateKeyframes,\n    selection,\n    props.viewModel,\n  ])\n}\n\n// I think this was pulled out for performance\n// 1/10: Not sure this is properly split up\nexport function getAggregateKeyframeEditorUtilsPrismFn(\n  props: Pick<\n    IAggregateKeyframeEditorProps,\n    'index' | 'aggregateKeyframes' | 'selection' | 'viewModel'\n  >,\n) {\n  const {index, aggregateKeyframes, selection} = props\n\n  const {projectId, sheetId} =\n    props.viewModel.type === 'sheet'\n      ? props.viewModel.sheet.address\n      : props.viewModel.sheetObject.address\n\n  return () => {\n    const cur = aggregateKeyframes[index]\n    const next = aggregateKeyframes[index + 1]\n\n    const curAndNextAggregateKeyframesMatch =\n      next &&\n      cur.keyframes.length === next.keyframes.length &&\n      cur.keyframes.every(({track}, ind) => next.keyframes[ind].track === track)\n\n    const connected = curAndNextAggregateKeyframesMatch\n      ? {\n          length: next.position - cur.position,\n          selected:\n            cur.selected === AggregateKeyframePositionIsSelected.AllSelected &&\n            next.selected === AggregateKeyframePositionIsSelected.AllSelected,\n        }\n      : null\n\n    const aggregatedConnections: AggregatedKeyframeConnection[] = !connected\n      ? []\n      : cur.keyframes.map(({kf, track}, i) => ({\n          ...track.sheetObject.address,\n          trackId: track.id,\n          left: kf,\n          right: next.keyframes[i].kf,\n        }))\n\n    const allConnections = iif(() => {\n      const selectedConnections = prism\n        .memo(\n          'selectedConnections',\n          () => selectedKeyframeConnections(projectId, sheetId, selection),\n          [projectId, sheetId, selection],\n        )\n        .getValue()\n\n      return [...aggregatedConnections, ...selectedConnections]\n    })\n\n    const isAggregateEditingInCurvePopover = aggregatedConnections.every(\n      (con) => isConnectionEditingInCurvePopover(con),\n    )\n\n    const itemKey = prism.memo(\n      'itemKey',\n      () => {\n        if (props.viewModel.type === 'sheet') {\n          return createStudioSheetItemKey.forSheetAggregateKeyframe(\n            props.viewModel.sheet,\n            cur.position,\n          )\n        } else if (props.viewModel.type === 'sheetObject') {\n          return createStudioSheetItemKey.forSheetObjectAggregateKeyframe(\n            props.viewModel.sheetObject,\n            cur.position,\n          )\n        } else {\n          return createStudioSheetItemKey.forCompoundPropAggregateKeyframe(\n            props.viewModel.sheetObject,\n            props.viewModel.pathToProp,\n            cur.position,\n          )\n        }\n      },\n      [props.viewModel, cur.position],\n    )\n\n    return {\n      itemKey,\n      cur,\n      connected,\n      isAggregateEditingInCurvePopover,\n      allConnections,\n    }\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/AggregatedKeyframeTrack/AggregatedKeyframeTrack.tsx",
    "content": "import type {\n  DopeSheetSelection,\n  SequenceEditorPanelLayout,\n} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {\n  SequenceEditorTree_PropWithChildren,\n  SequenceEditorTree_Sheet,\n  SequenceEditorTree_SheetObject,\n} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport {usePrism, useVal} from '@theatre/react'\nimport type {Prism, Pointer} from '@theatre/dataverse'\nimport {prism, val, pointerToPrism} from '@theatre/dataverse'\nimport React, {useMemo, Fragment} from 'react'\nimport styled from 'styled-components'\nimport useContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/useContextMenu'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport type {\n  IAggregateKeyframesAtPosition,\n  IAggregateKeyframeEditorProps,\n} from './AggregateKeyframeEditor/AggregateKeyframeEditor'\nimport AggregateKeyframeEditor from './AggregateKeyframeEditor/AggregateKeyframeEditor'\nimport type {\n  AggregatedKeyframes,\n  KeyframeWithTrack,\n} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/collectAggregateKeyframes'\nimport {collectAggregateSnapPositionsObjectOrCompound} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/collectAggregateKeyframes'\nimport {useLogger} from '@theatre/studio/uiComponents/useLogger'\nimport {getAggregateKeyframeEditorUtilsPrismFn} from './AggregateKeyframeEditor/useAggregateKeyframeEditorUtils'\nimport DopeSnap from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/DopeSnap'\nimport type {DragOpts} from '@theatre/studio/uiComponents/useDrag'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport {useLockFrameStampPositionRef} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\nimport {useCssCursorLock} from '@theatre/studio/uiComponents/PointerEventsHandler'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {SheetObjectAddress} from '@theatre/core/types/public'\nimport {\n  decodePathToProp,\n  encodePathToProp,\n  doesPathStartWith,\n} from '@theatre/utils/pathToProp'\nimport type {\n  ObjectAddressKey,\n  SequenceTrackId,\n} from '@theatre/core/types/public'\nimport type Sequence from '@theatre/core/sequences/Sequence'\nimport KeyframeSnapTarget, {\n  snapPositionsStateD,\n} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/KeyframeSnapTarget'\nimport {emptyObject} from '@theatre/utils'\nimport type {KeyframeWithPathToPropFromCommonRoot} from '@theatre/core/types/private'\nimport {\n  collectKeyframeSnapPositions,\n  snapToNone,\n  snapToSome,\n} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/KeyframeSnapTarget'\nimport {collectAggregateSnapPositionsSheet} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/collectAggregateKeyframes'\nimport type {BasicKeyframe} from '@theatre/core/types/public'\nimport type {ContextMenuItem} from '@theatre/studio/uiComponents/chordial/chordialInternals'\n\nconst AggregatedKeyframeTrackContainer = styled.div`\n  position: relative;\n  height: 100%;\n  width: 100%;\n`\n\ntype IAggregatedKeyframeTracksProps = {\n  viewModel:\n    | SequenceEditorTree_PropWithChildren\n    | SequenceEditorTree_SheetObject\n    | SequenceEditorTree_Sheet\n  aggregatedKeyframes: AggregatedKeyframes\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}\n\ntype _AggSelection = {\n  selectedPositions: Map<number, AggregateKeyframePositionIsSelected>\n  selection: DopeSheetSelection | undefined\n}\n\nconst EMPTY_SELECTION: _AggSelection = Object.freeze({\n  selectedPositions: new Map(),\n  selection: undefined,\n})\n\nfunction AggregatedKeyframeTrack_memo(props: IAggregatedKeyframeTracksProps) {\n  const {layoutP, aggregatedKeyframes, viewModel} = props\n  const logger = useLogger('AggregatedKeyframeTrack')\n  const [containerRef, containerNode] = useRefAndState<HTMLDivElement | null>(\n    null,\n  )\n\n  const {selectedPositions, selection} = useCollectedSelectedPositions(\n    layoutP,\n    aggregatedKeyframes,\n  )\n\n  const [contextMenu, _, isOpen] = useAggregatedKeyframeTrackContextMenu(\n    containerNode,\n    props,\n    () => logger._debug('see aggregatedKeyframes', props.aggregatedKeyframes),\n  )\n\n  const posKfs: IAggregateKeyframesAtPosition[] = useMemo(\n    () =>\n      [...aggregatedKeyframes.byPosition.entries()]\n        .sort((a, b) => a[0] - b[0])\n        .map(\n          ([position, keyframes]): IAggregateKeyframesAtPosition => ({\n            position,\n            keyframes,\n            selected: selectedPositions.get(position),\n            allHere: keyframes.length === aggregatedKeyframes.tracks.length,\n          }),\n        ),\n    [aggregatedKeyframes, selectedPositions],\n  )\n\n  const snapPositionsState = useVal(snapPositionsStateD)\n\n  const snapToAllKeyframes = snapPositionsState.mode === 'snapToAll'\n\n  const snapPositions =\n    snapPositionsState.mode === 'snapToSome'\n      ? snapPositionsState.positions\n      : emptyObject\n\n  const aggregateSnapPositions = useMemo(\n    () =>\n      viewModel.type === 'sheet'\n        ? collectAggregateSnapPositionsSheet(viewModel, snapPositions)\n        : collectAggregateSnapPositionsObjectOrCompound(\n            viewModel,\n            snapPositions,\n          ),\n    [snapPositions],\n  )\n\n  const snapTargets = aggregateSnapPositions.map((position) => (\n    <KeyframeSnapTarget\n      key={'snap-target-' + position}\n      layoutP={layoutP}\n      leaf={viewModel}\n      position={position}\n    />\n  ))\n\n  const keyframeEditorProps = useMemo(\n    () =>\n      posKfs.map(\n        (\n          {position, keyframes},\n          index,\n        ): {editorProps: IAggregateKeyframeEditorProps; position: number} => ({\n          position,\n          editorProps: {\n            index,\n            layoutP,\n            viewModel,\n            aggregateKeyframes: posKfs,\n            selection: selectedPositions.has(position) ? selection : undefined,\n          },\n        }),\n      ),\n    [posKfs, viewModel, selectedPositions],\n  )\n\n  const [isDragging] = useDragForAggregateKeyframeDot(\n    containerNode,\n    (position) => {\n      return keyframeEditorProps.find(\n        (editorProp) => editorProp.position === position,\n      )?.editorProps\n    },\n    {\n      onClickFromDrag(dragStartEvent) {\n        // TODO Aggregate inline keyframe editor\n        // openEditor(dragStartEvent, ref.current!)\n      },\n    },\n  )\n\n  const keyframeEditors = keyframeEditorProps.map((props, i) => (\n    <Fragment key={'agg-' + posKfs[i].keyframes[0].kf.id}>\n      {snapToAllKeyframes && (\n        <KeyframeSnapTarget\n          layoutP={layoutP}\n          leaf={viewModel}\n          position={props.position}\n        />\n      )}\n      <AggregateKeyframeEditor {...props.editorProps} />\n    </Fragment>\n  ))\n\n  return (\n    <AggregatedKeyframeTrackContainer\n      ref={containerRef}\n      style={{\n        background: isOpen ? '#444850 ' : 'unset',\n      }}\n    >\n      {keyframeEditors}\n      {snapTargets}\n      {contextMenu}\n    </AggregatedKeyframeTrackContainer>\n  )\n}\n\nconst AggregatedKeyframeTrack = React.memo(AggregatedKeyframeTrack_memo)\nexport default AggregatedKeyframeTrack\n\nexport enum AggregateKeyframePositionIsSelected {\n  AllSelected,\n  AtLeastOneUnselected,\n  NoneSelected,\n}\n\nconst {AllSelected, AtLeastOneUnselected, NoneSelected} =\n  AggregateKeyframePositionIsSelected\n\n/** Helper to put together the selected positions */\nfunction useCollectedSelectedPositions(\n  layoutP: Pointer<SequenceEditorPanelLayout>,\n  aggregatedKeyframes: AggregatedKeyframes,\n): _AggSelection {\n  return usePrism(\n    () => val(collectedSelectedPositions(layoutP, aggregatedKeyframes)),\n    [layoutP, aggregatedKeyframes],\n  )\n}\n\nfunction collectedSelectedPositions(\n  layoutP: Pointer<SequenceEditorPanelLayout>,\n  aggregatedKeyframes: AggregatedKeyframes,\n): Prism<_AggSelection> {\n  return prism(() => {\n    const selectionAtom = val(layoutP.selectionAtom)\n    const selection = val(selectionAtom.pointer.current)\n    if (!selection) return EMPTY_SELECTION\n\n    const selectedAtPositions = new Map<\n      number,\n      AggregateKeyframePositionIsSelected\n    >()\n\n    for (const [position, kfsWithTrack] of aggregatedKeyframes.byPosition) {\n      const positionIsSelected = allOrSomeOrNoneSelected(\n        kfsWithTrack,\n        selection,\n      )\n      if (\n        positionIsSelected !== undefined &&\n        positionIsSelected !== NoneSelected\n      ) {\n        selectedAtPositions.set(position, positionIsSelected)\n      }\n    }\n\n    return {\n      selectedPositions: selectedAtPositions,\n      selection: val(selectionAtom.pointer.current),\n    }\n  })\n}\n\nfunction allOrSomeOrNoneSelected(\n  keyframeWithTracks: KeyframeWithTrack[],\n  selection: DopeSheetSelection,\n): AggregateKeyframePositionIsSelected | undefined {\n  let positionIsSelected: undefined | AggregateKeyframePositionIsSelected =\n    undefined\n\n  for (const {track, kf} of keyframeWithTracks) {\n    const kfIsSelected =\n      selection.byObjectKey[track.sheetObject.address.objectKey]?.byTrackId[\n        track.id\n      ]?.byKeyframeId?.[kf.id] === true\n    if (positionIsSelected === undefined) {\n      if (kfIsSelected) {\n        positionIsSelected = AllSelected\n      } else {\n        positionIsSelected = NoneSelected\n      }\n    } else if (kfIsSelected) {\n      if (positionIsSelected === NoneSelected) {\n        positionIsSelected = AtLeastOneUnselected\n      }\n    } else {\n      if (positionIsSelected === AllSelected) {\n        positionIsSelected = AtLeastOneUnselected\n      }\n    }\n  }\n  return positionIsSelected\n}\n\nfunction useAggregatedKeyframeTrackContextMenu(\n  node: HTMLDivElement | null,\n  props: IAggregatedKeyframeTracksProps,\n  debugOnOpen: () => void,\n) {\n  return useContextMenu(node, {\n    onOpen: debugOnOpen,\n    displayName: 'Aggregate Keyframe Track',\n    items: () => {\n      const selectionKeyframes =\n        pointerToPrism(\n          getStudio()!.atomP.ahistoric.clipboard.keyframesWithRelativePaths,\n        ).getValue() ?? []\n\n      return [pasteKeyframesContextMenuItem(props, selectionKeyframes)]\n    },\n  })\n}\n\nfunction pasteKeyframesContextMenuItem(\n  props: IAggregatedKeyframeTracksProps,\n  keyframes: KeyframeWithPathToPropFromCommonRoot[],\n): ContextMenuItem {\n  return {\n    type: 'normal',\n    label: 'Paste Keyframes',\n    enabled: keyframes.length > 0,\n    callback: () => {\n      const sheet = val(props.layoutP.sheet)\n      const sequence = sheet.getSequence()\n\n      if (props.viewModel.type === 'sheet') {\n        pasteKeyframesSheet(props.viewModel, keyframes, sequence)\n      } else {\n        pasteKeyframesObjectOrCompound(props.viewModel, keyframes, sequence)\n      }\n    },\n  }\n}\n\n/**\n * Given a list of keyframes that contain paths relative to a common root,\n * (see `copyableKeyframesFromSelection`) this function pastes those keyframes\n * into tracks on either the object (if viewModel.type === 'sheetObject') or\n * the compound prop (if viewModel.type === 'propWithChildren').\n *\n * Our copy & paste behavior is currently roughly described in AGGREGATE_COPY_PASTE.md\n *\n * @see StudioAhistoricState.clipboard\n * @see setClipboardNestedKeyframes\n */\nfunction pasteKeyframesSheet(\n  viewModel: SequenceEditorTree_Sheet,\n  keyframes: KeyframeWithPathToPropFromCommonRoot[],\n  sequence: Sequence,\n) {\n  const {projectId, sheetId, sheetInstanceId} = viewModel.sheet.address\n\n  const areKeyframesAllOnSingleTrack = keyframes.every(\n    ({pathToProp}) => pathToProp.length === 0,\n  )\n\n  if (areKeyframesAllOnSingleTrack) {\n    for (const object of viewModel.children.map((child) => child.sheetObject)) {\n      const tracksByObject = pointerToPrism(\n        getStudio().atomP.historic.coreByProject[projectId].sheetsById[sheetId]\n          .sequence.tracksByObject[object.address.objectKey],\n      ).getValue()\n\n      const trackIdsOnObject = Object.keys(tracksByObject?.trackData ?? {})\n\n      pasteKeyframesToMultipleTracks(\n        object.address,\n        trackIdsOnObject,\n        keyframes,\n        sequence,\n      )\n    }\n  } else {\n    const tracksByObject = pointerToPrism(\n      getStudio().atomP.historic.coreByProject[projectId].sheetsById[sheetId]\n        .sequence.tracksByObject,\n    ).getValue()\n\n    const placeableKeyframes = keyframes\n      .map(({keyframe, pathToProp}) => {\n        const objectKey = pathToProp[0] as ObjectAddressKey\n        const relativePathToProp = pathToProp.slice(1)\n        const pathToPropEncoded = encodePathToProp([...relativePathToProp])\n\n        const trackIdByPropPath =\n          tracksByObject?.[objectKey]?.trackIdByPropPath ?? {}\n\n        const maybeTrackId = trackIdByPropPath[pathToPropEncoded]\n\n        return maybeTrackId\n          ? {\n              keyframe,\n              trackId: maybeTrackId,\n              address: {\n                objectKey,\n                projectId,\n                sheetId,\n                sheetInstanceId,\n              },\n            }\n          : null\n      })\n      .filter((result) => result !== null) as {\n      keyframe: BasicKeyframe\n      trackId: SequenceTrackId\n      address: SheetObjectAddress\n    }[]\n\n    pasteKeyframesToSpecificTracks(placeableKeyframes, sequence)\n  }\n}\n\nfunction pasteKeyframesObjectOrCompound(\n  viewModel:\n    | SequenceEditorTree_PropWithChildren\n    | SequenceEditorTree_SheetObject,\n  keyframes: KeyframeWithPathToPropFromCommonRoot[],\n  sequence: Sequence,\n) {\n  const {projectId, sheetId, objectKey} = viewModel.sheetObject.address\n\n  const trackRecords = pointerToPrism(\n    getStudio().atomP.historic.coreByProject[projectId].sheetsById[sheetId]\n      .sequence.tracksByObject[objectKey],\n  ).getValue()\n\n  const areKeyframesAllOnSingleTrack = keyframes.every(\n    ({pathToProp}) => pathToProp.length === 0,\n  )\n\n  if (areKeyframesAllOnSingleTrack) {\n    const trackIdsOnObject = Object.keys(trackRecords?.trackData ?? {})\n\n    if (viewModel.type === 'sheetObject') {\n      pasteKeyframesToMultipleTracks(\n        viewModel.sheetObject.address,\n        trackIdsOnObject,\n        keyframes,\n        sequence,\n      )\n    } else {\n      const trackIdByPropPath = trackRecords?.trackIdByPropPath || {}\n\n      const trackIdsOnCompoundProp = Object.entries(trackIdByPropPath)\n        .filter(\n          ([encodedPath, trackId]) =>\n            trackId !== undefined &&\n            doesPathStartWith(\n              // e.g. a track with path `['position', 'x']` is under the compound track with path `['position']`\n              decodePathToProp(encodedPath),\n              viewModel.pathToProp,\n            ),\n        )\n        .map(([encodedPath, trackId]) => trackId) as SequenceTrackId[]\n\n      pasteKeyframesToMultipleTracks(\n        viewModel.sheetObject.address,\n        trackIdsOnCompoundProp,\n        keyframes,\n        sequence,\n      )\n    }\n  } else {\n    const trackIdByPropPath = trackRecords?.trackIdByPropPath || {}\n\n    const rootPath =\n      viewModel.type === 'propWithChildren' ? viewModel.pathToProp : []\n\n    const placeableKeyframes = keyframes\n      .map(({keyframe, pathToProp: relativePathToProp}) => {\n        const pathToPropEncoded = encodePathToProp([\n          ...rootPath,\n          ...relativePathToProp,\n        ])\n\n        const maybeTrackId = trackIdByPropPath[pathToPropEncoded]\n\n        return maybeTrackId\n          ? {\n              keyframe,\n              trackId: maybeTrackId,\n              address: viewModel.sheetObject.address,\n            }\n          : null\n      })\n      .filter((result) => result !== null) as {\n      keyframe: BasicKeyframe\n      trackId: SequenceTrackId\n      address: SheetObjectAddress\n    }[]\n\n    pasteKeyframesToSpecificTracks(placeableKeyframes, sequence)\n  }\n}\n\nfunction pasteKeyframesToMultipleTracks(\n  address: SheetObjectAddress,\n  trackIds: SequenceTrackId[],\n  keyframes: KeyframeWithPathToPropFromCommonRoot[],\n  sequence: Sequence,\n) {\n  sequence.position = sequence.closestGridPosition(sequence.position)\n  const keyframeOffset = earliestKeyframe(\n    keyframes.map(({keyframe}) => keyframe),\n  )?.position!\n\n  getStudio()!.transaction(({stateEditors}) => {\n    for (const trackId of trackIds) {\n      for (const {keyframe} of keyframes) {\n        stateEditors.coreByProject.historic.sheetsById.sequence.setKeyframeAtPosition(\n          {\n            ...address,\n            trackId,\n            position: sequence.position + keyframe.position - keyframeOffset,\n            handles: keyframe.handles,\n            value: keyframe.value,\n            snappingFunction: sequence.closestGridPosition,\n            type: keyframe.type,\n          },\n        )\n      }\n    }\n  })\n}\n\nfunction pasteKeyframesToSpecificTracks(\n  keyframesWithTracksToPlaceThemIn: {\n    keyframe: BasicKeyframe\n    trackId: SequenceTrackId\n    address: SheetObjectAddress\n  }[],\n  sequence: Sequence,\n) {\n  sequence.position = sequence.closestGridPosition(sequence.position)\n  const keyframeOffset = earliestKeyframe(\n    keyframesWithTracksToPlaceThemIn.map(({keyframe}) => keyframe),\n  )?.position!\n\n  getStudio()!.transaction(({stateEditors}) => {\n    for (const {\n      keyframe,\n      trackId,\n      address,\n    } of keyframesWithTracksToPlaceThemIn) {\n      stateEditors.coreByProject.historic.sheetsById.sequence.setKeyframeAtPosition(\n        {\n          ...address,\n          trackId,\n          position: sequence.position + keyframe.position - keyframeOffset,\n          handles: keyframe.handles,\n          value: keyframe.value,\n          snappingFunction: sequence.closestGridPosition,\n          type: keyframe.type,\n        },\n      )\n    }\n  })\n}\n\nfunction earliestKeyframe(keyframes: BasicKeyframe[]) {\n  let curEarliest: BasicKeyframe | null = null\n  for (const keyframe of keyframes) {\n    if (curEarliest === null || keyframe.position < curEarliest.position) {\n      curEarliest = keyframe\n    }\n  }\n  return curEarliest\n}\n\nfunction useDragForAggregateKeyframeDot(\n  containerNode: HTMLDivElement | null,\n  getPropsForPosition: (\n    position: number,\n  ) => IAggregateKeyframeEditorProps | undefined,\n  options: {\n    /**\n     * hmm: this is a hack so we can actually receive the\n     * {@link MouseEvent} from the drag event handler and use\n     * it for positioning the popup.\n     */\n    onClickFromDrag(dragStartEvent: MouseEvent): void\n  },\n): [isDragging: boolean] {\n  const logger = useLogger('useDragForAggregateKeyframeDot')\n  const frameStampLock = useLockFrameStampPositionRef()\n  const useDragOpts = useMemo<DragOpts>(() => {\n    return {\n      debugName: 'AggregateKeyframeDot/useDragKeyframe',\n      onDragStart(event) {\n        logger._debug('onDragStart', {target: event.target})\n        const positionToFind = Number((event.target as HTMLElement).dataset.pos)\n        const props = getPropsForPosition(positionToFind)\n        if (!props) {\n          logger._debug('no props found for ', {positionToFind})\n          return false\n        }\n\n        frameStampLock(true, positionToFind)\n        const keyframes = prism(\n          getAggregateKeyframeEditorUtilsPrismFn(props),\n        ).getValue().cur.keyframes\n\n        const address =\n          props.viewModel.type === 'sheet'\n            ? props.viewModel.sheet.address\n            : props.viewModel.sheetObject.address\n\n        const tracksByObject = val(\n          getStudio()!.atomP.historic.coreByProject[address.projectId]\n            .sheetsById[address.sheetId].sequence.tracksByObject,\n        )!\n\n        // Calculate all the valid snap positions in the sequence editor,\n        // excluding the child keyframes of this aggregate, and any selection it is part of.\n        const snapPositions = collectKeyframeSnapPositions(\n          tracksByObject,\n          function shouldIncludeKeyfram(keyframe, {trackId, objectKey}) {\n            return (\n              // we exclude all the child keyframes of this aggregate keyframe from being a snap target\n              keyframes.every(\n                (kfWithTrack) => keyframe.id !== kfWithTrack.kf.id,\n              ) &&\n              !(\n                // if all of the children of the current aggregate keyframe are in a selection,\n                (\n                  props.selection &&\n                  // then we exclude them and all other keyframes in the selection from being snap targets\n                  props.selection.byObjectKey[objectKey]?.byTrackId[trackId]\n                    ?.byKeyframeId[keyframe.id]\n                )\n              )\n            )\n          },\n        )\n\n        snapToSome(snapPositions)\n\n        if (\n          props.selection &&\n          props.aggregateKeyframes[props.index].selected ===\n            AggregateKeyframePositionIsSelected.AllSelected\n        ) {\n          const {selection, viewModel} = props\n          const handlers = selection\n            .getDragHandlers({\n              ...address,\n              domNode: containerNode!,\n              positionAtStartOfDrag: keyframes[0].kf.position,\n            })\n            .onDragStart(event)\n\n          return (\n            handlers && {\n              ...handlers,\n              onClick: options.onClickFromDrag,\n              onDragEnd: (...args) => {\n                handlers.onDragEnd?.(...args)\n                snapToNone()\n              },\n            }\n          )\n        }\n\n        const propsAtStartOfDrag = props\n        const toUnitSpace = val(\n          propsAtStartOfDrag.layoutP.scaledSpace.toUnitSpace,\n        )\n\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n        return {\n          onDrag(dx, dy, event) {\n            const newPosition = Math.max(\n              // check if our event hovers over a [data-pos] element\n              DopeSnap.checkIfMouseEventSnapToPos(event, {\n                // ignore: node,\n              }) ??\n                // if we don't find snapping target, check the distance dragged + original position\n                keyframes[0].kf.position + toUnitSpace(dx),\n              // sanitize to minimum of zero\n              0,\n            )\n\n            frameStampLock(true, newPosition)\n\n            tempTransaction?.discard()\n            tempTransaction = undefined\n            tempTransaction = getStudio().tempTransaction(({stateEditors}) => {\n              for (const keyframe of keyframes) {\n                const original = keyframe.kf\n                stateEditors.coreByProject.historic.sheetsById.sequence.replaceKeyframes(\n                  {\n                    ...keyframe.track.sheetObject.address,\n                    trackId: keyframe.track.id,\n                    keyframes: [{...original, position: newPosition}],\n                    snappingFunction: val(\n                      propsAtStartOfDrag.layoutP.sheet,\n                    ).getSequence().closestGridPosition,\n                  },\n                )\n              }\n            })\n          },\n          onDragEnd(dragHappened) {\n            frameStampLock(false, -1)\n            if (dragHappened) {\n              tempTransaction?.commit()\n            } else {\n              tempTransaction?.discard()\n              options.onClickFromDrag(event)\n            }\n\n            snapToNone()\n          },\n          onClick(ev) {\n            options.onClickFromDrag(ev)\n          },\n        }\n      },\n    }\n  }, [getPropsForPosition, options.onClickFromDrag])\n\n  const [isDragging] = useDrag(containerNode, useDragOpts)\n\n  useCssCursorLock(isDragging, 'draggingPositionInSequenceEditor', 'ew-resize')\n\n  return [isDragging]\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/BasicKeyframedTrack.tsx",
    "content": "import type {TrackData} from '@theatre/core/types/private/core'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {SequenceEditorTree_PrimitiveProp} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport {usePrism, useVal} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React, {useMemo} from 'react'\nimport styled from 'styled-components'\nimport SingleKeyframeEditor from './KeyframeEditor/SingleKeyframeEditor'\nimport useContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/useContextMenu'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport getStudio from '@theatre/studio/getStudio'\nimport {arePathsEqual} from '@theatre/utils/pathToProp'\nimport type {KeyframeWithPathToPropFromCommonRoot} from '@theatre/core/types/private'\nimport KeyframeSnapTarget, {\n  snapPositionsStateD,\n} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/KeyframeSnapTarget'\nimport {createStudioSheetItemKey} from '@theatre/studio/utils/createStudioSheetItemKey'\nimport type {BasicKeyframe} from '@theatre/core'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\nimport type {ContextMenuItem} from '@theatre/studio/uiComponents/chordial/chordialInternals'\n\nconst Container = styled.div`\n  position: relative;\n  height: 100%;\n  width: 100%;\n`\n\ntype BasicKeyframedTracksProps = {\n  leaf: SequenceEditorTree_PrimitiveProp\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  trackData: TrackData\n}\n\nconst BasicKeyframedTrack: React.VFC<BasicKeyframedTracksProps> = React.memo(\n  (props) => {\n    const {layoutP, trackData, leaf} = props\n    const [containerRef, containerNode] = useRefAndState<HTMLDivElement | null>(\n      null,\n    )\n    const {selectedKeyframeIds, selection} = usePrism(() => {\n      const selectionAtom = val(layoutP.selectionAtom)\n      const selectedKeyframeIds = val(\n        selectionAtom.pointer.current.byObjectKey[\n          leaf.sheetObject.address.objectKey\n        ].byTrackId[leaf.trackId].byKeyframeId,\n      )\n      if (selectedKeyframeIds) {\n        return {\n          selectedKeyframeIds,\n          selection: val(selectionAtom.pointer.current),\n        }\n      } else {\n        return {\n          selectedKeyframeIds: {},\n          selection: undefined,\n        }\n      }\n    }, [layoutP, leaf.trackId])\n\n    const [contextMenu, _, isOpen] = useBasicKeyframedTrackContextMenu(\n      containerNode,\n      props,\n    )\n\n    const snapPositionsState = useVal(snapPositionsStateD)\n\n    const snapPositions =\n      snapPositionsState.mode === 'snapToSome'\n        ? snapPositionsState.positions[leaf.sheetObject.address.objectKey]?.[\n            leaf.trackId\n          ]\n        : [] ?? []\n\n    const snapToAllKeyframes = snapPositionsState.mode === 'snapToAll'\n\n    const track = useMemo(\n      () => ({\n        data: trackData,\n        id: leaf.trackId,\n        sheetObject: props.leaf.sheetObject,\n      }),\n      [trackData, leaf.trackId],\n    )\n\n    const sortedKeyframes = keyframeUtils.getSortedKeyframesCached(\n      trackData.keyframes,\n    )\n    const keyframeEditors = sortedKeyframes.map((kf, index) => (\n      <SingleKeyframeEditor\n        key={'keyframe-' + kf.id}\n        itemKey={createStudioSheetItemKey.forTrackKeyframe(\n          leaf.sheetObject,\n          leaf.trackId,\n          kf.id,\n        )}\n        keyframe={kf}\n        index={index}\n        track={track}\n        layoutP={layoutP}\n        leaf={leaf}\n        selection={selectedKeyframeIds[kf.id] === true ? selection : undefined}\n      />\n    ))\n\n    const snapTargets = snapPositions.map((position) => (\n      <KeyframeSnapTarget\n        key={'snap-target-' + position}\n        layoutP={layoutP}\n        leaf={leaf}\n        position={position}\n      />\n    ))\n\n    const additionalSnapTargets = !snapToAllKeyframes\n      ? null\n      : sortedKeyframes.map((kf) => (\n          <KeyframeSnapTarget\n            key={`additionalSnapTarget-${kf.id}`}\n            layoutP={layoutP}\n            leaf={leaf}\n            position={kf.position}\n          />\n        ))\n\n    return (\n      <Container\n        ref={containerRef}\n        style={{\n          background: isOpen ? '#444850 ' : 'unset',\n        }}\n      >\n        {keyframeEditors}\n        {snapTargets}\n        <>{additionalSnapTargets}</>\n        {contextMenu}\n      </Container>\n    )\n  },\n)\n\nBasicKeyframedTrack.displayName = `BasicKeyframedTrack`\n\nexport default BasicKeyframedTrack\n\nfunction useBasicKeyframedTrackContextMenu(\n  node: HTMLDivElement | null,\n  props: BasicKeyframedTracksProps,\n) {\n  return useContextMenu(node, {\n    displayName: 'Keyframe Track',\n    items: () => {\n      const selectionKeyframes =\n        val(\n          getStudio()!.atomP.ahistoric.clipboard.keyframesWithRelativePaths,\n        ) ?? []\n\n      return [pasteKeyframesContextMenuItem(props, selectionKeyframes)]\n    },\n  })\n}\n\nfunction pasteKeyframesContextMenuItem(\n  props: BasicKeyframedTracksProps,\n  keyframes: KeyframeWithPathToPropFromCommonRoot[],\n): ContextMenuItem {\n  return {\n    type: 'normal',\n    label: 'Paste Keyframes',\n    enabled: keyframes.length > 0,\n    callback: () => {\n      const sheet = val(props.layoutP.sheet)\n      const sequence = sheet.getSequence()\n\n      const firstPath = keyframes[0]?.pathToProp\n      const singleTrackKeyframes = keyframes\n        .filter(({keyframe, pathToProp}) =>\n          arePathsEqual(firstPath, pathToProp),\n        )\n        .map(({keyframe, pathToProp}) => keyframe)\n\n      getStudio()!.transaction(({stateEditors}) => {\n        sequence.position = sequence.closestGridPosition(sequence.position)\n        const keyframeOffset = earliestKeyframe(singleTrackKeyframes)?.position!\n\n        for (const keyframe of singleTrackKeyframes) {\n          stateEditors.coreByProject.historic.sheetsById.sequence.setKeyframeAtPosition(\n            {\n              ...props.leaf.sheetObject.address,\n              trackId: props.leaf.trackId,\n              position: sequence.position + keyframe.position - keyframeOffset,\n              handles: keyframe.handles,\n              value: keyframe.value,\n              snappingFunction: sequence.closestGridPosition,\n              type: keyframe.type,\n            },\n          )\n        }\n      })\n    },\n  }\n}\n\nfunction earliestKeyframe(keyframes: BasicKeyframe[]) {\n  let curEarliest: BasicKeyframe | null = null\n  for (const keyframe of keyframes) {\n    if (curEarliest === null || keyframe.position < curEarliest.position) {\n      curEarliest = keyframe\n    }\n  }\n  return curEarliest\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/BasicKeyframeConnector.tsx",
    "content": "import getStudio from '@theatre/studio/getStudio'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport useContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/useContextMenu'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport {useMemo, useRef} from 'react'\nimport usePopover from '@theatre/studio/uiComponents/Popover/usePopover'\nimport BasicPopover from '@theatre/studio/uiComponents/Popover/BasicPopover'\nimport CurveEditorPopover, {\n  isConnectionEditingInCurvePopover,\n} from './CurveEditorPopover/CurveEditorPopover'\nimport type {ISingleKeyframeEditorProps} from './SingleKeyframeEditor'\nimport type {IConnectorThemeValues} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/keyframeRowUI/ConnectorLine'\nimport {ConnectorLine} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/keyframeRowUI/ConnectorLine'\nimport {COLOR_POPOVER_BACK} from './CurveEditorPopover/colors'\nimport {usePrism} from '@theatre/react'\nimport type {KeyframeConnectionWithAddress} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/selections'\nimport {copyableKeyframesFromSelection} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/selections'\nimport {selectedKeyframeConnections} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/selections'\n\nimport styled from 'styled-components'\nimport type {BasicKeyframe} from '@theatre/core'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nconst POPOVER_MARGIN = 5\n\nconst EasingPopover = styled(BasicPopover)`\n  --popover-outer-stroke: transparent;\n  --popover-inner-stroke: ${COLOR_POPOVER_BACK};\n  border-radius: 2px;\n  padding: 0;\n`\n\ntype IBasicKeyframeConnectorProps = ISingleKeyframeEditorProps\n\nconst BasicKeyframeConnector: React.VFC<IBasicKeyframeConnectorProps> = (\n  props,\n) => {\n  const {index, track} = props\n  const cur = keyframeUtils.getSortedKeyframesCached(track.data.keyframes)[\n    index\n  ]\n  const next = keyframeUtils.getSortedKeyframesCached(track.data.keyframes)[\n    index + 1\n  ]\n\n  const [nodeRef, node] = useRefAndState<HTMLDivElement | null>(null)\n\n  const {\n    node: popoverNode,\n    toggle: togglePopover,\n    close: closePopover,\n  } = usePopover(\n    () => {\n      const rightDims = val(props.layoutP.rightDims)\n      return {\n        debugName: 'Connector',\n        constraints: {\n          minX: rightDims.screenX + POPOVER_MARGIN,\n          maxX: rightDims.screenX + rightDims.width - POPOVER_MARGIN,\n        },\n      }\n    },\n    () => <SingleCurveEditorPopover {...props} closePopover={closePopover} />,\n  )\n\n  const [contextMenu] = useConnectorContextMenu(props, node, cur, next)\n  useDragKeyframe(node, props)\n\n  const connectorLengthInUnitSpace = next.position - cur.position\n\n  const isInCurveEditorPopoverSelection = usePrism(\n    () =>\n      isConnectionEditingInCurvePopover({\n        ...props.leaf.sheetObject.address,\n        trackId: props.leaf.trackId,\n        left: cur,\n        right: next,\n      }),\n    [props.leaf.sheetObject.address, props.leaf.trackId, cur, next],\n  )\n\n  const themeValues: IConnectorThemeValues = {\n    isPopoverOpen: isInCurveEditorPopoverSelection,\n    isSelected: props.selection !== undefined,\n  }\n\n  return (\n    <>\n      <ConnectorLine\n        ref={nodeRef}\n        connectorLengthInUnitSpace={connectorLengthInUnitSpace}\n        {...themeValues}\n        openPopover={(e) => {\n          if (node) togglePopover(e, node)\n        }}\n      >\n        {popoverNode}\n      </ConnectorLine>\n      {/* contextMenu is placed outside of the ConnectorLine so that clicking on\n      the contextMenu does not count as clicking on the ConnectorLine */}\n      {contextMenu}\n    </>\n  )\n}\nexport default BasicKeyframeConnector\n\nconst SingleCurveEditorPopover: React.FC<\n  IBasicKeyframeConnectorProps & {closePopover: (reason: string) => void}\n> = React.forwardRef((props, ref) => {\n  const {\n    index,\n    track: {data: trackData},\n    selection,\n  } = props\n  const cur = keyframeUtils.getSortedKeyframesCached(trackData.keyframes)[index]\n  const next = keyframeUtils.getSortedKeyframesCached(trackData.keyframes)[\n    index + 1\n  ]\n\n  const trackId = props.leaf.trackId\n  const address = props.leaf.sheetObject.address\n\n  const selectedConnections = usePrism(\n    () =>\n      selectedKeyframeConnections(\n        address.projectId,\n        address.sheetId,\n        selection,\n      ).getValue(),\n    [address, selection],\n  )\n\n  const curveConnection: KeyframeConnectionWithAddress = {\n    left: cur,\n    right: next,\n    trackId,\n    ...address,\n  }\n\n  return (\n    <EasingPopover\n      showPopoverEdgeTriangle={false}\n      // @ts-ignore @todo\n      ref={ref}\n    >\n      <CurveEditorPopover\n        curveConnection={curveConnection}\n        additionalConnections={selectedConnections}\n        onRequestClose={props.closePopover}\n      />\n    </EasingPopover>\n  )\n})\n\nfunction useDragKeyframe(\n  node: HTMLDivElement | null,\n  props: IBasicKeyframeConnectorProps,\n) {\n  const propsRef = useRef(props)\n  propsRef.current = props\n\n  const gestureHandlers = useMemo<Parameters<typeof useDrag>[1]>(() => {\n    return {\n      debugName: 'useDragKeyframe',\n      lockCSSCursorTo: 'ew-resize',\n      onDragStart(event) {\n        const props = propsRef.current\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n        if (props.selection) {\n          const {selection, leaf} = props\n          const {sheetObject} = leaf\n          return selection\n            .getDragHandlers({\n              ...sheetObject.address,\n              domNode: node!,\n              positionAtStartOfDrag: keyframeUtils.getSortedKeyframesCached(\n                props.track.data.keyframes,\n              )[props.index].position,\n            })\n            .onDragStart(event)\n        }\n\n        const propsAtStartOfDrag = props\n        const sequence = val(propsAtStartOfDrag.layoutP.sheet).getSequence()\n\n        const toUnitSpace = val(\n          propsAtStartOfDrag.layoutP.scaledSpace.toUnitSpace,\n        )\n\n        return {\n          onDrag(dx, dy, event) {\n            const delta = toUnitSpace(dx)\n            if (tempTransaction) {\n              tempTransaction.discard()\n              tempTransaction = undefined\n            }\n            tempTransaction = getStudio()!.tempTransaction(({stateEditors}) => {\n              stateEditors.coreByProject.historic.sheetsById.sequence.transformKeyframes(\n                {\n                  ...propsAtStartOfDrag.leaf.sheetObject.address,\n                  trackId: propsAtStartOfDrag.leaf.trackId,\n                  keyframeIds: [\n                    propsAtStartOfDrag.keyframe.id,\n                    keyframeUtils.getSortedKeyframesCached(\n                      propsAtStartOfDrag.track.data.keyframes,\n                    )[propsAtStartOfDrag.index + 1].id,\n                  ],\n                  translate: delta,\n                  scale: 1,\n                  origin: 0,\n                  snappingFunction: sequence.closestGridPosition,\n                },\n              )\n            })\n          },\n          onDragEnd(dragHappened) {\n            if (dragHappened) {\n              if (tempTransaction) {\n                tempTransaction.commit()\n              }\n            } else {\n              if (tempTransaction) {\n                tempTransaction.discard()\n              }\n            }\n          },\n        }\n      },\n    }\n  }, [])\n\n  useDrag(node, gestureHandlers)\n}\n\nfunction useConnectorContextMenu(\n  props: IBasicKeyframeConnectorProps,\n  node: HTMLDivElement | null,\n  cur: BasicKeyframe,\n  next: BasicKeyframe,\n) {\n  // TODO?: props.selection is undefined if only one of the connected keyframes is selected\n\n  return useContextMenu(node, {\n    displayName: 'Tween',\n    items: () => {\n      const copyableKeyframes = copyableKeyframesFromSelection(\n        props.leaf.sheetObject.address.projectId,\n        props.leaf.sheetObject.address.sheetId,\n        props.selection,\n      )\n\n      return [\n        {\n          type: 'normal',\n          label: copyableKeyframes.length > 0 ? 'Copy (selection)' : 'Copy',\n          callback: () => {\n            if (copyableKeyframes.length > 0) {\n              getStudio().transaction((api) => {\n                api.stateEditors.studio.ahistoric.setClipboardKeyframes(\n                  copyableKeyframes,\n                )\n              })\n            } else {\n              getStudio().transaction((api) => {\n                api.stateEditors.studio.ahistoric.setClipboardKeyframes([\n                  {keyframe: cur, pathToProp: props.leaf.pathToProp},\n                  {keyframe: next, pathToProp: props.leaf.pathToProp},\n                ])\n              })\n            }\n          },\n        },\n        {\n          type: 'normal',\n          label: props.selection ? 'Delete (selection)' : 'Delete',\n          callback: () => {\n            if (props.selection) {\n              props.selection.delete()\n            } else {\n              getStudio().transaction(({stateEditors}) => {\n                stateEditors.coreByProject.historic.sheetsById.sequence.deleteKeyframes(\n                  {\n                    ...props.leaf.sheetObject.address,\n                    keyframeIds: [cur.id, next.id],\n                    trackId: props.leaf.trackId,\n                  },\n                )\n              })\n            }\n          },\n        },\n      ]\n    },\n  })\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/CurveEditorPopover.tsx",
    "content": "import {Atom, prism} from '@theatre/dataverse'\nimport type {KeyboardEvent} from 'react'\nimport React, {\n  useEffect,\n  useLayoutEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport styled from 'styled-components'\nimport fuzzy from 'fuzzy'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport CurveSegmentEditor from './CurveSegmentEditor'\nimport EasingOption from './EasingOption'\nimport type {CSSCubicBezierArgsString, CubicBezierHandles} from './shared'\nimport {\n  cssCubicBezierArgsFromHandles,\n  handlesFromCssCubicBezierArgs,\n  EASING_PRESETS,\n  areEasingsSimilar,\n} from './shared'\nimport {COLOR_BASE, COLOR_POPOVER_BACK} from './colors'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {useUIOptionGrid, Outcome} from './useUIOptionGrid'\nimport type {KeyframeConnectionWithAddress} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/selections'\nimport type {BasicKeyframe} from '@theatre/core/types/public'\n\nconst PRESET_COLUMNS = 3\nconst PRESET_SIZE = 53\n\nconst APPROX_TOOLTIP_HEIGHT = 25\n\nconst Grid = styled.div`\n  background: ${COLOR_POPOVER_BACK};\n  display: grid;\n  grid-template-areas:\n    'search  tween'\n    'presets tween';\n  grid-template-rows: 32px 1fr;\n  grid-template-columns: ${PRESET_COLUMNS * PRESET_SIZE}px 120px;\n  gap: 1px;\n  height: 120px;\n`\n\nconst OptionsContainer = styled.div`\n  overflow: auto;\n  grid-area: presets;\n\n  display: grid;\n  grid-template-columns: repeat(${PRESET_COLUMNS}, 1fr);\n  grid-auto-rows: min-content;\n  gap: 1px;\n\n  overflow-y: scroll;\n  scrollbar-width: none; /* Firefox */\n  -ms-overflow-style: none; /* Internet Explorer 10+ */\n  &::-webkit-scrollbar {\n    /* WebKit */\n    width: 0;\n    height: 0;\n  }\n`\n\nconst SearchBox = styled.input.attrs({type: 'text'})`\n  background-color: ${COLOR_BASE};\n  border: none;\n  border-radius: 2px;\n  color: rgba(255, 255, 255, 0.8);\n  padding: 6px;\n  font-size: 12px;\n  outline: none;\n  cursor: text;\n  text-align: left;\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n\n  grid-area: search;\n\n  &:hover {\n    background-color: #212121;\n  }\n\n  &:focus {\n    background-color: rgba(16, 16, 16, 0.26);\n    outline: 1px solid rgba(0, 0, 0, 0.35);\n  }\n`\n\nconst CurveEditorContainer = styled.div`\n  grid-area: tween;\n  background: ${COLOR_BASE};\n`\n\nconst NoResultsFoundContainer = styled.div`\n  grid-column: 1 / 4;\n  padding: 6px;\n  color: #888888;\n`\n/**\n * Tracking for what kinds of events are allowed to change the input's value.\n */\nenum TextInputMode {\n  /**\n   * Initial mode, don't try to override the value.\n   */\n  init,\n  /**\n   * In `user` mode, the text input field does not update when the curve\n   * changes so that the user's search is preserved.\n   */\n  user,\n  /**\n   * In `auto` mode, the text input field is continually updated to\n   * a CSS cubic bezier args string to reflect the state of the curve.\n   */\n  auto,\n  multipleValues,\n}\n\ntype ICurveEditorPopoverProps = {\n  /**\n   * Called when user hits enter/escape\n   */\n  onRequestClose: (reason: string) => void\n\n  curveConnection: KeyframeConnectionWithAddress\n  additionalConnections: Array<KeyframeConnectionWithAddress>\n}\n\nconst CurveEditorPopover: React.FC<ICurveEditorPopoverProps> = (props) => {\n  const allConnections = useMemo(\n    () => [props.curveConnection, ...props.additionalConnections],\n    [props.curveConnection, ...props.additionalConnections],\n  )\n\n  ////// `tempTransaction` //////\n  /*\n   * `tempTransaction` is used for all edits in this popover. The transaction\n   * is discared if the user presses escape, otherwise it is committed when the\n   * popover closes.\n   */\n  const tempTransaction = useRef<CommitOrDiscardOrRecapture | null>(null)\n  useEffect(() => {\n    const unlock = getLock(allConnections)\n    // Clean-up function, called when this React component unmounts.\n    // When it unmounts, we want to commit edits that are outstanding\n    return () => {\n      unlock()\n      tempTransaction.current?.commit()\n    }\n  }, [tempTransaction])\n\n  ////// Keyframe and trackdata //////\n  const easing: CubicBezierHandles = [\n    props.curveConnection.left.handles[2],\n    props.curveConnection.left.handles[3],\n    props.curveConnection.right.handles[0],\n    props.curveConnection.right.handles[1],\n  ]\n\n  ////// Text input data and reactivity //////\n  const inputRef = useRef<HTMLInputElement>(null)\n\n  // Select the easing string on popover open for quick copy&paste\n  useLayoutEffect(() => {\n    inputRef.current?.select()\n    inputRef.current?.focus()\n  }, [inputRef.current])\n\n  const [inputValue, setInputValue] = useState<string>(\n    cssCubicBezierArgsFromHandles(easing),\n  )\n\n  const onInputChange = (e?: React.ChangeEvent<HTMLInputElement>) => {\n    if (e === undefined) return\n    setTextInputMode(TextInputMode.user)\n    setInputValue(e.target.value)\n\n    const maybeHandles = handlesFromCssCubicBezierArgs(e.target.value)\n    if (maybeHandles) setEdit(e.target.value)\n  }\n  const onSearchKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n    setTextInputMode(TextInputMode.user)\n    // Prevent scrolling on arrow key press\n    if (e.key === 'ArrowDown' || e.key === 'ArrowUp') e.preventDefault()\n\n    if (e.key === 'ArrowDown') {\n      grid.focusFirstItem()\n      optionsRef.current[displayedPresets[0].label]?.current?.focus()\n    } else if (e.key === 'Escape') {\n      discardTempValue(tempTransaction)\n      props.onRequestClose('key Escape')\n    } else if (e.key === 'Enter') {\n      props.onRequestClose('key Enter')\n    }\n  }\n\n  const [textInputMode, setTextInputMode] = useState<TextInputMode>(\n    TextInputMode.init,\n  )\n  useEffect(() => {\n    if (textInputMode === TextInputMode.auto) {\n      setInputValue(cssCubicBezierArgsFromHandles(easing))\n    } else if (textInputMode === TextInputMode.multipleValues) {\n      if (inputValue !== '') setInputValue('')\n    }\n  }, allConnections)\n\n  // `edit` keeps track of the current edited state of the curve.\n  const [edit, setEdit] = useState<CSSCubicBezierArgsString | null>(\n    cssCubicBezierArgsFromHandles(easing),\n  )\n  // `preview` is used when hovering over a curve to preview it.\n  const [preview, setPreview] = useState<CSSCubicBezierArgsString | null>(null)\n\n  // When `preview` or `edit` change, use the `tempTransaction` to change the\n  // curve in Theate's data.\n  useEffect(() => {\n    if (\n      textInputMode !== TextInputMode.init &&\n      textInputMode !== TextInputMode.multipleValues\n    )\n      setTempValue(tempTransaction, allConnections, preview ?? edit ?? '')\n  }, [preview, edit, textInputMode])\n\n  ////// selection stuff //////\n  if (\n    allConnections.some(\n      areConnectedKeyframesTheSameAs(props.curveConnection),\n    ) &&\n    textInputMode === TextInputMode.init\n  ) {\n    setTextInputMode(TextInputMode.multipleValues)\n  }\n\n  //////  Curve editing reactivity //////\n  const onCurveChange = (newHandles: CubicBezierHandles) => {\n    setTextInputMode(TextInputMode.auto)\n    const value = cssCubicBezierArgsFromHandles(newHandles)\n    setInputValue(value)\n    setEdit(value)\n\n    // ensure that the text input is selected when curve is changing.\n    inputRef.current?.select()\n    inputRef.current?.focus()\n  }\n  const onCancelCurveChange = () => {}\n\n  ////// Preset reactivity //////\n  const displayedPresets = useMemo(() => {\n    const isInputValueAQuery = /^[A-Za-z]/.test(inputValue)\n\n    if (isInputValueAQuery) {\n      return fuzzy\n        .filter(inputValue, EASING_PRESETS, {\n          extract: (el) => el.label,\n        })\n        .map((result) => result.original)\n    } else {\n      return EASING_PRESETS\n    }\n  }, [inputValue])\n\n  // Use the first preset in the search when the displayed presets change\n  useEffect(() => {\n    if (textInputMode === TextInputMode.user && displayedPresets[0])\n      setEdit(displayedPresets[0].value)\n  }, [displayedPresets])\n\n  ////// Option grid specification and reactivity //////\n  const onEasingOptionKeydown = (e: KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === 'Escape') {\n      discardTempValue(tempTransaction)\n      props.onRequestClose('key Escape')\n      e.stopPropagation()\n    } else if (e.key === 'Enter') {\n      props.onRequestClose('key Enter')\n      e.stopPropagation()\n    }\n  }\n  const onEasingOptionMouseOver = (item: {label: string; value: string}) => {\n    // Set the `textInputMode` to `auto` if it was `init` before\n    // to enable the easing previews\n    if (textInputMode === TextInputMode.init)\n      setTextInputMode(TextInputMode.auto)\n    setPreview(item.value)\n  }\n  const onEasingOptionMouseOut = () => setPreview(null)\n  const onSelectEasingOption = (item: {label: string; value: string}) => {\n    setTempValue(tempTransaction, allConnections, item.value)\n    props.onRequestClose('selected easing option')\n\n    return Outcome.Handled\n  }\n\n  // A map to store all html elements corresponding to easing options\n  const optionsRef = useRef(\n    EASING_PRESETS.reduce(\n      (acc, curr) => {\n        acc[curr.label] = {current: null}\n\n        return acc\n      },\n      {} as {[key: string]: {current: HTMLDivElement | null}},\n    ),\n  )\n\n  const [optionsContainerRef, optionsContainer] =\n    useRefAndState<HTMLDivElement | null>(null)\n  // Keep track of option container scroll position\n  const [optionsScrollPosition, setOptionsScrollPosition] = useState(0)\n  useEffect(() => {\n    const listener = () => {\n      setOptionsScrollPosition(optionsContainer?.scrollTop ?? 0)\n    }\n    optionsContainer?.addEventListener('scroll', listener)\n    return () => optionsContainer?.removeEventListener('scroll', listener)\n  }, [optionsContainer])\n\n  const grid = useUIOptionGrid({\n    items: displayedPresets,\n    uiColumns: 3,\n    onSelectItem: onSelectEasingOption,\n    canVerticleExit(exitSide) {\n      if (exitSide === 'top') {\n        inputRef.current?.select()\n        inputRef.current?.focus()\n        return Outcome.Handled\n      }\n      return Outcome.Passthrough\n    },\n    renderItem: ({item: preset, select}) => (\n      <EasingOption\n        key={preset.label}\n        easing={preset}\n        tabIndex={0}\n        onKeyDown={onEasingOptionKeydown}\n        ref={optionsRef.current[preset.label]}\n        onMouseOver={() => onEasingOptionMouseOver(preset)}\n        onMouseOut={onEasingOptionMouseOut}\n        onClick={select}\n        tooltipPlacement={\n          (optionsRef.current[preset.label].current?.offsetTop ?? 0) -\n            (optionsScrollPosition ?? 0) <\n          PRESET_SIZE + APPROX_TOOLTIP_HEIGHT\n            ? 'bottom'\n            : 'top'\n        }\n        isSelected={areEasingsSimilar(\n          easing,\n          handlesFromCssCubicBezierArgs(preset.value),\n        )}\n      />\n    ),\n  })\n\n  // When the user navigates highlight between presets, focus the preset el and set the\n  // easing data to match the highlighted preset\n  useLayoutEffect(() => {\n    if (\n      grid.currentSelection !== null &&\n      document.activeElement !== inputRef.current // prevents taking focus away from input\n    ) {\n      const maybePresetEl =\n        optionsRef.current?.[grid.currentSelection.label]?.current\n      maybePresetEl?.focus()\n      setEdit(grid.currentSelection.value)\n      const isInputValueAQuery = /^[A-Za-z]/.test(inputValue)\n      if (!isInputValueAQuery) {\n        setInputValue(grid.currentSelection.value)\n      }\n    }\n  }, [grid.currentSelection])\n\n  return (\n    <Grid>\n      <SearchBox\n        value={inputValue}\n        placeholder={\n          textInputMode === TextInputMode.multipleValues\n            ? 'Multiple easings selected'\n            : 'Search presets...'\n        }\n        onPaste={setTimeoutFunction(onInputChange)}\n        onChange={onInputChange}\n        ref={inputRef}\n        onKeyDown={onSearchKeyDown}\n      />\n      <OptionsContainer\n        ref={optionsContainerRef}\n        onKeyDown={(evt) => grid.onParentEltKeyDown(evt)}\n      >\n        {grid.gridItems}\n        {grid.gridItems.length === 0 ? (\n          <NoResultsFoundContainer>No results found</NoResultsFoundContainer>\n        ) : undefined}\n      </OptionsContainer>\n      <CurveEditorContainer onClick={() => inputRef.current?.focus()}>\n        <CurveSegmentEditor\n          curveConnection={props.curveConnection}\n          backgroundConnections={props.additionalConnections}\n          onCurveChange={onCurveChange}\n          onCancelCurveChange={onCancelCurveChange}\n        />\n      </CurveEditorContainer>\n    </Grid>\n  )\n}\n\nexport default CurveEditorPopover\n\nfunction setTempValue(\n  tempTransaction: React.MutableRefObject<CommitOrDiscardOrRecapture | null>,\n  keyframeConnections: Array<KeyframeConnectionWithAddress>,\n  newCurveCssCubicBezier: string,\n): void {\n  tempTransaction.current?.discard()\n  tempTransaction.current = null\n\n  const handles = handlesFromCssCubicBezierArgs(newCurveCssCubicBezier)\n  if (handles === null) {\n    tempTransaction.current = transactionSetHold(keyframeConnections)\n  } else {\n    tempTransaction.current = transactionSetCubicBezier(\n      keyframeConnections,\n      handles,\n    )\n  }\n}\n\nfunction discardTempValue(\n  tempTransaction: React.MutableRefObject<CommitOrDiscardOrRecapture | null>,\n): void {\n  tempTransaction.current?.discard()\n  tempTransaction.current = null\n}\n\nfunction transactionSetCubicBezier(\n  keyframeConnections: Array<KeyframeConnectionWithAddress>,\n  handles: CubicBezierHandles,\n): CommitOrDiscardOrRecapture {\n  return getStudio().tempTransaction(({stateEditors}) => {\n    const {setHandlesForKeyframe, setKeyframeType: setKeyframeType} =\n      stateEditors.coreByProject.historic.sheetsById.sequence\n\n    for (const {\n      projectId,\n      sheetId,\n      objectKey,\n      trackId,\n      left,\n      right,\n    } of keyframeConnections) {\n      setHandlesForKeyframe({\n        projectId,\n        sheetId,\n        objectKey,\n        trackId,\n        keyframeId: left.id,\n        start: [handles[0], handles[1]],\n      })\n      setHandlesForKeyframe({\n        projectId,\n        sheetId,\n        objectKey,\n        trackId,\n        keyframeId: right.id,\n        end: [handles[2], handles[3]],\n      })\n      setKeyframeType({\n        projectId,\n        sheetId,\n        objectKey,\n        trackId,\n        keyframeId: left.id,\n        keyframeType: 'bezier',\n      })\n    }\n  })\n}\n\nfunction transactionSetHold(\n  keyframeConnections: Array<KeyframeConnectionWithAddress>,\n): CommitOrDiscardOrRecapture {\n  return getStudio().tempTransaction(({stateEditors}) => {\n    const {setKeyframeType: setKeyframeType} =\n      stateEditors.coreByProject.historic.sheetsById.sequence\n\n    for (const {\n      projectId,\n      sheetId,\n      objectKey,\n      trackId,\n      left,\n    } of keyframeConnections) {\n      setKeyframeType({\n        projectId,\n        sheetId,\n        objectKey,\n        trackId,\n        keyframeId: left.id,\n        keyframeType: 'hold',\n      })\n    }\n  })\n}\n\n/**\n * n mod m without negative results e.g. `mod(-1,5) = 4` contrasted with `-1 % 5 = -1`.\n *\n * ref: https://web.archive.org/web/20090717035140if_/javascript.about.com/od/problemsolving/a/modulobug.htm\n */\nexport function mod(n: number, m: number) {\n  return ((n % m) + m) % m\n}\n\nfunction setTimeoutFunction(f: Function, timeout?: number) {\n  return () => setTimeout(f, timeout)\n}\n\nfunction areConnectedKeyframesTheSameAs({\n  left: left1,\n  right: right1,\n}: {\n  left: BasicKeyframe\n  right: BasicKeyframe\n}) {\n  return ({\n    left: left2,\n    right: right2,\n  }: {\n    left: BasicKeyframe\n    right: BasicKeyframe\n  }) =>\n    left1.handles[2] !== left2.handles[2] ||\n    left1.handles[3] !== left2.handles[3] ||\n    right1.handles[0] !== right2.handles[0] ||\n    right1.handles[1] !== right2.handles[1]\n}\n\nconst {isCurveEditorOpenD, isConnectionEditingInCurvePopover, getLock} =\n  (() => {\n    const connectionsInCurvePopoverEdit = new Atom<\n      Array<KeyframeConnectionWithAddress>\n    >([])\n\n    return {\n      getLock(connections: Array<KeyframeConnectionWithAddress>) {\n        connectionsInCurvePopoverEdit.set(connections)\n\n        return function unlock() {\n          connectionsInCurvePopoverEdit.set([])\n        }\n      },\n      isCurveEditorOpenD: prism(() => {\n        return connectionsInCurvePopoverEdit.prism.getValue().length > 0\n      }),\n      // must be run in a prism\n      isConnectionEditingInCurvePopover(con: KeyframeConnectionWithAddress) {\n        prism.ensurePrism()\n        return connectionsInCurvePopoverEdit.prism\n          .getValue()\n          .some(\n            ({left, right}) =>\n              con.left.id === left.id && con.right.id === right.id,\n          )\n      },\n    }\n  })()\n\nexport {isCurveEditorOpenD, isConnectionEditingInCurvePopover}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/CurveSegmentEditor.tsx",
    "content": "import React from 'react'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport clamp from 'lodash-es/clamp'\nimport styled from 'styled-components'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport type {CubicBezierHandles} from './shared'\nimport {useFreezableMemo} from './useFreezableMemo'\nimport {COLOR_BASE} from './colors'\nimport type {KeyframeConnectionWithAddress} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/selections'\n\n// Defines the dimensions of the SVG viewbox space\nconst VIEWBOX_PADDING = 0.12\nconst VIEWBOX_SIZE = 1 + VIEWBOX_PADDING * 2\n\nconst PATTERN_DOT_SIZE = 0.01\nconst PATTERN_DOT_COUNT = 8\nconst PATTERN_GRID_SIZE = (1 - PATTERN_DOT_SIZE) / (PATTERN_DOT_COUNT - 1)\n\n// The curve supports a gradient but currently is solid cyan\nconst CURVE_START_OVERSHOOT_COLOR = '#3EAAA4'\nconst CURVE_START_COLOR = '#3EAAA4'\nconst CURVE_MID_START_COLOR = '#3EAAA4'\nconst CURVE_MID_COLOR = '#3EAAA4'\nconst CURVE_MID_END_COLOR = '#3EAAA4'\nconst CURVE_END_COLOR = '#3EAAA4'\nconst CURVE_END_OVERSHOOT_COLOR = '#3EAAA4'\n\nconst CONTROL_COLOR = '#B3B3B3'\nconst HANDLE_COLOR = '#3eaaa4'\nconst HANDLE_HOVER_COLOR = '#67dfd8'\n\nconst BACKGROUND_CURVE_COLORS = [\n  'goldenrod',\n  'cornflowerblue',\n  'dodgerblue',\n  'lawngreen',\n]\n\nconst Circle = styled.circle`\n  stroke-width: 0.1px;\n  vector-effect: non-scaling-stroke;\n  r: 0.04px;\n  pointer-events: none;\n  transition: r 0.15s;\n  fill: ${HANDLE_COLOR};\n`\n\nconst HitZone = styled.circle`\n  stroke-width: 0.1px;\n  vector-effect: non-scaling-stroke;\n  r: 0.09px;\n  cursor: move;\n  ${pointerEventsAutoInNormalMode};\n  &:hover {\n    opacity: 0.4;\n  }\n  &:hover + ${Circle} {\n    fill: ${HANDLE_HOVER_COLOR};\n  }\n`\n\ntype ICurveSegmentEditorProps = {\n  onCurveChange: (newHandles: CubicBezierHandles) => void\n  onCancelCurveChange: () => void\n  curveConnection: KeyframeConnectionWithAddress\n  backgroundConnections: Array<KeyframeConnectionWithAddress>\n}\n\nconst CurveSegmentEditor: React.VFC<ICurveSegmentEditorProps> = (props) => {\n  const {\n    curveConnection: {left, right},\n    backgroundConnections,\n  } = props\n  // Calculations towards keeping the handles in the viewbox. The extremum space\n  // of this editor vertically scales to keep the handles in the viewbox of the\n  // SVG. This produces a nice \"stretching space\" effect while you are dragging\n  // the handles.\n  // Demo: https://user-images.githubusercontent.com/11082236/164542544-f1f66de2-f62e-44dd-b4cb-05b5f6e73a52.mp4\n  const minY = Math.min(0, 1 - right.handles[1], 1 - left.handles[3])\n  const maxY = Math.max(1, 1 - right.handles[1], 1 - left.handles[3])\n  const h = Math.max(1, maxY - minY)\n\n  const toExtremumSpace = (y: number) => (y - minY) / h\n\n  const [refSVG, nodeSVG] = useRefAndState<SVGSVGElement | null>(null)\n\n  const viewboxToElWidthRatio = VIEWBOX_SIZE / (nodeSVG?.clientWidth || 1)\n  const viewboxToElHeightRatio = VIEWBOX_SIZE / (nodeSVG?.clientHeight || 1)\n\n  const [refLeft, nodeLeft] = useRefAndState<SVGCircleElement | null>(null)\n  useKeyframeDrag(nodeSVG, nodeLeft, props, (dx, dy) => {\n    // TODO - document this\n    const handleX = clamp(left.handles[2] + dx * viewboxToElWidthRatio, 0, 1)\n    const handleY = left.handles[3] - dy * viewboxToElHeightRatio\n    return [handleX, handleY, right.handles[0], right.handles[1]]\n  })\n\n  const [refRight, nodeRight] = useRefAndState<SVGCircleElement | null>(null)\n  useKeyframeDrag(nodeSVG, nodeRight, props, (dx, dy) => {\n    // TODO - document this\n    const handleX = clamp(right.handles[0] + dx * viewboxToElWidthRatio, 0, 1)\n    const handleY = right.handles[1] - dy * viewboxToElHeightRatio\n    return [left.handles[2], left.handles[3], handleX, handleY]\n  })\n\n  const curvePathDAttrValue = (connection: KeyframeConnectionWithAddress) =>\n    `M0 ${toExtremumSpace(1)} C${connection.left.handles[2]} ${toExtremumSpace(\n      1 - connection.left.handles[3],\n    )} ${connection.right.handles[0]} ${toExtremumSpace(\n      1 - connection.right.handles[1],\n    )} 1 ${toExtremumSpace(0)}`\n\n  const holdPointsAttrValue = `0,100 100,100 100,0`\n\n  return (\n    <svg\n      height=\"100%\"\n      width=\"100%\"\n      ref={refSVG}\n      viewBox={`${-VIEWBOX_PADDING} ${-VIEWBOX_PADDING} ${VIEWBOX_SIZE} ${VIEWBOX_SIZE}`}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      preserveAspectRatio=\"none\"\n      fill=\"none\"\n    >\n      <linearGradient id=\"myGradient\" gradientTransform=\"rotate(90)\">\n        <stop\n          offset={toExtremumSpace(-1)}\n          stopColor={CURVE_END_OVERSHOOT_COLOR}\n        />\n        <stop offset={toExtremumSpace(0)} stopColor={CURVE_END_COLOR} />\n        <stop offset={toExtremumSpace(0.3)} stopColor={CURVE_MID_END_COLOR} />\n        <stop offset={toExtremumSpace(0.5)} stopColor={CURVE_MID_COLOR} />\n        <stop offset={toExtremumSpace(0.7)} stopColor={CURVE_MID_START_COLOR} />\n        <stop offset={toExtremumSpace(1)} stopColor={CURVE_START_COLOR} />\n        <stop\n          offset={toExtremumSpace(2)}\n          stopColor={CURVE_START_OVERSHOOT_COLOR}\n        />\n      </linearGradient>\n\n      {/* Unit space, opaque white dot pattern */}\n      <pattern\n        id=\"dot-background-pattern-1\"\n        width={PATTERN_GRID_SIZE}\n        height={PATTERN_GRID_SIZE / h}\n        y={-minY / h}\n      >\n        <rect\n          width={PATTERN_DOT_SIZE}\n          height={PATTERN_DOT_SIZE}\n          fill={CONTROL_COLOR}\n          opacity={0.3}\n        ></rect>\n      </pattern>\n      <rect\n        x={0}\n        y={0}\n        width=\"1\"\n        height={1}\n        fill=\"url(#dot-background-pattern-1)\"\n      />\n      {/* Fills the whole vertical extremum space, gray dot pattern */}\n      <pattern\n        id=\"dot-background-pattern-2\"\n        width={PATTERN_GRID_SIZE}\n        height={PATTERN_GRID_SIZE}\n      >\n        <rect\n          width={PATTERN_DOT_SIZE}\n          height={PATTERN_DOT_SIZE}\n          fill={CONTROL_COLOR}\n        ></rect>\n      </pattern>\n      <rect\n        x={0}\n        y={toExtremumSpace(0)}\n        width=\"1\"\n        height={toExtremumSpace(1) - toExtremumSpace(0)}\n        fill=\"url(#dot-background-pattern-2)\"\n      />\n\n      {!left.type || left.type === 'bezier' ? (\n        <>\n          {/* Line from right end of curve to right handle */}\n          <line\n            x1={0}\n            y1={toExtremumSpace(1)}\n            x2={left.handles[2]}\n            y2={toExtremumSpace(1 - left.handles[3])}\n            stroke={CONTROL_COLOR}\n            strokeWidth=\"0.01\"\n          />\n          {/* Line from left end of curve to left handle */}\n          <line\n            x1={1}\n            y1={toExtremumSpace(0)}\n            x2={right.handles[0]}\n            y2={toExtremumSpace(1 - right.handles[1])}\n            stroke={CONTROL_COLOR}\n            strokeWidth=\"0.01\"\n          />\n          {/* Curve \"shadow\": the low-opacity filled area between the curve and the diagonal */}\n          <path\n            d={curvePathDAttrValue(props.curveConnection)}\n            stroke=\"none\"\n            fill=\"url('#myGradient')\"\n            opacity=\"0.1\"\n          />\n          {/* The background curves (e.g. multiple different values) */}\n          {backgroundConnections.map((connection, i) => (\n            <path\n              key={connection.objectKey + '/' + connection.left.id}\n              d={curvePathDAttrValue(connection)}\n              stroke={\n                BACKGROUND_CURVE_COLORS[i % BACKGROUND_CURVE_COLORS.length]\n              }\n              opacity={0.6}\n              strokeWidth=\"0.01\"\n            />\n          ))}\n          {/* The curve */}\n          <path\n            d={curvePathDAttrValue(props.curveConnection)}\n            stroke=\"url('#myGradient')\"\n            strokeWidth=\"0.02\"\n          />\n          {/* Right end of curve */}\n          <circle\n            cx={0}\n            cy={toExtremumSpace(1)}\n            r=\"0.025\"\n            stroke={CURVE_START_COLOR}\n            strokeWidth=\"0.02\"\n            fill={COLOR_BASE}\n          />\n          {/* Left end of curve */}\n          <circle\n            cx={1}\n            cy={toExtremumSpace(0)}\n            r=\"0.025\"\n            stroke={CURVE_END_COLOR}\n            strokeWidth=\"0.02\"\n            fill={COLOR_BASE}\n          />\n\n          {/* Right handle and hit zone */}\n          <HitZone\n            ref={refLeft}\n            cx={left.handles[2]}\n            cy={toExtremumSpace(1 - left.handles[3])}\n            fill={CURVE_START_COLOR}\n            opacity={0.2}\n          />\n          <Circle\n            cx={left.handles[2]}\n            cy={toExtremumSpace(1 - left.handles[3])}\n          />\n          {/* Left handle and hit zone */}\n          <HitZone\n            ref={refRight}\n            cx={right.handles[0]}\n            cy={toExtremumSpace(1 - right.handles[1])}\n            fill={CURVE_END_COLOR}\n            opacity={0.2}\n          />\n          <Circle\n            cx={right.handles[0]}\n            cy={toExtremumSpace(1 - right.handles[1])}\n          />\n        </>\n      ) : (\n        <>\n          <line\n            x1={0}\n            y1={toExtremumSpace(1)}\n            x2={1}\n            y2={toExtremumSpace(1)}\n            stroke={CONTROL_COLOR}\n            strokeWidth=\"0.01\"\n          />\n          <line\n            x1={1}\n            y1={toExtremumSpace(1)}\n            x2={1}\n            y2={0}\n            stroke={CONTROL_COLOR}\n            strokeWidth=\"0.01\"\n          />\n          <circle\n            cx={0}\n            cy={1}\n            r=\"0.025\"\n            stroke={CURVE_END_COLOR}\n            strokeWidth=\"0.02\"\n            fill={COLOR_BASE}\n          />\n          <circle\n            cx={1}\n            cy={0}\n            r=\"0.025\"\n            stroke={CURVE_END_COLOR}\n            strokeWidth=\"0.02\"\n            fill={COLOR_BASE}\n          />\n        </>\n      )}\n    </svg>\n  )\n}\nexport default CurveSegmentEditor\n\nfunction useKeyframeDrag(\n  svgNode: SVGSVGElement | null,\n  node: SVGCircleElement | null,\n  props: ICurveSegmentEditorProps,\n  setHandles: (dx: number, dy: number) => CubicBezierHandles,\n): void {\n  const handlers = useFreezableMemo<Parameters<typeof useDrag>[1]>(\n    (setFrozen) => ({\n      debugName: 'CurveSegmentEditor/useKeyframeDrag',\n      lockCSSCursorTo: 'move',\n      onDragStart() {\n        setFrozen(true)\n        return {\n          onDrag(dx, dy) {\n            if (!svgNode) return\n\n            props.onCurveChange(setHandles(dx, dy))\n          },\n          onDragEnd(dragHappened) {\n            setFrozen(false)\n            props.onCancelCurveChange()\n          },\n        }\n      },\n    }),\n    [svgNode, props.onCurveChange, props.onCancelCurveChange],\n  )\n\n  useDrag(node, handlers)\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/EasingOption.tsx",
    "content": "import useTooltip from '@theatre/studio/uiComponents/Popover/useTooltip'\nimport React from 'react'\nimport styled, {css} from 'styled-components'\nimport {handlesFromCssCubicBezierArgs} from './shared'\nimport SVGCurveSegment from './SVGCurveSegment'\nimport {mergeRefs} from 'react-merge-refs'\nimport {COLOR_BASE} from './colors'\nimport BasicPopover from '@theatre/studio/uiComponents/Popover/BasicPopover'\n\nconst Wrapper = styled.div<{isSelected: boolean}>`\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  overflow: hidden;\n  aspect-ratio: 1;\n\n  transition: background-color 0.15s;\n  background-color: ${COLOR_BASE};\n  border-radius: 2px;\n  cursor: pointer;\n  outline: none;\n\n  ${({isSelected}) =>\n    isSelected &&\n    css`\n      background-color: #383d42;\n    `}\n\n  &:hover {\n    background-color: #31353a;\n  }\n\n  &:focus {\n    background-color: #383d42;\n  }\n`\n\nconst EasingTooltip = styled(BasicPopover)`\n  padding: 0.5em;\n  color: white;\n  max-width: 240px;\n  pointer-events: none !important;\n  --popover-bg: black;\n  --popover-outer-stroke: transparent;\n  --popover-inner-stroke: transparent;\n  box-shadow: none;\n`\n\ntype IProps = {\n  easing: {\n    label: string\n    value: string\n  }\n  tooltipPlacement: 'top' | 'bottom'\n  isSelected: boolean\n} & Parameters<typeof Wrapper>[0]\n\nconst EasingOption: React.FC<IProps> = React.forwardRef((props, ref) => {\n  const [tooltip, tooltipHostRef] = useTooltip(\n    {enabled: true, verticalPlacement: props.tooltipPlacement, verticalGap: 0},\n    () => (\n      <EasingTooltip showPopoverEdgeTriangle={false}>\n        {props.easing.label}\n      </EasingTooltip>\n    ),\n  )\n\n  return (\n    <Wrapper ref={mergeRefs([tooltipHostRef, ref])} {...props}>\n      {tooltip}\n      <SVGCurveSegment\n        easing={handlesFromCssCubicBezierArgs(props.easing.value)}\n        isSelected={props.isSelected}\n      />\n      {/* In the past we used `dangerouslySetInnerHTML={{ _html: fuzzySort.highlight(presetSearchResults[index])}}` \n          to display the name of the easing option, including an underline for the parts of it matching the search\n          query. */}\n    </Wrapper>\n  )\n})\n\nexport default EasingOption\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/SVGCurveSegment.tsx",
    "content": "import React from 'react'\nimport type {CubicBezierHandles} from './shared'\n\nconst VIEWBOX_PADDING = 0.75\nconst SVG_CIRCLE_RADIUS = 0.1\nconst VIEWBOX_SIZE = 1 + VIEWBOX_PADDING * 2\n\nconst SELECTED_CURVE_COLOR = '#F5F5F5'\nconst CURVE_COLOR = '#888888'\nconst CONTROL_COLOR = '#4f4f4f'\nconst CONTROL_HITZONE_COLOR = 'rgba(255, 255, 255, 0.1)'\n\n// SVG's y coordinates go from top to bottom, e.g. 1 is vertically lower than 0,\n// but easing points go from bottom to top.\nconst toVerticalSVGSpace = (y: number) => 1 - y\n\ntype IProps = {\n  easing: CubicBezierHandles | null\n  isSelected: boolean\n}\n\nconst SVGCurveSegment: React.FC<IProps> = (props) => {\n  const {easing, isSelected} = props\n  const curveColor = isSelected ? SELECTED_CURVE_COLOR : CURVE_COLOR\n  // With a padding of 0, this results in a \"unit viewbox\" i.e. `0 0 1 1`.\n  // With padding e.g. VIEWBOX_PADDING=0.1, this results in a viewbox of `-0.1 -0,1 1.2 1.2`,\n  // i.e. a viewbox with a top left coordinate of -0.1,-0.1 and a width and height of 1.2,\n  // resulting in bottom right coordinate of 1.1,1.1\n  const SVG_VIEWBOX_ATTR = `${-VIEWBOX_PADDING} ${-VIEWBOX_PADDING} ${VIEWBOX_SIZE} ${VIEWBOX_SIZE}`\n\n  // Bezier SVG\n  if (easing) {\n    const leftControlPoint = [easing[0], toVerticalSVGSpace(easing[1])]\n    const rightControlPoint = [easing[2], toVerticalSVGSpace(easing[3])]\n    return (\n      <svg\n        height=\"100%\"\n        width=\"100%\"\n        viewBox={SVG_VIEWBOX_ATTR}\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        {/* Control lines */}\n        <line\n          x1=\"0\"\n          y1=\"1\"\n          x2={leftControlPoint[0]}\n          y2={leftControlPoint[1]}\n          stroke={CONTROL_COLOR}\n          strokeWidth=\"0.1\"\n        />\n        <line\n          x1=\"1\"\n          y1=\"0\"\n          x2={rightControlPoint[0]}\n          y2={rightControlPoint[1]}\n          stroke={CONTROL_COLOR}\n          strokeWidth=\"0.1\"\n        />\n\n        {/* Control point hitzonecircles */}\n        <circle\n          cx={leftControlPoint[0]}\n          cy={leftControlPoint[1]}\n          r={0.1}\n          fill={CONTROL_HITZONE_COLOR}\n        />\n        <circle\n          cx={rightControlPoint[0]}\n          cy={rightControlPoint[1]}\n          r={0.1}\n          fill={CONTROL_HITZONE_COLOR}\n        />\n\n        {/* Control point circles */}\n        <circle\n          cx={leftControlPoint[0]}\n          cy={leftControlPoint[1]}\n          r={SVG_CIRCLE_RADIUS}\n          fill={CONTROL_COLOR}\n        />\n        <circle\n          cx={rightControlPoint[0]}\n          cy={rightControlPoint[1]}\n          r={SVG_CIRCLE_RADIUS}\n          fill={CONTROL_COLOR}\n        />\n\n        {/* Bezier curve */}\n        <path\n          d={`M0 1 C${leftControlPoint[0]} ${leftControlPoint[1]} ${rightControlPoint[0]} \n        ${rightControlPoint[1]} 1 0`}\n          stroke={curveColor}\n          strokeWidth=\"0.08\"\n        />\n        <circle cx={0} cy={1} r={SVG_CIRCLE_RADIUS} fill={curveColor} />\n        <circle cx={1} cy={0} r={SVG_CIRCLE_RADIUS} fill={curveColor} />\n      </svg>\n    )\n  }\n\n  // \"Hold\" SVG\n  return (\n    <svg\n      height=\"100%\"\n      width=\"100%\"\n      viewBox={SVG_VIEWBOX_ATTR}\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <line\n        x1=\"0\"\n        y1=\"1\"\n        x2={1}\n        y2={1}\n        stroke={curveColor}\n        strokeWidth=\"0.08\"\n      />\n      <line\n        x1=\"1\"\n        y1=\"0\"\n        x2={1}\n        y2={1}\n        stroke={curveColor}\n        strokeWidth=\"0.08\"\n      />\n      <circle cx={0} cy={1} r={SVG_CIRCLE_RADIUS} fill={curveColor} />\n      <circle cx={1} cy={0} r={SVG_CIRCLE_RADIUS} fill={curveColor} />\n    </svg>\n  )\n}\nexport default SVGCurveSegment\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/colors.ts",
    "content": "export const COLOR_POPOVER_BACK = 'rgba(26, 28, 30, 0.97);'\n\nexport const COLOR_BASE = '#272B2F'\n\nexport const COLOR_FOCUS_OUTLINE = '#0A4540'\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/shared.ts",
    "content": "/**\n * This 4-tuple defines the start control point x1,y1 and the end control point x2,y2\n * of a cubic bezier curve. It is assumed that the start of the curve is fixed at 0,0\n * and the end is fixed at 1,1. X values must be constrained to `0 <= x1 <= 1 and 0 <= x2 <= 1`.\n *\n * to get a feel for it: https://cubic-bezier.com/\n **/\nexport type CubicBezierHandles = [\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n]\n\n/**\n * A full CSS cubic bezier string looks like `cubic-bezier(0, 0, 1, 1)`.\n * the \"args\" part of the name refers specifically to the comma separated substring\n * inside the parentheses of the CSS cubic bezier string i.e. `0, 0, 1, 1`.\n */\nexport type CSSCubicBezierArgsString = string\n\nconst CSS_BEZIER_ARGS_DECIMAL_POINTS = 3 // Doesn't have to be 3, but it matches our preset data\n\n/** Returns e.g. `\"0, 0, 1, 1\"`. See {@link CSSCubicBezierArgsString} docs for more context. */\nexport function cssCubicBezierArgsFromHandles(\n  points: CubicBezierHandles,\n): CSSCubicBezierArgsString {\n  return points.map((p) => p.toFixed(CSS_BEZIER_ARGS_DECIMAL_POINTS)).join(', ')\n}\n\nconst MAX_REASONABLE_BEZIER_STRING = 128\nexport function handlesFromCssCubicBezierArgs(\n  str: CSSCubicBezierArgsString | undefined | null,\n): null | CubicBezierHandles {\n  if (!str || str?.length > MAX_REASONABLE_BEZIER_STRING) return null\n  const args = str.split(',')\n  if (args.length !== 4) return null\n  const nums = args.map((arg) => {\n    return Number(arg.trim())\n  })\n\n  if (!nums.every((v) => isFinite(v))) return null\n\n  if (nums[0] < 0 || nums[0] > 1 || nums[2] < 0 || nums[2] > 1) return null\n  return nums as CubicBezierHandles\n}\n\n/**\n * A collection of cubic-bezier approximations of common easing functions\n * - ref: https://developer.mozilla.org/en-US/docs/Web/CSS/easing-function\n * - ref: [GitHub issue 28 comment \"michaeltheory's suggested default easing presets\"](https://github.com/theatre-js/theatre/issues/28#issuecomment-938752916)\n **/\nexport const EASING_PRESETS = [\n  {label: 'Quad Out', value: '0.250, 0.460, 0.450, 0.940'},\n  {label: 'Quad In Out', value: '0.455, 0.030, 0.515, 0.955'},\n  {label: 'Quad In', value: '0.550, 0.085, 0.680, 0.530'},\n\n  {label: 'Cubic Out', value: '0.215, 0.610, 0.355, 1.000'},\n  {label: 'Cubic In Out', value: '0.645, 0.045, 0.355, 1.000'},\n  {label: 'Cubic In', value: '0.550, 0.055, 0.675, 0.190'},\n\n  {label: 'Quart Out', value: '0.165, 0.840, 0.440, 1.000'},\n  {label: 'Quart In Out', value: '0.770, 0.000, 0.175, 1.000'},\n  {label: 'Quart In', value: '0.895, 0.030, 0.685, 0.220'},\n\n  {label: 'Quint Out', value: '0.230, 1.000, 0.320, 1.000'},\n  {label: 'Quint In Out', value: '0.860, 0.000, 0.070, 1.000'},\n  {label: 'Quint In', value: '0.755, 0.050, 0.855, 0.060'},\n\n  {label: 'Sine Out', value: '0.390, 0.575, 0.565, 1.000'},\n  {label: 'Sine In Out', value: '0.445, 0.050, 0.550, 0.950'},\n  {label: 'Sine In', value: '0.470, 0.000, 0.745, 0.715'},\n\n  {label: 'Expo Out', value: '0.190, 1.000, 0.220, 1.000'},\n  {label: 'Expo In Out', value: '1.000, 0.000, 0.000, 1.000'},\n  {label: 'Expo In', value: '0.780, 0.000, 0.810, 0.00'},\n\n  {label: 'Circ Out', value: '0.075, 0.820, 0.165, 1.000'},\n  {label: 'Circ In Out', value: '0.785, 0.135, 0.150, 0.860'},\n  {label: 'Circ In', value: '0.600, 0.040, 0.980, 0.335'},\n\n  {label: 'Back Out', value: '0.175, 0.885, 0.320, 1.275'},\n  {label: 'Back In Out', value: '0.680, -0.550, 0.265, 1.550'},\n  {label: 'Back In', value: '0.600, -0.280, 0.735, 0.045'},\n\n  {label: 'linear', value: '0.5, 0.5, 0.5, 0.5'},\n  {label: 'In Out', value: '0.42,0,0.58,1'},\n  {label: 'Hold', value: '0, 0, Infinity, Infinity'},\n\n  /* These easings are not being included initially in order to\n     simplify the choices */\n  // {label: 'Back In Out', value: '0.680, -0.550, 0.265, 1.550'},\n  // {label: 'Back In', value: '0.600, -0.280, 0.735, 0.045'},\n  // {label: 'Back Out', value: '0.175, 0.885, 0.320, 1.275'},\n\n  // {label: 'Circ In Out', value: '0.785, 0.135, 0.150, 0.860'},\n  // {label: 'Circ In', value: '0.600, 0.040, 0.980, 0.335'},\n  // {label: 'Circ Out', value: '0.075, 0.820, 0.165, 1'},\n\n  // {label: 'Quad In Out', value: '0.455, 0.030, 0.515, 0.955'},\n  // {label: 'Quad In', value: '0.550, 0.085, 0.680, 0.530'},\n  // {label: 'Quad Out', value: '0.250, 0.460, 0.450, 0.940'},\n\n  // {label: 'Ease Out In', value: '.42, 0, .58, 1'},\n]\n\n/**\n * Compares two easings and returns true iff they are similar up to a threshold\n *\n * @param easing1 - first easing to compare\n * @param easing2 - second easing to compare\n * @param options - optionally pass an object with a threshold that determines how similar the easings should be\n * @returns boolean if the easings are similar\n */\nexport function areEasingsSimilar(\n  easing1: CubicBezierHandles | null | undefined,\n  easing2: CubicBezierHandles | null | undefined,\n  options: {\n    threshold: number\n  } = {threshold: 0.02},\n) {\n  if (!easing1 || !easing2) return false\n  let totalDiff = 0\n  for (let i = 0; i < 4; i++) {\n    totalDiff += Math.abs(easing1[i] - easing2[i])\n  }\n  return totalDiff < options.threshold\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/useFreezableMemo.ts",
    "content": "import {useMemo, useRef, useState} from 'react'\n\n/**\n * The same as useMemo except that it can be frozen so that\n * the memoized function is not recomputed even if the dependencies\n * change. It can also be unfrozen.\n *\n * An unfrozen useFreezableMemo is the same as useMemo.\n *\n */\nexport function useFreezableMemo<T>(\n  fn: (setFreeze: (isFrozen: boolean) => void) => T,\n  deps: any[],\n): T {\n  const [isFrozen, setFreeze] = useState<boolean>(false)\n  const freezableDeps = useRef(deps)\n\n  if (!isFrozen) freezableDeps.current = deps\n\n  return useMemo(() => fn(setFreeze), freezableDeps.current)\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/CurveEditorPopover/useUIOptionGrid.tsx",
    "content": "import type {KeyboardEvent} from 'react'\nimport type React from 'react'\nimport {useState} from 'react'\nimport {mod} from './CurveEditorPopover'\n\nexport enum Outcome {\n  Handled = 1,\n  Passthrough = 0,\n}\ntype UIOptionGridOptions<Item> = {\n  /** affect behavior of keyboard navigation */\n  uiColumns: number\n  /** each item in the grid */\n  items: Item[]\n  /** display of items */\n  renderItem: (value: {\n    select(e?: Event): void\n    /** data item */\n    item: Item\n    /** arrow key nav */\n    isSelected: boolean\n  }) => React.ReactNode\n  onSelectItem(item: Item): Outcome\n  /** Set a callback for what to do if we try to leave the grid */\n  canVerticleExit?: (exitSide: 'top' | 'bottom') => Outcome\n}\ntype UIOptionGrid<Item> = {\n  focusFirstItem(): void\n  onParentEltKeyDown(evt: KeyboardEvent): Outcome\n  gridItems: React.ReactNode[]\n  currentSelection: Item | null\n}\nexport function useUIOptionGrid<T>(\n  options: UIOptionGridOptions<T>,\n): UIOptionGrid<T> {\n  // Helper functions for moving the highlight in the grid of presets\n  const [selectionIndex, setSelectionIndex] = useState<number | null>(null)\n  const moveCursorVertical = (vdir: number) => {\n    if (selectionIndex === null) {\n      if (options.items.length > 0) {\n        // start at the top first one\n        setSelectionIndex(0)\n      } else {\n        // no items\n      }\n\n      return\n    }\n\n    const nextSelectionIndex = selectionIndex + vdir * options.uiColumns\n    const exitsTop = nextSelectionIndex < 0\n    const exitsBottom = nextSelectionIndex > options.items.length - 1\n    if (exitsTop || exitsBottom) {\n      // up and out\n      if (options.canVerticleExit) {\n        if (options.canVerticleExit(exitsTop ? 'top' : 'bottom')) {\n          // exited and handled\n          setSelectionIndex(null)\n          return\n        }\n      }\n\n      // block the cursor from leaving (don't do anything)\n      return\n    }\n\n    // we know this highlight is in bounds now\n    setSelectionIndex(nextSelectionIndex)\n  }\n  const moveCursorHorizontal = (hdir: number) => {\n    if (selectionIndex === null)\n      setSelectionIndex(mod(hdir, options.items.length))\n    else if (selectionIndex + hdir < 0) {\n      // Don't exit top on potentially a left arrow, bc that might feel like I should be able to exit right on right arrow.\n      // Also, maybe cursor selection management in inputs is *lame*.\n      setSelectionIndex(null)\n    } else\n      setSelectionIndex(\n        Math.min(selectionIndex + hdir, options.items.length - 1),\n      )\n  }\n\n  const onParentKeydown = (e: KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === 'ArrowRight') moveCursorHorizontal(1)\n    else if (e.key === 'ArrowLeft') moveCursorHorizontal(-1)\n    else if (e.key === 'ArrowUp') moveCursorVertical(-1)\n    else if (e.key === 'ArrowDown') moveCursorVertical(1)\n    else return Outcome.Passthrough // so sorry, plz make this not terrible\n    return Outcome.Handled\n  }\n\n  return {\n    focusFirstItem() {\n      setSelectionIndex(0)\n    },\n    onParentEltKeyDown: onParentKeydown,\n    gridItems: options.items.map((item, idx) =>\n      options.renderItem({\n        isSelected: idx === selectionIndex,\n        item,\n        select(e) {\n          setSelectionIndex(idx)\n          if (options.onSelectItem(item) === Outcome.Handled) {\n            e?.preventDefault()\n            e?.stopPropagation()\n          }\n        },\n      }),\n    ),\n    currentSelection: options.items[selectionIndex ?? -1] ?? null,\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/DeterminePropEditorForSingleKeyframe.tsx",
    "content": "import React from 'react'\nimport styled from 'styled-components'\n\nimport type {PropTypeConfig_AllSimples} from '@theatre/core/types/public'\nimport type {ISimplePropEditorReactProps} from '@theatre/studio/propEditors/simpleEditors/ISimplePropEditorReactProps'\nimport {simplePropEditorByPropType} from '@theatre/studio/propEditors/simpleEditors/simplePropEditorByPropType'\nimport type {\n  EditingOptionsTree,\n  PrimitivePropEditingOptions,\n} from './useSingleKeyframeInlineEditorPopover'\nimport last from 'lodash-es/last'\nimport {useTempTransactionEditingTools} from './useTempTransactionEditingTools'\nimport {__private} from '@theatre/core'\nconst {valueInProp} = __private.propTypeUtils\n\nconst SingleKeyframePropEditorContainer = styled.div`\n  display: flex;\n  align-items: stretch;\n  min-width: 200px;\n\n  select {\n    min-width: 100px;\n  }\n`\nconst SingleKeyframePropLabel = styled.div`\n  font-style: normal;\n  font-weight: 400;\n  font-size: 11px;\n  line-height: 13px;\n  letter-spacing: 0.01em;\n  padding: 6px 6px 6px 0;\n\n  width: 40%;\n\n  color: #919191;\n\n  overflow: hidden;\n`\n\nconst INDENT_PX = 10\n\n/**\n * Given a propConfig, this function gives the corresponding prop editor for\n * use in the dope sheet inline prop editor on a keyframe.\n * {@link DeterminePropEditorForDetail} does the same thing for the details panel. The main difference\n * between this function and {@link DeterminePropEditorForDetail} is that this\n * one shows prop editors *without* keyframe navigation controls (that look\n * like `< ・ >`).\n *\n * @param p - propConfig object for any type of prop.\n */\nexport function DeterminePropEditorForKeyframeTree(\n  p: EditingOptionsTree & {autoFocusInput?: boolean; indent: number},\n) {\n  if (p.type === 'sheetObject') {\n    return (\n      <>\n        <SingleKeyframePropLabel\n          style={{paddingLeft: `${p.indent * INDENT_PX}px`}}\n        >\n          {p.sheetObject.address.objectKey}\n        </SingleKeyframePropLabel>\n        {p.children.map((c, i) => (\n          <DeterminePropEditorForKeyframeTree\n            key={i}\n            {...c}\n            autoFocusInput={p.autoFocusInput && i === 0}\n            indent={p.indent + 1}\n          />\n        ))}\n      </>\n    )\n  } else if (p.type === 'propWithChildren') {\n    const label = p.propConfig.label ?? last(p.pathToProp)\n    return (\n      <>\n        <SingleKeyframePropLabel\n          style={{paddingLeft: `${p.indent * INDENT_PX}px`}}\n        >\n          {label}\n        </SingleKeyframePropLabel>\n        {p.children.map((c, i) => (\n          <DeterminePropEditorForKeyframeTree\n            key={i}\n            {...c}\n            autoFocusInput={p.autoFocusInput && i === 0}\n            indent={p.indent + 1}\n          />\n        ))}\n      </>\n    )\n  } else {\n    return (\n      <PrimitivePropEditor\n        {...p}\n        autoFocusInput={p.autoFocusInput}\n        indent={p.indent}\n      />\n    )\n  }\n}\n\nconst SingleKeyframeSimplePropEditorContainer = styled.div`\n  display: flex;\n  align-items: center;\n  width: 60%;\n`\n\nfunction PrimitivePropEditor(\n  p: PrimitivePropEditingOptions & {autoFocusInput?: boolean; indent: number},\n) {\n  const label = p.propConfig.label ?? last(p.pathToProp)\n  const editingTools = useEditingToolsForKeyframeEditorPopover(p)\n\n  if (p.propConfig.type === 'enum') {\n    // notice: enums are not implemented, yet.\n    return <></>\n  } else {\n    const PropEditor = simplePropEditorByPropType[\n      p.propConfig.type\n    ] as React.VFC<ISimplePropEditorReactProps<PropTypeConfig_AllSimples>>\n    return (\n      <SingleKeyframePropEditorContainer>\n        <SingleKeyframePropLabel>\n          <span style={{paddingLeft: `${p.indent * INDENT_PX}px`}}>\n            {label}\n          </span>\n        </SingleKeyframePropLabel>\n        <SingleKeyframeSimplePropEditorContainer>\n          <PropEditor\n            editingTools={editingTools}\n            propConfig={p.propConfig}\n            value={valueInProp(p.keyframe.value, p.propConfig)}\n            autoFocus={p.autoFocusInput}\n          />\n        </SingleKeyframeSimplePropEditorContainer>\n      </SingleKeyframePropEditorContainer>\n    )\n  }\n}\n\n// These editing tools are distinct from the editing tools used in the\n// prop editors in the details panel: These editing tools edit the value of a keyframe\n// while the details editing tools edit the value of the sequence at the playhead\n// (potentially creating a new keyframe).\nfunction useEditingToolsForKeyframeEditorPopover(\n  props: PrimitivePropEditingOptions,\n) {\n  const obj = props.sheetObject\n  return useTempTransactionEditingTools(({stateEditors}, value) => {\n    const newKeyframe = {...props.keyframe, value}\n    stateEditors.coreByProject.historic.sheetsById.sequence.replaceKeyframes({\n      ...obj.address,\n      trackId: props.trackId,\n      keyframes: [newKeyframe],\n      snappingFunction: obj.sheet.getSequence().closestGridPosition,\n    })\n  }, obj)\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/SingleKeyframeDot.tsx",
    "content": "import React, {useMemo, useRef} from 'react'\nimport styled from 'styled-components'\n\nimport getStudio from '@theatre/studio/getStudio'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport useContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/useContextMenu'\nimport type {DragOpts} from '@theatre/studio/uiComponents/useDrag'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {val} from '@theatre/dataverse'\nimport {useLockFrameStampPosition} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\nimport {useCssCursorLock} from '@theatre/studio/uiComponents/PointerEventsHandler'\nimport DopeSnap from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/DopeSnap'\n\nimport type {ISingleKeyframeEditorProps} from './SingleKeyframeEditor'\nimport {absoluteDims} from '@theatre/studio/utils/absoluteDims'\nimport {useLogger} from '@theatre/studio/uiComponents/useLogger'\nimport type {ILogger} from '@theatre/utils/logger'\nimport {copyableKeyframesFromSelection} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/selections'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport {\n  collectKeyframeSnapPositions,\n  snapToNone,\n  snapToSome,\n} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/KeyframeSnapTarget'\nimport {useKeyframeInlineEditorPopover} from './useSingleKeyframeInlineEditorPopover'\nimport usePresence, {\n  PresenceFlag,\n} from '@theatre/studio/uiComponents/usePresence'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nexport const DOT_SIZE_PX = 6\nconst DOT_HOVER_SIZE_PX = DOT_SIZE_PX + 2\n\nconst dotTheme = {\n  normalColor: '#40AAA4',\n  selectedColor: '#F2C95C',\n  inlineEditorOpenColor: '#FCF3DC',\n  selectedAndInlineEditorOpenColor: '#CBEBEA',\n}\n\nconst selectBackgroundForDiamond = ({\n  isSelected,\n  isInlineEditorPopoverOpen,\n}: IDiamond) => {\n  if (isSelected && isInlineEditorPopoverOpen) {\n    return dotTheme.inlineEditorOpenColor\n  } else if (isSelected) {\n    return dotTheme.selectedColor\n  } else if (isInlineEditorPopoverOpen) {\n    return dotTheme.selectedAndInlineEditorOpenColor\n  } else {\n    return dotTheme.normalColor\n  }\n}\n\ntype IDiamond = {\n  isSelected: boolean\n  isInlineEditorPopoverOpen: boolean\n  flag: PresenceFlag | undefined\n}\n\n/** The keyframe diamond ◆ */\nconst Diamond = styled.div<IDiamond>`\n  position: absolute;\n  ${absoluteDims(DOT_SIZE_PX)}\n\n  background: ${(props) => selectBackgroundForDiamond(props)};\n  transform: rotateZ(45deg);\n\n  ${(props) =>\n    props.flag === PresenceFlag.Primary ? 'outline: 2px solid white;' : ''};\n\n  z-index: 1;\n  pointer-events: none;\n`\n\nconst Square = styled.div<IDiamond>`\n  position: absolute;\n  ${absoluteDims(DOT_SIZE_PX * 1.5)}\n\n  background: ${(props) => selectBackgroundForDiamond(props)};\n\n  ${(props) =>\n    props.flag === PresenceFlag.Primary ? 'outline: 2px solid white;' : ''};\n\n  z-index: 1;\n  pointer-events: none;\n`\n\nconst HitZone = styled.div<{isInlineEditorPopoverOpen: boolean}>`\n  z-index: 1;\n  cursor: ew-resize;\n\n  position: absolute;\n  ${absoluteDims(12)};\n  ${pointerEventsAutoInNormalMode};\n\n  & + ${Diamond} {\n    ${(props) =>\n      props.isInlineEditorPopoverOpen ? absoluteDims(DOT_HOVER_SIZE_PX) : ''}\n  }\n\n  &:hover + ${Diamond} {\n    ${absoluteDims(DOT_HOVER_SIZE_PX)}\n  }\n`\n\ntype ISingleKeyframeDotProps = ISingleKeyframeEditorProps\n\n/** The ◆ you can grab onto in \"keyframe editor\" (aka \"dope sheet\" in other programs) */\nconst SingleKeyframeDot: React.VFC<ISingleKeyframeDotProps> = (props) => {\n  const logger = useLogger('SingleKeyframeDot', props.keyframe.id)\n  const presence = usePresence(props.itemKey)\n  const [ref, node] = useRefAndState<HTMLDivElement | null>(null)\n\n  const [contextMenu] = useSingleKeyframeContextMenu(node, logger, props)\n  const {\n    node: inlineEditorPopover,\n    toggle: toggleEditor,\n    isOpen: isInlineEditorPopoverOpen,\n  } = useKeyframeInlineEditorPopover([\n    {\n      type: 'primitiveProp',\n      keyframe: props.keyframe,\n      pathToProp: props.leaf.pathToProp,\n      propConfig: props.leaf.propConf,\n      sheetObject: props.leaf.sheetObject,\n      trackId: props.leaf.trackId,\n    },\n  ])\n  const [isDragging] = useDragForSingleKeyframeDot(node, props, {\n    onClickFromDrag(dragStartEvent) {\n      toggleEditor(dragStartEvent, ref.current!)\n    },\n  })\n\n  const showDiamond = !props.keyframe.type || props.keyframe.type === 'bezier'\n\n  return (\n    <>\n      <HitZone\n        ref={ref}\n        isInlineEditorPopoverOpen={isInlineEditorPopoverOpen}\n        {...presence.attrs}\n      />\n      {showDiamond ? (\n        <Diamond\n          isSelected={!!props.selection}\n          isInlineEditorPopoverOpen={isInlineEditorPopoverOpen}\n          flag={presence.flag}\n        />\n      ) : (\n        <Square\n          isSelected={!!props.selection}\n          isInlineEditorPopoverOpen={isInlineEditorPopoverOpen}\n          flag={presence.flag}\n        />\n      )}\n      {inlineEditorPopover}\n      {contextMenu}\n    </>\n  )\n}\n\nexport default SingleKeyframeDot\n\nfunction useSingleKeyframeContextMenu(\n  target: HTMLDivElement | null,\n  logger: ILogger,\n  props: ISingleKeyframeDotProps,\n) {\n  return useContextMenu(target, {\n    displayName: 'Keyframe',\n    items: () => {\n      const copyableKeyframes = copyableKeyframesFromSelection(\n        props.leaf.sheetObject.address.projectId,\n        props.leaf.sheetObject.address.sheetId,\n        props.selection,\n      )\n\n      return [\n        {\n          type: 'normal',\n          label: copyableKeyframes.length > 0 ? 'Copy (selection)' : 'Copy',\n          callback: () => {\n            if (copyableKeyframes.length > 0) {\n              getStudio!().transaction((api) => {\n                api.stateEditors.studio.ahistoric.setClipboardKeyframes(\n                  copyableKeyframes,\n                )\n              })\n            } else {\n              getStudio!().transaction((api) => {\n                api.stateEditors.studio.ahistoric.setClipboardKeyframes([\n                  {keyframe: props.keyframe, pathToProp: props.leaf.pathToProp},\n                ])\n              })\n            }\n          },\n        },\n        {\n          type: 'normal',\n          label:\n            props.selection !== undefined ? 'Delete (selection)' : 'Delete',\n          callback: () => {\n            if (props.selection) {\n              props.selection.delete()\n            } else {\n              getStudio()!.transaction(({stateEditors}) => {\n                stateEditors.coreByProject.historic.sheetsById.sequence.deleteKeyframes(\n                  {\n                    ...props.leaf.sheetObject.address,\n                    keyframeIds: [props.keyframe.id],\n                    trackId: props.leaf.trackId,\n                  },\n                )\n              })\n            }\n          },\n        },\n      ]\n    },\n    onOpen() {\n      logger._debug('Show keyframe', props)\n    },\n  })\n}\n\nfunction useDragForSingleKeyframeDot(\n  node: HTMLDivElement | null,\n  props: ISingleKeyframeDotProps,\n  options: {\n    /**\n     * hmm: this is a hack so we can actually receive the\n     * {@link MouseEvent} from the drag event handler and use\n     * it for positioning the popup.\n     */\n    onClickFromDrag(dragStartEvent: MouseEvent): void\n  },\n): [isDragging: boolean] {\n  const propsRef = useRef(props)\n  propsRef.current = props\n\n  const {onClickFromDrag} = options\n\n  const useDragOpts = useMemo<DragOpts>(() => {\n    return {\n      debugName: 'KeyframeDot/useDragKeyframe',\n      onDragStart(event) {\n        const props = propsRef.current\n\n        const tracksByObject = val(\n          getStudio()!.atomP.historic.coreByProject[\n            props.leaf.sheetObject.address.projectId\n          ].sheetsById[props.leaf.sheetObject.address.sheetId].sequence\n            .tracksByObject,\n        )!\n\n        const snapPositions = collectKeyframeSnapPositions(\n          tracksByObject,\n          // Calculate all the valid snap positions in the sequence editor,\n          // excluding this keyframe, and any selection it is part of.\n          function shouldIncludeKeyfram(keyframe, {trackId, objectKey}) {\n            return (\n              // we exclude this keyframe from being a snap target\n              keyframe.id !== props.keyframe.id &&\n              !(\n                // if the current dragged keyframe is in the selection,\n                (\n                  props.selection &&\n                  // then we exclude it and all other keyframes in the selection from being snap targets\n                  props.selection.byObjectKey[objectKey]?.byTrackId[trackId]\n                    ?.byKeyframeId[keyframe.id]\n                )\n              )\n            )\n          },\n        )\n\n        snapToSome(snapPositions)\n\n        if (props.selection) {\n          const {selection, leaf} = props\n          const {sheetObject} = leaf\n          const handlers = selection\n            .getDragHandlers({\n              ...sheetObject.address,\n              domNode: node!,\n              positionAtStartOfDrag: keyframeUtils.getSortedKeyframesCached(\n                props.track.data.keyframes,\n              )[props.index].position,\n            })\n            .onDragStart(event)\n\n          // this opens the regular inline keyframe editor on click.\n          // in the future, we may want to show an multi-editor, like in the\n          // single tween editor, so that selected keyframes' values can be changed\n          // together\n          return (\n            handlers && {\n              ...handlers,\n              onClick: onClickFromDrag,\n              onDragEnd: (...args) => {\n                handlers.onDragEnd?.(...args)\n                snapToNone()\n              },\n            }\n          )\n        }\n\n        const propsAtStartOfDrag = props\n        const toUnitSpace = val(\n          propsAtStartOfDrag.layoutP.scaledSpace.toUnitSpace,\n        )\n\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n        return {\n          onDrag(dx, dy, event) {\n            const original = keyframeUtils.getSortedKeyframesCached(\n              propsAtStartOfDrag.track.data.keyframes,\n            )[propsAtStartOfDrag.index]\n            const newPosition = Math.max(\n              // check if our event hoversover a [data-pos] element\n              DopeSnap.checkIfMouseEventSnapToPos(event, {\n                ignore: node,\n              }) ??\n                // if we don't find snapping target, check the distance dragged + original position\n                original.position + toUnitSpace(dx),\n              // sanitize to minimum of zero\n              0,\n            )\n\n            tempTransaction?.discard()\n            tempTransaction = undefined\n            tempTransaction = getStudio()!.tempTransaction(({stateEditors}) => {\n              stateEditors.coreByProject.historic.sheetsById.sequence.replaceKeyframes(\n                {\n                  ...propsAtStartOfDrag.leaf.sheetObject.address,\n                  trackId: propsAtStartOfDrag.leaf.trackId,\n                  keyframes: [{...original, position: newPosition}],\n                  snappingFunction: val(\n                    propsAtStartOfDrag.layoutP.sheet,\n                  ).getSequence().closestGridPosition,\n                },\n              )\n            })\n          },\n          onDragEnd(dragHappened) {\n            if (dragHappened) {\n              tempTransaction?.commit()\n            } else {\n              tempTransaction?.discard()\n            }\n\n            snapToNone()\n          },\n          onClick(ev) {\n            onClickFromDrag(ev)\n          },\n        }\n      },\n    }\n  }, [onClickFromDrag])\n\n  const [isDragging] = useDrag(node, useDragOpts)\n\n  // Lock frame stamp to the current position of the dragged keyframe instead of\n  // the mouse position, so that it appears centered above the keyframe even\n  // regardless of where in the hit zone of the keyframe the mouse is located.\n  useLockFrameStampPosition(isDragging, props.keyframe.position)\n  useCssCursorLock(isDragging, 'draggingPositionInSequenceEditor', 'ew-resize')\n\n  return [isDragging]\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/SingleKeyframeEditor.tsx",
    "content": "import type {\n  DopeSheetSelection,\n  SequenceEditorPanelLayout,\n} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {SequenceEditorTree_PrimitiveProp} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport SingleKeyframeConnector from './BasicKeyframeConnector'\nimport SingleKeyframeDot from './SingleKeyframeDot'\nimport type {TrackWithId} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/collectAggregateKeyframes'\nimport type {StudioSheetItemKey} from '@theatre/core/types/private'\nimport type {BasicKeyframe} from '@theatre/core'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nconst SingleKeyframeEditorContainer = styled.div`\n  position: absolute;\n`\n\nconst noConnector = <></>\n\nexport type ISingleKeyframeEditorProps = {\n  index: number\n  keyframe: BasicKeyframe\n  track: TrackWithId\n  itemKey: StudioSheetItemKey\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  leaf: SequenceEditorTree_PrimitiveProp\n  selection: undefined | DopeSheetSelection\n}\n\nconst SingleKeyframeEditor: React.VFC<ISingleKeyframeEditorProps> = React.memo(\n  (props) => {\n    const {\n      index,\n      track: {data: trackData},\n    } = props\n    const cur = keyframeUtils.getSortedKeyframesCached(trackData.keyframes)[\n      index\n    ]\n    const next = keyframeUtils.getSortedKeyframesCached(trackData.keyframes)[\n      index + 1\n    ]\n\n    const connected = cur.connectedRight && !!next\n\n    return (\n      <SingleKeyframeEditorContainer\n        style={{\n          top: `${props.leaf.nodeHeight / 2}px`,\n          left: `calc(${val(\n            props.layoutP.scaledSpace.leftPadding,\n          )}px + calc(var(--unitSpaceToScaledSpaceMultiplier) * ${\n            cur.position\n          }px))`,\n        }}\n      >\n        <SingleKeyframeDot {...props} itemKey={props.itemKey} />\n        {connected ? <SingleKeyframeConnector {...props} /> : noConnector}\n      </SingleKeyframeEditorContainer>\n    )\n  },\n)\n\nexport default SingleKeyframeEditor\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/useSingleKeyframeInlineEditorPopover.tsx",
    "content": "import React from 'react'\nimport usePopover from '@theatre/studio/uiComponents/Popover/usePopover'\nimport BasicPopover from '@theatre/studio/uiComponents/Popover/BasicPopover'\nimport {DeterminePropEditorForKeyframeTree} from './DeterminePropEditorForSingleKeyframe'\nimport type {SequenceTrackId} from '@theatre/core/types/public'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type {\n  PropTypeConfig_AllSimples,\n  PropTypeConfig_Compound,\n  PropTypeConfig_Enum,\n  UnknownValidCompoundProps,\n  BasicKeyframe,\n} from '@theatre/core/types/public'\nimport type {PathToProp} from '@theatre/utils/pathToProp'\n\n/** The editor that pops up when directly clicking a Keyframe. */\nexport function useKeyframeInlineEditorPopover(\n  props: EditingOptionsTree[] | null,\n) {\n  return usePopover({debugName: 'useKeyframeInlineEditorPopover'}, () => (\n    <BasicPopover showPopoverEdgeTriangle>\n      {!Array.isArray(props)\n        ? undefined\n        : props.map((prop, i) => (\n            <DeterminePropEditorForKeyframeTree\n              key={i}\n              {...prop}\n              autoFocusInput={i === 0}\n              indent={0}\n            />\n          ))}\n    </BasicPopover>\n  ))\n}\n\nexport type EditingOptionsTree =\n  | SheetObjectEditingOptionsTree\n  | PropWithChildrenEditingOptionsTree\n  | PrimitivePropEditingOptions\nexport type SheetObjectEditingOptionsTree = {\n  type: 'sheetObject'\n  sheetObject: SheetObject\n  children: EditingOptionsTree[]\n}\nexport type PropWithChildrenEditingOptionsTree = {\n  type: 'propWithChildren'\n  propConfig: PropTypeConfig_Compound<UnknownValidCompoundProps>\n  pathToProp: PathToProp\n  children: EditingOptionsTree[]\n}\nexport type PrimitivePropEditingOptions = {\n  type: 'primitiveProp'\n  keyframe: BasicKeyframe\n  propConfig: PropTypeConfig_AllSimples | PropTypeConfig_Enum // note: enums are not implemented yet\n  sheetObject: SheetObject\n  trackId: SequenceTrackId\n  pathToProp: PathToProp\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/useTempTransactionEditingTools.tsx",
    "content": "import getStudio from '@theatre/studio/getStudio'\nimport type {SerializableValue} from '@theatre/core/types/public'\nimport type {\n  CommitOrDiscardOrRecapture,\n  ITransactionPrivateApi,\n} from '@theatre/studio/StudioStore/StudioStore'\nimport type {IEditingTools} from '@theatre/studio/propEditors/utils/IEditingTools'\nimport {useMemo} from 'react'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type {Asset} from '@theatre/core/types/public'\n\n/**\n * This function takes a function `writeTx` that sets a value in the private Studio API and\n * returns a memoized editingTools object which contains three functions:\n * - `temporarilySetValue` - uses `writeTx` to set a value that can be discarded\n * - `discardTemporaryValue` - if `temporarilySetValue` was called, discards the value it set\n * - `permanentlySetValue` - uses `writeTx` to set a value\n *\n * @param writeTx - a function that uses a value to perform an action using the\n * private Studio API.\n * @returns an editingTools object that can be passed to `DeterminePropEditorForKeyframe` or\n * `DetailDeterminePropEditor` and is used by the prop editors in `simplePropEditorByPropType`.\n */\nexport function useTempTransactionEditingTools<T extends SerializableValue>(\n  writeTx: (api: ITransactionPrivateApi, value: T) => void,\n  obj: SheetObject,\n): IEditingTools<T> {\n  return useMemo(() => createTempTransactionEditingTools<T>(writeTx, obj), [])\n}\n\nfunction createTempTransactionEditingTools<T>(\n  writeTx: (api: ITransactionPrivateApi, value: T) => void,\n  obj: SheetObject,\n) {\n  let currentTransaction: CommitOrDiscardOrRecapture | null = null\n  const createTempTx = (value: T) =>\n    getStudio().tempTransaction((api) => writeTx(api, value))\n\n  function discardTemporaryValue() {\n    currentTransaction?.discard()\n    currentTransaction = null\n  }\n\n  const editAssets = {\n    createAsset: obj.sheet.project.assetStorage.createAsset,\n    getAssetUrl: (asset: Asset) =>\n      asset.id\n        ? obj.sheet.project.assetStorage.getAssetUrl(asset.id)\n        : undefined,\n  }\n\n  return {\n    temporarilySetValue(value: T): void {\n      discardTemporaryValue()\n      currentTransaction = createTempTx(value)\n    },\n    discardTemporaryValue,\n    permanentlySetValue(value: T): void {\n      discardTemporaryValue()\n      createTempTx(value).commit()\n    },\n    ...editAssets,\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/DopeSheetBackground.tsx",
    "content": "import {theme} from '@theatre/studio/css'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {zIndexes} from '@theatre/studio/panels/SequenceEditorPanel/SequenceEditorPanel'\nimport {useVal} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport {darken, transparentize} from 'polished'\nimport React from 'react'\nimport styled from 'styled-components'\nimport FrameGrid from '@theatre/studio/panels/SequenceEditorPanel/FrameGrid/FrameGrid'\n\nconst Container = styled.div`\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  z-index: ${() => zIndexes.rightBackground};\n  overflow: hidden;\n  background: ${transparentize(0.01, darken(1 * 0.03, theme.panel.bg))};\n  pointer-events: none;\n`\n\nconst DopeSheetBackground: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({layoutP}) => {\n  const width = useVal(layoutP.rightDims.width)\n  const height = useVal(layoutP.panelDims.height)\n\n  return (\n    <Container style={{width: width + 'px'}}>\n      <FrameGrid width={width} height={height} layoutP={layoutP} />\n    </Container>\n  )\n}\n\nexport default DopeSheetBackground\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/DopeSheetSelectionView.tsx",
    "content": "import getStudio from '@theatre/studio/getStudio'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport useKeyDown from '@theatre/studio/uiComponents/useKeyDown'\nimport useValToAtom from '@theatre/studio/uiComponents/useValToAtom'\nimport mutableSetDeep from '@theatre/utils/mutableSetDeep'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {usePrism} from '@theatre/react'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React, {useMemo, useRef} from 'react'\nimport styled from 'styled-components'\nimport type {\n  DopeSheetSelection,\n  SequenceEditorPanelLayout,\n} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {\n  SequenceEditorTree_AllRowTypes,\n  SequenceEditorTree_PropWithChildren,\n  SequenceEditorTree_Sheet,\n  SequenceEditorTree_SheetObject,\n} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport DopeSnap from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/DopeSnap'\nimport {collectAggregateKeyframesInPrism} from './collectAggregateKeyframes'\nimport type {ILogger, IUtilLogger} from '@theatre/utils/logger'\nimport {useLogger} from '@theatre/studio/uiComponents/useLogger'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nconst HITBOX_SIZE_PX = 5\n\nconst Container = styled.div<{isShiftDown: boolean}>`\n  cursor: ${(props) => (props.isShiftDown ? 'cell' : 'default')};\n`\n\nconst DopeSheetSelectionView: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  height: number\n  children: React.ReactNode\n}> = ({layoutP, children, height}) => {\n  const [containerRef, containerNode] = useRefAndState<HTMLDivElement | null>(\n    null,\n  )\n  const isShiftDown = useKeyDown('Shift')\n  const selectionBounds = useCaptureSelection(layoutP, containerNode)\n  const selectionBoundsRef = useRef<typeof selectionBounds>(selectionBounds)\n  selectionBoundsRef.current = selectionBounds\n\n  return (\n    <Container\n      style={{height: height + 'px'}}\n      ref={containerRef}\n      isShiftDown={isShiftDown}\n      className=\"selectionview\"\n    >\n      {selectionBounds && (\n        <SelectionRectangle state={selectionBounds} layoutP={layoutP} />\n      )}\n      {children}\n    </Container>\n  )\n}\n\n/**\n * The horizontal and vertical bounds of the selection, each represented by a tuple in the form of [from, to].\n */\ntype SelectionBounds = {\n  /**\n   * The horizontal bounds of the selection as a tuple of \"from\" and \"to\" coordinates, \"from\" representing the start of the drag.\n   *\n   * TODO - use nominal types here to clarify which space these numbers are in\n   */\n  h: [from: number, to: number]\n  /**\n   * The vertical bounds of the selection as a tuple of \"from\" and \"to\" coordinates, \"from\" representing the start of the drag.\n   */\n  v: [from: number, to: number]\n}\n\nfunction useCaptureSelection(\n  layoutP: Pointer<SequenceEditorPanelLayout>,\n  containerNode: HTMLDivElement | null,\n) {\n  const [ref, state] = useRefAndState<SelectionBounds | null>(null)\n\n  const logger = useLogger('useCaptureSelection')\n\n  useDrag(\n    containerNode,\n    useMemo((): Parameters<typeof useDrag>[1] => {\n      return {\n        debugName: 'DopeSheetSelectionView/useCaptureSelection',\n        dontBlockMouseDown: true,\n        lockCSSCursorTo: 'cell',\n        onDragStart(event) {\n          if (!event.shiftKey || event.target instanceof HTMLInputElement) {\n            return false\n          }\n          const rect = containerNode!.getBoundingClientRect()\n\n          // all the `val()` calls here are meant to be read cold\n\n          const posInScaledSpace =\n            event.clientX -\n            rect.left -\n            // selection is happening in left padded space, convert it to normal space\n            val(layoutP.scaledSpace.leftPadding)\n\n          const posInUnitSpace = val(layoutP.scaledSpace.toUnitSpace)(\n            posInScaledSpace,\n          )\n\n          ref.current = {\n            h: [posInUnitSpace, posInUnitSpace],\n            v: [event.clientY - rect.top, event.clientY - rect.top],\n          }\n\n          val(layoutP.selectionAtom).set({current: undefined})\n\n          return {\n            onDrag(_dx, _dy, event) {\n              // const state = ref.current!\n              const rect = containerNode!.getBoundingClientRect()\n\n              const posInScaledSpace =\n                event.clientX -\n                rect.left -\n                // selection is happening in left padded space, convert it to normal space\n                val(layoutP.scaledSpace.leftPadding)\n\n              const posInUnitSpace = val(layoutP.scaledSpace.toUnitSpace)(\n                posInScaledSpace,\n              )\n\n              ref.current = {\n                h: [ref.current!.h[0], posInUnitSpace],\n                v: [ref.current!.v[0], event.clientY - rect.top],\n              }\n\n              const selection = utils.boundsToSelection(\n                logger,\n                val(layoutP),\n                ref.current,\n              )\n              val(layoutP.selectionAtom).set({current: selection})\n            },\n            onDragEnd(_dragHappened) {\n              ref.current = null\n            },\n          }\n        },\n      }\n    }, [layoutP, containerNode, ref]),\n  )\n\n  return state\n}\n\nnamespace utils {\n  const collectForAggregatedChildren = (\n    logger: IUtilLogger,\n    layout: SequenceEditorPanelLayout,\n    leaf:\n      | SequenceEditorTree_SheetObject\n      | SequenceEditorTree_PropWithChildren\n      | SequenceEditorTree_Sheet,\n    bounds: SelectionBounds,\n    selectionByObjectKey: DopeSheetSelection['byObjectKey'],\n  ) => {\n    const aggregatedKeyframes = collectAggregateKeyframesInPrism(leaf)\n\n    if (\n      leaf.top + leaf.nodeHeight / 2 + HITBOX_SIZE_PX > bounds.v[0] &&\n      leaf.top + leaf.nodeHeight / 2 - HITBOX_SIZE_PX < bounds.v[1]\n    ) {\n      for (const [position, keyframes] of aggregatedKeyframes.byPosition) {\n        const hitboxWidth = layout.scaledSpace.toUnitSpace(HITBOX_SIZE_PX)\n        const isHitboxOutsideSelection =\n          position + hitboxWidth <= bounds.h[0] ||\n          position - hitboxWidth >= bounds.h[1]\n        if (isHitboxOutsideSelection) continue\n\n        for (const keyframeWithTrack of keyframes) {\n          mutableSetDeep(\n            selectionByObjectKey,\n            (selectionByObjectKeyP) =>\n              // convenience for accessing a deep path which might not actually exist\n              // through the use of pointer proxy (so we don't have to deal with undeifned )\n              selectionByObjectKeyP[\n                keyframeWithTrack.track.sheetObject.address.objectKey\n              ].byTrackId[keyframeWithTrack.track.id].byKeyframeId[\n                keyframeWithTrack.kf.id\n              ],\n            true,\n          )\n        }\n      }\n    }\n\n    collectChildren(logger, layout, leaf, bounds, selectionByObjectKey)\n  }\n\n  const collectorByLeafType: {\n    [K in SequenceEditorTree_AllRowTypes['type']]?: (\n      logger: IUtilLogger,\n      layout: SequenceEditorPanelLayout,\n      leaf: Extract<SequenceEditorTree_AllRowTypes, {type: K}>,\n      bounds: SelectionBounds,\n      selectionByObjectKey: DopeSheetSelection['byObjectKey'],\n    ) => void\n  } = {\n    sheet(logger, layout, leaf, bounds, selectionByObjectKey) {\n      collectForAggregatedChildren(\n        logger,\n        layout,\n        leaf,\n        bounds,\n        selectionByObjectKey,\n      )\n    },\n    propWithChildren(logger, layout, leaf, bounds, selectionByObjectKey) {\n      collectForAggregatedChildren(\n        logger,\n        layout,\n        leaf,\n        bounds,\n        selectionByObjectKey,\n      )\n    },\n    sheetObject(logger, layout, leaf, bounds, selectionByObjectKey) {\n      collectForAggregatedChildren(\n        logger,\n        layout,\n        leaf,\n        bounds,\n        selectionByObjectKey,\n      )\n    },\n    primitiveProp(logger, layout, leaf, bounds, selectionByObjectKey) {\n      const {sheetObject, trackId} = leaf\n      const trackData = val(\n        getStudio().atomP.historic.coreByProject[sheetObject.address.projectId]\n          .sheetsById[sheetObject.address.sheetId].sequence.tracksByObject[\n          sheetObject.address.objectKey\n        ].trackData[trackId],\n      )!\n\n      if (\n        bounds.v[0] >\n          leaf.top + leaf.heightIncludingChildren / 2 + HITBOX_SIZE_PX ||\n        leaf.top + leaf.heightIncludingChildren / 2 - HITBOX_SIZE_PX >\n          bounds.v[1]\n      ) {\n        return\n      }\n\n      for (const kf of keyframeUtils.getSortedKeyframesCached(\n        trackData.keyframes,\n      )) {\n        if (\n          kf.position + layout.scaledSpace.toUnitSpace(HITBOX_SIZE_PX) <=\n          bounds.h[0]\n        )\n          continue\n        if (\n          kf.position - layout.scaledSpace.toUnitSpace(HITBOX_SIZE_PX) >=\n          bounds.h[1]\n        )\n          break\n\n        mutableSetDeep(\n          selectionByObjectKey,\n          (selectionByObjectKeyP) =>\n            // convenience for accessing a deep path which might not actually exist\n            // through the use of pointer proxy (so we don't have to deal with undeifned )\n            selectionByObjectKeyP[sheetObject.address.objectKey].byTrackId[\n              trackId\n            ].byKeyframeId[kf.id],\n          true,\n        )\n      }\n    },\n  }\n\n  const collectChildren = (\n    logger: IUtilLogger,\n    layout: SequenceEditorPanelLayout,\n    leaf: SequenceEditorTree_AllRowTypes,\n    bounds: SelectionBounds,\n    selectionByObjectKey: DopeSheetSelection['byObjectKey'],\n  ) => {\n    if ('children' in leaf) {\n      for (const sub of leaf.children) {\n        collectFromAnyLeaf(logger, layout, sub, bounds, selectionByObjectKey)\n      }\n    }\n  }\n\n  function collectFromAnyLeaf(\n    logger: IUtilLogger,\n    layout: SequenceEditorPanelLayout,\n    leaf: SequenceEditorTree_AllRowTypes,\n    bounds: SelectionBounds,\n    selectionByObjectKey: DopeSheetSelection['byObjectKey'],\n  ) {\n    // don't collect from non rendered\n    if (!leaf.shouldRender) return\n\n    if (\n      bounds.v[0] > leaf.top + leaf.heightIncludingChildren ||\n      leaf.top > bounds.v[1]\n    ) {\n      return\n    }\n    const collector = collectorByLeafType[leaf.type]\n    if (collector) {\n      collector(\n        logger,\n        layout,\n        leaf as $IntentionalAny,\n        bounds,\n        selectionByObjectKey,\n      )\n    } else {\n      collectChildren(logger, layout, leaf, bounds, selectionByObjectKey)\n    }\n  }\n\n  export function boundsToSelection(\n    logger: ILogger,\n    layout: SequenceEditorPanelLayout,\n    bounds: SelectionBounds,\n  ): DopeSheetSelection {\n    const selectionByObjectKey: DopeSheetSelection['byObjectKey'] = {}\n    bounds = sortBounds(bounds)\n\n    const tree = layout.tree\n    collectFromAnyLeaf(\n      logger.utilFor.internal(),\n      layout,\n      tree,\n      bounds,\n      selectionByObjectKey,\n    )\n\n    const sheet = layout.tree.sheet\n    return {\n      type: 'DopeSheetSelection',\n      byObjectKey: selectionByObjectKey,\n      getDragHandlers(origin) {\n        return {\n          debugName: 'DopeSheetSelectionView/boundsToSelection',\n          onDragStart() {\n            let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n            const toUnitSpace = layout.scaledSpace.toUnitSpace\n\n            return {\n              onDrag(dx, _, event) {\n                if (tempTransaction) {\n                  tempTransaction.discard()\n                  tempTransaction = undefined\n                }\n\n                const snapPos = DopeSnap.checkIfMouseEventSnapToPos(event, {\n                  ignore: origin.domNode,\n                })\n\n                const delta =\n                  snapPos != null\n                    ? snapPos - origin.positionAtStartOfDrag\n                    : toUnitSpace(dx)\n\n                tempTransaction = getStudio().tempTransaction(\n                  ({stateEditors}) => {\n                    const transformKeyframes =\n                      stateEditors.coreByProject.historic.sheetsById.sequence\n                        .transformKeyframes\n\n                    for (const objectKey of Object.keys(selectionByObjectKey)) {\n                      const {byTrackId} = selectionByObjectKey[objectKey]!\n                      for (const trackId of Object.keys(byTrackId)) {\n                        const {byKeyframeId} = byTrackId[trackId]!\n                        transformKeyframes({\n                          trackId,\n                          keyframeIds: Object.keys(byKeyframeId),\n                          translate: delta,\n                          scale: 1,\n                          origin: 0,\n                          snappingFunction:\n                            sheet.getSequence().closestGridPosition,\n                          objectKey,\n                          projectId: origin.projectId,\n                          sheetId: origin.sheetId,\n                        })\n                      }\n                    }\n                  },\n                )\n              },\n              onDragEnd(dragHappened) {\n                if (dragHappened) tempTransaction?.commit()\n                else tempTransaction?.discard()\n              },\n            }\n          },\n        }\n      },\n      delete() {\n        getStudio().transaction(({stateEditors}) => {\n          const deleteKeyframes =\n            stateEditors.coreByProject.historic.sheetsById.sequence\n              .deleteKeyframes\n\n          for (const objectKey of Object.keys(selectionByObjectKey)) {\n            const {byTrackId} = selectionByObjectKey[objectKey]!\n            for (const trackId of Object.keys(byTrackId)) {\n              const {byKeyframeId} = byTrackId[trackId]!\n              deleteKeyframes({\n                ...sheet.address,\n                objectKey,\n                trackId,\n                keyframeIds: Object.keys(byKeyframeId),\n              })\n            }\n          }\n        })\n      },\n    }\n  }\n}\n\nconst SelectionRectangleDiv = styled.div`\n  position: absolute;\n  background: rgba(255, 255, 255, 0.1);\n  border: 1px dashed rgba(255, 255, 255, 0.4);\n  box-sizing: border-box;\n`\n\nconst sortBounds = (b: SelectionBounds): SelectionBounds => {\n  return {\n    h: [...b.h].sort((a, b) => a - b) as SelectionBounds['h'],\n    v: [...b.v].sort((a, b) => a - b) as SelectionBounds['v'],\n  }\n}\n\nconst SelectionRectangle: React.VFC<{\n  state: SelectionBounds\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({state, layoutP}) => {\n  const atom = useValToAtom(state)\n\n  return usePrism(() => {\n    const state = val(atom.pointer)\n    const sorted = sortBounds(state)\n\n    const unitSpaceToScaledSpace = val(layoutP.scaledSpace.fromUnitSpace)\n    const leftPadding = val(layoutP.scaledSpace.leftPadding)\n\n    const positionsInScaledSpace = sorted.h\n      .map(unitSpaceToScaledSpace)\n      // bounds are in normal space, convert them left-padded space\n      .map((coord) => coord + leftPadding)\n\n    const top = sorted.v[0]\n    const height = sorted.v[1] - sorted.v[0]\n\n    const left = positionsInScaledSpace[0]\n    const width = positionsInScaledSpace[1] - positionsInScaledSpace[0]\n\n    return (\n      <SelectionRectangleDiv\n        style={{\n          top: top + 'px',\n          height: height + 'px',\n          left: left + 'px',\n          width: width + 'px',\n        }}\n      ></SelectionRectangleDiv>\n    )\n  }, [layoutP, atom])\n}\n\nexport default DopeSheetSelectionView\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/FocusRangeCurtains.tsx",
    "content": "import type {Pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport {usePrism} from '@theatre/react'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {topStripHeight} from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/TopStrip'\nimport React, {useMemo} from 'react'\nimport styled from 'styled-components'\n\nconst divWidth = 1000\n\nconst Curtain = styled.div<{enabled: boolean}>`\n  position: absolute;\n  top: ${topStripHeight}px;\n  left: 0;\n  opacity: 0.15;\n  width: ${divWidth}px;\n  transform-origin: top left;\n  pointer-events: none;\n  background-color: ${(props) => (props.enabled ? '#000000' : 'transparent')};\n`\n\nconst FocusRangeCurtains: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({layoutP}) => {\n  const existingRangeD = useMemo(\n    () =>\n      prism(() => {\n        const {projectId, sheetId} = val(layoutP.sheet).address\n        const existingRange = val(\n          getStudio().atomP.ahistoric.projects.stateByProjectId[projectId]\n            .stateBySheetId[sheetId].sequence.focusRange,\n        )\n        return existingRange\n      }),\n    [layoutP],\n  )\n\n  return usePrism(() => {\n    const existingRange = existingRangeD.getValue()\n\n    if (!existingRange || !existingRange.enabled) return null\n\n    const {range} = existingRange\n\n    const height = val(layoutP.rightDims.height) - topStripHeight\n\n    const unitSpaceToClippedSpace = val(layoutP.clippedSpace.fromUnitSpace)\n    const clippedSpaceWidth = val(layoutP.clippedSpace.width)\n\n    const els: Array<{translateX: number; scaleX: number}> = []\n\n    {\n      // the left (start) curtain\n      // starts from 0px\n      let startX = 0\n      // ends in the start of the range\n      let endX = unitSpaceToClippedSpace(existingRange.range[0])\n      let scaleX: number, translateX: number\n      // hide the curtain if:\n      if (\n        // endX would be larger than startX, which means the curtain is to the left of the RightOverlay\n        startX > endX\n      ) {\n        // fully hide it then with scaleX = 0\n        translateX = 0\n        scaleX = 0\n      } else {\n        // clip the end of the curtain if it's going over the right side of RightOverlay\n        if (endX > clippedSpaceWidth) {\n          //\n          endX = clippedSpaceWidth\n        }\n        translateX = startX\n        scaleX = (endX - startX) / divWidth\n      }\n\n      els.push({translateX, scaleX})\n    }\n\n    {\n      // the right (end) curtain\n      // starts at the end of the range\n      let startX = unitSpaceToClippedSpace(existingRange.range[1])\n      // and ends at the right edge of RightOverlay (which is clippedSpaceWidth)\n      let endX = clippedSpaceWidth\n      let scaleX: number, translateX: number\n      // if the whole curtain falls to the right of RightOverlay, hide it\n      if (startX > endX) {\n        translateX = 0\n        scaleX = 0\n      } else {\n        // if the left of the curtain falls on the left of RightOverlay, clip it\n        if (startX < 0) {\n          startX = 0\n        }\n        translateX = startX\n        scaleX = (endX - startX) / divWidth\n      }\n\n      els.push({translateX, scaleX})\n    }\n\n    return (\n      <>\n        {els.map(({translateX, scaleX}, i) => (\n          <Curtain\n            key={`curtain-${i}`}\n            enabled={true}\n            style={{\n              height: `${height}px`,\n              transform: `translateX(${translateX}px) scaleX(${scaleX})`,\n            }}\n          />\n        ))}\n      </>\n    )\n  }, [layoutP, existingRangeD])\n}\n\nexport default FocusRangeCurtains\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/HorizontallyScrollableArea.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {usePrism} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport {clamp} from 'lodash-es'\nimport React, {useLayoutEffect, useMemo} from 'react'\nimport styled from 'styled-components'\nimport {useReceiveVerticalWheelEvent} from '@theatre/studio/panels/SequenceEditorPanel/VerticalScrollContainer'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport {useCssCursorLock} from '@theatre/studio/uiComponents/PointerEventsHandler'\nimport type {IRange} from '@theatre/core/types/public'\nimport DopeSnap from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/DopeSnap'\nimport {snapToAll, snapToNone} from './KeyframeSnapTarget'\n\nconst Container = styled.div`\n  position: absolute;\n\n  right: 0;\n  overflow-x: scroll;\n  overflow-y: hidden;\n  ${pointerEventsAutoInNormalMode};\n\n  // hide the scrollbar on Gecko\n  scrollbar-width: none;\n\n  // hide the scrollbar on Webkit/Blink\n  &::-webkit-scrollbar {\n    display: none;\n  }\n`\n\nconst HorizontallyScrollableArea: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  height: number\n  children: React.ReactNode\n}> = React.memo(({layoutP, children, height}) => {\n  const {width, unitSpaceToScaledSpaceMultiplier} = usePrism(\n    () => ({\n      width: val(layoutP.rightDims.width),\n      unitSpaceToScaledSpaceMultiplier: val(layoutP.scaledSpace.fromUnitSpace)(\n        1,\n      ),\n    }),\n    [layoutP],\n  )\n\n  const [containerRef, containerNode] = useRefAndState<HTMLDivElement | null>(\n    null,\n  )\n\n  useHandlePanAndZoom(layoutP, containerNode)\n  useDragPlayheadHandlers(layoutP, containerNode)\n  useUpdateScrollFromClippedSpaceRange(layoutP, containerNode)\n\n  return (\n    <Container\n      ref={containerRef}\n      style={{\n        width: width + 'px',\n        height: height + 'px',\n        // @ts-expect-error\n        '--unitSpaceToScaledSpaceMultiplier': unitSpaceToScaledSpaceMultiplier,\n      }}\n    >\n      {children}\n    </Container>\n  )\n})\n\nexport default HorizontallyScrollableArea\n\nfunction useDragPlayheadHandlers(\n  layoutP: Pointer<SequenceEditorPanelLayout>,\n  containerEl: HTMLDivElement | null,\n) {\n  const handlers = useMemo((): Parameters<typeof useDrag>[1] => {\n    return {\n      debugName: 'HorizontallyScrollableArea',\n      onDragStart(event) {\n        if (event.target instanceof HTMLInputElement) {\n          // editing some value\n          return false\n        }\n        if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) {\n          // e.g. marquee selection has shiftKey\n          return false\n        }\n        if (\n          event\n            .composedPath()\n            .some((el) => el instanceof HTMLElement && el.draggable === true)\n        ) {\n          // Question: I think to check if we want another descendent element\n          // to be able to take control of this drag event.\n          // Question: e.g. for `useDragKeyframe`?\n          return false\n        }\n\n        const initialPositionInClippedSpace =\n          event.clientX - containerEl!.getBoundingClientRect().left\n\n        const initialPositionInUnitSpace = clamp(\n          val(layoutP.clippedSpace.toUnitSpace)(initialPositionInClippedSpace),\n          0,\n          Infinity,\n        )\n\n        const setIsSeeking = val(layoutP.seeker.setIsSeeking)\n\n        const sequence = val(layoutP.sheet).getSequence()\n\n        sequence.position = initialPositionInUnitSpace\n\n        const posBeforeSeek = initialPositionInUnitSpace\n        const scaledSpaceToUnitSpace = val(layoutP.scaledSpace.toUnitSpace)\n        setIsSeeking(true)\n\n        snapToAll()\n\n        return {\n          onDrag(dx: number, _, event) {\n            const deltaPos = scaledSpaceToUnitSpace(dx)\n            const unsnappedPos = clamp(\n              posBeforeSeek + deltaPos,\n              0,\n              sequence.length,\n            )\n\n            let newPosition = unsnappedPos\n\n            const snapPos = DopeSnap.checkIfMouseEventSnapToPos(event, {})\n            if (snapPos != null) {\n              newPosition = snapPos\n            }\n\n            sequence.position = newPosition\n          },\n          onDragEnd() {\n            setIsSeeking(false)\n            snapToNone()\n          },\n        }\n      },\n    }\n  }, [layoutP, containerEl])\n\n  const [isDragging] = useDrag(containerEl, handlers)\n\n  useCssCursorLock(isDragging, 'draggingPositionInSequenceEditor', 'ew-resize')\n}\n\nfunction useHandlePanAndZoom(\n  layoutP: Pointer<SequenceEditorPanelLayout>,\n  node: HTMLDivElement | null,\n) {\n  const receiveVerticalWheelEvent = useReceiveVerticalWheelEvent()\n  useLayoutEffect(() => {\n    if (!node) return\n\n    const receiveWheelEvent = (event: WheelEvent) => {\n      // pinch\n      if (event.ctrlKey) {\n        event.preventDefault()\n        event.stopPropagation()\n\n        const pivotPointInClippedSpace =\n          event.clientX - node.getBoundingClientRect().left\n\n        const pivotPointInUnitSpace = val(layoutP.clippedSpace.toUnitSpace)(\n          pivotPointInClippedSpace,\n        )\n\n        const oldRange = val(layoutP.clippedSpace.range)\n        const delta = normalize(event.deltaY, [-50, 50])\n        const scaleFactor = 1 + delta * 0.03\n\n        const newRange = oldRange.map((originalPos) => {\n          return (\n            (originalPos - pivotPointInUnitSpace) * scaleFactor +\n            pivotPointInUnitSpace\n          )\n        }) as IRange\n\n        // Set maximum scroll points based on the sequence length.\n        // This is to avoid zooming out to infinity.\n        const sequenceLength = val(layoutP.sheet).getSequence().length\n        const maxEnd = sequenceLength + sequenceLength * 0.25\n\n        val(layoutP.clippedSpace.setRange)(\n          normalizeRange(newRange, [0, maxEnd]),\n        )\n        return\n      }\n      // panning\n      else if (event.shiftKey) {\n        event.preventDefault()\n        event.stopPropagation()\n\n        const sequenceLength = val(layoutP.sheet).getSequence().length\n        const oldRange = val(layoutP.clippedSpace.range)\n        const windowSize = oldRange[1] - oldRange[0]\n        const speed = windowSize / sequenceLength\n\n        // if there's no deltaY, the browser is probably assigning to deltaX because of the shiftKey\n        // it appeared that Safari + Chrome continue to use deltaY with shiftKey, while FF on macOS\n        // updates the deltaX with deltaY unchanged.\n        // this is a little awkward with track pads + shift on macOS FF, but that's not a big deal\n        // since scrolling horizontally with macOS track pads is not necessary to hold shift.\n        const delta = normalize(event.deltaY || event.deltaX, [-50, 50])\n        const scaleFactor = delta * 0.05 * speed\n\n        const newRange = oldRange.map(\n          (originalPos) => originalPos + scaleFactor,\n        ) as IRange\n\n        val(layoutP.clippedSpace.setRange)(newRange)\n        return\n      } else {\n        receiveVerticalWheelEvent(event)\n        event.preventDefault()\n        event.stopPropagation()\n\n        const scaledSpaceToUnitSpace = val(layoutP.scaledSpace.toUnitSpace)\n        const deltaPos = scaledSpaceToUnitSpace(event.deltaX * 1)\n        const oldRange = val(layoutP.clippedSpace.range)\n        const newRange = oldRange.map((p) => p + deltaPos) as IRange\n\n        const setRange = val(layoutP.clippedSpace.setRange)\n\n        setRange(newRange)\n\n        return\n      }\n    }\n\n    const listenerOptions = {\n      capture: true,\n      passive: false,\n    }\n    node.addEventListener('wheel', receiveWheelEvent, listenerOptions)\n\n    return () => {\n      node.removeEventListener('wheel', receiveWheelEvent, listenerOptions)\n    }\n  }, [node, layoutP])\n\n  useDrag(\n    node,\n    useMemo<Parameters<typeof useDrag>[1]>(() => {\n      return {\n        onDragStart(e) {\n          const oldRange = val(layoutP.clippedSpace.range)\n          const setRange = val(layoutP.clippedSpace.setRange)\n          const scaledSpaceToUnitSpace = val(layoutP.scaledSpace.toUnitSpace)\n          e.preventDefault()\n          e.stopPropagation()\n\n          return {\n            onDrag(dx, dy, _, __, deltaYFromLastEvent) {\n              receiveVerticalWheelEvent({deltaY: -deltaYFromLastEvent})\n              const delta = -scaledSpaceToUnitSpace(dx)\n\n              const newRange = oldRange.map(\n                (originalPos) => originalPos + delta,\n              ) as IRange\n\n              setRange(newRange)\n            },\n          }\n        },\n\n        debugName: 'HorizontallyScrollableArea Middle Button Drag',\n        buttons: [1],\n        lockCSSCursorTo: 'grabbing',\n      }\n    }, [layoutP]),\n  )\n}\n\nfunction normalize(value: number, [min, max]: [min: number, max: number]) {\n  return Math.max(Math.min(value, max), min)\n}\n\nfunction normalizeRange(\n  range: IRange,\n  minMax: [min: number, max: number],\n): IRange {\n  return [normalize(range[0], minMax), normalize(range[1], minMax)]\n}\n\nfunction useUpdateScrollFromClippedSpaceRange(\n  layoutP: Pointer<SequenceEditorPanelLayout>,\n  node: HTMLDivElement | null,\n) {\n  useLayoutEffect(() => {\n    if (!node) return\n\n    const d = prism(() => {\n      const range = val(layoutP.clippedSpace.range)\n      const rangeStartInScaledSpace = val(layoutP.scaledSpace.fromUnitSpace)(\n        range[0],\n      )\n\n      return rangeStartInScaledSpace\n    })\n\n    const update = () => {\n      const rangeStartInScaledSpace = d.getValue()\n      node.scrollLeft = rangeStartInScaledSpace\n    }\n    const untap = d.onStale(update)\n\n    update()\n    const timeout = setTimeout(update, 100)\n\n    return () => {\n      clearTimeout(timeout)\n      untap()\n    }\n  }, [layoutP, node])\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/KeyframeSnapTarget.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {Pointer} from '@theatre/dataverse'\nimport {Atom} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport {DopeSnapHitZoneUI} from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/DopeSnapHitZoneUI'\nimport type {\n  BasicKeyframe,\n  ObjectAddressKey,\n  SequenceTrackId,\n} from '@theatre/core/types/public'\nimport type {\n  BasicKeyframedTrack,\n  HistoricPositionalSequence,\n} from '@theatre/core/types/private/core'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nconst HitZone = styled.div`\n  z-index: 1;\n  cursor: ew-resize;\n\n  ${DopeSnapHitZoneUI.CSS}\n\n  #pointer-root.draggingPositionInSequenceEditor & {\n    ${DopeSnapHitZoneUI.CSS_WHEN_SOMETHING_DRAGGING}\n  }\n`\n\nconst Container = styled.div`\n  position: absolute;\n`\n\nexport type ISnapTargetPRops = {\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  leaf: {nodeHeight: number}\n  position: number\n}\n\nconst KeyframeSnapTarget: React.VFC<ISnapTargetPRops> = (props) => {\n  return (\n    <Container\n      style={{\n        top: `${props.leaf.nodeHeight / 2}px`,\n        left: `calc(${val(\n          props.layoutP.scaledSpace.leftPadding,\n        )}px + calc(var(--unitSpaceToScaledSpaceMultiplier) * ${\n          props.position\n        }px))`,\n      }}\n    >\n      <HitZone\n        {...DopeSnapHitZoneUI.reactProps({\n          isDragging: false,\n          position: props.position,\n        })}\n      />\n    </Container>\n  )\n}\n\nexport default KeyframeSnapTarget\n\nexport type KeyframeSnapPositions = {\n  [objectKey: ObjectAddressKey]: {\n    [trackId: SequenceTrackId]: number[]\n  }\n}\n\nconst stateB = new Atom<\n  | {\n      // all keyframes must be snap targets\n      mode: 'snapToAll'\n    }\n  | {\n      // only these keyframes must be snap targets\n      mode: 'snapToSome'\n      positions: KeyframeSnapPositions\n    }\n  | {\n      // no keyframe should be a snap target\n      mode: 'snapToNone'\n    }\n>({mode: 'snapToNone'})\n\nexport const snapPositionsStateD = stateB.prism\n\nexport function snapToAll() {\n  stateB.set({mode: 'snapToAll'})\n}\n\nexport function snapToNone() {\n  stateB.set({mode: 'snapToNone'})\n}\n\nexport function snapToSome(positions: KeyframeSnapPositions) {\n  stateB.set({mode: 'snapToSome', positions})\n}\n\nexport function collectKeyframeSnapPositions(\n  tracksByObject: HistoricPositionalSequence['tracksByObject'],\n  shouldIncludeKeyframe: (\n    kf: BasicKeyframe,\n    track: {\n      trackId: SequenceTrackId\n      trackData: BasicKeyframedTrack\n      objectKey: ObjectAddressKey\n    },\n  ) => boolean,\n): KeyframeSnapPositions {\n  return Object.fromEntries(\n    Object.entries(tracksByObject).map(\n      ([objectKey, trackDataAndTrackIdByPropPath]) => [\n        objectKey,\n        Object.fromEntries(\n          Object.entries(trackDataAndTrackIdByPropPath!.trackData).map(\n            ([trackId, track]) => [\n              trackId,\n              keyframeUtils\n                .getSortedKeyframesCached(track!.keyframes)\n                .filter((kf) =>\n                  shouldIncludeKeyframe(kf, {\n                    trackId,\n                    trackData: track!,\n                    objectKey,\n                  }),\n                )\n                .map((keyframe) => keyframe.position),\n            ],\n          ),\n        ),\n      ],\n    ),\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/LengthIndicator/LengthEditorPopover.tsx",
    "content": "import type {Pointer} from '@theatre/dataverse'\nimport React, {useLayoutEffect, useMemo, useRef} from 'react'\nimport styled from 'styled-components'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {usePrism, useVal} from '@theatre/react'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {BasicNumberInputNudgeFn} from '@theatre/studio/uiComponents/form/BasicNumberInput'\nimport BasicNumberInput from '@theatre/studio/uiComponents/form/BasicNumberInput'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport {propNameTextCSS} from '@theatre/studio/propEditors/utils/propNameTextCSS'\n\nconst greaterThanZero = (v: number) => isFinite(v) && v > 0\n\nconst Container = styled.div`\n  display: flex;\n  gap: 8px;\n  height: 28px;\n  align-items: center;\n`\n\nconst Label = styled.div`\n  ${propNameTextCSS};\n  white-space: nowrap;\n`\n\nconst nudge: BasicNumberInputNudgeFn = ({deltaX}) => deltaX * 0.25\n\nconst LengthEditorPopover: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  /**\n   * Called when user hits enter/escape\n   */\n  onRequestClose: (reason: string) => void\n}> = ({layoutP}) => {\n  const sheet = useVal(layoutP.sheet)\n\n  const fns = useMemo(() => {\n    let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n    return {\n      temporarilySetValue(newLength: number): void {\n        if (tempTransaction) {\n          tempTransaction.discard()\n          tempTransaction = undefined\n        }\n        tempTransaction = getStudio()!.tempTransaction(({stateEditors}) => {\n          stateEditors.coreByProject.historic.sheetsById.sequence.setLength({\n            ...sheet.address,\n            length: newLength,\n          })\n        })\n      },\n      discardTemporaryValue(): void {\n        if (tempTransaction) {\n          tempTransaction.discard()\n          tempTransaction = undefined\n        }\n      },\n      permanentlySetValue(newLength: number): void {\n        if (tempTransaction) {\n          tempTransaction.discard()\n          tempTransaction = undefined\n        }\n        getStudio()!.transaction(({stateEditors}) => {\n          stateEditors.coreByProject.historic.sheetsById.sequence.setLength({\n            ...sheet.address,\n            length: newLength,\n          })\n        })\n      },\n    }\n  }, [layoutP, sheet])\n\n  const inputRef = useRef<HTMLInputElement>(null)\n  useLayoutEffect(() => {\n    inputRef.current!.focus()\n  }, [])\n\n  return usePrism(() => {\n    const sequence = sheet.getSequence()\n    const sequenceLength = sequence.length\n\n    return (\n      <Container>\n        <Label>Sequence length</Label>\n        <BasicNumberInput\n          value={sequenceLength}\n          {...fns}\n          isValid={greaterThanZero}\n          inputRef={inputRef}\n          nudge={nudge}\n        />\n      </Container>\n    )\n  }, [sheet, fns, inputRef])\n}\n\nexport default LengthEditorPopover\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/LengthIndicator/LengthIndicator.tsx",
    "content": "import {usePrism} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React, {useMemo, useRef} from 'react'\nimport styled from 'styled-components'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {zIndexes} from '@theatre/studio/panels/SequenceEditorPanel/SequenceEditorPanel'\nimport {topStripHeight} from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/TopStrip'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport getStudio from '@theatre/studio/getStudio'\nimport usePopover from '@theatre/studio/uiComponents/Popover/usePopover'\nimport {\n  includeLockFrameStampAttrs,\n  useLockFrameStampPosition,\n} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\nimport {GoChevronLeft, GoChevronRight} from 'react-icons/go'\nimport LengthEditorPopover from './LengthEditorPopover'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport BasicPopover from '@theatre/studio/uiComponents/Popover/BasicPopover'\n\nconst coverWidth = 1000\n\nconst colors = {\n  stripNormal: `#0000006c`,\n  stripActive: `#000000`,\n}\n\nconst Strip = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 4px;\n  z-index: ${() => zIndexes.lengthIndicatorStrip};\n  pointer-events: none;\n\n  &:after {\n    display: block;\n    content: ' ';\n    position: absolute;\n    /* top: ${topStripHeight}px; */\n    top: 0;\n    bottom: 0;\n    left: -1px;\n    width: 1px;\n    background-color: ${colors.stripNormal};\n  }\n\n  &:hover:after,\n  &.dragging:after {\n    background-color: ${colors.stripActive};\n  }\n`\n\nconst ThumbContainer = styled.div`\n  position: absolute;\n  top: ${topStripHeight - 15}px;\n  width: 100px;\n  left: -50px;\n  pointer-events: none;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  z-index: 1;\n`\n\nconst Tooltip = styled.div`\n  margin-top: 8px;\n  font-size: 10px;\n  white-space: nowrap;\n  padding: 2px 8px;\n  border-radius: 2px;\n  ${pointerEventsAutoInNormalMode};\n  cursor: ew-resize;\n  color: #464646;\n  background-color: #0000004d;\n  display: none;\n\n  ${Strip}:hover &, ${Strip}.dragging & {\n    display: block;\n    color: white;\n    background-color: ${colors.stripActive};\n  }\n`\n\nconst Tumb = styled.div`\n  font-size: 10px;\n  white-space: nowrap;\n  padding: 1px 2px;\n  border-radius: 2px;\n  ${pointerEventsAutoInNormalMode};\n  justify-content: center;\n  align-items: center;\n  cursor: ew-resize;\n  color: #5d5d5d;\n  background-color: #191919;\n\n  ${Strip}:hover &, ${Strip}.dragging & {\n    color: white;\n    background-color: ${colors.stripActive};\n\n    & > svg:first-child {\n      margin-right: -1px;\n    }\n  }\n\n  & > svg:first-child {\n    margin-right: -4px;\n  }\n`\n\nconst Cover = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  background-color: rgb(23 23 23 / 43%);\n  width: ${coverWidth}px;\n  z-index: ${() => zIndexes.lengthIndicatorCover};\n  transform-origin: left top;\n\n  ${Strip}.dragging ~ &, ${Strip}:hover ~ & {\n    background-color: rgb(23 23 23 / 60%);\n  }\n`\n\ntype IProps = {\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}\n\nconst RENDER_OUT_OF_VIEW_X = -10000\n\n/**\n * This appears at the end of the sequence where you can adjust the length of the sequence.\n * Kinda looks like `< >` at the top bar at end of the sequence editor.\n */\nconst LengthIndicator: React.FC<IProps> = ({layoutP}) => {\n  const [nodeRef, node] = useRefAndState<HTMLDivElement | null>(null)\n  const [isDragging] = useDragBulge(node, {layoutP})\n  const {\n    node: popoverNode,\n    toggle: togglePopover,\n    close: closePopover,\n  } = usePopover({debugName: 'LengthIndicator'}, () => {\n    return (\n      <BasicPopover>\n        <LengthEditorPopover layoutP={layoutP} onRequestClose={closePopover} />\n      </BasicPopover>\n    )\n  })\n\n  return usePrism(() => {\n    const sheet = val(layoutP.sheet)\n    const height = val(layoutP.rightDims.height)\n\n    const sequence = sheet.getSequence()\n    const sequenceLength = sequence.length\n    const startInUnitSpace = sequenceLength\n\n    let startX = val(layoutP.clippedSpace.fromUnitSpace)(startInUnitSpace)\n    let endX = val(layoutP.clippedSpace.width)\n    let scaleX: number, translateX: number\n    if (startX > endX) {\n      translateX = 0\n      scaleX = 0\n    } else {\n      if (startX < 0) {\n        startX = 0\n      }\n      translateX = startX\n      scaleX = (endX - startX) / coverWidth\n    }\n\n    return (\n      <>\n        {popoverNode}\n        <Strip\n          style={{\n            height: height + 'px',\n            transform: `translateX(${\n              translateX === 0 ? RENDER_OUT_OF_VIEW_X : translateX\n            }px)`,\n          }}\n          className={isDragging ? 'dragging' : ''}\n        >\n          <ThumbContainer>\n            <Tumb\n              ref={nodeRef}\n              // title=\"Length of the sequence. Drag or click to change.\"\n              onClick={(e) => {\n                togglePopover(e, node!)\n              }}\n              {...includeLockFrameStampAttrs('hide')}\n            >\n              <GoChevronLeft />\n              <GoChevronRight />\n            </Tumb>\n            <Tooltip>\n              Sequence length:{' '}\n              {sequence.positionFormatter.formatBasic(sequenceLength)}\n            </Tooltip>\n          </ThumbContainer>\n        </Strip>\n        <Cover\n          title=\"Length\"\n          style={{\n            height: height + 'px',\n            transform: `translateX(${translateX}px) scale(${scaleX}, 1)`,\n          }}\n        />\n      </>\n    )\n  }, [layoutP, nodeRef, isDragging, popoverNode])\n}\n\nfunction useDragBulge(\n  node: HTMLDivElement | null,\n  props: IProps,\n): [isDragging: boolean] {\n  const propsRef = useRef(props)\n  propsRef.current = props\n\n  const gestureHandlers = useMemo<Parameters<typeof useDrag>[1]>(() => {\n    return {\n      debugName: 'LengthIndicator/useDragBulge',\n      lockCSSCursorTo: 'ew-resize',\n      onDragStart(event) {\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n        const propsAtStartOfDrag = propsRef.current\n        const sheet = val(propsRef.current.layoutP.sheet)\n        const initialLength = sheet.getSequence().length\n\n        const toUnitSpace = val(\n          propsAtStartOfDrag.layoutP.scaledSpace.toUnitSpace,\n        )\n\n        return {\n          onDrag(dx, dy, event) {\n            const delta = toUnitSpace(dx)\n            if (tempTransaction) {\n              tempTransaction.discard()\n              tempTransaction = undefined\n            }\n            tempTransaction = getStudio()!.tempTransaction(({stateEditors}) => {\n              stateEditors.coreByProject.historic.sheetsById.sequence.setLength(\n                {\n                  ...sheet.address,\n                  length: initialLength + delta,\n                },\n              )\n            })\n          },\n          onDragEnd(dragHappened) {\n            if (dragHappened) {\n              if (tempTransaction) {\n                tempTransaction.commit()\n              }\n            } else {\n              if (tempTransaction) {\n                tempTransaction.discard()\n              }\n            }\n          },\n        }\n      },\n    }\n  }, [])\n\n  const [isDragging] = useDrag(node, gestureHandlers)\n  useLockFrameStampPosition(isDragging, -1)\n\n  return [isDragging]\n}\n\nexport default LengthIndicator\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/PrimitivePropRow.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {SequenceEditorTree_PrimitiveProp} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport getStudio from '@theatre/studio/getStudio'\nimport {usePrism} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport RightRow from './Row'\nimport BasicKeyframedTrack from './BasicKeyframedTrack/BasicKeyframedTrack'\nimport {useLogger} from '@theatre/studio/uiComponents/useLogger'\n\nconst PrimitivePropRow: React.VFC<{\n  leaf: SequenceEditorTree_PrimitiveProp\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({leaf, layoutP}) => {\n  const logger = useLogger('PrimitivePropRow', leaf.pathToProp.join())\n  return usePrism(() => {\n    const {sheetObject} = leaf\n    const {trackId} = leaf\n\n    const trackData = val(\n      getStudio()!.atomP.historic.coreByProject[sheetObject.address.projectId]\n        .sheetsById[sheetObject.address.sheetId].sequence.tracksByObject[\n        sheetObject.address.objectKey\n      ].trackData[trackId],\n    )\n\n    if (trackData?.type !== 'BasicKeyframedTrack') {\n      logger.errorDev(\n        `trackData type ${trackData?.type} is not yet supported on the sequence editor`,\n      )\n      return (\n        <RightRow leaf={leaf} isCollapsed={false} node={<div />}></RightRow>\n      )\n    } else {\n      const node = (\n        <BasicKeyframedTrack\n          layoutP={layoutP}\n          trackData={trackData}\n          leaf={leaf}\n        />\n      )\n\n      return <RightRow leaf={leaf} isCollapsed={false} node={node}></RightRow>\n    }\n  }, [leaf, layoutP])\n}\n\nexport default PrimitivePropRow\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/PropWithChildrenRow.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {\n  SequenceEditorTree_PrimitiveProp,\n  SequenceEditorTree_PropWithChildren,\n} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport {usePrism} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport React from 'react'\nimport PrimitivePropRow from './PrimitivePropRow'\nimport RightRow from './Row'\nimport AggregatedKeyframeTrack from './AggregatedKeyframeTrack/AggregatedKeyframeTrack'\nimport {collectAggregateKeyframesInPrism} from './collectAggregateKeyframes'\nimport {ProvideLogger, useLogger} from '@theatre/studio/uiComponents/useLogger'\n\nexport const decideRowByPropType = (\n  leaf: SequenceEditorTree_PropWithChildren | SequenceEditorTree_PrimitiveProp,\n  layoutP: Pointer<SequenceEditorPanelLayout>,\n): React.ReactElement =>\n  leaf.type === 'propWithChildren' ? (\n    <RightPropWithChildrenRow\n      layoutP={layoutP}\n      viewModel={leaf}\n      key={'prop' + leaf.pathToProp[leaf.pathToProp.length - 1]}\n    />\n  ) : (\n    <PrimitivePropRow\n      layoutP={layoutP}\n      leaf={leaf}\n      key={'prop' + leaf.pathToProp[leaf.pathToProp.length - 1]}\n    />\n  )\n\nconst RightPropWithChildrenRow: React.VFC<{\n  viewModel: SequenceEditorTree_PropWithChildren\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({viewModel, layoutP}) => {\n  const logger = useLogger(\n    'RightPropWithChildrenRow',\n    viewModel.pathToProp.join(),\n  )\n  return usePrism(() => {\n    const aggregatedKeyframes = collectAggregateKeyframesInPrism(viewModel)\n\n    const node = (\n      <AggregatedKeyframeTrack\n        layoutP={layoutP}\n        aggregatedKeyframes={aggregatedKeyframes}\n        viewModel={viewModel}\n      />\n    )\n\n    return (\n      <ProvideLogger logger={logger}>\n        <RightRow\n          leaf={viewModel}\n          node={node}\n          isCollapsed={viewModel.isCollapsed}\n        >\n          {viewModel.children.map((propLeaf) =>\n            decideRowByPropType(propLeaf, layoutP),\n          )}\n        </RightRow>\n      </ProvideLogger>\n    )\n  }, [viewModel, layoutP])\n}\n\nexport default RightPropWithChildrenRow\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/Right.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {usePrism} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport DopeSheetSelectionView from './DopeSheetSelectionView'\nimport HorizontallyScrollableArea from './HorizontallyScrollableArea'\nimport SheetRow from './SheetRow'\n\nexport const contentWidth = 1000000\n\nconst ListContainer = styled.ul`\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  position: absolute;\n  left: 0;\n  width: ${contentWidth}px;\n`\n\nconst Right: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({layoutP}) => {\n  return usePrism(() => {\n    const tree = val(layoutP.tree)\n    const height =\n      val(layoutP.tree.top) +\n      // stretch the height of the dope sheet in case the rows don't cover its whole vertical space\n      Math.max(\n        val(layoutP.tree.heightIncludingChildren),\n        val(layoutP.dopeSheetDims.height),\n      )\n\n    return (\n      <>\n        <HorizontallyScrollableArea layoutP={layoutP} height={height}>\n          <DopeSheetSelectionView layoutP={layoutP} height={height}>\n            <ListContainer style={{top: tree.top + 'px'}}>\n              <SheetRow leaf={tree} layoutP={layoutP} />\n            </ListContainer>\n          </DopeSheetSelectionView>\n        </HorizontallyScrollableArea>\n      </>\n    )\n  }, [layoutP])\n}\n\nexport default Right\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/Row.tsx",
    "content": "import type {SequenceEditorTree_Row} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport React from 'react'\nimport styled from 'styled-components'\n\nconst RightRowContainer = styled.li<{}>`\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  box-sizing: border-box;\n  position: relative;\n`\n\nconst RightRowNodeWrapper = styled.div<{isEven: boolean}>`\n  box-sizing: border-box;\n  width: 100%;\n  position: relative;\n\n  &:before {\n    position: absolute;\n    display: block;\n    content: ' ';\n    left: -40px;\n    top: 0;\n    bottom: 0;\n    right: 0;\n    box-sizing: border-box;\n    border-bottom: 1px solid #252b3869;\n    background: ${(props) => (props.isEven ? 'transparent' : '#6b8fb505')};\n  }\n`\n\nconst RightRowChildren = styled.ul`\n  margin: 0;\n  padding: 0;\n  list-style: none;\n`\n\n/**\n * @remarks\n * Right now, we're rendering a hierarchical dom tree that reflects the hierarchy of\n * objects, compound props, and their subs. This is not necessary and makes styling complicated.\n * Instead of this, we can simply render a list. This should be easy to do, since the view model\n * in {@link calculateSequenceEditorTree} already includes all the vertical placement information\n * (height and top) we need to render the nodes as a list.\n *\n * Note that we don't need to change {@link calculateSequenceEditorTree} to be list-based. It can\n * retain its hierarchy. It's just the DOM tree that should be list-based.\n */\n\nconst RightRow: React.FC<{\n  leaf: SequenceEditorTree_Row<string>\n  node: React.ReactElement\n  isCollapsed: boolean\n  children?: React.ReactNode | undefined\n}> = ({leaf, children, node, isCollapsed}) => {\n  const hasChildren = Array.isArray(children) && children.length > 0\n\n  return leaf.shouldRender ? (\n    <RightRowContainer>\n      <RightRowNodeWrapper\n        style={{height: leaf.nodeHeight + 'px'}}\n        isEven={leaf.n % 2 === 0}\n      >\n        {node}\n      </RightRowNodeWrapper>\n      {hasChildren && <RightRowChildren>{children}</RightRowChildren>}\n    </RightRowContainer>\n  ) : null\n}\n\nexport default RightRow\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/SheetObjectRow.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {SequenceEditorTree_SheetObject} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport {usePrism} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport React from 'react'\nimport {decideRowByPropType} from './PropWithChildrenRow'\nimport RightRow from './Row'\nimport {collectAggregateKeyframesInPrism} from './collectAggregateKeyframes'\nimport AggregatedKeyframeTrack from './AggregatedKeyframeTrack/AggregatedKeyframeTrack'\n\nconst RightSheetObjectRow: React.VFC<{\n  leaf: SequenceEditorTree_SheetObject\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({leaf, layoutP}) => {\n  return usePrism(() => {\n    const aggregatedKeyframes = collectAggregateKeyframesInPrism(leaf)\n\n    const node = (\n      <AggregatedKeyframeTrack\n        layoutP={layoutP}\n        aggregatedKeyframes={aggregatedKeyframes}\n        viewModel={leaf}\n      />\n    )\n\n    return (\n      <RightRow leaf={leaf} node={node} isCollapsed={leaf.isCollapsed}>\n        {leaf.children.map((leaf) => decideRowByPropType(leaf, layoutP))}\n      </RightRow>\n    )\n  }, [leaf, layoutP])\n}\n\nexport default RightSheetObjectRow\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/SheetRow.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {SequenceEditorTree_Sheet} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport {usePrism} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport React from 'react'\nimport RightSheetObjectRow from './SheetObjectRow'\nimport RightRow from './Row'\nimport {collectAggregateKeyframesInPrism} from './collectAggregateKeyframes'\nimport AggregatedKeyframeTrack from './AggregatedKeyframeTrack/AggregatedKeyframeTrack'\n\nconst SheetRow: React.FC<{\n  leaf: SequenceEditorTree_Sheet\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({leaf, layoutP}) => {\n  return usePrism(() => {\n    const aggregatedKeyframes = collectAggregateKeyframesInPrism(leaf)\n\n    const node = (\n      <AggregatedKeyframeTrack\n        layoutP={layoutP}\n        aggregatedKeyframes={aggregatedKeyframes}\n        viewModel={leaf}\n      />\n    )\n\n    return (\n      <RightRow leaf={leaf} node={node} isCollapsed={leaf.isCollapsed}>\n        {leaf.children.map((sheetObjectLeaf) => (\n          <RightSheetObjectRow\n            layoutP={layoutP}\n            key={'sheetObject-' + sheetObjectLeaf.sheetObject.address.objectKey}\n            leaf={sheetObjectLeaf}\n          />\n        ))}\n      </RightRow>\n    )\n  }, [leaf, layoutP])\n}\n\nexport default SheetRow\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/collectAggregateKeyframes.tsx",
    "content": "import getStudio from '@theatre/studio/getStudio'\nimport {val} from '@theatre/dataverse'\nimport type {\n  SequenceEditorTree_PrimitiveProp,\n  SequenceEditorTree_PropWithChildren,\n  SequenceEditorTree_Sheet,\n  SequenceEditorTree_SheetObject,\n} from '@theatre/studio/panels/SequenceEditorPanel/layout/tree'\nimport type {BasicKeyframe, SequenceTrackId} from '@theatre/core/types/public'\nimport type {TrackData} from '@theatre/core/types/private/core'\nimport {encodePathToProp} from '@theatre/utils/pathToProp'\nimport {uniq} from 'lodash-es'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type {StudioSheetItemKey} from '@theatre/core/types/private'\nimport {createStudioSheetItemKey} from '@theatre/studio/utils/createStudioSheetItemKey'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\n/**\n * An index over a series of keyframes that have been collected from different tracks.\n *\n * Usually constructed via {@link collectAggregateKeyframesInPrism}.\n */\nexport type AggregatedKeyframes = {\n  byPosition: Map<number, KeyframeWithTrack[]>\n  tracks: TrackWithId[]\n}\n\nexport type TrackWithId = {\n  id: SequenceTrackId\n  data: TrackData\n  sheetObject: SheetObject\n}\n\nexport type KeyframeWithTrack = {\n  kf: BasicKeyframe\n  track: TrackWithId\n  itemKey: StudioSheetItemKey\n}\n\n/**\n * Collect {@link AggregatedKeyframes} information from the given tree row with children.\n *\n * Must be called within a `prism` context.\n *\n * Implementation progress 2/10:\n *  - This currently does a lot of duplicate work for each compound rows' compound rows.\n *    - This appears to have O(N) complexity with N being the number of \"things\" in the\n *      tree, thus we don't see an immediate need to cache it further.\n *    - If concerned, consider making a playground with a lot of objects to test this kind of thing.\n *\n * Note that we do not need to filter to only tracks that should be displayed, because we\n * do not do anything counting or iterating over all tracks.\n *\n * Furthermore, we _could_ have been traversing the tree of the sheet and producing\n * an aggreagte from that, but _that_ aggregate would not take into account\n * things like filters in the `SequenceEditorPanel`, where the filter would exclude\n * certain objects and props from the tree.\n *\n */\nexport function collectAggregateKeyframesInPrism(\n  leaf:\n    | SequenceEditorTree_Sheet\n    | SequenceEditorTree_PropWithChildren\n    | SequenceEditorTree_SheetObject,\n): AggregatedKeyframes {\n  const tracks =\n    leaf.type === 'sheet'\n      ? collectAggregateKeyframesSheet(leaf)\n      : collectAggregateKeyframesCompoundOrObject(leaf)\n\n  return {\n    byPosition: keyframesByPositionFromTrackWithIds(tracks),\n    tracks,\n  }\n}\n\nfunction keyframesByPositionFromTrackWithIds(tracks: TrackWithId[]) {\n  const byPosition = new Map<number, KeyframeWithTrack[]>()\n\n  for (const track of tracks) {\n    const keyframes = keyframeUtils.getSortedKeyframesCached(\n      track.data.keyframes,\n    )\n    for (const kf of keyframes) {\n      let existing = byPosition.get(kf.position)\n      if (!existing) {\n        existing = []\n        byPosition.set(kf.position, existing)\n      }\n      existing.push({\n        kf,\n        track,\n        itemKey: createStudioSheetItemKey.forTrackKeyframe(\n          track.sheetObject,\n          track.id,\n          kf.id,\n        ),\n      })\n    }\n  }\n\n  return byPosition\n}\n\nfunction collectAggregateKeyframesSheet(\n  leaf: SequenceEditorTree_Sheet,\n): TrackWithId[] {\n  return leaf.children.flatMap(collectAggregateKeyframesCompoundOrObject)\n}\n\nfunction collectAggregateKeyframesCompoundOrObject(\n  leaf: SequenceEditorTree_PropWithChildren | SequenceEditorTree_SheetObject,\n): TrackWithId[] {\n  return leaf.children.flatMap((childLeaf) =>\n    childLeaf.type === 'propWithChildren'\n      ? collectAggregateKeyframesCompoundOrObject(childLeaf)\n      : collectAggregateKeyframesPrimitiveProp(childLeaf),\n  )\n}\n\nfunction collectAggregateKeyframesPrimitiveProp(\n  leaf: SequenceEditorTree_PrimitiveProp,\n): TrackWithId[] {\n  const sheetObject = leaf.sheetObject\n\n  const projectId = sheetObject.address.projectId\n\n  const sheetObjectTracksP =\n    getStudio().atomP.historic.coreByProject[projectId].sheetsById[\n      sheetObject.address.sheetId\n    ].sequence.tracksByObject[sheetObject.address.objectKey]\n  const trackId = val(\n    sheetObjectTracksP.trackIdByPropPath[encodePathToProp(leaf.pathToProp)],\n  )\n  if (!trackId) return []\n\n  const trackData = val(sheetObjectTracksP.trackData[trackId])\n  if (!trackData) return []\n\n  return [{id: trackId, data: trackData, sheetObject}]\n}\n\n/**\n * Collects all the snap positions for an aggregate track.\n */\nexport function collectAggregateSnapPositionsSheet(\n  leaf: SequenceEditorTree_Sheet,\n  snapTargetPositions: {[key: string]: {[key: string]: number[]}},\n): number[] {\n  return uniq(\n    leaf.children.flatMap((childLeaf) =>\n      collectAggregateSnapPositionsObjectOrCompound(\n        childLeaf,\n        snapTargetPositions,\n      ),\n    ),\n  )\n}\n\nexport function collectAggregateSnapPositionsObjectOrCompound(\n  leaf: SequenceEditorTree_PropWithChildren | SequenceEditorTree_SheetObject,\n  snapTargetPositions: {[key: string]: {[key: string]: number[]}},\n): number[] {\n  return uniq(\n    leaf.children.flatMap((childLeaf) =>\n      childLeaf.type === 'propWithChildren'\n        ? collectAggregateSnapPositionsObjectOrCompound(\n            childLeaf,\n            snapTargetPositions,\n          )\n        : collectAggregateSnapPositionsPrimitiveProp(\n            childLeaf,\n            snapTargetPositions,\n          ),\n    ),\n  )\n}\n\nfunction collectAggregateSnapPositionsPrimitiveProp(\n  leaf: SequenceEditorTree_PrimitiveProp,\n  snapTargetPositions: {[key: string]: {[key: string]: number[]}},\n): number[] {\n  const sheetObject = leaf.sheetObject\n  const projectId = sheetObject.address.projectId\n  const sheetObjectTracksP =\n    getStudio().atomP.historic.coreByProject[projectId].sheetsById[\n      sheetObject.address.sheetId\n    ].sequence.tracksByObject[sheetObject.address.objectKey]\n  const trackId = val(\n    sheetObjectTracksP.trackIdByPropPath[encodePathToProp(leaf.pathToProp)],\n  )\n  if (!trackId) return []\n\n  return snapTargetPositions[sheetObject.address.objectKey]?.[trackId] ?? []\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/Right/keyframeRowUI/ConnectorLine.tsx",
    "content": "import {lighten, saturate} from 'polished'\nimport React from 'react'\nimport styled from 'styled-components'\nimport {DOT_SIZE_PX} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/SingleKeyframeDot'\n\nconst CONNECTOR_HEIGHT = DOT_SIZE_PX / 2 + 1\nconst CONNECTOR_WIDTH_UNSCALED = 1000\n\nexport type IConnectorThemeValues = {\n  isPopoverOpen: boolean\n  isSelected: boolean\n}\n\nexport const CONNECTOR_THEME = {\n  normalColor: `#365b59`, // (greenish-blueish)ish\n  selectedColor: `#8A7842`,\n  barColor: (values: IConnectorThemeValues) => {\n    const base = values.isSelected\n      ? CONNECTOR_THEME.selectedColor\n      : CONNECTOR_THEME.normalColor\n    return values.isPopoverOpen ? saturate(0.2, lighten(0.2, base)) : base\n  },\n  hoverColor: (values: IConnectorThemeValues) => {\n    const base = values.isSelected\n      ? CONNECTOR_THEME.selectedColor\n      : CONNECTOR_THEME.normalColor\n    return values.isPopoverOpen\n      ? saturate(0.2, lighten(0.2, base))\n      : saturate(0.1, lighten(0.1, base))\n  },\n}\n\nconst Container = styled.div<IConnectorThemeValues>`\n  position: absolute;\n  background: ${CONNECTOR_THEME.barColor};\n  height: ${CONNECTOR_HEIGHT}px;\n  width: ${CONNECTOR_WIDTH_UNSCALED}px;\n\n  left: 0;\n  top: -${CONNECTOR_HEIGHT / 2}px;\n  transform-origin: top left;\n  z-index: 0;\n  cursor: ew-resize;\n\n  &:after {\n    display: block;\n    position: absolute;\n    content: ' ';\n    top: -4px;\n    bottom: -4px;\n    left: 0;\n    right: 0;\n  }\n\n  &:hover {\n    background: ${CONNECTOR_THEME.hoverColor};\n  }\n`\n\ntype IConnectorLineProps = React.PropsWithChildren<{\n  isPopoverOpen: boolean\n  openPopover?: (event: React.MouseEvent) => void\n  isSelected: boolean\n  connectorLengthInUnitSpace: number\n}>\n\nexport const ConnectorLine = React.forwardRef<\n  HTMLDivElement,\n  IConnectorLineProps\n>((props, ref) => {\n  const themeValues: IConnectorThemeValues = {\n    isPopoverOpen: props.isPopoverOpen,\n    isSelected: props.isSelected,\n  }\n\n  return (\n    <Container\n      {...themeValues}\n      ref={ref}\n      style={{\n        // Previously we used scale3d, which had weird fuzzy rendering look in both FF & Chrome\n        transform: `scaleX(calc(var(--unitSpaceToScaledSpaceMultiplier) * ${\n          props.connectorLengthInUnitSpace / CONNECTOR_WIDTH_UNSCALED\n        }))`,\n      }}\n      onClick={(e) => {\n        props.openPopover?.(e)\n      }}\n    >\n      {props.children}\n    </Container>\n  )\n})\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/selections.ts",
    "content": "import type {Prism} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport type {\n  KeyframeId,\n  ObjectAddressKey,\n  ProjectId,\n  SequenceTrackId,\n  SheetId,\n  BasicKeyframe,\n} from '@theatre/core/types/public'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {DopeSheetSelection} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {\n  commonRootOfPathsToProps,\n  decodePathToProp,\n} from '@theatre/utils/pathToProp'\nimport type {StrictRecord} from '@theatre/core/types/public'\nimport type {KeyframeWithPathToPropFromCommonRoot} from '@theatre/core/types/private'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\n/**\n * Keyframe connections are considered to be selected if the first\n * keyframe in the connection is selected\n */\nexport function isKeyframeConnectionInSelection(\n  keyframeConnection: {left: BasicKeyframe; right: BasicKeyframe},\n  selection: DopeSheetSelection,\n): boolean {\n  for (const {keyframeId} of flatSelectionKeyframeIds(selection)) {\n    if (keyframeConnection.left.id === keyframeId) return true\n  }\n  return false\n}\n\nexport type KeyframeConnectionWithAddress = {\n  projectId: ProjectId\n  sheetId: SheetId\n  objectKey: ObjectAddressKey\n  trackId: SequenceTrackId\n  left: BasicKeyframe\n  right: BasicKeyframe\n}\n\n/**\n * Returns an array of all the selected keyframes\n * that are connected to one another. Useful for changing\n * the tweening in between keyframes.\n *\n * TODO - rename to selectedKeyframeConnectionsD(), or better yet,\n * make it a `prism.ensurePrism()` function, rather than returning\n * a prism.\n */\nexport function selectedKeyframeConnections(\n  projectId: ProjectId,\n  sheetId: SheetId,\n  selection: DopeSheetSelection | undefined,\n): Prism<Array<KeyframeConnectionWithAddress>> {\n  return prism(() => {\n    if (selection === undefined) return []\n\n    let ckfs: Array<KeyframeConnectionWithAddress> = []\n\n    for (const {objectKey, trackId} of flatSelectionTrackIds(selection)) {\n      const track = val(\n        getStudio().atomP.historic.coreByProject[projectId].sheetsById[sheetId]\n          .sequence.tracksByObject[objectKey].trackData[trackId],\n      )\n\n      if (track) {\n        ckfs = ckfs.concat(\n          keyframeConnections(\n            keyframeUtils.getSortedKeyframesCached(track.keyframes),\n          )\n            .filter((kfc) => isKeyframeConnectionInSelection(kfc, selection))\n            .map(({left, right}) => ({\n              left,\n              right,\n              trackId,\n              objectKey,\n              sheetId,\n              projectId,\n            })),\n        )\n      }\n    }\n    return ckfs\n  })\n}\n\n/**\n * Given a selection, returns a list of keyframes and paths\n * that are relative to a common root path. For example, if\n * the selection contains a keyframe on both the following tracks:\n * - exObject.transform.position.x\n * - exObject.transform.position.y\n * then the result will be\n * ```\n * [{ keyframe, pathToProp: ['x']}, { keyframe, pathToProp: ['y']}]\n * ```\n *\n * If the selection contains a keyframe on\n * all the following tracks:\n * - exObject.transform.position.x\n * - exObject.transform.position.y\n * - exObject.transform.scale.x\n * then the result will be\n * ```\n * [\n *   {keyframe, pathToProp: ['position', 'x']},\n *   {keyframe, pathToProp: ['position', 'y']},\n *   {keyframe, pathToProp: ['scale',    'x']},\n * ]\n * ```\n */\nexport function copyableKeyframesFromSelection(\n  projectId: ProjectId,\n  sheetId: SheetId,\n  selection: DopeSheetSelection | undefined,\n): KeyframeWithPathToPropFromCommonRoot[] {\n  if (selection === undefined) return []\n\n  let kfs: KeyframeWithPathToPropFromCommonRoot[] = []\n\n  for (const {objectKey, trackId, keyframeIds} of flatSelectionTrackIds(\n    selection,\n  )) {\n    kfs = kfs.concat(\n      keyframesWithPaths({\n        projectId,\n        sheetId,\n        objectKey,\n        trackId,\n        keyframeIds,\n      }) ?? [],\n    )\n  }\n\n  const commonPath = commonRootOfPathsToProps(kfs.map((kf) => kf.pathToProp))\n\n  const keyframesWithCommonRootPath = kfs.map(({keyframe, pathToProp}) => ({\n    keyframe,\n    pathToProp: pathToProp.slice(commonPath.length),\n  }))\n\n  return keyframesWithCommonRootPath\n}\n\n/**\n * @see copyableKeyframesFromSelection\n */\nexport function keyframesWithPaths({\n  projectId,\n  sheetId,\n  objectKey,\n  trackId,\n  keyframeIds,\n}: {\n  projectId: ProjectId\n  sheetId: SheetId\n  objectKey: ObjectAddressKey\n  trackId: SequenceTrackId\n  keyframeIds: KeyframeId[]\n}): KeyframeWithPathToPropFromCommonRoot[] | null {\n  const tracksByObject = val(\n    getStudio().atomP.historic.coreByProject[projectId].sheetsById[sheetId]\n      .sequence.tracksByObject[objectKey],\n  )\n  const track = tracksByObject?.trackData[trackId]\n\n  if (!track) return null\n\n  const propPathByTrackId = swapKeyAndValue(\n    tracksByObject?.trackIdByPropPath || {},\n  )\n  const encodedPropPath = propPathByTrackId[trackId]\n\n  if (!encodedPropPath) return null\n  const pathToProp = [objectKey, ...decodePathToProp(encodedPropPath)]\n\n  return keyframeIds\n    .map((keyframeId) => ({\n      keyframe: keyframeUtils\n        .getSortedKeyframesCached(track.keyframes)\n        .find((keyframe) => keyframe.id === keyframeId),\n      pathToProp,\n    }))\n    .filter(\n      ({keyframe}) => keyframe !== undefined,\n    ) as KeyframeWithPathToPropFromCommonRoot[]\n}\n\nfunction swapKeyAndValue<K extends string, V extends string>(\n  obj: StrictRecord<K, V>,\n): StrictRecord<V, K> {\n  const result: StrictRecord<V, K> = {}\n  for (const [key, value] of Object.entries(obj)) {\n    result[value as V] = key\n  }\n  return result\n}\n\nexport function keyframeConnections(\n  keyframes: Array<BasicKeyframe>,\n): Array<{left: BasicKeyframe; right: BasicKeyframe}> {\n  return keyframes\n    .map((kf, i) => ({left: kf, right: keyframes[i + 1]}))\n    .slice(0, -1) // remmove the last entry because it is { left: kf, right: undefined }\n}\n\nexport function flatSelectionKeyframeIds(selection: DopeSheetSelection): Array<{\n  objectKey: ObjectAddressKey\n  trackId: SequenceTrackId\n  keyframeId: KeyframeId\n}> {\n  const result = []\n  for (const [objectKey, maybeObjectRecord] of Object.entries(\n    selection?.byObjectKey ?? {},\n  )) {\n    for (const [trackId, maybeTrackRecord] of Object.entries(\n      maybeObjectRecord?.byTrackId ?? {},\n    )) {\n      for (const keyframeId of Object.keys(\n        maybeTrackRecord?.byKeyframeId ?? {},\n      )) {\n        result.push({objectKey, trackId, keyframeId})\n      }\n    }\n  }\n  return result\n}\n\nexport function flatSelectionTrackIds(selection: DopeSheetSelection): Array<{\n  objectKey: ObjectAddressKey\n  trackId: SequenceTrackId\n  keyframeIds: Array<KeyframeId>\n}> {\n  const result = []\n  for (const [objectKey, maybeObjectRecord] of Object.entries(\n    selection?.byObjectKey ?? {},\n  )) {\n    for (const [trackId, maybeTrackRecord] of Object.entries(\n      maybeObjectRecord?.byTrackId ?? {},\n    )) {\n      result.push({\n        objectKey,\n        trackId,\n        keyframeIds: Object.keys(maybeTrackRecord?.byKeyframeId ?? {}),\n      })\n    }\n  }\n  return result\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/DopeSheet/setCollapsedSheetObjectOrCompoundProp.tsx",
    "content": "import getStudio from '@theatre/studio/getStudio'\nimport type {\n  SheetAddress,\n  WithoutSheetInstance,\n} from '@theatre/core/types/public'\nimport type {StudioSheetItemKey} from '@theatre/core/types/private'\n\nexport function setCollapsedSheetItem(\n  isCollapsed: boolean,\n  toCollapse: {\n    sheetAddress: WithoutSheetInstance<SheetAddress>\n    sheetItemKey: StudioSheetItemKey\n  },\n) {\n  getStudio().transaction(({stateEditors}) => {\n    stateEditors.studio.ahistoric.projects.stateByProjectId.stateBySheetId.sequence.sequenceEditorCollapsableItems.set(\n      {\n        ...toCollapse.sheetAddress,\n        studioSheetItemKey: toCollapse.sheetItemKey,\n        isCollapsed,\n      },\n    )\n  })\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/FrameGrid/FrameGrid.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {$FixMe} from '@theatre/core/types/public'\nimport type {Pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport React, {useLayoutEffect, useMemo, useRef, useState} from 'react'\nimport styled from 'styled-components'\nimport createGrid from './createGrid'\nimport getStudio from '@theatre/studio/getStudio'\n\nconst Container = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  pointer-events: none;\n`\n\nconst TheCanvas = styled.canvas`\n  position: relative;\n  left: 0;\n`\n\n/**\n * from https://github.com/jonobr1/two.js/blob/758672c280278da2980b57e42ecb96eab4fe7a95/src/utils/get-ratio.js#L20\n */\nconst getBackingStoreRatio = (ctx: CanvasRenderingContext2D): number => {\n  const _ctx = ctx as $FixMe\n  return (\n    _ctx.webkitBackingStorePixelRatio ||\n    _ctx.mozBackingStorePixelRatio ||\n    _ctx.msBackingStorePixelRatio ||\n    _ctx.oBackingStorePixelRatio ||\n    _ctx.backingStorePixelRatio ||\n    1\n  )\n}\n\nconst getDevicePixelRatio = () => window.devicePixelRatio || 1\n\nconst getRatio = (ctx: CanvasRenderingContext2D) => {\n  return getDevicePixelRatio() / getBackingStoreRatio(ctx)\n}\n\nconst FrameGrid: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  width: number\n  height: number\n}> = ({layoutP, width, height}) => {\n  const containerRef = useRef<HTMLDivElement>(null)\n  const [canvas, canvasRef] = useState<HTMLCanvasElement | null>(null)\n\n  const {ctx, ratio} = useMemo(() => {\n    if (!canvas) return {}\n    const ctx = canvas.getContext('2d')!\n    const ratio = getRatio(ctx)\n\n    return {ctx, ratio}\n  }, [canvas])\n\n  useLayoutEffect(() => {\n    if (!ctx) return\n\n    canvas!.width = width * ratio!\n    canvas!.height = height * ratio!\n\n    const untap = prism(() => {\n      const sequence = val(layoutP.sheet).getSequence()\n      return {\n        ctx,\n        clippedSpaceRange: val(layoutP.clippedSpace.range),\n        clippedSpaceWidth: val(layoutP.clippedSpace.width),\n        unitSpaceToClippedSpace: val(layoutP.clippedSpace.fromUnitSpace),\n        height,\n        leftPadding: val(layoutP.scaledSpace.leftPadding),\n        fps: sequence.subUnitsPerUnit,\n        snapToGrid: (n: number) => sequence.closestGridPosition(n),\n      }\n    }).onChange(\n      getStudio().ticker,\n      (p) => {\n        ctx.save()\n        ctx.scale(ratio!, ratio!)\n        drawGrid(p)\n        ctx.restore()\n      },\n      true,\n    )\n\n    return () => {\n      untap()\n    }\n  }, [ctx, width, height, layoutP])\n\n  return (\n    <Container ref={containerRef} style={{width: width + 'px'}}>\n      <TheCanvas\n        ref={canvasRef}\n        style={{\n          width: width + 'px',\n          height: height + 'px',\n        }}\n      />\n    </Container>\n  )\n}\n\nexport default FrameGrid\n\nfunction drawGrid(\n  opts: {\n    clippedSpaceWidth: number\n    height: number\n    ctx: CanvasRenderingContext2D\n    leftPadding: number\n    unitSpaceToClippedSpace: SequenceEditorPanelLayout['clippedSpace']['fromUnitSpace']\n    snapToGrid: (posInUnitSpace: number) => number\n  } & Parameters<typeof createGrid>[0],\n) {\n  const {clippedSpaceWidth, height, ctx, unitSpaceToClippedSpace, snapToGrid} =\n    opts\n\n  ctx.clearRect(0, 0, clippedSpaceWidth, height)\n\n  createGrid(opts, (_posInUnitSpace, isFullSecond) => {\n    const posInUnitSpace = snapToGrid(_posInUnitSpace)\n    const posInClippedSpace = Math.floor(\n      unitSpaceToClippedSpace(posInUnitSpace),\n    )\n\n    ctx.strokeStyle = isFullSecond\n      ? 'rgba(225, 225, 225, 0.04)'\n      : 'rgba(255, 255, 255, 0.01)'\n\n    ctx.beginPath()\n    ctx.moveTo(posInClippedSpace, 0)\n    ctx.lineTo(posInClippedSpace, height)\n    ctx.stroke()\n    ctx.closePath()\n  })\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/FrameGrid/StampsGrid.tsx",
    "content": "import type {ISequencePositionFormatter} from '@theatre/core/sequences/Sequence'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {Pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport {darken} from 'polished'\nimport React, {useLayoutEffect, useRef, useState} from 'react'\nimport styled from 'styled-components'\nimport createGrid from './createGrid'\nimport getStudio from '@theatre/studio/getStudio'\n\nconst Container = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  pointer-events: none;\n`\n\nexport const stampsGridTheme = {\n  fullUnitStampColor: `#6a6a6a`,\n  stampFontSize: '10px',\n  get subUnitStampColor(): string {\n    return darken(0.2, stampsGridTheme.fullUnitStampColor)\n  },\n}\n\nconst TheStamps = styled.div`\n  position: absolute;\n  top: 0;\n  height: 100%;\n  left: 0;\n  overflow: hidden;\n  z-index: 2;\n  will-change: transform;\n  pointer-events: none;\n`\n\nconst FullSecondStampsContainer = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n\n  & > span {\n    position: absolute;\n    display: block;\n    top: 9px;\n    left: -10px;\n    color: ${stampsGridTheme.fullUnitStampColor};\n    text-align: center;\n    font-size: ${stampsGridTheme.stampFontSize};\n    width: 20px;\n\n    &.full-unit {\n      color: ${stampsGridTheme.fullUnitStampColor};\n    }\n\n    &.sub-unit {\n      color: ${stampsGridTheme.subUnitStampColor};\n    }\n  }\n\n  pointer-events: none;\n`\n\nconst StampsGrid: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  width: number\n  height: number\n}> = ({layoutP, width}) => {\n  const containerRef = useRef<HTMLDivElement>(null)\n  const [fullSecondStampsContainer, fullSecondStampsContainerRef] =\n    useState<HTMLDivElement | null>(null)\n\n  useLayoutEffect(() => {\n    if (!fullSecondStampsContainer) return\n\n    return prism(() => {\n      const sequence = val(layoutP.sheet).getSequence()\n      return {\n        fullSecondStampsContainer,\n        clippedSpaceRange: val(layoutP.clippedSpace.range),\n        clippedSpaceWidth: val(layoutP.clippedSpace.width),\n        unitSpaceToClippedSpace: val(layoutP.clippedSpace.fromUnitSpace),\n        leftPadding: val(layoutP.scaledSpace.leftPadding),\n        fps: sequence.subUnitsPerUnit,\n        sequencePositionFormatter: sequence.positionFormatter,\n        snapToGrid: (n: number) => sequence.closestGridPosition(n),\n      }\n    }).onChange(getStudio().ticker, drawStamps, true)\n  }, [fullSecondStampsContainer, width, layoutP])\n\n  return (\n    <Container ref={containerRef} style={{width: width + 'px'}}>\n      <TheStamps style={{width: width + 'px'}}>\n        <FullSecondStampsContainer ref={fullSecondStampsContainerRef} />\n      </TheStamps>\n    </Container>\n  )\n}\n\nexport default StampsGrid\n\nfunction drawStamps(\n  opts: {\n    fullSecondStampsContainer: HTMLDivElement\n    sequencePositionFormatter: ISequencePositionFormatter\n    snapToGrid: (posInUnitSpace: number) => number\n    unitSpaceToClippedSpace: SequenceEditorPanelLayout['clippedSpace']['fromUnitSpace']\n  } & Parameters<typeof createGrid>[0],\n) {\n  const {\n    fullSecondStampsContainer,\n    sequencePositionFormatter,\n    snapToGrid,\n    unitSpaceToClippedSpace,\n  } = opts\n  let innerHTML = ''\n\n  createGrid(opts, (_posInUnitSpace, isFullUnit) => {\n    const posInUnitSpace = snapToGrid(_posInUnitSpace)\n    const posInClippedSpace = unitSpaceToClippedSpace(posInUnitSpace)\n\n    if (isFullUnit) {\n      innerHTML += createStampClass(\n        sequencePositionFormatter.formatFullUnitForGrid(posInUnitSpace),\n        posInClippedSpace,\n        'full-unit',\n      )\n    } else {\n      innerHTML += createStampClass(\n        sequencePositionFormatter.formatSubUnitForGrid(posInUnitSpace),\n        posInClippedSpace,\n        'sub-unit',\n      )\n    }\n  })\n\n  fullSecondStampsContainer.innerHTML = innerHTML\n}\n\nfunction createStampClass(\n  pos: string,\n  x: number,\n  type: 'full-unit' | 'sub-unit',\n) {\n  return `<span class=\"${type}\" style=\"transform: translate3d(${x.toFixed(\n    1,\n  )}px, -50%, 0);\">${pos}</span>`\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/FrameGrid/createGrid.ts",
    "content": "import type {IRange} from '@theatre/core/types/public'\nimport {memoize} from 'lodash-es'\n\nconst getFactorsOfNumber = memoize((divisionsPerUnit: number): number[] => {\n  const factors = []\n  for (let i = 1; i <= divisionsPerUnit; i++) {\n    if (divisionsPerUnit % i === 0) {\n      factors.push(i)\n    }\n  }\n  return factors\n})\n\n/**\n * Calls cb() for every grid line that must be drawn.\n *\n * @remarks\n * For the sake of simplicity, I've named the variables as if the sequence's\n * length is counted in seconds, and the sub-unit is called fps\n * (frames per second). But the algorithm should work for any fps rate, and also\n * non-time-based sequences.\n */\nexport default function createGrid(\n  {\n    clippedSpaceRange,\n    clippedSpaceWidth,\n    fps,\n    gapWidth = 120,\n  }: {\n    /**\n     * the width of the canvas, in pixels\n     */\n    clippedSpaceWidth: number\n    clippedSpaceRange: IRange\n    fps: number\n    /**\n     * the minimum amount of space between two grid lines\n     */\n    gapWidth?: number\n  },\n  cb: (posInUnitSpace: number, isFullUnit: boolean) => void,\n): void {\n  // If fps is 60, then frameLengthInSeconeds would be 1/60 => 0.033\n  const frameLengthInSeconeds = 1 / fps\n\n  // how much of the timeline is visible.\n  const clippedSpaceLengthInSeconds =\n    clippedSpaceRange[1] - clippedSpaceRange[0] // eg: if start: 1 AND end: 3 THEN length = 2\n\n  // how many pixels of space does one frame take\n  const frameWidthInScreenSpace =\n    clippedSpaceWidth / (fps * clippedSpaceLengthInSeconds)\n\n  // Number of frames that fit in the smallest cell possible.\n  // a cell is basically the space between two grid lines\n  const numberOfFramesFittingInMinimumCellWidth = Math.floor(\n    gapWidth / frameWidthInScreenSpace,\n  )\n\n  // Number of frames in each cell, so that lines would be drawn at full seconds\n  const numberOfFramesPerCell =\n    // if we can't fit a full 60 frames in a cell (or a multiple of 60 frames),\n    numberOfFramesFittingInMinimumCellWidth < fps\n      ? (getFactorsOfNumber(fps).find(\n          // then try fitting 30 frames, or 20, or 15, and other factors of 60\n          (factor) => factor >= numberOfFramesFittingInMinimumCellWidth,\n        ) as number)\n      : // otherwise, determine how many full seconds we can fit in a cell\n        fps * Math.floor(numberOfFramesFittingInMinimumCellWidth / fps)\n\n  const cellLengthInSeconds = numberOfFramesPerCell * frameLengthInSeconeds\n\n  // the number of the first cell we'll draw\n  const startCell = Math.floor(clippedSpaceRange[0] / cellLengthInSeconds)\n\n  // and the last one\n  const endCell = Math.ceil(clippedSpaceRange[1] / cellLengthInSeconds)\n\n  for (let cell = startCell; cell <= endCell; cell++) {\n    const posInUnitSpace = cell * cellLengthInSeconds\n\n    const isFullSecond = posInUnitSpace % 1 === 0\n\n    cb(posInUnitSpace, isFullSecond)\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/FrameStampPositionProvider.tsx",
    "content": "import type {Prism, Pointer} from '@theatre/dataverse'\nimport {Atom, prism, val} from '@theatre/dataverse'\nimport mousePositionD from '@theatre/studio/utils/mousePositionD'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport {inRange, last} from 'lodash-es'\nimport React, {\n  createContext,\n  useCallback,\n  useContext,\n  useLayoutEffect,\n  useMemo,\n  useRef,\n} from 'react'\nimport type {SequenceEditorPanelLayout} from './layout/layout'\n\ntype FrameStampPositionLock = {\n  unlock: () => void\n  set: (pointerPositonInUnitSpace: number) => void\n}\n\nexport enum FrameStampPositionType {\n  hidden,\n  locked,\n  snapped,\n  free,\n}\n\nconst context = createContext<{\n  currentD: Prism<[pos: number, posType: FrameStampPositionType]>\n  getLock(): FrameStampPositionLock\n}>(null as $IntentionalAny)\n\ntype LockItem = {\n  position: [\n    pos: number,\n    posType: FrameStampPositionType.locked | FrameStampPositionType.hidden,\n  ]\n  id: number\n}\n\nlet lastLockId = 0\n\n/**\n * Provides snapping positions to \"stamps\".\n *\n * One example of a stamp includes the \"Keyframe Dot\" which show a `⌜⌞⌝⌟` kinda UI\n * around the dot when dragged over.\n */\nconst FrameStampPositionProvider: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  children: React.ReactNode\n}> = ({children, layoutP}) => {\n  const locksAtom = useMemo(() => new Atom<LockItem[]>([]), [])\n  const currentD = useMemo(\n    () =>\n      prism(() => {\n        const pointerPos = prism\n          .memo('p', () => pointerPositionInUnitSpace(layoutP), [layoutP])\n          .getValue()\n\n        const locks = val(locksAtom.pointer)\n\n        if (locks.length > 0) {\n          return last(locks)!.position\n        } else {\n          return pointerPos\n        }\n      }),\n    [layoutP],\n  )\n  const getLock = useCallback(() => {\n    const id = lastLockId++\n    locksAtom.reduce((list) => [\n      ...list,\n      {\n        id,\n        position: [-1, FrameStampPositionType.hidden],\n      },\n    ])\n\n    const unlock = () => {\n      locksAtom.reduce((list) => list.filter((lock) => lock.id !== id))\n    }\n\n    const set = (posInUnitSpace: number) => {\n      locksAtom.reduce((list) => {\n        const index = list.findIndex((lock) => lock.id === id)\n        if (index === -1) {\n          console.warn(`Lock is already freed. This is a bug.`)\n          return list\n        }\n\n        const newList = [...list]\n\n        newList.splice(index, 1, {\n          id,\n          position: [\n            posInUnitSpace,\n            posInUnitSpace === -1\n              ? FrameStampPositionType.hidden\n              : FrameStampPositionType.locked,\n          ],\n        })\n\n        return newList\n      })\n    }\n\n    return {\n      set,\n      unlock,\n    }\n  }, [])\n\n  const value = {\n    currentD,\n    getLock,\n  }\n\n  return <context.Provider value={value}>{children}</context.Provider>\n}\n\nexport const useFrameStampPositionD = () => useContext(context).currentD\n\n/** Version of {@link useLockFrameStampPosition} which allows you to directly set status of a lock. */\nexport const useLockFrameStampPositionRef = () => {\n  const {getLock} = useContext(context)\n  const lockRef = useRef<undefined | ReturnType<typeof getLock>>()\n\n  useLayoutEffect(() => {\n    return () => {\n      lockRef.current?.unlock()\n    }\n  }, [])\n\n  return useMemo(() => {\n    let prevLock: {shouldLock: boolean; pos: number} | undefined = undefined\n    return (shouldLock: boolean, posValue: number) => {\n      // Do if shouldLock changed\n      if (prevLock?.shouldLock !== shouldLock) {\n        if (shouldLock) {\n          lockRef.current = getLock()\n        } else {\n          lockRef.current?.unlock()\n        }\n      }\n\n      // Do if position changed\n      if (prevLock?.pos !== posValue) {\n        if (shouldLock) {\n          lockRef.current?.set(posValue)\n        }\n      }\n\n      // Set arguments we are going to diff against next time\n      prevLock = {shouldLock, pos: posValue}\n    }\n  }, [getLock])\n}\n\nexport const useLockFrameStampPosition = (shouldLock: boolean, val: number) => {\n  const {getLock} = useContext(context)\n  const lockRef = useRef<undefined | ReturnType<typeof getLock>>()\n\n  useLayoutEffect(() => {\n    if (!shouldLock) return\n    lockRef.current = getLock()\n\n    return () => {\n      lockRef.current!.unlock()\n    }\n  }, [shouldLock, getLock])\n\n  useLayoutEffect(() => {\n    if (shouldLock) {\n      lockRef.current!.set(val)\n    }\n  }, [val, shouldLock])\n}\n\n/**\n * This attribute is used so that when the cursor hovers over a keyframe,\n * the framestamp snaps to the position of that keyframe.\n *\n * Use as a spread in a React element.\n *\n * @example\n * ```tsx\n * <div {...includeLockFrameStampAttrs(10)}/>\n * ```\n *\n * @remarks\n * Elements that need this behavior must set a data attribute like so:\n * <div data-theatre-lock-framestamp-to=\"120.55\" />\n * Setting this attribute to \"hide\" hides the stamp.\n *\n * @see lockedCursorCssVarName - CSS variable used to set the cursor on an element that\n * should lock the framestamp. Look for usages.\n * @see pointerEventsAutoInNormalMode - CSS snippet used to correctly set\n * `pointer-events` on an element that should lock the framestamp.\n *\n * See {@link FrameStampPositionProvider}\n *\n */\nexport const includeLockFrameStampAttrs = (value: number | 'hide') => ({\n  [ATTR_LOCK_FRAMESTAMP]: value === 'hide' ? value : value.toFixed(3),\n})\n\nconst ATTR_LOCK_FRAMESTAMP = 'data-theatre-lock-framestamp-to'\n\nconst pointerPositionInUnitSpace = (\n  layoutP: Pointer<SequenceEditorPanelLayout>,\n): Prism<[pos: number, posType: FrameStampPositionType]> => {\n  return prism(() => {\n    const rightDims = val(layoutP.rightDims)\n    const clippedSpaceToUnitSpace = val(layoutP.clippedSpace.toUnitSpace)\n\n    const mousePos = val(mousePositionD)\n    if (!mousePos) return [-1, FrameStampPositionType.hidden]\n\n    for (const el of mousePos.composedPath()) {\n      if (!(el instanceof HTMLElement || el instanceof SVGElement)) break\n\n      if (el.hasAttribute(ATTR_LOCK_FRAMESTAMP)) {\n        const val = el.getAttribute(ATTR_LOCK_FRAMESTAMP)\n        if (typeof val !== 'string') continue\n        if (val === 'hide') return [-1, FrameStampPositionType.hidden]\n        const double = parseFloat(val)\n\n        if (isFinite(double) && double >= 0)\n          return [double, FrameStampPositionType.snapped]\n      }\n    }\n\n    const {clientX, clientY} = mousePos\n\n    const {screenX: x, screenY: y, width: rightWidth, height} = rightDims\n\n    if (\n      inRange(clientX, x, x + rightWidth) &&\n      inRange(\n        clientY,\n        y + 16 /* leaving a bit of space for the top stip here */,\n        y + height,\n      )\n    ) {\n      const posInRightDims = clientX - x\n      const posInUnitSpace = clippedSpaceToUnitSpace(posInRightDims)\n\n      return [posInUnitSpace, FrameStampPositionType.free]\n    } else {\n      return [-1, FrameStampPositionType.hidden]\n    }\n  })\n}\n\nexport default FrameStampPositionProvider\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/BasicKeyframedTrack.tsx",
    "content": "import type {TrackData} from '@theatre/core/types/private/core'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type {PathToProp} from '@theatre/utils/pathToProp'\nimport {createStudioSheetItemKey} from '@theatre/studio/utils/createStudioSheetItemKey'\nimport type {\n  $IntentionalAny,\n  BasicKeyframe,\n  VoidFn,\n} from '@theatre/core/types/public'\nimport type {Pointer} from '@theatre/dataverse'\nimport React, {useMemo, useRef, useState} from 'react'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport KeyframeEditor from './KeyframeEditor/KeyframeEditor'\nimport {__private} from '@theatre/core'\nimport type {\n  PropTypeConfig_AllSimples,\n  SequenceTrackId,\n} from '@theatre/core/types/public'\nimport {useVal} from '@theatre/react'\nimport type {GraphEditorColors} from '@theatre/core/types/private'\nimport {graphEditorColors} from '@theatre/sync-server/state/schema'\n\nconst {getPropConfigByPath, isPropConfigComposite, valueInProp} =\n  __private.propTypeUtils\n\nconst {keyframeUtils} = __private\n\nexport type ExtremumSpace = {\n  fromValueSpace: (v: number) => number\n  toValueSpace: (v: number) => number\n  deltaToValueSpace: (v: number) => number\n  lock(): VoidFn\n}\n\nconst BasicKeyframedTrack: React.VFC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  sheetObject: SheetObject\n  pathToProp: PathToProp\n  trackId: SequenceTrackId\n  trackData: TrackData\n  color: keyof GraphEditorColors\n}> = React.memo(\n  ({layoutP, trackData, sheetObject, trackId, color, pathToProp}) => {\n    const propConfig = getPropConfigByPath(\n      useVal(sheetObject.template.configPointer),\n      pathToProp,\n    )! as PropTypeConfig_AllSimples\n\n    if (isPropConfigComposite(propConfig)) {\n      console.error(`Composite prop types cannot be keyframed`)\n      return <></>\n    }\n\n    const [areExtremumsLocked, setAreExtremumsLocked] = useState<boolean>(false)\n    const lockExtremums = useMemo(() => {\n      const locks = new Set<VoidFn>()\n      return function lockExtremums() {\n        const shouldLock = locks.size === 0\n        locks.add(unlock)\n        if (shouldLock) setAreExtremumsLocked(true)\n\n        function unlock() {\n          const wasLocked = locks.size > 0\n          locks.delete(unlock)\n          if (wasLocked && locks.size === 0) setAreExtremumsLocked(false)\n        }\n\n        return unlock\n      }\n    }, [])\n\n    const extremumSpace: ExtremumSpace = useMemo(() => {\n      const sortedKeyframes = keyframeUtils.getSortedKeyframesCached(\n        trackData.keyframes,\n      )\n      const extremums =\n        propConfig.type === 'number'\n          ? calculateScalarExtremums(sortedKeyframes, propConfig)\n          : calculateNonScalarExtremums(sortedKeyframes)\n\n      const fromValueSpace = (val: number): number =>\n        (val - extremums[0]) / (extremums[1] - extremums[0])\n\n      const toValueSpace = (ex: number): number =>\n        extremums[0] + deltaToValueSpace(ex)\n\n      const deltaToValueSpace = (ex: number): number =>\n        ex * (extremums[1] - extremums[0])\n\n      return {\n        fromValueSpace,\n        toValueSpace,\n        deltaToValueSpace,\n        lock: lockExtremums,\n      }\n    }, [trackData.keyframes])\n\n    const cachedExtremumSpace = useRef<ExtremumSpace>(\n      undefined as $IntentionalAny,\n    )\n    if (!areExtremumsLocked) {\n      cachedExtremumSpace.current = extremumSpace\n    }\n\n    const sortedKeyframes = keyframeUtils.getSortedKeyframesCached(\n      trackData.keyframes,\n    )\n\n    const keyframeEditors = sortedKeyframes.map((kf, index) => (\n      <KeyframeEditor\n        pathToProp={pathToProp}\n        propConfig={propConfig}\n        itemKey={createStudioSheetItemKey.forTrackKeyframe(\n          sheetObject,\n          trackId,\n          kf.id,\n        )}\n        keyframe={kf}\n        index={index}\n        trackData={trackData}\n        layoutP={layoutP}\n        sheetObject={sheetObject}\n        trackId={trackId}\n        isScalar={propConfig.type === 'number'}\n        key={kf.id}\n        extremumSpace={cachedExtremumSpace.current}\n        color={color}\n      />\n    ))\n\n    const iconColor = graphEditorColors[color].iconColor\n\n    return (\n      <g\n        style={{\n          // @ts-ignore\n          '--main-color': iconColor,\n        }}\n      >\n        {keyframeEditors}\n      </g>\n    )\n  },\n)\n\nexport default BasicKeyframedTrack\n\ntype Extremums = [min: number, max: number]\n\nfunction calculateScalarExtremums(\n  keyframes: BasicKeyframe[],\n  propConfig: PropTypeConfig_AllSimples,\n): Extremums {\n  let min = Infinity,\n    max = -Infinity\n\n  function check(n: number): void {\n    min = Math.min(n, min)\n    max = Math.max(n, max)\n  }\n\n  keyframes.forEach((cur, i) => {\n    const curVal = valueInProp(cur.value, propConfig) as number\n    check(curVal)\n    if (!cur.connectedRight) return\n    const next = keyframes[i + 1]\n    if (!next) return\n    const diff = (typeof next.value === 'number' ? next.value : 1) - curVal\n    check(curVal + cur.handles[3] * diff)\n    check(curVal + next.handles[1] * diff)\n  })\n\n  return [min, max]\n}\n\nfunction calculateNonScalarExtremums(keyframes: BasicKeyframe[]): Extremums {\n  let min = 0,\n    max = 1\n\n  function check(n: number): void {\n    min = Math.min(n, min)\n    max = Math.max(n, max)\n  }\n\n  keyframes.forEach((cur, i) => {\n    if (!cur.connectedRight) return\n    const next = keyframes[i + 1]\n    if (!next) return\n    check(cur.handles[3])\n    check(next.handles[1])\n  })\n\n  return [min, max]\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/KeyframeEditor/Curve.tsx",
    "content": "import {__private} from '@theatre/core'\nimport getStudio from '@theatre/studio/getStudio'\nimport useContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/useContextMenu'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport React from 'react'\nimport styled from 'styled-components'\nimport type KeyframeEditor from './KeyframeEditor'\n\nconst {valueInProp} = __private.propTypeUtils\nconst {keyframeUtils} = __private\n\nconst SVGPath = styled.path`\n  stroke-width: 2;\n  stroke: var(--main-color);\n  fill: none;\n  vector-effect: non-scaling-stroke;\n`\n\ntype IProps = Parameters<typeof KeyframeEditor>[0]\n\n// for keyframe.type === 'hold'\nconst pathForHoldType = `M 0 0 L 1 0 L 1 1`\n\nconst Curve: React.VFC<IProps> = (props) => {\n  const {index, trackData} = props\n  const cur = keyframeUtils.getSortedKeyframesCached(trackData.keyframes)[index]\n  const next = keyframeUtils.getSortedKeyframesCached(trackData.keyframes)[\n    index + 1\n  ]\n\n  const connectorLengthInUnitSpace = next.position - cur.position\n\n  const [nodeRef, node] = useRefAndState<SVGPathElement | null>(null)\n\n  const [contextMenu] = useConnectorContextMenu(node, props)\n\n  const curValue = props.isScalar\n    ? (valueInProp(cur.value, props.propConfig) as number)\n    : 0\n  const nextValue = props.isScalar\n    ? (valueInProp(next.value, props.propConfig) as number)\n    : 1\n  const leftYInExtremumSpace = props.extremumSpace.fromValueSpace(curValue)\n  const rightYInExtremumSpace = props.extremumSpace.fromValueSpace(nextValue)\n\n  const heightInExtremumSpace = rightYInExtremumSpace - leftYInExtremumSpace\n\n  const transform = transformBox(\n    cur.position,\n    leftYInExtremumSpace,\n    connectorLengthInUnitSpace,\n    heightInExtremumSpace,\n  )\n\n  const x1 = cur.handles[2]\n  const y1 = cur.handles[3]\n\n  const x2 = next.handles[0]\n  const y2 = next.handles[1]\n\n  const pathD = `M 0 0 C ${x1} ${y1} ${x2} ${y2} 1 1`\n\n  return (\n    <>\n      <SVGPath\n        ref={nodeRef}\n        d={!cur.type || cur.type === 'bezier' ? pathD : pathForHoldType}\n        style={{\n          transform,\n        }}\n      />\n\n      {contextMenu}\n    </>\n  )\n}\n\n/**\n * Assuming a box such that: `{x: 0, y: 0, width: 1px, height: 1px}`\n * and given the desired coordinates of:\n * `{x: xInUnitSpace, y: yInExtremumSpace, width: widthInUnitSpace, height: heightInExtremumSpace}`,\n * `transformBox()` returns a CSS transform that transforms the box into its right dimensions\n * in the GraphEditor space.\n */\nexport function transformBox(\n  xInUnitSpace: number,\n  yInExtremumSpace: number,\n  widthInUnitSpace: number,\n  heightInExtremumSpace: number,\n): string {\n  const translateX = `calc(var(--unitSpaceToScaledSpaceMultiplier) * ${xInUnitSpace}px)`\n\n  const translateY = `calc((var(--graphEditorVerticalSpace) - var(--graphEditorVerticalSpace) * ${yInExtremumSpace}) * 1px)`\n\n  if (widthInUnitSpace === 0) {\n    widthInUnitSpace = 0.0001\n  }\n\n  const scaleX = `calc(var(--unitSpaceToScaledSpaceMultiplier) * ${widthInUnitSpace})`\n\n  if (heightInExtremumSpace === 0) {\n    heightInExtremumSpace = 0.001\n  }\n\n  const scaleY = `calc(var(--graphEditorVerticalSpace) * ${\n    heightInExtremumSpace * -1\n  })`\n\n  return `translate(${translateX}, ${translateY}) scale(${scaleX}, ${scaleY})`\n}\n\nexport default Curve\n\nfunction useConnectorContextMenu(node: SVGElement | null, props: IProps) {\n  const {index, trackData} = props\n  const cur = keyframeUtils.getSortedKeyframesCached(trackData.keyframes)[index]\n  const next = keyframeUtils.getSortedKeyframesCached(trackData.keyframes)[\n    index + 1\n  ]\n\n  return useContextMenu(node, {\n    items: () => {\n      return [\n        {\n          type: 'normal',\n          label: 'Delete',\n          callback: () => {\n            getStudio()!.transaction(({stateEditors}) => {\n              const {deleteKeyframes} =\n                stateEditors.coreByProject.historic.sheetsById.sequence\n\n              deleteKeyframes({\n                ...props.sheetObject.address,\n                trackId: props.trackId,\n                keyframeIds: [cur.id, next.id],\n              })\n            })\n          },\n        },\n      ]\n    },\n  })\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/KeyframeEditor/CurveHandle.tsx",
    "content": "import getStudio from '@theatre/studio/getStudio'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport useContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/useContextMenu'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {val} from '@theatre/dataverse'\nimport {clamp} from 'lodash-es'\nimport React, {useMemo, useRef} from 'react'\nimport styled from 'styled-components'\nimport {transformBox} from './Curve'\nimport type KeyframeEditor from './KeyframeEditor'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nexport const dotSize = 6\n\nconst Circle = styled.circle`\n  stroke-width: 1px;\n  vector-effect: non-scaling-stroke;\n  fill: var(--main-color);\n  r: 2px;\n  pointer-events: none;\n`\n\nconst HitZone = styled.circle`\n  stroke-width: 6px;\n  vector-effect: non-scaling-stroke;\n  r: 6px;\n  fill: transparent;\n  cursor: move;\n  ${pointerEventsAutoInNormalMode};\n  &:hover {\n  }\n  &:hover + ${Circle} {\n    r: 6px;\n  }\n`\n\nconst Line = styled.path`\n  stroke-width: 1;\n  stroke: var(--main-color);\n  /* stroke: gray; */\n  fill: none;\n  vector-effect: non-scaling-stroke;\n`\n\ntype Which = 'left' | 'right'\n\ntype IProps = Parameters<typeof KeyframeEditor>[0] & {which: Which}\n\nconst CurveHandle: React.VFC<IProps> = (props) => {\n  const [ref, node] = useRefAndState<SVGCircleElement | null>(null)\n\n  const {index, trackData} = props\n  const cur = keyframeUtils.getSortedKeyframesCached(trackData.keyframes)[index]\n  const next = keyframeUtils.getSortedKeyframesCached(trackData.keyframes)[\n    index + 1\n  ]\n\n  const [contextMenu] = useOurContextMenu(node, props)\n  useOurDrags(node, props)\n\n  const posInDiffSpace =\n    props.which === 'left' ? cur.handles[2] : next.handles[0]\n\n  const posInUnitSpace =\n    cur.position + (next.position - cur.position) * posInDiffSpace\n\n  const valInDiffSpace =\n    props.which === 'left' ? cur.handles[3] : next.handles[1]\n\n  const curValue = props.isScalar ? (cur.value as number) : 0\n  const nextValue = props.isScalar ? (next.value as number) : 1\n\n  const value = curValue + (nextValue - curValue) * valInDiffSpace\n\n  const valInExtremumSpace = props.extremumSpace.fromValueSpace(value)\n\n  const heightInExtremumSpace =\n    valInExtremumSpace -\n    props.extremumSpace.fromValueSpace(\n      props.which === 'left' ? curValue : nextValue,\n    )\n\n  const lineTransform = transformBox(\n    props.which === 'left' ? cur.position : next.position,\n    props.extremumSpace.fromValueSpace(\n      props.which === 'left' ? curValue : nextValue,\n    ),\n    posInUnitSpace - (props.which === 'left' ? cur.position : next.position),\n    heightInExtremumSpace,\n  )\n\n  return (\n    <g>\n      <HitZone\n        ref={ref}\n        style={{\n          // @ts-ignore\n          cx: `calc(var(--unitSpaceToScaledSpaceMultiplier) * ${posInUnitSpace} * 1px)`,\n          cy: `calc((var(--graphEditorVerticalSpace) - var(--graphEditorVerticalSpace) * ${valInExtremumSpace}) * 1px)`,\n        }}\n      ></HitZone>\n      <Circle\n        style={{\n          // @ts-ignore\n          cx: `calc(var(--unitSpaceToScaledSpaceMultiplier) * ${posInUnitSpace} * 1px)`,\n          cy: `calc((var(--graphEditorVerticalSpace) - var(--graphEditorVerticalSpace) * ${valInExtremumSpace}) * 1px)`,\n        }}\n      ></Circle>\n      <Line\n        d=\"M 0 0 L 1 1\"\n        style={{\n          transform: lineTransform,\n        }}\n      />\n      {contextMenu}\n    </g>\n  )\n}\n\nexport default CurveHandle\n\nfunction useOurDrags(node: SVGCircleElement | null, props: IProps): void {\n  const propsRef = useRef(props)\n  propsRef.current = props\n\n  const handlers = useMemo<Parameters<typeof useDrag>[1]>(() => {\n    return {\n      debugName: 'CurveHandler/useOurDrags',\n      lockCSSCursorTo: 'move',\n      onDragStart() {\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n        const propsAtStartOfDrag = propsRef.current\n\n        const scaledToUnitSpace = val(\n          propsAtStartOfDrag.layoutP.scaledSpace.toUnitSpace,\n        )\n        const verticalToExtremumSpace = val(\n          propsAtStartOfDrag.layoutP.graphEditorVerticalSpace.toExtremumSpace,\n        )\n\n        const unlockExtremums = propsAtStartOfDrag.extremumSpace.lock()\n\n        return {\n          onDrag(dxInScaledSpace, dy) {\n            if (tempTransaction) {\n              tempTransaction.discard()\n              tempTransaction = undefined\n            }\n\n            const {index, trackData} = propsAtStartOfDrag\n            const sortedKeyframes = keyframeUtils.getSortedKeyframesCached(\n              trackData.keyframes,\n            )\n            const cur = sortedKeyframes[index]\n            const next = sortedKeyframes[index + 1]\n\n            const dPosInUnitSpace = scaledToUnitSpace(dxInScaledSpace)\n            let dPosInKeyframeDiffSpace =\n              dPosInUnitSpace / (next.position - cur.position)\n\n            const dyInVerticalSpace = -dy\n            const dYInExtremumSpace = verticalToExtremumSpace(dyInVerticalSpace)\n\n            const dYInValueSpace =\n              propsAtStartOfDrag.extremumSpace.deltaToValueSpace(\n                dYInExtremumSpace,\n              )\n\n            const curValue = props.isScalar ? (cur.value as number) : 0\n            const nextValue = props.isScalar ? (next.value as number) : 1\n            const dyInKeyframeDiffSpace =\n              dYInValueSpace / (nextValue - curValue)\n\n            if (propsAtStartOfDrag.which === 'left') {\n              const handleX = clamp(\n                cur.handles[2] + dPosInKeyframeDiffSpace,\n                0,\n                1,\n              )\n              const handleY = cur.handles[3] + dyInKeyframeDiffSpace\n\n              tempTransaction = getStudio()!.tempTransaction(\n                ({stateEditors}) => {\n                  stateEditors.coreByProject.historic.sheetsById.sequence.replaceKeyframes(\n                    {\n                      ...propsAtStartOfDrag.sheetObject.address,\n                      snappingFunction: val(\n                        propsAtStartOfDrag.layoutP.sheet,\n                      ).getSequence().closestGridPosition,\n                      trackId: propsAtStartOfDrag.trackId,\n                      keyframes: [\n                        {\n                          ...cur,\n                          handles: [\n                            cur.handles[0],\n                            cur.handles[1],\n                            handleX,\n                            handleY,\n                          ],\n                        },\n                      ],\n                    },\n                  )\n                },\n              )\n            } else {\n              const handleX = clamp(\n                next.handles[0] + dPosInKeyframeDiffSpace,\n                0,\n                1,\n              )\n              const handleY = next.handles[1] + dyInKeyframeDiffSpace\n\n              tempTransaction = getStudio()!.tempTransaction(\n                ({stateEditors}) => {\n                  stateEditors.coreByProject.historic.sheetsById.sequence.replaceKeyframes(\n                    {\n                      ...propsAtStartOfDrag.sheetObject.address,\n                      trackId: propsAtStartOfDrag.trackId,\n                      snappingFunction: val(\n                        propsAtStartOfDrag.layoutP.sheet,\n                      ).getSequence().closestGridPosition,\n                      keyframes: [\n                        {\n                          ...next,\n                          handles: [\n                            handleX,\n                            handleY,\n                            next.handles[2],\n                            next.handles[3],\n                          ],\n                        },\n                      ],\n                    },\n                  )\n                },\n              )\n            }\n          },\n          onDragEnd(dragHappened) {\n            unlockExtremums()\n            if (dragHappened) {\n              if (tempTransaction) {\n                tempTransaction.commit()\n              }\n            } else {\n              if (tempTransaction) {\n                tempTransaction.discard()\n              }\n            }\n          },\n        }\n      },\n    }\n  }, [])\n\n  useDrag(node, handlers)\n}\n\nfunction useOurContextMenu(node: SVGCircleElement | null, props: IProps) {\n  return useContextMenu(node, {\n    items: () => {\n      return [\n        {\n          type: 'normal',\n          label: 'Delete',\n          callback: () => {\n            getStudio()!.transaction(({stateEditors}) => {\n              stateEditors.coreByProject.historic.sheetsById.sequence.deleteKeyframes(\n                {\n                  ...props.sheetObject.address,\n                  keyframeIds: [props.keyframe.id],\n                  trackId: props.trackId,\n                },\n              )\n            })\n          },\n        },\n      ]\n    },\n  })\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/KeyframeEditor/GraphEditorDotNonScalar.tsx",
    "content": "import getStudio from '@theatre/studio/getStudio'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport useContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/useContextMenu'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {val} from '@theatre/dataverse'\nimport React, {useMemo, useRef, useState} from 'react'\nimport styled from 'styled-components'\nimport type KeyframeEditor from './KeyframeEditor'\nimport type {BasicKeyframe} from '@theatre/core/types/public'\nimport {useLockFrameStampPosition} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\nimport {includeLockFrameStampAttrs} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport {\n  lockedCursorCssVarName,\n  useCssCursorLock,\n} from '@theatre/studio/uiComponents/PointerEventsHandler'\nimport DopeSnap from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/DopeSnap'\nimport {useKeyframeInlineEditorPopover} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/useSingleKeyframeInlineEditorPopover'\nimport usePresence, {\n  PresenceFlag,\n} from '@theatre/studio/uiComponents/usePresence'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nexport const dotSize = 6\n\nconst Circle = styled.circle`\n  fill: var(--main-color);\n  stroke-width: 1px;\n  vector-effect: non-scaling-stroke;\n\n  r: 2px;\n`\n\nconst HitZone = styled.circle`\n  stroke-width: 6px;\n  vector-effect: non-scaling-stroke;\n  r: 6px;\n  fill: transparent;\n  ${pointerEventsAutoInNormalMode};\n\n  &:hover + ${Circle} {\n    r: 6px;\n  }\n\n  #pointer-root.normal & {\n    cursor: ew-resize;\n  }\n\n  #pointer-root.draggingPositionInSequenceEditor & {\n    pointer-events: auto;\n    cursor: var(${lockedCursorCssVarName});\n  }\n\n  &.beingDragged {\n    pointer-events: none !important;\n  }\n`\n\ntype IProps = Parameters<typeof KeyframeEditor>[0] & {which: 'left' | 'right'}\n\nconst GraphEditorDotNonScalar: React.VFC<IProps> = (props) => {\n  const [ref, node] = useRefAndState<SVGCircleElement | null>(null)\n\n  const {index, trackData, itemKey} = props\n  const sortedKeyframes = keyframeUtils.getSortedKeyframesCached(\n    trackData.keyframes,\n  )\n  const cur = sortedKeyframes[index]\n\n  const [contextMenu] = useKeyframeContextMenu(node, props)\n\n  const presence = usePresence(itemKey)\n\n  const curValue = props.which === 'left' ? 0 : 1\n\n  const inlineEditorPopover = useKeyframeInlineEditorPopover([\n    {\n      type: 'primitiveProp',\n      keyframe: props.keyframe,\n      pathToProp: props.pathToProp,\n      propConfig: props.propConfig,\n      sheetObject: props.sheetObject,\n      trackId: props.trackId,\n    },\n  ])\n\n  const isDragging = useDragKeyframe({\n    node,\n    props,\n    // dragging does not work with also having a click listener\n    onDetectedClick: (event) =>\n      inlineEditorPopover.toggle(\n        event,\n        event.target instanceof Element ? event.target : node!,\n      ),\n  })\n\n  const cyInExtremumSpace = props.extremumSpace.fromValueSpace(curValue)\n\n  return (\n    <>\n      <HitZone\n        ref={ref}\n        style={{\n          // @ts-ignore\n          cx: `calc(var(--unitSpaceToScaledSpaceMultiplier) * ${cur.position} * 1px)`,\n          cy: `calc((var(--graphEditorVerticalSpace) - var(--graphEditorVerticalSpace) * ${cyInExtremumSpace}) * 1px)`,\n        }}\n        {...presence.attrs}\n        {...includeLockFrameStampAttrs(cur.position)}\n        {...DopeSnap.includePositionSnapAttrs(cur.position)}\n        className={isDragging ? 'beingDragged' : ''}\n      />\n      <Circle\n        style={{\n          // @ts-ignore\n          cx: `calc(var(--unitSpaceToScaledSpaceMultiplier) * ${cur.position} * 1px)`,\n          cy: `calc((var(--graphEditorVerticalSpace) - var(--graphEditorVerticalSpace) * ${cyInExtremumSpace}) * 1px)`,\n          fill: presence.flag === PresenceFlag.Primary ? 'white' : undefined,\n        }}\n      />\n      {inlineEditorPopover.node}\n      {contextMenu}\n    </>\n  )\n}\n\nexport default GraphEditorDotNonScalar\n\nfunction useDragKeyframe(options: {\n  node: SVGCircleElement | null\n  props: IProps\n  onDetectedClick: (event: MouseEvent) => void\n}): boolean {\n  const [isDragging, setIsDragging] = useState(false)\n  useLockFrameStampPosition(isDragging, options.props.keyframe.position)\n  const propsRef = useRef(options.props)\n  propsRef.current = options.props\n\n  const gestureHandlers = useMemo<Parameters<typeof useDrag>[1]>(() => {\n    return {\n      debugName: 'GraphEditorDotNonScalar/useDragKeyframe',\n      lockCSSCursorTo: 'ew-resize',\n      onDragStart(event) {\n        setIsDragging(true)\n        const propsAtStartOfDrag = propsRef.current\n\n        const toUnitSpace = val(\n          propsAtStartOfDrag.layoutP.scaledSpace.toUnitSpace,\n        )\n\n        const unlockExtremums = propsAtStartOfDrag.extremumSpace.lock()\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n        return {\n          onDrag(dx, dy) {\n            const sortedKeyframes = keyframeUtils.getSortedKeyframesCached(\n              propsAtStartOfDrag.trackData.keyframes,\n            )\n            const original = sortedKeyframes[propsAtStartOfDrag.index]\n\n            const deltaPos = toUnitSpace(dx)\n\n            const updatedKeyframes: BasicKeyframe[] = []\n\n            const cur: BasicKeyframe = {\n              ...original,\n              position: original.position + deltaPos,\n              value: original.value,\n              handles: [...original.handles],\n            }\n\n            updatedKeyframes.push(cur)\n\n            tempTransaction?.discard()\n            tempTransaction = getStudio()!.tempTransaction(({stateEditors}) => {\n              stateEditors.coreByProject.historic.sheetsById.sequence.replaceKeyframes(\n                {\n                  ...propsAtStartOfDrag.sheetObject.address,\n                  trackId: propsAtStartOfDrag.trackId,\n                  keyframes: updatedKeyframes,\n                  snappingFunction: val(\n                    propsAtStartOfDrag.layoutP.sheet,\n                  ).getSequence().closestGridPosition,\n                },\n              )\n            })\n          },\n          onDragEnd(dragHappened) {\n            setIsDragging(false)\n            unlockExtremums()\n            if (dragHappened) {\n              tempTransaction?.commit()\n            } else {\n              tempTransaction?.discard()\n              options.onDetectedClick(event)\n            }\n          },\n        }\n      },\n    }\n  }, [])\n\n  useDrag(options.node, gestureHandlers)\n  useCssCursorLock(isDragging, 'draggingPositionInSequenceEditor', 'ew-resize')\n  return isDragging\n}\n\nfunction useKeyframeContextMenu(node: SVGCircleElement | null, props: IProps) {\n  return useContextMenu(node, {\n    items: () => {\n      return [\n        {\n          type: 'normal',\n          label: 'Delete',\n          callback: () => {\n            getStudio()!.transaction(({stateEditors}) => {\n              stateEditors.coreByProject.historic.sheetsById.sequence.deleteKeyframes(\n                {\n                  ...props.sheetObject.address,\n                  keyframeIds: [props.keyframe.id],\n                  trackId: props.trackId,\n                },\n              )\n            })\n          },\n        },\n      ]\n    },\n  })\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/KeyframeEditor/GraphEditorDotScalar.tsx",
    "content": "import getStudio from '@theatre/studio/getStudio'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport useContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/useContextMenu'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {val} from '@theatre/dataverse'\nimport React, {useMemo, useRef, useState} from 'react'\nimport styled from 'styled-components'\nimport type KeyframeEditor from './KeyframeEditor'\nimport type {BasicKeyframe} from '@theatre/core/types/public'\nimport {useLockFrameStampPosition} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\nimport {includeLockFrameStampAttrs} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport {\n  lockedCursorCssVarName,\n  useCssCursorLock,\n} from '@theatre/studio/uiComponents/PointerEventsHandler'\nimport DopeSnap from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/DopeSnap'\nimport {useKeyframeInlineEditorPopover} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/BasicKeyframedTrack/KeyframeEditor/useSingleKeyframeInlineEditorPopover'\nimport usePresence, {\n  PresenceFlag,\n} from '@theatre/studio/uiComponents/usePresence'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nexport const dotSize = 6\n\nconst Circle = styled.circle`\n  fill: var(--main-color);\n  stroke-width: 1px;\n  vector-effect: non-scaling-stroke;\n\n  r: 2px;\n`\n\nconst HitZone = styled.circle`\n  stroke-width: 6px;\n  vector-effect: non-scaling-stroke;\n  r: 6px;\n  fill: transparent;\n  ${pointerEventsAutoInNormalMode};\n\n  &:hover + ${Circle} {\n    r: 6px;\n  }\n\n  #pointer-root.normal & {\n    cursor: move;\n  }\n\n  #pointer-root.draggingPositionInSequenceEditor & {\n    pointer-events: auto;\n    cursor: var(${lockedCursorCssVarName});\n  }\n\n  &.beingDragged {\n    pointer-events: none !important;\n  }\n`\n\ntype IProps = Parameters<typeof KeyframeEditor>[0]\n\nconst GraphEditorDotScalar: React.VFC<IProps> = (props) => {\n  const [ref, node] = useRefAndState<SVGCircleElement | null>(null)\n\n  const {index, trackData} = props\n  const sortedKeyframes = keyframeUtils.getSortedKeyframesCached(\n    trackData.keyframes,\n  )\n  const cur = sortedKeyframes[index]\n\n  const [contextMenu] = useKeyframeContextMenu(node, props)\n  const presence = usePresence(props.itemKey)\n\n  const curValue = cur.value as number\n\n  const cyInExtremumSpace = props.extremumSpace.fromValueSpace(curValue)\n  const inlineEditorPopover = useKeyframeInlineEditorPopover([\n    {\n      type: 'primitiveProp',\n      keyframe: props.keyframe,\n      pathToProp: props.pathToProp,\n      propConfig: props.propConfig,\n      sheetObject: props.sheetObject,\n      trackId: props.trackId,\n    },\n  ])\n\n  const isDragging = useDragKeyframe({\n    node,\n    props,\n    // dragging does not work with also having a click listener\n    onDetectedClick: (event) =>\n      inlineEditorPopover.toggle(\n        event,\n        event.target instanceof Element ? event.target : node!,\n      ),\n  })\n\n  return (\n    <>\n      <HitZone\n        ref={ref}\n        style={{\n          // @ts-ignore\n          cx: `calc(var(--unitSpaceToScaledSpaceMultiplier) * ${cur.position} * 1px)`,\n          cy: `calc((var(--graphEditorVerticalSpace) - var(--graphEditorVerticalSpace) * ${cyInExtremumSpace}) * 1px)`,\n        }}\n        {...includeLockFrameStampAttrs(cur.position)}\n        {...DopeSnap.includePositionSnapAttrs(cur.position)}\n        {...presence.attrs}\n        className={isDragging ? 'beingDragged' : ''}\n      />\n      <Circle\n        style={{\n          // @ts-ignore\n          cx: `calc(var(--unitSpaceToScaledSpaceMultiplier) * ${cur.position} * 1px)`,\n          cy: `calc((var(--graphEditorVerticalSpace) - var(--graphEditorVerticalSpace) * ${cyInExtremumSpace}) * 1px)`,\n          fill: presence.flag === PresenceFlag.Primary ? 'white' : undefined,\n        }}\n      />\n      {inlineEditorPopover.node}\n      {contextMenu}\n    </>\n  )\n}\n\nexport default GraphEditorDotScalar\n\nfunction useDragKeyframe(options: {\n  node: SVGCircleElement | null\n  props: IProps\n  onDetectedClick: (event: MouseEvent) => void\n}): boolean {\n  const [isDragging, setIsDragging] = useState(false)\n  useLockFrameStampPosition(isDragging, options.props.keyframe.position)\n  const propsRef = useRef(options.props)\n  propsRef.current = options.props\n\n  const gestureHandlers = useMemo<Parameters<typeof useDrag>[1]>(() => {\n    return {\n      debugName: 'GraphEditorDotScalar/useDragKeyframe',\n      lockCSSCursorTo: 'move',\n      onDragStart(event) {\n        setIsDragging(true)\n        const keepSpeeds = !!event.altKey\n\n        const propsAtStartOfDrag = propsRef.current\n\n        const toUnitSpace = val(\n          propsAtStartOfDrag.layoutP.scaledSpace.toUnitSpace,\n        )\n        const verticalToExtremumSpace = val(\n          propsAtStartOfDrag.layoutP.graphEditorVerticalSpace.toExtremumSpace,\n        )\n        const unlockExtremums = propsAtStartOfDrag.extremumSpace.lock()\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n        return {\n          onDrag(dx, dy) {\n            const sortedKeyframes = keyframeUtils.getSortedKeyframesCached(\n              propsAtStartOfDrag.trackData.keyframes,\n            )\n            const original = sortedKeyframes[propsAtStartOfDrag.index]\n\n            const deltaPos = toUnitSpace(dx)\n            const dyInVerticalSpace = -dy\n            const dYInExtremumSpace = verticalToExtremumSpace(dyInVerticalSpace)\n\n            const dYInValueSpace =\n              propsAtStartOfDrag.extremumSpace.deltaToValueSpace(\n                dYInExtremumSpace,\n              )\n\n            const updatedKeyframes: BasicKeyframe[] = []\n\n            const cur: BasicKeyframe = {\n              ...original,\n              position: original.position + deltaPos,\n              value: (original.value as number) + dYInValueSpace,\n              handles: [...original.handles],\n            }\n\n            updatedKeyframes.push(cur)\n\n            if (keepSpeeds) {\n              const sortedKeyframes = keyframeUtils.getSortedKeyframesCached(\n                propsAtStartOfDrag.trackData.keyframes,\n              )\n              const prev = sortedKeyframes[propsAtStartOfDrag.index - 1]\n\n              if (\n                prev &&\n                Math.abs((original.value as number) - (prev.value as number)) >\n                  0\n              ) {\n                const newPrev: BasicKeyframe = {\n                  ...prev,\n                  handles: [...prev.handles],\n                }\n                updatedKeyframes.push(newPrev)\n                newPrev.handles[3] = preserveRightHandle(\n                  prev.handles[3],\n                  prev.value as number,\n                  prev.value as number,\n                  original.value as number,\n                  cur.value as number,\n                )\n              }\n\n              const next = sortedKeyframes[propsAtStartOfDrag.index + 1]\n\n              if (\n                next &&\n                Math.abs((original.value as number) - (next.value as number)) >\n                  0\n              ) {\n                const newNext: BasicKeyframe = {\n                  ...next,\n                  handles: [...next.handles],\n                }\n                updatedKeyframes.push(newNext)\n                newNext.handles[1] = preserveLeftHandle(\n                  newNext.handles[1],\n                  newNext.value as number,\n                  newNext.value as number,\n                  original.value as number,\n                  cur.value as number,\n                )\n              }\n            }\n\n            tempTransaction?.discard()\n            tempTransaction = getStudio()!.tempTransaction(({stateEditors}) => {\n              stateEditors.coreByProject.historic.sheetsById.sequence.replaceKeyframes(\n                {\n                  ...propsAtStartOfDrag.sheetObject.address,\n                  trackId: propsAtStartOfDrag.trackId,\n                  keyframes: updatedKeyframes,\n                  snappingFunction: val(\n                    propsAtStartOfDrag.layoutP.sheet,\n                  ).getSequence().closestGridPosition,\n                },\n              )\n            })\n          },\n          onDragEnd(dragHappened) {\n            setIsDragging(false)\n            unlockExtremums()\n            if (dragHappened) {\n              tempTransaction?.commit()\n            } else {\n              tempTransaction?.discard()\n              options.onDetectedClick(event)\n            }\n          },\n        }\n      },\n    }\n  }, [])\n\n  useDrag(options.node, gestureHandlers)\n  useCssCursorLock(isDragging, 'draggingPositionInSequenceEditor', 'move')\n  return isDragging\n}\n\nfunction useKeyframeContextMenu(node: SVGCircleElement | null, props: IProps) {\n  return useContextMenu(node, {\n    items: () => {\n      return [\n        {\n          type: 'normal',\n          label: 'Delete',\n          callback: () => {\n            getStudio()!.transaction(({stateEditors}) => {\n              stateEditors.coreByProject.historic.sheetsById.sequence.deleteKeyframes(\n                {\n                  ...props.sheetObject.address,\n                  keyframeIds: [props.keyframe.id],\n                  trackId: props.trackId,\n                },\n              )\n            })\n          },\n        },\n      ]\n    },\n  })\n}\n\nfunction preserveRightHandle(\n  rightHandleInKeyframeDeltaSpace: number,\n  originalValueOfMovedKeyframe: number,\n  newValueOfMovedKeyframe: number,\n  originalValueOfNeighbouringKeyframe: number,\n  newValueOfNeighbouringKeyframe: number,\n): number {\n  const diffOfHandleYToMovingKeyframeInValueSpace =\n    (originalValueOfNeighbouringKeyframe - originalValueOfMovedKeyframe) *\n    rightHandleInKeyframeDeltaSpace\n\n  const newHandleYInKeyframeDeltaSpace =\n    diffOfHandleYToMovingKeyframeInValueSpace /\n    (newValueOfNeighbouringKeyframe - newValueOfMovedKeyframe)\n\n  return newHandleYInKeyframeDeltaSpace\n}\n\nfunction preserveLeftHandle(\n  leftHandleInKeyframeDeltaSpace: number,\n  originalValueOfMovedKeyframe: number,\n  newValueOfMovedKeyframe: number,\n  originalValueOfNeighbouringKeyframe: number,\n  newValueOfNeighbouringKeyframe: number,\n): number {\n  const handleYInValueSpace =\n    (originalValueOfMovedKeyframe - originalValueOfNeighbouringKeyframe) *\n      leftHandleInKeyframeDeltaSpace +\n    originalValueOfNeighbouringKeyframe\n\n  const diffOfHandleYToMovingKeyframeInValueSpace =\n    handleYInValueSpace - originalValueOfMovedKeyframe\n\n  const newHandleYInValueSpace =\n    diffOfHandleYToMovingKeyframeInValueSpace + newValueOfMovedKeyframe\n  const diffOfNewHandleYToNeighbouringKeyframe =\n    newHandleYInValueSpace - newValueOfNeighbouringKeyframe\n\n  const newHandleYInKeyframeDeltaSpace =\n    diffOfNewHandleYToNeighbouringKeyframe /\n    (newValueOfMovedKeyframe - newValueOfNeighbouringKeyframe)\n\n  return newHandleYInKeyframeDeltaSpace\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/KeyframeEditor/GraphEditorNonScalarDash.tsx",
    "content": "import React from 'react'\nimport styled from 'styled-components'\nimport type KeyframeEditor from './KeyframeEditor'\nimport {transformBox} from './Curve'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nexport const dotSize = 6\n\nconst SVGPath = styled.path`\n  stroke-width: 2;\n  stroke: var(--main-color);\n  stroke-dasharray: 3 2;\n  fill: none;\n  vector-effect: non-scaling-stroke;\n  opacity: 0.3;\n`\n\ntype IProps = Parameters<typeof KeyframeEditor>[0]\n\nconst GraphEditorNonScalarDash: React.VFC<IProps> = (props) => {\n  const {index, trackData} = props\n\n  const pathD = `M 0 0 L 1 1`\n\n  const sortedKeyframes = keyframeUtils.getSortedKeyframesCached(\n    trackData.keyframes,\n  )\n\n  const transform = transformBox(\n    sortedKeyframes[index].position,\n    props.extremumSpace.fromValueSpace(0),\n    0,\n    props.extremumSpace.fromValueSpace(1) -\n      props.extremumSpace.fromValueSpace(0),\n  )\n\n  return (\n    <>\n      <SVGPath\n        d={pathD}\n        style={{\n          transform,\n        }}\n      />\n    </>\n  )\n}\n\nexport default GraphEditorNonScalarDash\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/KeyframeEditor/KeyframeEditor.tsx",
    "content": "import type {TrackData} from '@theatre/core/types/private/core'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {BasicKeyframe, SequenceTrackId} from '@theatre/core/types/public'\nimport type {Pointer} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport type {ExtremumSpace} from '@theatre/studio/panels/SequenceEditorPanel/GraphEditor/BasicKeyframedTrack/BasicKeyframedTrack'\nimport Curve from './Curve'\nimport CurveHandle from './CurveHandle'\nimport GraphEditorDotScalar from './GraphEditorDotScalar'\nimport GraphEditorDotNonScalar from './GraphEditorDotNonScalar'\nimport GraphEditorNonScalarDash from './GraphEditorNonScalarDash'\nimport type {PropTypeConfig_AllSimples} from '@theatre/core/types/public'\nimport type {PathToProp} from '@theatre/utils/pathToProp'\nimport type {\n  GraphEditorColors,\n  StudioSheetItemKey,\n} from '@theatre/core/types/private'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nconst Container = styled.g`\n  /* position: absolute; */\n`\n\nconst noConnector = <></>\n\ntype IKeyframeEditorProps = {\n  index: number\n  keyframe: BasicKeyframe\n  trackData: TrackData\n  itemKey: StudioSheetItemKey\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  trackId: SequenceTrackId\n  sheetObject: SheetObject\n  pathToProp: PathToProp\n  extremumSpace: ExtremumSpace\n  isScalar: boolean\n  color: keyof GraphEditorColors\n  propConfig: PropTypeConfig_AllSimples\n}\n\nconst KeyframeEditor: React.VFC<IKeyframeEditorProps> = (props) => {\n  const {index, trackData, isScalar} = props\n  const sortedKeyframes = keyframeUtils.getSortedKeyframesCached(\n    trackData.keyframes,\n  )\n  const cur = sortedKeyframes[index]\n  const next = sortedKeyframes[index + 1]\n\n  const connected = cur.connectedRight && !!next\n  const shouldShowCurve = connected && next.value !== cur.value\n\n  return (\n    <Container>\n      {shouldShowCurve ? (\n        <>\n          <Curve {...props} />\n          {!cur.type ||\n            (cur.type === 'bezier' && (\n              <>\n                <CurveHandle {...props} which=\"left\" />\n                <CurveHandle {...props} which=\"right\" />\n              </>\n            ))}\n        </>\n      ) : (\n        noConnector\n      )}\n      {isScalar ? (\n        <GraphEditorDotScalar {...props} />\n      ) : (\n        <>\n          <GraphEditorDotNonScalar {...props} which=\"left\" />\n          <GraphEditorDotNonScalar {...props} which=\"right\" />\n          <GraphEditorNonScalarDash {...props} />\n        </>\n      )}\n    </Container>\n  )\n}\n\nexport default KeyframeEditor\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/GraphEditor/GraphEditor.tsx",
    "content": "import getStudio from '@theatre/studio/getStudio'\nimport {decodePathToProp} from '@theatre/utils/pathToProp'\nimport getDeep from '@theatre/utils/getDeep'\nimport type {SequenceTrackId} from '@theatre/core/types/public'\nimport {usePrism} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {contentWidth} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/Right'\nimport HorizontallyScrollableArea from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/HorizontallyScrollableArea'\nimport PrimitivePropGraph from './PrimitivePropGraph'\nimport FrameGrid from '@theatre/studio/panels/SequenceEditorPanel/FrameGrid/FrameGrid'\nimport {transparentize} from 'polished'\n\nconst Container = styled.div`\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  background: ${transparentize(0.03, '#1a1c1e')};\n`\n\nconst SVGContainer = styled.svg`\n  position: absolute;\n  top: 0;\n  left: 0;\n  margin: 0;\n  pointer-events: none;\n`\n\nconst GraphEditor: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({layoutP}) => {\n  return usePrism(() => {\n    const sheet = val(layoutP.sheet)\n\n    const selectedPropsByObject = val(\n      getStudio()!.atomP.historic.projects.stateByProjectId[\n        sheet.address.projectId\n      ].stateBySheetId[sheet.address.sheetId].sequenceEditor\n        .selectedPropsByObject,\n    )\n\n    const height = val(layoutP.graphEditorDims.height)\n\n    const unitSpaceToScaledSpaceMultiplier = val(\n      layoutP.scaledSpace.fromUnitSpace,\n    )(1)\n\n    const graphs: Array<React.ReactElement> = []\n\n    if (selectedPropsByObject) {\n      for (const [objectKey, props] of Object.entries(selectedPropsByObject)) {\n        const sheetObject = sheet.getObject(objectKey)\n        if (!sheetObject) continue\n        const validSequenceTracks = val(\n          sheetObject.template.getMapOfValidSequenceTracks_forStudio(),\n        )\n        for (const [encodedPathToProp, graphEditorColor] of Object.entries(\n          props!,\n        )) {\n          const pathToProp = decodePathToProp(encodedPathToProp)\n          const possibleSequenceTrackId = getDeep(\n            validSequenceTracks,\n            pathToProp,\n          ) as undefined | SequenceTrackId\n          if (!possibleSequenceTrackId) continue\n\n          graphs.push(\n            <PrimitivePropGraph\n              key={`graph-${objectKey}-${encodedPathToProp}`}\n              sheetObject={sheetObject}\n              pathToProp={pathToProp}\n              layoutP={layoutP}\n              trackId={possibleSequenceTrackId}\n              color={graphEditorColor!}\n            />,\n          )\n        }\n      }\n    }\n\n    const width = val(layoutP.rightDims.width)\n    return (\n      <Container\n        style={{\n          width: width + 'px',\n          height: height + 'px',\n          // @ts-expect-error\n          '--unitSpaceToScaledSpaceMultiplier':\n            unitSpaceToScaledSpaceMultiplier,\n          '--graphEditorVerticalSpace': `${val(\n            layoutP.graphEditorVerticalSpace.space,\n          )}`,\n        }}\n      >\n        <FrameGrid layoutP={layoutP} width={width} height={height} />\n        <HorizontallyScrollableArea layoutP={layoutP} height={height}>\n          <SVGContainer\n            width={contentWidth}\n            height={height}\n            viewBox={`0 0 ${contentWidth} ${height}`}\n          >\n            <g\n              style={{\n                transform: `translate(${val(\n                  layoutP.scaledSpace.leftPadding,\n                )}px, ${val(layoutP.graphEditorDims.padding.top)}px)`,\n              }}\n            >\n              {graphs}\n            </g>\n          </SVGContainer>\n        </HorizontallyScrollableArea>\n      </Container>\n    )\n  }, [layoutP])\n}\n\nexport default GraphEditor\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/GraphEditor/PrimitivePropGraph.tsx",
    "content": "import type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {PathToProp} from '@theatre/utils/pathToProp'\nimport type {SequenceTrackId} from '@theatre/core/types/public'\nimport {usePrism} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport BasicKeyframedTrack from './BasicKeyframedTrack/BasicKeyframedTrack'\nimport type {GraphEditorColors} from '@theatre/core/types/private'\n\nconst PrimitivePropGraph: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  sheetObject: SheetObject\n  pathToProp: PathToProp\n  trackId: SequenceTrackId\n  color: keyof GraphEditorColors\n}> = (props) => {\n  return usePrism(() => {\n    const {sheetObject, trackId} = props\n    const trackData = val(\n      getStudio()!.atomP.historic.coreByProject[sheetObject.address.projectId]\n        .sheetsById[sheetObject.address.sheetId].sequence.tracksByObject[\n        sheetObject.address.objectKey\n      ].trackData[trackId],\n    )\n\n    if (trackData?.type !== 'BasicKeyframedTrack') {\n      console.error(\n        `trackData type ${trackData?.type} is not yet supported on the graph editor`,\n      )\n      return <></>\n    } else {\n      return <BasicKeyframedTrack {...props} trackData={trackData} />\n    }\n  }, [props.trackId, props.layoutP])\n}\n\nexport default PrimitivePropGraph\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/GraphEditorToggle.tsx",
    "content": "import type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport {useVal} from '@theatre/react'\nimport getStudio from '@theatre/studio/getStudio'\nimport React, {useCallback} from 'react'\nimport styled from 'styled-components'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {VscTriangleUp} from 'react-icons/vsc'\nimport {includeLockFrameStampAttrs} from './FrameStampPositionProvider'\n\nconst Container = styled.button`\n  outline: none;\n  background-color: #1c1d21;\n  border: 1px solid #191919;\n  border-radius: 2px;\n  display: flex;\n  bottom: 14px;\n  right: 8px;\n  z-index: 1;\n  position: absolute;\n\n  padding: 4px 8px;\n  display: flex;\n  color: #656d77;\n  line-height: 20px;\n  font-size: 10px;\n\n  &:hover {\n    color: white;\n  }\n\n  & > svg {\n    transition: transform 0.3s;\n    transform: rotateZ(0deg);\n  }\n\n  &:hover > svg {\n    transform: rotateZ(-20deg);\n  }\n\n  &.open > svg {\n    transform: rotateZ(-180deg);\n  }\n\n  &.open:hover > svg {\n    transform: rotateZ(-160deg);\n  }\n`\n\nconst GraphEditorToggle: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({layoutP}) => {\n  const isOpen = useVal(layoutP.graphEditorDims.isOpen)\n  const toggle = useCallback(() => {\n    const isOpen = val(layoutP.graphEditorDims.isOpen)\n    getStudio()!.transaction(({stateEditors}) => {\n      stateEditors.studio.historic.panels.sequenceEditor.graphEditor.setIsOpen({\n        isOpen: !isOpen,\n      })\n    })\n  }, [layoutP])\n  return (\n    <Container\n      onClick={toggle}\n      title={'Toggle graph editor'}\n      className={isOpen ? 'open' : ''}\n      {...includeLockFrameStampAttrs('hide')}\n    >\n      <VscTriangleUp />\n    </Container>\n  )\n}\n\nexport default GraphEditorToggle\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/DopeSnap.tsx",
    "content": "// Pretty much same code as for keyframe and similar for playhead.\n// Consider if we should unify the implementations.\n// - See \"useLockFrameStampPosition\"\n// - Also see \"pointerPositionInUnitSpace\" for a related impl (for different problem)\nconst POSITION_SNAP_ATTR = 'data-pos'\n\n/**\n * Uses `[data-pos]` attribute to understand potential snap targets.\n */\nconst DopeSnap = {\n  checkIfMouseEventSnapToPos(\n    event: MouseEvent,\n    options?: {ignore?: Element | null},\n  ): number | null {\n    const snapTarget = event\n      .composedPath()\n      .find(\n        (el): el is Element =>\n          el instanceof Element &&\n          el !== options?.ignore &&\n          el.hasAttribute(POSITION_SNAP_ATTR),\n      )\n\n    if (snapTarget) {\n      const snapPos = parseFloat(snapTarget.getAttribute(POSITION_SNAP_ATTR)!)\n      if (isFinite(snapPos)) {\n        return snapPos\n      }\n    }\n\n    return null\n  },\n\n  /**\n   * Use as a spread in a React element\n   *\n   * @example\n   * ```tsx\n   * <div {...DopeSnap.includePositionSnapAttrs(10)}/>\n   * ```\n   */\n  includePositionSnapAttrs(position: number) {\n    return {[POSITION_SNAP_ATTR]: position}\n  },\n}\n\nexport default DopeSnap\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/DopeSnapHitZoneUI.tsx",
    "content": "import {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport {lockedCursorCssVarName} from '@theatre/studio/uiComponents/PointerEventsHandler'\nimport {css} from 'styled-components'\nimport SnapCursor from './SnapCursor.svg'\nimport {absoluteDims} from '@theatre/studio/utils/absoluteDims'\nimport DopeSnap from './DopeSnap'\nimport {includeLockFrameStampAttrs} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\n\nconst HIT_ZONE_SIZE_PX = 12\nconst SNAP_CURSOR_SIZE_PX = 34\nconst BEING_DRAGGED_CLASS = 'beingDragged'\n\n/**\n * Helper CSS for consistent display of the `⸢⸤⸣⸥` thing\n */\nexport const DopeSnapHitZoneUI = {\n  BEING_DRAGGED_CLASS,\n  CSS: css`\n    position: absolute;\n    ${absoluteDims(HIT_ZONE_SIZE_PX)};\n    ${pointerEventsAutoInNormalMode};\n\n    &.${BEING_DRAGGED_CLASS} {\n      pointer-events: none !important;\n    }\n  `,\n  CSS_WHEN_SOMETHING_DRAGGING: css`\n    pointer-events: auto;\n    cursor: var(${lockedCursorCssVarName});\n\n    // ⸢⸤⸣⸥ thing\n    // This box extends the hitzone so the user does not\n    // accidentally leave the hitzone\n    &:hover:after {\n      position: absolute;\n      top: calc(50% - ${SNAP_CURSOR_SIZE_PX / 2}px);\n      left: calc(50% - ${SNAP_CURSOR_SIZE_PX / 2}px);\n      width: ${SNAP_CURSOR_SIZE_PX}px;\n      height: ${SNAP_CURSOR_SIZE_PX}px;\n      display: block;\n      content: ' ';\n      background: url(${SnapCursor}) no-repeat 100% 100%;\n      // This icon might also fit: GiConvergenceTarget\n    }\n  `,\n  /** Intrinsic element props for `<HitZone/>`s */\n  reactProps(config: {position: number; isDragging: boolean}) {\n    return {\n      // `data-pos` and `includeLockFrameStampAttrs` are used by FrameStampPositionProvider\n      // in order to handle snapping the playhead. Adding these props effectively\n      // causes the playhead to \"snap\" to the marker on mouse over.\n      // `pointerEventsAutoInNormalMode` and `lockedCursorCssVarName` in the CSS above are also\n      // used to make this behave correctly.\n      ...includeLockFrameStampAttrs(config.position),\n      ...DopeSnap.includePositionSnapAttrs(config.position),\n      className: config.isDragging ? DopeSnapHitZoneUI.BEING_DRAGGED_CLASS : '',\n    }\n  },\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/FocusRangeZone/FocusRangeStrip.tsx",
    "content": "import type {Pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport {usePrism, useVal} from '@theatre/react'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {topStripHeight} from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/TopStrip'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport useContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/useContextMenu'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport React, {useMemo} from 'react'\nimport styled from 'styled-components'\nimport {useLockFrameStampPosition} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\n\nexport const focusRangeStripTheme = {\n  enabled: {\n    backgroundColor: '#2C2F34',\n    stroke: '#646568',\n  },\n  disabled: {\n    backgroundColor: '#282a2cc5',\n    stroke: '#595a5d',\n  },\n  hover: {\n    backgroundColor: '#34373D',\n    stroke: '#C8CAC0',\n  },\n  dragging: {\n    backgroundColor: '#3F444A',\n    stroke: '#C8CAC0',\n  },\n  thumbWidth: 9,\n  hitZoneWidth: 26,\n  rangeStripMinWidth: 30,\n}\n\nconst stripWidth = 1000\n\nexport const RangeStrip = styled.div<{enabled: boolean}>`\n  position: absolute;\n  height: ${() => topStripHeight - 1}px;\n  background-color: ${(props) =>\n    props.enabled\n      ? focusRangeStripTheme.enabled.backgroundColor\n      : focusRangeStripTheme.disabled.backgroundColor};\n  cursor: grab;\n  top: 0;\n  left: 0;\n  width: ${stripWidth}px;\n  transform-origin: left top;\n  &:hover {\n    background-color: ${focusRangeStripTheme.hover.backgroundColor};\n  }\n  &.dragging {\n    background-color: ${focusRangeStripTheme.dragging.backgroundColor};\n    cursor: grabbing !important;\n  }\n  ${pointerEventsAutoInNormalMode};\n\n  /* covers the one pixel space between the focus range strip and the top strip\n  of the sequence editor panel, which would have caused that one pixel to act\n  like a panel drag zone */\n  &:after {\n    display: block;\n    content: ' ';\n    position: absolute;\n    bottom: -1px;\n    height: 1px;\n    left: 0;\n    right: 0;\n    background: transparent;\n    pointer-events: normal;\n    z-index: -1;\n  }\n`\n\n/**\n * Clamps the lower and upper bounds of a range to the lower and upper bounds of the reference range, while maintaining the original width of the range. If the range to be clamped has a greater width than the reference range, then the reference range is returned.\n *\n * @param range - The range bounds to be clamped\n * @param referenceRange - The reference range\n *\n * @returns The clamped bounds.\n *\n * @example\n * ```ts\n * clampRange([-1, 4], [2, 3]) // returns [2, 3]\n * clampRange([-1, 2.5], [2, 3]) // returns [2, 2.5]\n * ```\n */\nfunction clampRange(\n  range: [number, number],\n  referenceRange: [number, number],\n): [number, number] {\n  let overflow = 0\n\n  const [start, end] = range\n  const [lower, upper] = referenceRange\n\n  if (end - start > upper - lower) return [lower, upper]\n\n  if (start < lower) {\n    overflow = 0 - start\n  }\n\n  if (end > upper) {\n    overflow = upper - end\n  }\n\n  return [start + overflow, end + overflow]\n}\n\nconst FocusRangeStrip: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({layoutP}) => {\n  const existingRangeD = useMemo(\n    () =>\n      prism(() => {\n        const {projectId, sheetId} = val(layoutP.sheet).address\n        const existingRange = val(\n          getStudio().atomP.ahistoric.projects.stateByProjectId[projectId]\n            .stateBySheetId[sheetId].sequence.focusRange,\n        )\n        return existingRange\n      }),\n    [layoutP],\n  )\n\n  const [rangeStripRef, rangeStripNode] = useRefAndState<HTMLElement | null>(\n    null,\n  )\n\n  const [contextMenu] = useContextMenu(rangeStripNode, {\n    items: () => {\n      const sheet = val(layoutP.sheet)\n      const existingRange = existingRangeD.getValue()\n      return [\n        {\n          type: 'normal',\n          label: 'Delete focus range',\n          callback: () => {\n            getStudio()\n              .tempTransaction(({stateEditors}) => {\n                stateEditors.studio.ahistoric.projects.stateByProjectId.stateBySheetId.sequence.focusRange.unset(\n                  {\n                    ...sheet.address,\n                  },\n                )\n              })\n              .commit()\n          },\n        },\n        {\n          type: 'normal',\n          label: existingRange?.enabled\n            ? 'Disable focus range'\n            : 'Enable focus range',\n          callback: () => {\n            if (existingRange !== undefined) {\n              getStudio()\n                .tempTransaction(({stateEditors}) => {\n                  stateEditors.studio.ahistoric.projects.stateByProjectId.stateBySheetId.sequence.focusRange.set(\n                    {\n                      ...sheet.address,\n                      range: existingRange.range,\n                      enabled: !existingRange.enabled,\n                    },\n                  )\n                })\n                .commit()\n            }\n          },\n        },\n      ]\n    },\n  })\n\n  const scaledSpaceToUnitSpace = useVal(layoutP.scaledSpace.toUnitSpace)\n  const sheet = useVal(layoutP.sheet)\n\n  const gestureHandlers = useMemo((): Parameters<typeof useDrag>[1] => {\n    let newStartPosition: number, newEndPosition: number\n\n    return {\n      debugName: 'FocusRangeStrip',\n      onDragStart(event) {\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n        let existingRange = existingRangeD.getValue()\n        if (!existingRange) return false\n\n        const startPosBeforeDrag = existingRange.range[0]\n        const endPosBeforeDrag = existingRange.range[1]\n        let dragHappened = false\n        const sequence = val(layoutP.sheet).getSequence()\n\n        return {\n          onDrag(dx) {\n            existingRange = existingRangeD.getValue()\n            if (existingRange) {\n              dragHappened = true\n              const deltaPos = scaledSpaceToUnitSpace(dx)\n\n              const start = startPosBeforeDrag + deltaPos\n              let end = endPosBeforeDrag + deltaPos\n\n              if (end < start) {\n                end = start\n              }\n\n              ;[newStartPosition, newEndPosition] = clampRange(\n                [start, end],\n                [0, sequence.length],\n              ).map((pos) => sequence.closestGridPosition(pos))\n\n              if (tempTransaction) {\n                tempTransaction.discard()\n              }\n\n              tempTransaction = getStudio().tempTransaction(\n                ({stateEditors}) => {\n                  stateEditors.studio.ahistoric.projects.stateByProjectId.stateBySheetId.sequence.focusRange.set(\n                    {\n                      ...sheet.address,\n                      range: [newStartPosition, newEndPosition],\n                      enabled: existingRange?.enabled ?? true,\n                    },\n                  )\n                },\n              )\n            }\n          },\n          onDragEnd() {\n            if (existingRange) {\n              if (dragHappened && tempTransaction !== undefined) {\n                tempTransaction.commit()\n              } else if (tempTransaction) {\n                tempTransaction.discard()\n              }\n            }\n          },\n        }\n      },\n\n      lockCSSCursorTo: 'grabbing',\n    }\n  }, [sheet, scaledSpaceToUnitSpace])\n\n  const [isDragging] = useDrag(rangeStripNode, gestureHandlers)\n\n  useLockFrameStampPosition(isDragging, -1)\n\n  return usePrism(() => {\n    const existingRange = existingRangeD.getValue()\n\n    const range = existingRange?.range || [0, 0]\n    let startX = val(layoutP.clippedSpace.fromUnitSpace)(range[0])\n    let endX = val(layoutP.clippedSpace.fromUnitSpace)(range[1])\n    let scaleX: number, translateX: number\n\n    if (startX < 0) {\n      startX = 0\n    }\n\n    if (endX > val(layoutP.clippedSpace.width)) {\n      endX = val(layoutP.clippedSpace.width)\n    }\n\n    if (startX > endX) {\n      translateX = 0\n      scaleX = 0\n    } else {\n      translateX = startX\n      scaleX = (endX - startX) / stripWidth\n    }\n\n    if (!existingRange) return <></>\n\n    return (\n      <>\n        {contextMenu}\n        <RangeStrip\n          id=\"range-strip\"\n          enabled={existingRange.enabled}\n          className={`${isDragging ? 'dragging' : ''} ${\n            existingRange.enabled ? 'enabled' : ''\n          }`}\n          ref={rangeStripRef as $IntentionalAny}\n          style={{\n            transform: `translateX(${translateX}px) scale(${scaleX}, 1)`,\n          }}\n        />\n      </>\n    )\n  }, [layoutP, rangeStripRef, existingRangeD, contextMenu, isDragging])\n}\n\nexport default FocusRangeStrip\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/FocusRangeZone/FocusRangeThumb.tsx",
    "content": "import type {Pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport {usePrism, useVal} from '@theatre/react'\nimport type {$IntentionalAny, IRange} from '@theatre/core/types/public'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {\n  topStripHeight,\n  topStripTheme,\n} from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/TopStrip'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport {\n  lockedCursorCssVarName,\n  useCssCursorLock,\n} from '@theatre/studio/uiComponents/PointerEventsHandler'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport React, {useMemo} from 'react'\nimport styled from 'styled-components'\nimport {\n  includeLockFrameStampAttrs,\n  useLockFrameStampPosition,\n} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\nimport {focusRangeStripTheme, RangeStrip} from './FocusRangeStrip'\nimport DopeSnap from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/DopeSnap'\n\nconst TheDiv = styled.div<{enabled: boolean; type: ThumbType}>`\n  position: absolute;\n  top: 0;\n  // the right handle has to be pulled back by its width since its right side indicates its position, not its left side\n  left: ${(props) =>\n    props.type === ThumbType.start ? 0 : -focusRangeStripTheme.thumbWidth}px;\n  transform-origin: left top;\n  width: ${focusRangeStripTheme.thumbWidth}px;\n  height: ${() => topStripHeight - 1}px;\n  z-index: 3;\n\n  --bg: ${({enabled}) =>\n    enabled\n      ? focusRangeStripTheme.enabled.backgroundColor\n      : focusRangeStripTheme.disabled.backgroundColor};\n\n  stroke: ${focusRangeStripTheme.enabled.stroke};\n  user-select: none;\n\n  cursor: ${(props) =>\n    props.type === ThumbType.start ? 'w-resize' : 'e-resize'};\n\n  // no pointer events unless pointer-root is in normal mode _and_ the\n  // focus range is enabled\n  #pointer-root & {\n    pointer-events: none;\n  }\n\n  #pointer-root.normal & {\n    pointer-events: auto;\n  }\n\n  #pointer-root.draggingPositionInSequenceEditor & {\n    pointer-events: auto;\n    cursor: var(${lockedCursorCssVarName});\n  }\n\n  &.dragging {\n    pointer-events: none !important;\n  }\n\n  // highlight the handle if it's hovered, or the whole strip is hovverd\n  ${() => RangeStrip}:hover ~ &, &:hover {\n    --bg: ${focusRangeStripTheme.hover.backgroundColor};\n    stroke: ${focusRangeStripTheme.hover.stroke};\n  }\n\n  // highlight the handle when it's being dragged or the whole strip is being dragged.\n  // using dragging.dragging to give this selector priority, as it seems to be overridden\n  // by the hover selector above\n  &.dragging,\n  ${() => RangeStrip}.dragging.dragging ~ & {\n    --bg: ${focusRangeStripTheme.dragging.backgroundColor};\n    stroke: ${focusRangeStripTheme.dragging.stroke};\n  }\n\n  #pointer-root.draggingPositionInSequenceEditor &:hover {\n    --bg: ${focusRangeStripTheme.dragging.backgroundColor};\n    stroke: #40aaa4;\n  }\n\n  background-color: var(--bg);\n\n  // a larger hit zone\n  &:before {\n    display: block;\n    content: ' ';\n    position: absolute;\n    inset: -8px;\n  }\n`\n\n/**\n * This acts as a bit of a horizontal shadow that covers the frame numbers that show up\n * right next to the thumb, making the appearance of the focus range more tidy.\n */\nconst ColoredMargin = styled.div<{type: ThumbType; enabled: boolean}>`\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  pointer-events: none;\n\n  background: linear-gradient(\n    ${(props) => (props.type === ThumbType.start ? 90 : -90)}deg,\n    var(--bg) 0%,\n    #ffffff00 100%\n  );\n\n  width: 12px;\n  left: ${(props) =>\n    props.type === ThumbType.start\n      ? focusRangeStripTheme.thumbWidth\n      : // pushing the right-side thumb's margin 1px to the right to make sure there is no space\n        // between it and the thumb\n        -focusRangeStripTheme.thumbWidth + 1}px;\n`\n\nconst OuterColoredMargin = styled.div<{\n  type: ThumbType\n}>`\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  pointer-events: none;\n\n  background: linear-gradient(\n    ${(props) => (props.type === ThumbType.start ? -90 : 90)}deg,\n    ${() => topStripTheme.backgroundColor} 0%,\n    #ffffff00 100%\n  );\n\n  width: 12px;\n  left: ${(props) =>\n    props.type === ThumbType.start ? -12 : focusRangeStripTheme.thumbWidth}px;\n`\n\nenum ThumbType {\n  start = 0,\n  end = 1,\n}\n\nconst FocusRangeThumb: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  thumbType: ThumbType\n}> = ({layoutP, thumbType}) => {\n  const [hitZoneRef, hitZoneNode] = useRefAndState<HTMLElement | null>(null)\n\n  const existingRangeD = useMemo(\n    () =>\n      prism(() => {\n        const {projectId, sheetId} = val(layoutP.sheet).address\n        const existingRange = val(\n          getStudio().atomP.ahistoric.projects.stateByProjectId[projectId]\n            .stateBySheetId[sheetId].sequence.focusRange,\n        )\n        return existingRange\n      }),\n    [layoutP],\n  )\n\n  const gestureHandlers = useMemo((): Parameters<typeof useDrag>[1] => {\n    return {\n      debugName: 'FocusRangeThumb',\n      onDragStart() {\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n        let range: IRange\n\n        const sheet = val(layoutP.sheet)\n        const sequence = sheet.getSequence()\n        const defaultRange: IRange = [0, sequence.length]\n        let existingRange = existingRangeD.getValue() || {\n          range: defaultRange,\n          enabled: false,\n        }\n        const focusRangeEnabled = existingRange.enabled\n\n        const posBeforeDrag = existingRange.range[thumbType]\n        const scaledSpaceToUnitSpace = val(layoutP.scaledSpace.toUnitSpace)\n        const minFocusRangeStripWidth = scaledSpaceToUnitSpace(\n          focusRangeStripTheme.rangeStripMinWidth,\n        )\n\n        return {\n          onDrag(dx, _, event) {\n            let newPosition: number\n            const snapPos = DopeSnap.checkIfMouseEventSnapToPos(event, {\n              ignore: hitZoneNode,\n            })\n\n            if (snapPos == null) {\n              const deltaPos = scaledSpaceToUnitSpace(dx)\n              const oldPosPlusDeltaPos = posBeforeDrag + deltaPos\n              newPosition = oldPosPlusDeltaPos\n            } else {\n              newPosition = snapPos\n            }\n\n            range = existingRangeD.getValue()?.range || defaultRange\n\n            // Make sure that the focus range has a minimal width\n            if (thumbType === ThumbType.start) {\n              // Prevent the start thumb from going below 0\n              newPosition = Math.max(\n                Math.min(newPosition, range[1] - minFocusRangeStripWidth),\n                0,\n              )\n            } else {\n              // Prevent the start thumb from going over the length of the sequence\n              newPosition = Math.min(\n                Math.max(newPosition, range[0] + minFocusRangeStripWidth),\n                sheet.getSequence().length,\n              )\n            }\n\n            const newPositionInFrame = sheet\n              .getSequence()\n              .closestGridPosition(newPosition)\n\n            if (tempTransaction !== undefined) {\n              tempTransaction.discard()\n            }\n\n            tempTransaction = getStudio().tempTransaction(({stateEditors}) => {\n              stateEditors.studio.ahistoric.projects.stateByProjectId.stateBySheetId.sequence.focusRange.set(\n                {\n                  ...sheet.address,\n                  range:\n                    thumbType === 0\n                      ? [newPosition, range[1]]\n                      : [range[0], newPosition],\n                  enabled: focusRangeEnabled,\n                },\n              )\n            })\n          },\n          onDragEnd(dragHappened) {\n            if (dragHappened) tempTransaction?.commit()\n            else tempTransaction?.discard()\n          },\n        }\n      },\n    }\n  }, [layoutP])\n\n  const [isDragging] = useDrag(hitZoneNode, gestureHandlers)\n\n  useCssCursorLock(\n    isDragging,\n    'draggingPositionInSequenceEditor',\n    thumbType === ThumbType.start ? 'w-resize' : 'e-resize',\n  )\n\n  const existingRange = useVal(existingRangeD)\n\n  useLockFrameStampPosition(isDragging, existingRange?.range[thumbType] ?? 0)\n\n  return usePrism(() => {\n    const existingRange = existingRangeD.getValue()\n    if (!existingRange) return null\n    const {enabled} = existingRange\n\n    const position = existingRange.range[thumbType]\n\n    let posInClippedSpace: number = val(layoutP.clippedSpace.fromUnitSpace)(\n      position,\n    )\n\n    if (\n      posInClippedSpace < 0 ||\n      val(layoutP.clippedSpace.width) < posInClippedSpace\n    ) {\n      posInClippedSpace = -10000\n    }\n\n    return (\n      <TheDiv\n        ref={hitZoneRef as $IntentionalAny}\n        {...DopeSnap.includePositionSnapAttrs(position)}\n        {...includeLockFrameStampAttrs(position)}\n        className={`${isDragging && 'dragging'} ${enabled && 'enabled'}`}\n        enabled={enabled}\n        type={thumbType}\n        style={{\n          transform: `translate3d(${posInClippedSpace}px, 0, 0)`,\n        }}\n      >\n        <ColoredMargin type={thumbType} enabled={enabled} />\n        <OuterColoredMargin type={thumbType} />\n        <svg viewBox=\"0 0 9 18\" xmlns=\"http://www.w3.org/2000/svg\">\n          <line x1=\"4\" y1=\"6\" x2=\"4\" y2=\"12\" />\n          <line x1=\"6\" y1=\"6\" x2=\"6\" y2=\"12\" />\n        </svg>\n      </TheDiv>\n    )\n  }, [layoutP, hitZoneRef, existingRangeD, isDragging])\n}\n\nexport default FocusRangeThumb\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/FocusRangeZone/FocusRangeZone.tsx",
    "content": "import type {Pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport {usePrism} from '@theatre/react'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport getStudio from '@theatre/studio/getStudio'\nimport {\n  panelDimsToPanelPosition,\n  usePanel,\n} from '@theatre/studio/panels/BasePanel/BasePanel'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {topStripHeight} from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/TopStrip'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport {useCssCursorLock} from '@theatre/studio/uiComponents/PointerEventsHandler'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport useHoverWithoutDescendants from '@theatre/studio/uiComponents/useHoverWithoutDescendants'\nimport useKeyDown from '@theatre/studio/uiComponents/useKeyDown'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {clamp} from 'lodash-es'\nimport React, {useEffect, useMemo, useRef, useState} from 'react'\nimport styled from 'styled-components'\nimport FocusRangeStrip, {focusRangeStripTheme} from './FocusRangeStrip'\nimport FocusRangeThumb from './FocusRangeThumb'\nimport {minVisibleSize} from '@theatre/studio/panels/BasePanel/common'\n\nconst Container = styled.div<{isShiftDown: boolean}>`\n  position: absolute;\n  height: ${() => topStripHeight}px;\n  left: 0;\n  right: 0;\n  box-sizing: border-box;\n  /* Use the \"grab\" cursor if the shift key is up, which is the one used on the top strip of the sequence editor */\n  cursor: ${(props) => (props.isShiftDown ? 'ew-resize' : 'move')};\n`\n\nconst FocusRangeZone: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({layoutP}) => {\n  const [containerRef, containerNode] = useRefAndState<HTMLElement | null>(null)\n\n  const panelStuff = usePanel()\n  const panelStuffRef = useRef(panelStuff)\n  panelStuffRef.current = panelStuff\n\n  const existingRangeD = useMemo(\n    () =>\n      prism(() => {\n        const {projectId, sheetId} = val(layoutP.sheet).address\n        const existingRange = val(\n          getStudio().atomP.ahistoric.projects.stateByProjectId[projectId]\n            .stateBySheetId[sheetId].sequence.focusRange,\n        )\n        return existingRange\n      }),\n    [layoutP],\n  )\n\n  useDrag(\n    containerNode,\n    usePanelDragZoneGestureHandlers(layoutP, panelStuffRef),\n  )\n\n  const isShiftDown = useKeyDown('Shift')\n  const isPointerHovering = useHoverWithoutDescendants(containerNode)\n\n  useEffect(() => {\n    if (!isShiftDown && isPointerHovering) {\n      const unlock = panelStuffRef.current.addBoundsHighlightLock()\n      return unlock\n    }\n  }, [!isShiftDown && isPointerHovering])\n\n  return usePrism(() => {\n    return (\n      <Container\n        ref={containerRef as $IntentionalAny}\n        isShiftDown={isShiftDown}\n      >\n        <FocusRangeStrip layoutP={layoutP} />\n        <FocusRangeThumb thumbType={0} layoutP={layoutP} />\n        <FocusRangeThumb thumbType={1} layoutP={layoutP} />\n      </Container>\n    )\n  }, [layoutP, existingRangeD, isShiftDown])\n}\n\nexport default FocusRangeZone\n\nfunction usePanelDragZoneGestureHandlers(\n  layoutP: Pointer<SequenceEditorPanelLayout>,\n  panelStuffRef: React.MutableRefObject<ReturnType<typeof usePanel>>,\n) {\n  const [mode, setMode] = useState<'none' | 'creating' | 'moving-panel'>('none')\n\n  useCssCursorLock(\n    mode !== 'none',\n    'dragging',\n    mode === 'creating' ? 'ew-resize' : 'move',\n  )\n\n  return useMemo((): Parameters<typeof useDrag>[1] => {\n    const focusRangeCreationGestureHandlers = (): Parameters<\n      typeof useDrag\n    >[1] => {\n      return {\n        debugName: 'FocusRangeZone/focusRangeCreationGestureHandlers',\n        onDragStart(event) {\n          let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n          const clippedSpaceToUnitSpace = val(layoutP.clippedSpace.toUnitSpace)\n          const scaledSpaceToUnitSpace = val(layoutP.scaledSpace.toUnitSpace)\n          const sheet = val(layoutP.sheet)\n          const sequence = sheet.getSequence()\n\n          const targetElement: HTMLElement = event.target as HTMLElement\n          const rect = targetElement!.getBoundingClientRect()\n          const startPosInUnitSpace = clippedSpaceToUnitSpace(\n            event.clientX - rect.left,\n          )\n          const minFocusRangeStripWidth = scaledSpaceToUnitSpace(\n            focusRangeStripTheme.rangeStripMinWidth,\n          )\n\n          return {\n            onDrag(dx) {\n              const deltaPos = scaledSpaceToUnitSpace(dx)\n\n              let start = startPosInUnitSpace\n              let end = startPosInUnitSpace + deltaPos\n\n              ;[start, end] = [\n                clamp(start, 0, sequence.length),\n                clamp(end, 0, sequence.length),\n              ].map((pos) => sequence.closestGridPosition(pos))\n\n              if (end < start) {\n                ;[start, end] = [\n                  Math.max(Math.min(end, start - minFocusRangeStripWidth), 0),\n                  start,\n                ]\n              } else if (dx > 0) {\n                end = Math.min(\n                  Math.max(end, start + minFocusRangeStripWidth),\n                  sequence.length,\n                )\n              }\n\n              if (tempTransaction) {\n                tempTransaction.discard()\n              }\n\n              tempTransaction = getStudio().tempTransaction(\n                ({stateEditors}) => {\n                  stateEditors.studio.ahistoric.projects.stateByProjectId.stateBySheetId.sequence.focusRange.set(\n                    {\n                      ...sheet.address,\n                      range: [start, end],\n                      enabled: true,\n                    },\n                  )\n                },\n              )\n            },\n            onDragEnd(dragHappened) {\n              if (dragHappened && tempTransaction !== undefined) {\n                tempTransaction.commit()\n              } else if (tempTransaction) {\n                tempTransaction.discard()\n              }\n            },\n          }\n        },\n\n        lockCSSCursorTo: 'ew-resize',\n      }\n    }\n\n    const panelMoveGestureHandlers = (): Parameters<typeof useDrag>[1] => {\n      return {\n        debugName: 'FocusRangeZone/panelMoveGestureHandlers',\n        onDragStart() {\n          let tempTransaction: CommitOrDiscardOrRecapture | undefined\n          const stuffBeforeDrag = panelStuffRef.current\n\n          const unlock = panelStuffRef.current.addBoundsHighlightLock()\n\n          return {\n            onDrag(dx, dy) {\n              const newDims: (typeof panelStuffRef.current)['dims'] = {\n                ...stuffBeforeDrag.dims,\n                top: clamp(\n                  stuffBeforeDrag.dims.top + dy,\n                  0,\n                  window.innerHeight - minVisibleSize,\n                ),\n                left: clamp(\n                  stuffBeforeDrag.dims.left + dx,\n                  -stuffBeforeDrag.dims.width + minVisibleSize,\n                  window.innerWidth - minVisibleSize,\n                ),\n              }\n              const position = panelDimsToPanelPosition(newDims, {\n                width: window.innerWidth,\n                height: window.innerHeight,\n              })\n\n              tempTransaction?.discard()\n              tempTransaction = getStudio()!.tempTransaction(\n                ({stateEditors}) => {\n                  stateEditors.studio.historic.panelPositions.setPanelPosition({\n                    position,\n                    panelId: stuffBeforeDrag.panelId,\n                  })\n                },\n              )\n            },\n            onDragEnd(dragHappened) {\n              unlock()\n              if (dragHappened) {\n                tempTransaction?.commit()\n              } else {\n                tempTransaction?.discard()\n              }\n            },\n          }\n        },\n        lockCSSCursorTo: 'move',\n      }\n    }\n\n    return {\n      debugName: 'FocusRangeZone',\n      onDragStart(event) {\n        const [_mode, currentGestureHandlers] = event.shiftKey\n          ? [\n              'creating' as 'creating',\n              focusRangeCreationGestureHandlers().onDragStart(event),\n            ]\n          : [\n              'moving-panel' as 'moving-panel',\n              panelMoveGestureHandlers().onDragStart(event),\n            ]\n\n        setMode(_mode)\n\n        if (currentGestureHandlers === false) return false\n\n        return {\n          onDrag(dx, dy, event, ddx, ddy) {\n            currentGestureHandlers.onDrag(dx, dy, event, ddx, ddy)\n          },\n          onDragEnd(dragHappened) {\n            setMode('none')\n            currentGestureHandlers.onDragEnd?.(dragHappened)\n          },\n        }\n      },\n    }\n  }, [layoutP, panelStuffRef])\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/FrameStamp.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {usePrism, useVal} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport {stampsGridTheme} from '@theatre/studio/panels/SequenceEditorPanel/FrameGrid/StampsGrid'\nimport {zIndexes} from '@theatre/studio/panels/SequenceEditorPanel/SequenceEditorPanel'\nimport {topStripTheme} from './TopStrip'\nimport {\n  FrameStampPositionType,\n  useFrameStampPositionD,\n} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\n\nconst Container = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  margin-top: 0px;\n`\n\nconst Label = styled.div`\n  position: absolute;\n  top: 16px;\n  font-size: ${stampsGridTheme.stampFontSize};\n  color: ${stampsGridTheme.fullUnitStampColor};\n  text-align: center;\n  transform: translateX(-50%);\n  background: ${topStripTheme.backgroundColor};\n  padding: 1px 8px;\n  font-variant-numeric: tabular-nums;\n  pointer-events: none;\n  z-index: ${() => zIndexes.currentFrameStamp};\n`\n\nconst Line = styled.div<{posType: FrameStampPositionType}>`\n  position: absolute;\n  top: 5px;\n  left: -0px;\n  bottom: 0;\n  width: 0.5px;\n  background: rgba(100, 100, 100, 0.2);\n  pointer-events: none;\n`\n\nconst FrameStamp: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = React.memo(({layoutP}) => {\n  const [posInUnitSpace, posType] = useVal(useFrameStampPositionD())\n  const unitSpaceToClippedSpace = useVal(layoutP.clippedSpace.fromUnitSpace)\n  const {sequence, formatter, clippedSpaceWidth} = usePrism(() => {\n    const sequence = val(layoutP.sheet).getSequence()\n    const clippedSpaceWidth = val(layoutP.clippedSpace.width)\n    return {sequence, formatter: sequence.positionFormatter, clippedSpaceWidth}\n  }, [layoutP])\n\n  if (posInUnitSpace == -1) {\n    return <></>\n  }\n\n  const snappedPosInUnitSpace =\n    posType === FrameStampPositionType.free\n      ? sequence.closestGridPosition(posInUnitSpace)\n      : posInUnitSpace\n\n  const posInClippedSpace = unitSpaceToClippedSpace(snappedPosInUnitSpace)\n\n  const isVisible =\n    posInClippedSpace >= 0 && posInClippedSpace <= clippedSpaceWidth\n\n  return (\n    <>\n      <Container>\n        <Label\n          style={{\n            opacity: isVisible ? 1 : 0,\n            transform: `translate3d(calc(${posInClippedSpace}px - 50%), 0, 0)`,\n          }}\n        >\n          {formatter.formatForPlayhead(snappedPosInUnitSpace)}\n        </Label>\n        <Line\n          posType={posType}\n          style={{\n            opacity: isVisible ? 1 : 0,\n            transform: `translate3d(${posInClippedSpace}px, 0, 0)`,\n          }}\n        />\n      </Container>{' '}\n    </>\n  )\n})\n\nexport default FrameStamp\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/HorizontalScrollbar.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {useVal} from '@theatre/react'\nimport type {IRange} from '@theatre/core/types/public'\nimport type {Pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport {position} from 'polished'\nimport React, {useCallback, useMemo, useState} from 'react'\nimport styled from 'styled-components'\nimport {zIndexes} from '@theatre/studio/panels/SequenceEditorPanel/SequenceEditorPanel'\nimport {includeLockFrameStampAttrs} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\n\nconst Container = styled.div`\n  --threadHeight: 6px;\n  --bg-inactive: #32353b;\n  --bg-active: #5b5c5d;\n  position: absolute;\n  height: 0;\n  width: 100%;\n  left: 12px;\n  /* bottom: 8px; */\n  z-index: ${() => zIndexes.horizontalScrollbar};\n  ${pointerEventsAutoInNormalMode}\n`\n\nconst TimeThread = styled.div`\n  position: relative;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: var(--threadHeight);\n`\n\nconst RangeBar = styled.div`\n  position: absolute;\n  height: 5px;\n  background: var(--bg-inactive);\n  cursor: ew-resize;\n  z-index: 2;\n\n  &:hover,\n  &:active {\n    background: var(--bg-active);\n  }\n\n  &:after {\n    ${position('absolute', '-4px')};\n    display: block;\n    content: ' ';\n  }\n`\n\nconst RangeHandle = styled.div`\n  position: absolute;\n  height: 5px;\n  width: 7px;\n  left: 0;\n  z-index: 2;\n  top: 0;\n  bottom: 0;\n  display: block;\n\n  &:hover:before {\n    background: var(--bg-active);\n  }\n\n  &:before {\n    ${position('absolute', '0')};\n    display: block;\n    content: ' ';\n    background: var(--bg-inactive);\n    border-radius: 0 2px 2px 0;\n  }\n\n  &:after {\n    ${position('absolute', '-4px')};\n    display: block;\n    content: ' ';\n  }\n`\n\nconst RangeStartHandle = styled(RangeHandle)`\n  left: calc(-1 * 7px);\n  cursor: w-resize;\n  &:before {\n    transform: scaleX(-1);\n  }\n`\nconst RangeEndHandle = styled(RangeHandle)`\n  cursor: e-resize;\n  left: 0px;\n`\n\nconst Tooltip = styled.div<{active: boolean}>`\n  display: ${(props) => (props.active ? 'block' : 'none')};\n  position: absolute;\n  top: -20px;\n  left: 4px;\n  padding: 0 4px;\n  transform: translateX(-50%);\n  background: #131d1f;\n  border-radius: 4px;\n  color: #fff;\n  font-size: 10px;\n  line-height: 18px;\n  text-align: center;\n\n  ${RangeStartHandle}:hover &,\n  ${RangeEndHandle}:hover &,\n  ${RangeBar}:hover ~ ${RangeStartHandle} &,\n  ${RangeBar}:hover ~ ${RangeEndHandle} & {\n    display: block;\n  }\n`\n\n/**\n * The little scrollbar on the bottom of the Right side\n */\nconst HorizontalScrollbar: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({layoutP}) => {\n  const unitPosToHumanReadablePos = useCallback((n: number) => n.toFixed(2), [])\n\n  // const dd = usePrism(() => val(layoutP.sheet).getSequence().positionFormatter.formatForPlayhead, [layoutP])\n\n  const relevantValuesD = useMemo(\n    () =>\n      prism(() => {\n        const rightWidth = val(layoutP.rightDims.width) - 25\n        const clippedSpaceRange = val(layoutP.clippedSpace.range)\n        const sequenceLength = val(layoutP.sheet).getSequence().length\n\n        const assumedLengthOfSequence = Math.max(\n          clippedSpaceRange[1],\n          sequenceLength,\n        )\n\n        const rangeStartX =\n          (clippedSpaceRange[0] / assumedLengthOfSequence) * rightWidth\n\n        const rangeEndX =\n          (clippedSpaceRange[1] / assumedLengthOfSequence) * rightWidth\n\n        return {\n          rightWidth,\n          clippedSpaceRange,\n          sequenceLength,\n          assumedLengthOfSequence,\n          rangeStartX,\n          rangeEndX,\n          bottom: val(layoutP.horizontalScrollbarDims.bottom),\n        }\n      }),\n    [layoutP],\n  )\n  const {rangeStartX, rangeEndX, clippedSpaceRange, bottom} =\n    useVal(relevantValuesD)\n\n  const [beingDragged, setBeingDragged] = useState<\n    'nothing' | 'both' | 'start' | 'end'\n  >('nothing')\n\n  const handles = useMemo(() => {\n    let valuesBeforeDrag = val(relevantValuesD)\n    let noteValuesBeforeDrag = () => {\n      valuesBeforeDrag = val(relevantValuesD)\n    }\n\n    const deltaXToDeltaPos = (dx: number): number => {\n      const asAFractionOfRightWidth = dx / valuesBeforeDrag.rightWidth\n      return asAFractionOfRightWidth * valuesBeforeDrag.assumedLengthOfSequence\n    }\n\n    const self = {\n      onRangeDragStart() {\n        noteValuesBeforeDrag()\n        return {\n          onDrag(dx: number) {\n            setBeingDragged('both')\n            const deltaPosInUnitSpace = deltaXToDeltaPos(dx)\n\n            const newRange = valuesBeforeDrag.clippedSpaceRange.map(\n              (p) => p + deltaPosInUnitSpace,\n            ) as IRange\n\n            val(layoutP.clippedSpace.setRange)(newRange)\n          },\n          onDragEnd() {\n            setBeingDragged('nothing')\n          },\n        }\n      },\n\n      onRangeStartDragStart() {\n        noteValuesBeforeDrag()\n        return {\n          onDrag(dx: number) {\n            setBeingDragged('start')\n\n            const deltaPosInUnitSpace = deltaXToDeltaPos(dx)\n\n            const newRange: IRange = [\n              valuesBeforeDrag.clippedSpaceRange[0] + deltaPosInUnitSpace,\n              valuesBeforeDrag.clippedSpaceRange[1],\n            ]\n\n            if (newRange[0] > newRange[1] - 1) {\n              newRange[0] = newRange[1] - 1\n            }\n\n            if (newRange[0] <= 0) {\n              newRange[0] = 0\n            }\n\n            val(layoutP.clippedSpace.setRange)(newRange)\n          },\n          onDragEnd() {\n            setBeingDragged('nothing')\n          },\n        }\n      },\n\n      onRangeEndDragStart() {\n        noteValuesBeforeDrag()\n        return {\n          onDrag(dx: number) {\n            setBeingDragged('end')\n\n            const deltaPosInUnitSpace = deltaXToDeltaPos(dx)\n\n            const newRange: IRange = [\n              valuesBeforeDrag.clippedSpaceRange[0],\n              valuesBeforeDrag.clippedSpaceRange[1] + deltaPosInUnitSpace,\n            ]\n\n            if (newRange[1] < newRange[0] + 1) {\n              newRange[1] = newRange[0] + 1\n            }\n\n            if (newRange[1] >= valuesBeforeDrag.assumedLengthOfSequence) {\n              newRange[1] = valuesBeforeDrag.assumedLengthOfSequence\n            }\n\n            val(layoutP.clippedSpace.setRange)(newRange)\n          },\n          onDragEnd() {\n            setBeingDragged('nothing')\n          },\n        }\n      },\n    }\n\n    return self\n  }, [layoutP, relevantValuesD])\n\n  const [rangeDragNode, setRangeDragNode] = useState<HTMLDivElement | null>(\n    null,\n  )\n  useDrag(rangeDragNode, {\n    debugName: 'HorizontalScrollbar/onRangeDrag',\n    onDragStart: handles.onRangeDragStart,\n    lockCSSCursorTo: 'ew-resize',\n  })\n\n  const [rangeStartDragNode, setRangeStartDragNode] =\n    useState<HTMLDivElement | null>(null)\n  useDrag(rangeStartDragNode, {\n    debugName: 'HorizontalScrollbar/onRangeStartDrag',\n    onDragStart: handles.onRangeStartDragStart,\n    lockCSSCursorTo: 'w-resize',\n  })\n\n  const [rangeEndDragNode, setRangeEndDragNode] =\n    useState<HTMLDivElement | null>(null)\n  useDrag(rangeEndDragNode, {\n    debugName: 'HorizontalScrollbar/onRangeEndDrag',\n    onDragStart: handles.onRangeEndDragStart,\n    lockCSSCursorTo: 'e-resize',\n  })\n\n  return (\n    <Container\n      style={{bottom: bottom + 8 + 'px'}}\n      {...includeLockFrameStampAttrs('hide')}\n    >\n      <TimeThread>\n        <RangeBar\n          ref={setRangeDragNode}\n          style={{\n            width: `${rangeEndX - rangeStartX}px`,\n            transform: `translate3d(${rangeStartX}px, 0, 0)`,\n          }}\n        />\n        <RangeStartHandle\n          ref={setRangeStartDragNode}\n          style={{transform: `translate3d(${rangeStartX}px, 0, 0)`}}\n        >\n          <Tooltip active={beingDragged === 'both' || beingDragged === 'start'}>\n            {unitPosToHumanReadablePos(clippedSpaceRange[0])}\n          </Tooltip>\n        </RangeStartHandle>\n        <RangeEndHandle\n          ref={setRangeEndDragNode}\n          style={{transform: `translate3d(${rangeEndX}px, 0, 0)`}}\n        >\n          <Tooltip active={beingDragged === 'both' || beingDragged === 'end'}>\n            {unitPosToHumanReadablePos(clippedSpaceRange[1])}\n          </Tooltip>\n        </RangeEndHandle>\n      </TimeThread>\n    </Container>\n  )\n}\n\nexport default HorizontalScrollbar\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/Markers/MarkerDot.tsx",
    "content": "import type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport {useVal} from '@theatre/react'\nimport getStudio from '@theatre/studio/getStudio'\nimport {\n  lockedCursorCssVarName,\n  useCssCursorLock,\n} from '@theatre/studio/uiComponents/PointerEventsHandler'\nimport useContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/useContextMenu'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport React, {useMemo, useRef} from 'react'\nimport styled from 'styled-components'\nimport {useLockFrameStampPosition} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport type {SheetAddress} from '@theatre/core/types/public'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\nimport type {DragOpts} from '@theatre/studio/uiComponents/useDrag'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport type {StudioHistoricStateSequenceEditorMarker} from '@theatre/core/types/private'\nimport {zIndexes} from '@theatre/studio/panels/SequenceEditorPanel/SequenceEditorPanel'\nimport DopeSnap from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/DopeSnap'\nimport {absoluteDims} from '@theatre/studio/utils/absoluteDims'\nimport {DopeSnapHitZoneUI} from '@theatre/studio/panels/SequenceEditorPanel/RightOverlay/DopeSnapHitZoneUI'\nimport {\n  snapToAll,\n  snapToNone,\n} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/KeyframeSnapTarget'\nimport usePopover from '@theatre/studio/uiComponents/Popover/usePopover'\nimport BasicPopover from '@theatre/studio/uiComponents/Popover/BasicPopover'\nimport MarkerEditorPopover from './MarkerEditorPopover'\nimport type {SequenceMarkerId} from '@theatre/core/types/public'\n\nconst MARKER_SIZE_W_PX = 12\nconst MARKER_SIZE_H_PX = 12\nconst MARKER_HOVER_SIZE_W_PX = MARKER_SIZE_W_PX * 2\nconst MARKER_HOVER_SIZE_H_PX = MARKER_SIZE_H_PX * 2\n\nconst MarkerDotContainer = styled.div`\n  position: absolute;\n  // below the sequence ruler \"top bar\"\n  top: 18px;\n  z-index: ${() => zIndexes.marker};\n`\n\nconst MarkerVisualDotSVGContainer = styled.div`\n  position: absolute;\n  ${absoluteDims(MARKER_SIZE_W_PX, MARKER_SIZE_H_PX)}\n  pointer-events: none;\n`\n\n// Attempted to optimize via memo + inline svg rather than background-url\nconst MarkerVisualDot = React.memo(() => (\n  <MarkerVisualDotSVGContainer\n    children={\n      <svg\n        width=\"100%\"\n        height=\"100%\"\n        viewBox=\"0 0 12 12\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          d=\"M12 5H0V7H2.71973L5.96237 10.2426L9.20501 7H12V5Z\"\n          fill=\"#40AAA4\"\n        />\n      </svg>\n    }\n  />\n))\n\nconst HitZone = styled.div`\n  z-index: 1;\n  cursor: ew-resize;\n\n  ${DopeSnapHitZoneUI.CSS}\n\n  // :not dragging marker to ensure that markers don't snap to other markers\n  // this works because only one marker track (so this technique is not used by keyframes...)\n  #pointer-root.draggingPositionInSequenceEditor:not(.draggingMarker) & {\n    ${DopeSnapHitZoneUI.CSS_WHEN_SOMETHING_DRAGGING}\n  }\n\n  // \"All instances of this component <Mark/> inside #pointer-root when it has the .draggingPositionInSequenceEditor class\"\n  // ref: https://styled-components.com/docs/basics#pseudoelements-pseudoselectors-and-nesting\n  #pointer-root.draggingPositionInSequenceEditor:not(.draggingMarker) &,\n  #pointer-root.draggingPositionInSequenceEditor\n    &.${DopeSnapHitZoneUI.BEING_DRAGGED_CLASS} {\n    pointer-events: auto;\n    cursor: var(${lockedCursorCssVarName});\n  }\n\n  &:hover\n    + ${MarkerVisualDotSVGContainer},\n    // notice , \"or\" in CSS\n    &.${DopeSnapHitZoneUI.BEING_DRAGGED_CLASS}\n    + ${MarkerVisualDotSVGContainer} {\n    ${absoluteDims(MARKER_HOVER_SIZE_W_PX, MARKER_HOVER_SIZE_H_PX)}\n  }\n`\n\ntype IMarkerDotProps = {\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  markerId: SequenceMarkerId\n}\n\nconst MarkerDot: React.VFC<IMarkerDotProps> = ({layoutP, markerId}) => {\n  const sheetAddress = useVal(layoutP.sheet.address)\n  const marker = useVal(\n    getStudio().atomP.historic.projects.stateByProjectId[sheetAddress.projectId]\n      .stateBySheetId[sheetAddress.sheetId].sequenceEditor.markerSet.byId[\n      markerId\n    ],\n  )\n  if (!marker) {\n    // 1/10 maybe this is normal if React tries to re-render this with\n    // out of date data. (e.g. Suspense / Transition stuff?)\n    return null\n  }\n\n  // check marker in viewable bounds\n  const clippedSpaceWidth = useVal(layoutP.clippedSpace.width)\n  const clippedSpaceFromUnitSpace = useVal(layoutP.clippedSpace.fromUnitSpace)\n  const clippedSpaceMarkerX = clippedSpaceFromUnitSpace(marker.position)\n\n  const outsideClipDims =\n    clippedSpaceMarkerX <= 0 || clippedSpaceMarkerX > clippedSpaceWidth\n\n  // If outside the clip space, we want to hide the marker dot. We\n  // hide the dot by translating it far away and scaling it to 0.\n  // This method of hiding does not cause reflow/repaint.\n  const translateX = outsideClipDims ? -10000 : clippedSpaceMarkerX\n  const scale = outsideClipDims ? 0 : 1\n\n  return (\n    <MarkerDotContainer\n      style={{\n        transform: `translateX(${translateX}px) scale(${scale})`,\n      }}\n    >\n      <MarkerDotVisible marker={marker} layoutP={layoutP} />\n    </MarkerDotContainer>\n  )\n}\n\nexport default MarkerDot\n\ntype IMarkerDotVisibleProps = {\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  marker: StudioHistoricStateSequenceEditorMarker\n}\n\nconst MarkerDotVisible: React.VFC<IMarkerDotVisibleProps> = ({\n  layoutP,\n  marker,\n}) => {\n  const sheetAddress = useVal(layoutP.sheet.address)\n\n  const [markRef, markNode] = useRefAndState<HTMLDivElement | null>(null)\n\n  const [contextMenu] = useMarkerContextMenu(markNode, {\n    sheetAddress,\n    markerId: marker.id,\n  })\n\n  const [isDragging] = useDragMarker(markNode, {\n    layoutP,\n    marker,\n  })\n\n  const {\n    node: popoverNode,\n    toggle: togglePopover,\n    close: closePopover,\n  } = usePopover({debugName: 'MarkerPopover'}, () => {\n    return (\n      <BasicPopover showPopoverEdgeTriangle={true}>\n        <MarkerEditorPopover\n          marker={marker}\n          layoutP={layoutP}\n          onRequestClose={closePopover}\n        />\n      </BasicPopover>\n    )\n  })\n\n  return (\n    <>\n      {contextMenu}\n      {popoverNode}\n      <HitZone\n        title={marker.label ? `Marker: ${marker.label}` : 'Marker'}\n        ref={markRef}\n        onClick={(e) => {\n          togglePopover(e, markRef.current!)\n        }}\n        {...DopeSnapHitZoneUI.reactProps({\n          isDragging,\n          position: marker.position,\n        })}\n      />\n      <MarkerVisualDot />\n    </>\n  )\n}\n\nfunction useMarkerContextMenu(\n  node: HTMLElement | null,\n  options: {\n    sheetAddress: SheetAddress\n    markerId: SequenceMarkerId\n  },\n) {\n  return useContextMenu(node, {\n    items() {\n      return [\n        {\n          type: 'normal',\n          label: 'Remove marker',\n          callback: () => {\n            getStudio().transaction(({stateEditors}) => {\n              stateEditors.studio.historic.projects.stateByProjectId.stateBySheetId.sequenceEditor.removeMarker(\n                {\n                  sheetAddress: options.sheetAddress,\n                  markerId: options.markerId,\n                },\n              )\n            })\n          },\n        },\n      ]\n    },\n  })\n}\n\nfunction useDragMarker(\n  node: HTMLDivElement | null,\n  props: {\n    layoutP: Pointer<SequenceEditorPanelLayout>\n    marker: StudioHistoricStateSequenceEditorMarker\n  },\n): [isDragging: boolean] {\n  const propsRef = useRef(props)\n  propsRef.current = props\n\n  const useDragOpts = useMemo<DragOpts>(() => {\n    return {\n      debugName: `MarkerDot/useDragMarker (${props.marker.id})`,\n      onDragStart(_event) {\n        const markerAtStartOfDrag = propsRef.current.marker\n        const toUnitSpace = val(props.layoutP.scaledSpace.toUnitSpace)\n        let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n        snapToAll()\n\n        return {\n          onDrag(dx, _dy, event) {\n            const original = markerAtStartOfDrag\n            const newPosition = Math.max(\n              // check if our event hoversover a [data-pos] element\n              DopeSnap.checkIfMouseEventSnapToPos(event, {\n                ignore: node,\n              }) ??\n                // if we don't find snapping target, check the distance dragged + original position\n                original.position + toUnitSpace(dx),\n              // sanitize to minimum of zero\n              0,\n            )\n\n            tempTransaction?.discard()\n            tempTransaction = getStudio()!.tempTransaction(({stateEditors}) => {\n              stateEditors.studio.historic.projects.stateByProjectId.stateBySheetId.sequenceEditor.replaceMarkers(\n                {\n                  sheetAddress: val(props.layoutP.sheet.address),\n                  markers: [{...original, position: newPosition}],\n                  snappingFunction: val(props.layoutP.sheet).getSequence()\n                    .closestGridPosition,\n                },\n              )\n            })\n          },\n          onDragEnd(dragHappened) {\n            if (dragHappened) tempTransaction?.commit()\n            else tempTransaction?.discard()\n\n            snapToNone()\n          },\n        }\n      },\n    }\n  }, [])\n\n  const [isDragging] = useDrag(node, useDragOpts)\n\n  useLockFrameStampPosition(isDragging, props.marker.position)\n  useCssCursorLock(\n    isDragging,\n    'draggingPositionInSequenceEditor draggingMarker',\n    'ew-resize',\n  )\n\n  return [isDragging]\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/Markers/MarkerEditorPopover.tsx",
    "content": "import type {Pointer} from '@theatre/dataverse'\nimport React, {useLayoutEffect, useMemo, useRef} from 'react'\nimport styled from 'styled-components'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {useVal} from '@theatre/react'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {BasicNumberInputNudgeFn} from '@theatre/studio/uiComponents/form/BasicNumberInput'\nimport type {CommitOrDiscardOrRecapture} from '@theatre/studio/StudioStore/StudioStore'\nimport {propNameTextCSS} from '@theatre/studio/propEditors/utils/propNameTextCSS'\nimport type {StudioHistoricStateSequenceEditorMarker} from '@theatre/core/types/private'\nimport BasicStringInput from '@theatre/studio/uiComponents/form/BasicStringInput'\n\nconst Container = styled.div`\n  display: flex;\n  gap: 8px;\n  height: 28px;\n  align-items: center;\n`\n\nconst Label = styled.div`\n  ${propNameTextCSS};\n  white-space: nowrap;\n`\n\nconst nudge: BasicNumberInputNudgeFn = ({deltaX}) => deltaX * 0.25\n\nconst MarkerEditorPopover: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  marker: StudioHistoricStateSequenceEditorMarker\n  /**\n   * Called when user hits enter/escape\n   */\n  onRequestClose: (reason: string) => void\n}> = ({layoutP, marker}) => {\n  const sheet = useVal(layoutP.sheet)\n\n  const fns = useMemo(() => {\n    let tempTransaction: CommitOrDiscardOrRecapture | undefined\n\n    return {\n      temporarilySetValue(newLabel: string): void {\n        if (tempTransaction) {\n          tempTransaction.discard()\n          tempTransaction = undefined\n        }\n        tempTransaction = getStudio()!.tempTransaction(({stateEditors}) => {\n          stateEditors.studio.historic.projects.stateByProjectId.stateBySheetId.sequenceEditor.updateMarker(\n            {\n              sheetAddress: sheet.address,\n              markerId: marker.id,\n              label: newLabel,\n            },\n          )\n        })\n      },\n      discardTemporaryValue(): void {\n        if (tempTransaction) {\n          tempTransaction.discard()\n          tempTransaction = undefined\n        }\n      },\n      permanentlySetValue(newLabel: string): void {\n        if (tempTransaction) {\n          tempTransaction.discard()\n          tempTransaction = undefined\n        }\n        getStudio()!.transaction(({stateEditors}) => {\n          stateEditors.studio.historic.projects.stateByProjectId.stateBySheetId.sequenceEditor.updateMarker(\n            {\n              sheetAddress: sheet.address,\n              markerId: marker.id,\n              label: newLabel,\n            },\n          )\n        })\n      },\n    }\n  }, [layoutP, sheet])\n\n  const inputRef = useRef<HTMLInputElement>(null)\n  useLayoutEffect(() => {\n    inputRef.current!.focus()\n  }, [])\n\n  return (\n    <Container>\n      <Label>Marker</Label>\n      <BasicStringInput\n        value={marker.label ?? ''}\n        {...fns}\n        isValid={() => true}\n        inputRef={inputRef}\n      />\n    </Container>\n  )\n}\n\nexport default MarkerEditorPopover\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/Markers/Markers.tsx",
    "content": "import type {Pointer} from '@theatre/dataverse'\nimport {useVal} from '@theatre/react'\nimport getStudio from '@theatre/studio/getStudio'\nimport React from 'react'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport MarkerDot from './MarkerDot'\n\nconst Markers: React.VFC<{layoutP: Pointer<SequenceEditorPanelLayout>}> = ({\n  layoutP,\n}) => {\n  const sheetAddress = useVal(layoutP.sheet.address)\n  const markerSetP =\n    getStudio().atomP.historic.projects.stateByProjectId[sheetAddress.projectId]\n      .stateBySheetId[sheetAddress.sheetId].sequenceEditor.markerSet\n  const markerAllIds = useVal(markerSetP.allIds)\n\n  return (\n    <>\n      {markerAllIds &&\n        Object.keys(markerAllIds).map((markerId) => (\n          <MarkerDot key={markerId} layoutP={layoutP} markerId={markerId} />\n        ))}\n    </>\n  )\n}\n\nexport default Markers\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/Playhead.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport RoomToClick from '@theatre/studio/uiComponents/RoomToClick'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {usePrism, useVal} from '@theatre/react'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport clamp from 'lodash-es/clamp'\nimport React, {useState} from 'react'\nimport styled from 'styled-components'\nimport {zIndexes} from '@theatre/studio/panels/SequenceEditorPanel/SequenceEditorPanel'\nimport {\n  includeLockFrameStampAttrs,\n  useLockFrameStampPosition,\n} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport BasicPopover from '@theatre/studio/uiComponents/Popover/BasicPopover'\nimport PlayheadPositionPopover from './PlayheadPositionPopover'\nimport {getIsPlayheadAttachedToFocusRange} from '@theatre/studio/UIRoot/useKeyboardShortcuts'\nimport {\n  lockedCursorCssVarName,\n  useCssCursorLock,\n} from '@theatre/studio/uiComponents/PointerEventsHandler'\nimport getStudio from '@theatre/studio/getStudio'\nimport DopeSnap from './DopeSnap'\nimport {\n  snapToAll,\n  snapToNone,\n} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/KeyframeSnapTarget'\nimport useChordial from '@theatre/studio/uiComponents/chordial/useChodrial'\nimport {mergeRefs} from 'react-merge-refs'\nimport usePopover from '@theatre/studio/uiComponents/Popover/usePopover'\nimport {generateSequenceMarkerId} from '@theatre/studio/utils/ids'\n\nconst Container = styled.div<{isVisible: boolean}>`\n  --thumbColor: #00e0ff;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 5px;\n  height: 100%;\n  z-index: ${() => zIndexes.playhead};\n  pointer-events: none;\n\n  display: ${(props) => (props.isVisible ? 'block' : 'none')};\n`\n\nconst Rod = styled.div`\n  position: absolute;\n  top: 8px;\n  width: 0;\n  height: calc(100% - 8px);\n  border-left: 1px solid #27e0fd;\n  z-index: 10;\n  pointer-events: none;\n\n  #pointer-root.draggingPositionInSequenceEditor &:not(.seeking) {\n    /* pointer-events: auto; */\n    /* cursor: var(${lockedCursorCssVarName}); */\n\n    &:after {\n      position: absolute;\n      inset: -8px;\n      display: block;\n      content: ' ';\n    }\n  }\n`\n\nconst Thumb = styled.div`\n  background-color: var(--thumbColor);\n  position: absolute;\n  width: 5px;\n  height: 13px;\n  top: -4px;\n  left: -2px;\n  z-index: 11;\n  cursor: ew-resize;\n  --sunblock-color: #1f2b2b;\n\n  ${pointerEventsAutoInNormalMode};\n\n  ${Container}.seeking > &, ${Container}.popoverOpen > & {\n    pointer-events: none !important;\n  }\n\n  #pointer-root.draggingPositionInSequenceEditor\n    ${Container}:not(.seeking)\n    > & {\n    pointer-events: auto;\n    cursor: var(${lockedCursorCssVarName});\n  }\n\n  ${Container}.playheadattachedtofocusrange > & {\n    top: -8px;\n    --sunblock-color: #005662;\n    &:before,\n    &:after {\n      border-bottom-width: 8px;\n    }\n  }\n\n  &:before {\n    position: absolute;\n    display: block;\n    content: ' ';\n    left: -2px;\n    width: 0;\n    height: 0;\n    border-bottom: 4px solid var(--sunblock-color);\n    border-left: 2px solid transparent;\n  }\n\n  &:after {\n    position: absolute;\n    display: block;\n    content: ' ';\n    right: -2px;\n    width: 0;\n    height: 0;\n    border-bottom: 4px solid var(--sunblock-color);\n    border-right: 2px solid transparent;\n  }\n`\n\nconst Squinch = styled.div`\n  position: absolute;\n  left: 1px;\n  right: 1px;\n  top: 13px;\n  border-top: 3px solid var(--thumbColor);\n  border-right: 1px solid transparent;\n  border-left: 1px solid transparent;\n  pointer-events: none;\n\n  /* ${Container}.playheadattachedtofocusrange & {\n    top: 10px;\n    &:before,\n    &:after {\n      height: 15px;\n    }\n  } */\n\n  &:before {\n    position: absolute;\n    display: block;\n    content: ' ';\n    top: -4px;\n    left: -2px;\n    height: 8px;\n    width: 2px;\n    background: none;\n    border-radius: 0 100% 0 0;\n    border-top: 1px solid var(--thumbColor);\n    border-right: 1px solid var(--thumbColor);\n  }\n\n  &:after {\n    position: absolute;\n    display: block;\n    content: ' ';\n    top: -4px;\n    right: -2px;\n    height: 8px;\n    width: 2px;\n    background: none;\n    border-radius: 100% 0 0 0;\n    border-top: 1px solid var(--thumbColor);\n    border-left: 1px solid var(--thumbColor);\n  }\n`\n\nconst Playhead: React.FC<{layoutP: Pointer<SequenceEditorPanelLayout>}> = ({\n  layoutP,\n}) => {\n  const [thumbRef, thumbNode] = useRefAndState<HTMLElement | null>(null)\n\n  const {\n    isVisible,\n    posInClippedSpace,\n    isSeeking,\n    isPlayheadAttachedToFocusRange,\n    posInUnitSpace,\n    sequence,\n  } = usePrism(() => {\n    const isSeeking = val(layoutP.seeker.isSeeking)\n\n    const sequence = val(layoutP.sheet).getSequence()\n\n    const isPlayheadAttachedToFocusRange = val(\n      getIsPlayheadAttachedToFocusRange(sequence),\n    )\n\n    const posInUnitSpace = sequence.positionPrism.getValue()\n\n    const posInClippedSpace = val(layoutP.clippedSpace.fromUnitSpace)(\n      posInUnitSpace,\n    )\n    const isVisible =\n      posInClippedSpace >= 0 &&\n      posInClippedSpace <= val(layoutP.clippedSpace.width)\n\n    return {\n      isVisible,\n      posInClippedSpace,\n      isSeeking,\n      isPlayheadAttachedToFocusRange,\n      posInUnitSpace,\n      sequence,\n    }\n  }, [layoutP])\n\n  const [isDragging, setIsDragging] = useState(false)\n\n  const c = useChordial(() => {\n    return {\n      title: sequence.positionFormatter.formatForPlayhead(\n        sequence.closestGridPosition(posInUnitSpace),\n      ),\n      menuTitle: 'Playhead',\n      invoke: (e) => {\n        if (e?.type === 'MouseEvent') {\n          popover.open(e.event, thumbRef.current!)\n        }\n      },\n      items: [\n        {\n          type: 'normal',\n          label: 'Place marker',\n          callback: () => {\n            getStudio().transaction(({stateEditors}) => {\n              // only retrieve val on callback to reduce unnecessary work on every use\n              const sheet = val(layoutP.sheet)\n              const sheetSequence = sheet.getSequence()\n              stateEditors.studio.historic.projects.stateByProjectId.stateBySheetId.sequenceEditor.replaceMarkers(\n                {\n                  sheetAddress: sheet.address,\n                  markers: [\n                    {\n                      id: generateSequenceMarkerId(),\n                      position: sheetSequence.position,\n                    },\n                  ],\n                  snappingFunction: sheetSequence.closestGridPosition,\n                },\n              )\n            })\n          },\n        },\n      ],\n      drag: {\n        debugName: 'RightOverlay/Playhead',\n        onDragStart() {\n          const sequence = val(layoutP.sheet).getSequence()\n          const posBeforeSeek = sequence.position\n          const scaledSpaceToUnitSpace = val(layoutP.scaledSpace.toUnitSpace)\n\n          const setIsSeeking = val(layoutP.seeker.setIsSeeking)\n          setIsSeeking(true)\n          setIsDragging(true)\n\n          snapToAll()\n\n          return {\n            onDrag(dx, _, event) {\n              const deltaPos = scaledSpaceToUnitSpace(dx)\n\n              sequence.position =\n                DopeSnap.checkIfMouseEventSnapToPos(event, {\n                  ignore: thumbNode,\n                }) ??\n                // unsnapped\n                clamp(posBeforeSeek + deltaPos, 0, sequence.length)\n            },\n            onDragEnd(dragHappened) {\n              setIsSeeking(false)\n              setIsDragging(false)\n              snapToNone()\n            },\n          }\n        },\n      },\n    }\n  })\n\n  useCssCursorLock(isDragging, 'draggingPositionInSequenceEditor', 'ew-resize')\n\n  // hide the frame stamp when seeking\n  useLockFrameStampPosition(useVal(layoutP.seeker.isSeeking) || isDragging, -1)\n\n  const popover = usePopover({debugName: 'Playhead'}, () => {\n    return (\n      <BasicPopover showPopoverEdgeTriangle={true}>\n        <PlayheadPositionPopover\n          layoutP={layoutP}\n          onRequestClose={popover.close}\n        />\n      </BasicPopover>\n    )\n  })\n\n  c.useDisableTooltip(popover.isOpen)\n\n  return (\n    <>\n      {popover.node}\n\n      <Container\n        isVisible={isVisible}\n        style={{transform: `translate3d(${posInClippedSpace}px, 0, 0)`}}\n        className={`${isSeeking && 'seeking'} ${\n          popover.isOpen && 'popoverOpen'\n        } ${isPlayheadAttachedToFocusRange && 'playheadattachedtofocusrange'}`}\n        {...includeLockFrameStampAttrs('hide')}\n      >\n        <Thumb\n          ref={mergeRefs([thumbRef, c.targetRef]) as $IntentionalAny}\n          {...DopeSnap.includePositionSnapAttrs(posInUnitSpace)}\n        >\n          <RoomToClick room={8} />\n          <Squinch />\n        </Thumb>\n\n        <Rod\n          {...DopeSnap.includePositionSnapAttrs(posInUnitSpace)}\n          className={isSeeking ? 'seeking' : ''}\n        />\n      </Container>\n    </>\n  )\n}\n\nexport default Playhead\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/PlayheadPositionPopover.tsx",
    "content": "import styled from 'styled-components'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {usePrism} from '@theatre/react'\nimport type {BasicNumberInputNudgeFn} from '@theatre/studio/uiComponents/form/BasicNumberInput'\nimport BasicNumberInput from '@theatre/studio/uiComponents/form/BasicNumberInput'\nimport {propNameTextCSS} from '@theatre/studio/propEditors/utils/propNameTextCSS'\nimport {useLayoutEffect, useMemo, useRef} from 'react'\nimport React from 'react'\nimport {val} from '@theatre/dataverse'\nimport type {Pointer} from '@theatre/dataverse'\nimport clamp from 'lodash-es/clamp'\n\nconst greaterThanOrEqualToZero = (v: number) => isFinite(v) && v >= 0\n\nconst Container = styled.div`\n  display: flex;\n  gap: 8px;\n  height: 28px;\n  align-items: center;\n`\n\nconst Label = styled.div`\n  ${propNameTextCSS};\n  white-space: nowrap;\n`\n\nconst nudge: BasicNumberInputNudgeFn = ({deltaX}) => deltaX * 0.25\n\nconst PlayheadPositionPopover: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n  /**\n   * Called when user hits enter/escape\n   */\n  onRequestClose: (reason: string) => void\n}> = ({layoutP, onRequestClose}) => {\n  const sheet = val(layoutP.sheet)\n  const sequence = sheet.getSequence()\n\n  const fns = useMemo(() => {\n    let tempPosition: number | undefined\n    const originalPosition = sequence.position\n\n    return {\n      temporarilySetValue(newPosition: number): void {\n        if (tempPosition) {\n          tempPosition = undefined\n        }\n        tempPosition = clamp(newPosition, 0, sequence.length)\n        sequence.position = tempPosition\n      },\n      discardTemporaryValue(): void {\n        if (tempPosition) {\n          tempPosition = undefined\n          sequence.position = originalPosition\n          onRequestClose('discardTemporaryValue')\n        }\n      },\n      permanentlySetValue(newPosition: number): void {\n        if (tempPosition) {\n          tempPosition = undefined\n        }\n        sequence.position = clamp(newPosition, 0, sequence.length)\n        onRequestClose('permanentlySetValue')\n      },\n    }\n  }, [layoutP, sequence])\n\n  const inputRef = useRef<HTMLInputElement>(null)\n  useLayoutEffect(() => {\n    inputRef.current!.focus()\n  }, [])\n\n  return usePrism(() => {\n    const sequence = sheet.getSequence()\n\n    const value = Number(val(sequence.pointer.position).toFixed(3))\n\n    return (\n      <Container>\n        <Label>Sequence position</Label>\n        <BasicNumberInput\n          value={value}\n          {...fns}\n          isValid={greaterThanOrEqualToZero}\n          inputRef={inputRef}\n          nudge={nudge}\n        />\n      </Container>\n    )\n  }, [sheet, fns, inputRef])\n}\n\nexport default PlayheadPositionPopover\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/RightOverlay.tsx",
    "content": "import type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport {zIndexes} from '@theatre/studio/panels/SequenceEditorPanel/SequenceEditorPanel'\nimport {usePrism} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport LengthIndicator from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/LengthIndicator/LengthIndicator'\nimport FrameStamp from './FrameStamp'\nimport HorizontalScrollbar from './HorizontalScrollbar'\nimport Playhead from './Playhead'\nimport TopStrip from './TopStrip'\nimport FocusRangeCurtains from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/FocusRangeCurtains'\nimport Markers from './Markers/Markers'\n\nconst Container = styled.div`\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  z-index: ${() => zIndexes.rightOverlay};\n  overflow: visible;\n  pointer-events: none;\n`\n\nconst RightOverlay: React.FC<{\n  layoutP: Pointer<SequenceEditorPanelLayout>\n}> = ({layoutP}) => {\n  return usePrism(() => {\n    const width = val(layoutP.rightDims.width)\n\n    return (\n      <Container style={{width: width + 'px'}}>\n        <Playhead layoutP={layoutP} />\n        <HorizontalScrollbar layoutP={layoutP} />\n        <FrameStamp layoutP={layoutP} />\n        <TopStrip layoutP={layoutP} />\n        <Markers layoutP={layoutP} />\n        <LengthIndicator layoutP={layoutP} />\n        <FocusRangeCurtains layoutP={layoutP} />\n      </Container>\n    )\n  }, [layoutP])\n}\n\nexport default RightOverlay\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/RightOverlay/TopStrip.tsx",
    "content": "import {useVal} from '@theatre/react'\nimport type {Pointer} from '@theatre/dataverse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport type {SequenceEditorPanelLayout} from '@theatre/studio/panels/SequenceEditorPanel/layout/layout'\nimport StampsGrid from '@theatre/studio/panels/SequenceEditorPanel/FrameGrid/StampsGrid'\nimport {includeLockFrameStampAttrs} from '@theatre/studio/panels/SequenceEditorPanel/FrameStampPositionProvider'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport FocusRangeZone from './FocusRangeZone/FocusRangeZone'\n\nexport const topStripHeight = 18\n\nexport const topStripTheme = {\n  backgroundColor: `#1f2120eb`,\n  borderColor: `#1c1e21`,\n}\n\nconst Container = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: ${topStripHeight}px;\n  box-sizing: border-box;\n  background: ${topStripTheme.backgroundColor};\n  border-bottom: 1px solid ${topStripTheme.borderColor};\n  ${pointerEventsAutoInNormalMode};\n`\n\nconst TopStrip: React.FC<{layoutP: Pointer<SequenceEditorPanelLayout>}> = ({\n  layoutP,\n}) => {\n  const width = useVal(layoutP.rightDims.width)\n\n  return (\n    <>\n      <Container {...includeLockFrameStampAttrs('hide')}>\n        <StampsGrid layoutP={layoutP} width={width} height={topStripHeight} />\n        <FocusRangeZone layoutP={layoutP} />\n      </Container>\n    </>\n  )\n}\n\nexport default TopStrip\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/SequenceEditorPanel.tsx",
    "content": "import {outlineSelection} from '@theatre/studio/selectors'\nimport {usePrism} from '@theatre/react'\nimport {valToAtom} from '@theatre/utils/valToAtom'\nimport type {Pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport React, {useState} from 'react'\nimport styled from 'styled-components'\n\nimport DopeSheet from './DopeSheet/DopeSheet'\nimport GraphEditor from './GraphEditor/GraphEditor'\nimport type {PanelDims, SequenceEditorPanelLayout} from './layout/layout'\nimport {sequenceEditorPanelLayout} from './layout/layout'\nimport RightOverlay from './RightOverlay/RightOverlay'\nimport BasePanel, {usePanel} from '@theatre/studio/panels/BasePanel/BasePanel'\nimport type {PanelPosition} from '@theatre/core/types/private'\nimport PanelDragZone from '@theatre/studio/panels/BasePanel/PanelDragZone'\nimport PanelWrapper from '@theatre/studio/panels/BasePanel/PanelWrapper'\nimport FrameStampPositionProvider from './FrameStampPositionProvider'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport {uniq} from 'lodash-es'\nimport GraphEditorToggle from './GraphEditorToggle'\nimport {\n  panelZIndexes,\n  TitleBar,\n  TitleBar_Piece,\n  TitleBar_Punctuation,\n} from '@theatre/studio/panels/BasePanel/common'\nimport {usePresenceListenersOnRootElement} from '@theatre/studio/uiComponents/usePresence'\nimport type {UIPanelId} from '@theatre/core/types/private'\nimport {__private} from '@theatre/core'\nconst {isSheet, isSheetObject} = __private.instanceTypes\n\nconst Container = styled(PanelWrapper)`\n  z-index: ${panelZIndexes.sequenceEditorPanel};\n  box-shadow: 2px 2px 0 rgb(0 0 0 / 11%);\n`\n\nconst LeftBackground = styled.div`\n  background-color: rgba(40, 43, 47, 0.99);\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  z-index: -1;\n  pointer-events: none;\n`\n\nexport const zIndexes = (() => {\n  const s = {\n    rightBackground: 0,\n    scrollableArea: 0,\n    rightOverlay: 0,\n    lengthIndicatorCover: 0,\n    lengthIndicatorStrip: 0,\n    playhead: 0,\n    currentFrameStamp: 0,\n    marker: 0,\n    horizontalScrollbar: 0,\n  }\n\n  // sort the z-indexes\n  let i = -1\n  for (const key of Object.keys(s)) {\n    s[key] = i\n    i++\n  }\n\n  return s\n})()\n\nconst Header_Container = styled(PanelDragZone)`\n  position: absolute;\n  left: 0;\n  top: 0;\n  z-index: 1;\n`\n\nconst defaultPosition: PanelPosition = {\n  edges: {\n    left: {from: 'screenLeft', distance: 0.1},\n    right: {from: 'screenRight', distance: 0.2},\n    top: {from: 'screenBottom', distance: 0.4},\n    bottom: {from: 'screenBottom', distance: 0.01},\n  },\n}\n\nconst minDims = {width: 800, height: 200}\n\nconst SequenceEditorPanel: React.VFC<{}> = (props) => {\n  return (\n    <BasePanel\n      panelId={'sequenceEditor' as UIPanelId}\n      defaultPosition={defaultPosition}\n      minDims={minDims}\n    >\n      <Content />\n    </BasePanel>\n  )\n}\n\nconst Content: React.VFC<{}> = () => {\n  const {dims} = usePanel()\n  const [containerNode, setContainerNode] = useState<null | HTMLDivElement>(\n    null,\n  )\n  usePresenceListenersOnRootElement(containerNode)\n  return usePrism(() => {\n    const panelSize = prism.memo(\n      'panelSize',\n      (): PanelDims => {\n        const width = dims.width\n        const height = dims.height\n        return {\n          width: width,\n          height: height,\n\n          widthWithoutBorder: width - 2,\n          heightWithoutBorder: height - 4,\n\n          screenX: dims.left,\n          screenY: dims.top,\n        }\n      },\n      [dims],\n    )\n\n    const selectedSheets = uniq(\n      outlineSelection\n        .getValue()\n        .filter((s): s is SheetObject | Sheet => isSheet(s) || isSheetObject(s))\n        .map((s) => (isSheetObject(s) ? s.sheet : s)),\n    )\n    const selectedTemplates = uniq(selectedSheets.map((s) => s.template))\n\n    if (selectedTemplates.length !== 1) return <></>\n    const sheet = selectedSheets[0]\n\n    if (!sheet) return <></>\n\n    const panelSizeP = valToAtom('panelSizeP', panelSize).pointer\n\n    // We make a unique key based on the sheet's address, so that\n    // <Left /> and <Right />\n    // don't have to listen to changes in sheet\n    const key = prism.memo('key', () => JSON.stringify(sheet.address), [sheet])\n\n    const layoutP = prism\n      .memo(\n        'layout',\n        () => {\n          return sequenceEditorPanelLayout(sheet, panelSizeP)\n        },\n        [sheet, panelSizeP],\n      )\n      .getValue()\n\n    if (val(layoutP.tree.children).length === 0) return <></>\n\n    const containerRef = prism.memo(\n      'containerRef',\n      preventHorizontalWheelEvents,\n      [],\n    )\n\n    const graphEditorAvailable = val(layoutP.graphEditorDims.isAvailable)\n    const graphEditorOpen = val(layoutP.graphEditorDims.isOpen)\n\n    return (\n      <Container\n        ref={(elt) => {\n          containerRef(elt as HTMLDivElement)\n          if (elt !== containerNode) {\n            setContainerNode(elt as HTMLDivElement)\n          }\n        }}\n      >\n        <LeftBackground style={{width: `${val(layoutP.leftDims.width)}px`}} />\n        <FrameStampPositionProvider layoutP={layoutP}>\n          <Header layoutP={layoutP} />\n          <DopeSheet key={key + '-dopeSheet'} layoutP={layoutP} />\n          {graphEditorOpen && (\n            <GraphEditor key={key + '-graphEditor'} layoutP={layoutP} />\n          )}\n          {graphEditorAvailable && <GraphEditorToggle layoutP={layoutP} />}\n          <RightOverlay layoutP={layoutP} />\n        </FrameStampPositionProvider>\n      </Container>\n    )\n  }, [dims, containerNode])\n}\n\nconst Header: React.FC<{layoutP: Pointer<SequenceEditorPanelLayout>}> = ({\n  layoutP,\n}) => {\n  return usePrism(() => {\n    const sheet = val(layoutP.sheet)\n    return (\n      <Header_Container\n        style={{\n          width: val(layoutP.leftDims.width),\n        }}\n      >\n        <TitleBar>\n          <TitleBar_Piece>{sheet.address.sheetId} </TitleBar_Piece>\n\n          <TitleBar_Punctuation>{':'}&nbsp;</TitleBar_Punctuation>\n          <TitleBar_Piece>{sheet.address.sheetInstanceId} </TitleBar_Piece>\n\n          <TitleBar_Punctuation>&nbsp;{'>'}&nbsp;</TitleBar_Punctuation>\n          <TitleBar_Piece>Sequence</TitleBar_Piece>\n        </TitleBar>\n      </Header_Container>\n    )\n  }, [layoutP])\n}\n\nexport default SequenceEditorPanel\n\nconst preventHorizontalWheelEvents = () => {\n  let lastNode: null | HTMLElement = null\n  const listenerOptions = {\n    passive: false,\n    capture: false,\n  }\n\n  const receiveWheelEvent = (event: WheelEvent) => {\n    if (Math.abs(event.deltaY) < Math.abs(event.deltaX)) {\n      event.preventDefault()\n      event.stopPropagation()\n    }\n  }\n\n  return (node: HTMLElement | null) => {\n    if (lastNode !== node && lastNode) {\n      lastNode.removeEventListener('wheel', receiveWheelEvent, listenerOptions)\n    }\n    lastNode = node\n    if (node) {\n      node.addEventListener('wheel', receiveWheelEvent, listenerOptions)\n    }\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/VerticalScrollContainer.tsx",
    "content": "import noop from '@theatre/utils/noop'\nimport React, {createContext, useCallback, useContext, useRef} from 'react'\nimport styled from 'styled-components'\nimport {zIndexes} from './SequenceEditorPanel'\n\nconst Container = styled.div`\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  bottom: 0;\n  overflow-x: hidden;\n  overflow-y: scroll;\n  z-index: ${() => zIndexes.scrollableArea};\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n\n  scrollbar-width: none;\n`\n\ntype ReceiveVerticalWheelEventFn = (ev: Pick<WheelEvent, 'deltaY'>) => void\n\nconst ctx = createContext<ReceiveVerticalWheelEventFn>(noop)\n\n/**\n * See {@link VerticalScrollContainer} and references for how to use this.\n */\nexport const useReceiveVerticalWheelEvent = (): ReceiveVerticalWheelEventFn =>\n  useContext(ctx)\n\n/**\n * This is used in the sequence editor where we block wheel events to handle\n * pan/zoom on the time axis. The issue this solves, is that when blocking those\n * wheel events, we prevent the vertical scroll events from being fired. This container\n * comes with a context and a hook (see {@link useReceiveVerticalWheelEvent}) that allows\n * the code that traps the wheel events to pass them to the vertical scroller root, which\n * we then use to manually dispatch scroll events.\n */\nconst VerticalScrollContainer: React.FC<{\n  children: React.ReactNode\n}> = (props) => {\n  const ref = useRef<HTMLDivElement | null>(null)\n  const receiveVerticalWheelEvent = useCallback<ReceiveVerticalWheelEventFn>(\n    (event) => {\n      ref.current!.scrollBy(0, event.deltaY)\n    },\n    [],\n  )\n\n  return (\n    <ctx.Provider value={receiveVerticalWheelEvent}>\n      <Container ref={ref}>{props.children}</Container>\n    </ctx.Provider>\n  )\n}\n\nexport default VerticalScrollContainer\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/layout/layout.ts",
    "content": "import type Sheet from '@theatre/core/sheets/Sheet'\nimport getStudio from '@theatre/studio/getStudio'\nimport type useDrag from '@theatre/studio/uiComponents/useDrag'\nimport type {SheetAddress} from '@theatre/core/types/public'\nimport subPrism from '@theatre/utils/subPrism'\nimport type {\n  IRange,\n  PositionInScreenSpace,\n  StrictRecord,\n} from '@theatre/core/types/public'\nimport {valToAtom} from '@theatre/utils/valToAtom'\nimport type {Prism, Pointer} from '@theatre/dataverse'\nimport {Atom, prism, val} from '@theatre/dataverse'\nimport type {SequenceEditorTree} from './tree'\nimport {calculateSequenceEditorTree} from './tree'\nimport {clamp} from 'lodash-es'\nimport type {\n  KeyframeId,\n  ObjectAddressKey,\n  SequenceTrackId,\n} from '@theatre/core/types/public'\n\n// A Side is either the left side of the panel or the right side\ntype DimsOfPanelPart = {\n  width: number\n  height: number\n  /**\n   * In absolute pixels, relative to getBoundingClientRect()\n   */\n  screenX: PositionInScreenSpace\n  /**\n   * In absolute pixels, relative to getBoundingClientRect()\n   */\n  screenY: PositionInScreenSpace\n}\n\nexport type PanelDims = {\n  width: number\n  height: number\n  widthWithoutBorder: number\n  heightWithoutBorder: number\n  screenX: PositionInScreenSpace\n  screenY: PositionInScreenSpace\n}\n\nexport type DopeSheetSelection = {\n  type: 'DopeSheetSelection'\n  byObjectKey: StrictRecord<\n    ObjectAddressKey,\n    {\n      byTrackId: StrictRecord<\n        SequenceTrackId,\n        {\n          byKeyframeId: StrictRecord<KeyframeId, true>\n        }\n      >\n    }\n  >\n  getDragHandlers(\n    origin: SheetAddress & {\n      positionAtStartOfDrag: number\n      domNode: Element\n    },\n  ): Omit<Parameters<typeof useDrag>[1], 'onClick'>\n  delete(): void\n}\n\n/**\n * @remarks\n * In order to lay out the playhead and the keyframes on the sequence editor,\n * we map their position to different spaces based on the zoom and scroll.\n *\n * These spaces are called `unitSpace`, `scaledSpace`, and `clippedSpace`.\n *\n * * `unitSpace` is the space the sequence is in. So, `5 seconds` in unitSpace\n * would equal `5`.\n *\n * * `scaledSpace` basically takes into account zoom level, but not scroll.\n *\n * * `clippedSpace` is just like `scaledSpace`, but also accounts for scroll.\n *\n *\n *                           2 seconds ─┐                      #\n *                                      ▼                      # 2 seconds would represent as `2` in unitSpace\n * `unitSpace`              00    01    02    03    04    05   # regardless of zoom or scroll.\n *                                      |                      #\n * ─────────────────────────────────────┼───────────────────────────────────────────────────────────────────────\n *                                      |                      #\n *                                      ▼                      # If zoom=1, then scaledSpace acts the same as\n * `scaledSpace`            00    01    02    03    04    05   # unitSpace.\n * (zoom=1)                             |                      #\n * ─────────────────────────────────────┼───────────────────────────────────────────────────────────────────────\n *                                ┌─────┘                      #\n *                                ▼     |                      # We're zoomed out (zoom=0.5), so 2 seconds\n * `scaledSpace`            00 01 02 03 04 05 06 07 08 09 10   # falls on the position of 1 second (2 * 0.5 = 1).\n *  (zoom=0.5)                    |     |                      #\n * ───────────────────────────────┼─────┼───────────────────────────────────────────────────────────────────────\n *                                └─────┼───────────┐          #\n *                                      |           ▼          # We're zoomed in (zoom=2), so 2 seconds\n * `scaledSpace`            00          01          02         # falls on the position of 4 seconds (2 * 2 = 4).\n *  (zoom=2)                            |           |          #\n * ─────────────────────────────────────┼───────────┼───────────────────────────────────────────────────────────\n *                                      ┌───────────┘          #\n *                                      │                      # With no zoom or scroll, clippedSpace is\n * `clippedSpace`                       ▼                      # just like unitSpace.\n *  (zoom=1, scroll=0)      00    01    02    03    04    05   #\n * ─────────────────────────────────────┼───────────────────────────────────────────────────────────────────────\n *                                      |                      #\n *                                ┌─────┘                      # No zoom, but we're scrolled in by 1 seconds,\n * `clippedSpace`                 ▼     |                      # so everything shifts 1s back.\n *  (zoom=1, scroll=1)      01    02    03    04    05    06   #\n * ────────────────────────────────┼────┼───────────────────────────────────────────────────────────────────────\n *                                 └────┐                      #\n *                                      ▼                      # Zoomed in 2x with 1s of scroll.\n * `clippedSpace` (zoom=2,  01          02          03         #\n *               scroll=1)                                     #\n * ─────────────────────────────────────────────────────────────────────────────────────────────────────────────\n *\n */\nexport type SequenceEditorPanelLayout = {\n  sheet: Sheet\n  tree: SequenceEditorTree\n  panelDims: PanelDims\n  leftDims: DimsOfPanelPart\n  rightDims: DimsOfPanelPart\n  dopeSheetDims: DimsOfPanelPart\n  graphEditorDims: DimsOfPanelPart & {\n    isAvailable: boolean\n    isOpen: boolean\n    padding: {top: number; bottom: number}\n  }\n  horizontalScrollbarDims: {bottom: number}\n  graphEditorVerticalSpace: {\n    space: number\n    fromExtremumSpace(e: number): number\n    toExtremumSpace(e: number): number\n  }\n  seeker: {\n    isSeeking: boolean\n    setIsSeeking: (isSeeking: boolean) => void\n  }\n  unitSpace: {}\n  scaledSpace: {\n    /**\n     * TODO - scaledSpace with and without leftPadding are two different spaces. See if we can divide them so\n     */\n    leftPadding: number\n    fromUnitSpace(u: number): number\n    toUnitSpace(s: number): number\n  }\n  clippedSpace: {\n    /**\n     * The width of the visible area of the sequence (pretty much the right side of the panel)\n     */\n    width: number\n    fromUnitSpace(u: number): number\n    toUnitSpace(c: number): number\n    range: IRange\n    setRange(range: IRange): void\n  }\n\n  selectionAtom: Atom<{current?: DopeSheetSelection}>\n}\n\n// type UnitSpaceProression = number\n// type ClippedSpaceProgression = number\n\n/**\n * This means the left side of the panel is 20% of its width, and the\n * right side is 80%\n */\nconst panelSplitRatio = 0.2\n\nconst initialClippedSpaceRange: IRange = [0, 10]\n\nexport function sequenceEditorPanelLayout(\n  sheet: Sheet,\n  panelDimsP: Pointer<PanelDims>,\n): Prism<Pointer<SequenceEditorPanelLayout>> {\n  const studio = getStudio()!\n\n  const ahistoricStateP =\n    studio.atomP.ahistoric.projects.stateByProjectId[sheet.address.projectId]\n      .stateBySheetId[sheet.address.sheetId]\n  const historicStateP =\n    studio.atomP.historic.projects.stateByProjectId[sheet.address.projectId]\n      .stateBySheetId[sheet.address.sheetId]\n\n  return prism(() => {\n    const tree = subPrism(\n      'tree',\n      () => calculateSequenceEditorTree(sheet, studio),\n      [],\n    )\n\n    const panelDims = val(panelDimsP)\n    const graphEditorState = val(\n      studio.atomP.historic.panels.sequenceEditor.graphEditor,\n    )\n\n    const selectedPropsByObject = val(\n      historicStateP.sequenceEditor.selectedPropsByObject,\n    )\n\n    const graphEditorAvailable =\n      !!selectedPropsByObject && Object.keys(selectedPropsByObject).length > 0\n\n    const {\n      leftDims,\n      rightDims,\n      graphEditorDims,\n      dopeSheetDims,\n      horizontalScrollbarDims,\n    } = prism.memo(\n      'leftDims',\n      () => {\n        const leftDims: DimsOfPanelPart = {\n          width: Math.floor(panelDims.width * panelSplitRatio),\n          height: panelDims.height,\n          screenX: panelDims.screenX,\n          screenY: panelDims.screenY,\n        }\n        const rightDims: DimsOfPanelPart = {\n          width: panelDims.width - leftDims.width,\n          height: panelDims.height,\n          screenX: (panelDims.screenX +\n            leftDims.width) as PositionInScreenSpace,\n          screenY: panelDims.screenY,\n        }\n\n        const graphEditorOpen =\n          graphEditorAvailable && graphEditorState?.isOpen === true\n\n        const graphEditorHeight = Math.floor(\n          (graphEditorOpen\n            ? clamp(graphEditorState?.height ?? 0.5, 0.1, 0.7)\n            : 0) * panelDims.heightWithoutBorder,\n        )\n\n        const bottomHeight = 0 + graphEditorHeight\n        const dopeSheetHeight = panelDims.height - bottomHeight\n\n        const dopeSheetDims: SequenceEditorPanelLayout['dopeSheetDims'] = {\n          width: panelDims.width,\n          height: dopeSheetHeight,\n          screenX: panelDims.screenX,\n          screenY: panelDims.screenY,\n        }\n\n        // const graphEditorHeight = panelDims.height - dopeSheetDims.height\n        const graphEditorDims: SequenceEditorPanelLayout['graphEditorDims'] = {\n          isAvailable: graphEditorAvailable,\n          isOpen: graphEditorOpen,\n          width: rightDims.width,\n          height: graphEditorHeight,\n          screenX: panelDims.screenX,\n          screenY: panelDims.screenY + dopeSheetHeight,\n          padding: {\n            top: 20,\n            bottom: 20,\n          },\n        }\n\n        const horizontalScrollbarDims: SequenceEditorPanelLayout['horizontalScrollbarDims'] =\n          {\n            bottom: graphEditorOpen ? 0 : 0,\n          }\n\n        return {\n          leftDims,\n          rightDims,\n          graphEditorDims,\n          dopeSheetDims,\n          horizontalScrollbarDims,\n        }\n      },\n      [panelDims, graphEditorState, graphEditorAvailable],\n    )\n\n    const graphEditorVerticalSpace = prism.memo(\n      'graphEditorVerticalSpace',\n      (): SequenceEditorPanelLayout['graphEditorVerticalSpace'] => {\n        const space =\n          graphEditorDims.height -\n          graphEditorDims.padding.top -\n          graphEditorDims.padding.bottom\n        return {\n          space,\n          fromExtremumSpace(ex: number): number {\n            return ex * space\n          },\n          toExtremumSpace(s: number): number {\n            return s / space\n          },\n        }\n      },\n      [graphEditorDims],\n    )\n\n    const [isSeeking, setIsSeeking] = prism.state('isSeeking', false)\n\n    const seeker = {\n      isSeeking,\n      setIsSeeking,\n    }\n\n    const unitSpace = {}\n\n    const clippedSpaceRange =\n      val(ahistoricStateP.sequence.clippedSpaceRange) ??\n      initialClippedSpaceRange\n\n    const scaledSpace: SequenceEditorPanelLayout['scaledSpace'] = prism.memo(\n      'scaledSpace',\n      () => {\n        const unitsShownInClippedSpace =\n          clippedSpaceRange[1] - clippedSpaceRange[0]\n\n        const pixelsShownInClippedSpace = rightDims.width\n\n        const unitToPixelRatio =\n          unitsShownInClippedSpace / pixelsShownInClippedSpace\n\n        const pixelToUnitRatio =\n          pixelsShownInClippedSpace / unitsShownInClippedSpace\n\n        return {\n          fromUnitSpace(u: number): number {\n            return u * pixelToUnitRatio\n          },\n          toUnitSpace(s: number): number {\n            return s * unitToPixelRatio\n          },\n          leftPadding: 10,\n        }\n      },\n      [clippedSpaceRange, rightDims.width],\n    )\n\n    const setClippedSpaceRange = prism.memo(\n      'setClippedSpaceRange',\n      () => {\n        return function setClippedSpaceRange(_range: IRange): void {\n          studio.transaction(({stateEditors}) => {\n            const range: IRange = [..._range]\n            if (range[1] <= range[0]) {\n              range[1] = range[0] + 1\n            }\n            if (range[0] < 0) {\n              const length = range[1] - range[0]\n              range[0] = 0\n              range[1] = length\n            }\n\n            stateEditors.studio.ahistoric.projects.stateByProjectId.stateBySheetId.sequence.clippedSpaceRange.set(\n              {...sheet.address, range},\n            )\n          })\n        }\n      },\n      [],\n    )\n\n    const clippedSpace: SequenceEditorPanelLayout['clippedSpace'] = prism.memo(\n      'clippedSpace',\n      () => {\n        return {\n          range: clippedSpaceRange,\n          width: rightDims.width,\n          fromUnitSpace(u: number): number {\n            return (\n              scaledSpace.fromUnitSpace(u - clippedSpaceRange[0]) +\n              scaledSpace.leftPadding\n            )\n          },\n          toUnitSpace(c: number): number {\n            return (\n              scaledSpace.toUnitSpace(c - scaledSpace.leftPadding) +\n              clippedSpaceRange[0]\n            )\n          },\n          setRange: setClippedSpaceRange,\n        }\n      },\n      [clippedSpaceRange, rightDims.width, scaledSpace, setClippedSpaceRange],\n    )\n\n    const selectionAtom = prism.memo(\n      'selection.current',\n      (): SequenceEditorPanelLayout['selectionAtom'] => {\n        return new Atom({})\n      },\n      [],\n    )\n\n    const finalAtom = valToAtom<SequenceEditorPanelLayout>('finalAtom', {\n      sheet,\n      tree,\n      panelDims,\n      leftDims,\n      rightDims,\n      dopeSheetDims,\n      horizontalScrollbarDims,\n      seeker,\n      unitSpace,\n      scaledSpace,\n      clippedSpace,\n      graphEditorDims,\n      graphEditorVerticalSpace,\n      selectionAtom,\n    })\n\n    return finalAtom.pointer\n  })\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/layout/tree.ts",
    "content": "import type {\n  PropTypeConfig,\n  PropTypeConfig_AllSimples,\n  PropTypeConfig_Compound,\n  UnknownValidCompoundProps,\n} from '@theatre/core/types/public'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type {IPropPathToTrackIdTree} from '@theatre/core/sheetObjects/SheetObjectTemplate'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport type {PathToProp} from '@theatre/utils/pathToProp'\nimport type {StudioSheetItemKey} from '@theatre/core/types/private'\nimport {createStudioSheetItemKey} from '@theatre/studio/utils/createStudioSheetItemKey'\nimport type {$FixMe, $IntentionalAny} from '@theatre/core/types/public'\nimport {prism, val, pointerToPrism} from '@theatre/dataverse'\nimport logger from '@theatre/utils/logger'\nimport {titleBarHeight} from '@theatre/studio/panels/BasePanel/common'\nimport type {Studio} from '@theatre/studio/Studio'\nimport type {SequenceTrackId} from '@theatre/core/types/public'\n\n/**\n * Base \"view model\" for each row with common\n * required information such as row heights & depth.\n */\nexport type SequenceEditorTree_Row<TypeName extends string> = {\n  /** type of this row, e.g. `\"sheet\"` or `\"sheetObject\"` */\n  type: TypeName\n  /** Height of just the row in pixels */\n  nodeHeight: number\n  /** Height of the row + height with children in pixels */\n  heightIncludingChildren: number\n\n  /** Visual indentation */\n  depth: number\n  /** A convenient studio sheet localized identifier for managing presence and ephemeral visual effects. */\n  sheetItemKey: StudioSheetItemKey\n  /**\n   * This is a part of the tree, but it is not rendered at all,\n   * and it doesn't contribute to height.\n   *\n   * In the future, if we have a filtering mechanism like \"show only position props\",\n   * this would not be the place to make false, that node should just not be included\n   * in the tree at all, so it doesn't affect aggregate keyframes.\n   */\n  shouldRender: boolean\n  /**\n   * Distance in pixels from the top of this row to the row container's top\n   * This can be used to help figure out what's being box selected (marquee).\n   */\n  top: number\n  /** Row number (e.g. for correctly styling even / odd alternating styles) */\n  n: number\n}\n\nexport type SequenceEditorTree = SequenceEditorTree_Sheet\n\nexport type SequenceEditorTree_Sheet = SequenceEditorTree_Row<'sheet'> & {\n  sheet: Sheet\n  isCollapsed: boolean\n  children: SequenceEditorTree_SheetObject[]\n}\n\nexport type SequenceEditorTree_SheetObject =\n  SequenceEditorTree_Row<'sheetObject'> & {\n    isCollapsed: boolean\n    sheetObject: SheetObject\n    children: Array<\n      SequenceEditorTree_PropWithChildren | SequenceEditorTree_PrimitiveProp\n    >\n  }\n\nexport type SequenceEditorTree_PropWithChildren =\n  SequenceEditorTree_Row<'propWithChildren'> & {\n    isCollapsed: boolean\n    sheetObject: SheetObject\n    propConf: PropTypeConfig_Compound<UnknownValidCompoundProps>\n    pathToProp: PathToProp\n    children: Array<\n      SequenceEditorTree_PropWithChildren | SequenceEditorTree_PrimitiveProp\n    >\n    trackMapping: IPropPathToTrackIdTree\n  }\n\nexport type SequenceEditorTree_PrimitiveProp =\n  SequenceEditorTree_Row<'primitiveProp'> & {\n    sheetObject: SheetObject\n    pathToProp: PathToProp\n    trackId: SequenceTrackId\n    propConf: PropTypeConfig_AllSimples\n  }\n\nexport type SequenceEditorTree_AllRowTypes =\n  | SequenceEditorTree_Sheet\n  | SequenceEditorTree_SheetObject\n  | SequenceEditorTree_PropWithChildren\n  | SequenceEditorTree_PrimitiveProp\n\nconst HEIGHT_OF_ANY_TITLE = 28\n\n/**\n * Must run inside prism()\n */\nexport const calculateSequenceEditorTree = (\n  sheet: Sheet,\n  studio: Studio,\n): SequenceEditorTree => {\n  prism.ensurePrism()\n  const rootShouldRender = true\n  let topSoFar = titleBarHeight + (rootShouldRender ? HEIGHT_OF_ANY_TITLE : 0)\n  let nSoFar = 0\n\n  const collapsableItemSetP =\n    studio.atomP.ahistoric.projects.stateByProjectId[sheet.address.projectId]\n      .stateBySheetId[sheet.address.sheetId].sequence.collapsableItems\n\n  const isCollapsedP =\n    collapsableItemSetP.byId[createStudioSheetItemKey.forSheet()].isCollapsed\n  const isCollapsed = pointerToPrism(isCollapsedP).getValue() ?? false\n\n  const tree: SequenceEditorTree = {\n    type: 'sheet',\n    isCollapsed,\n    sheet,\n    children: [],\n    sheetItemKey: createStudioSheetItemKey.forSheet(),\n    shouldRender: rootShouldRender,\n    top: titleBarHeight,\n    depth: 0,\n    n: nSoFar,\n    nodeHeight: rootShouldRender ? HEIGHT_OF_ANY_TITLE : 0,\n    heightIncludingChildren: -1, // calculated below\n  }\n\n  if (rootShouldRender) {\n    nSoFar += 1\n  }\n\n  for (const sheetObject of Object.values(val(sheet.objectsP))) {\n    if (sheetObject) {\n      addObject(\n        sheetObject,\n        tree.children,\n        tree.depth + 1,\n        rootShouldRender && !isCollapsed,\n      )\n    }\n  }\n  tree.heightIncludingChildren = topSoFar - tree.top\n\n  function addObject(\n    sheetObject: SheetObject,\n    arrayOfChildren: Array<SequenceEditorTree_SheetObject>,\n    level: number,\n    shouldRender: boolean,\n  ) {\n    const trackSetups = val(\n      sheetObject.template.getMapOfValidSequenceTracks_forStudio(),\n    )\n    const objectConfig = val(sheetObject.template.configPointer)\n\n    if (Object.keys(trackSetups).length === 0) return\n\n    const isCollapsedP =\n      collapsableItemSetP.byId[\n        createStudioSheetItemKey.forSheetObject(sheetObject)\n      ].isCollapsed\n    const isCollapsed = pointerToPrism(isCollapsedP).getValue() ?? false\n\n    const row: SequenceEditorTree_SheetObject = {\n      type: 'sheetObject',\n      isCollapsed,\n      sheetItemKey: createStudioSheetItemKey.forSheetObject(sheetObject),\n      shouldRender,\n      top: topSoFar,\n      children: [],\n      depth: level,\n      n: nSoFar,\n      sheetObject: sheetObject,\n      nodeHeight: shouldRender ? HEIGHT_OF_ANY_TITLE : 0,\n      heightIncludingChildren: -1, // calculated below\n    }\n    arrayOfChildren.push(row)\n\n    if (shouldRender) {\n      nSoFar += 1\n      // As we add rows to the tree, top to bottom, we accumulate the pixel\n      // distance to the top of the tree from the bottom of the current row:\n      topSoFar += row.nodeHeight\n    }\n\n    addProps(\n      sheetObject,\n      trackSetups,\n      [],\n      objectConfig,\n      row.children,\n      level + 1,\n      shouldRender && !isCollapsed,\n    )\n\n    row.heightIncludingChildren = topSoFar - row.top\n  }\n\n  function addProps(\n    sheetObject: SheetObject,\n    trackSetups: IPropPathToTrackIdTree,\n    pathSoFar: PathToProp,\n    parentPropConfig: PropTypeConfig_Compound<$IntentionalAny>,\n    arrayOfChildren: Array<\n      SequenceEditorTree_PrimitiveProp | SequenceEditorTree_PropWithChildren\n    >,\n    level: number,\n    shouldRender: boolean,\n  ) {\n    for (const [propKey, setupOrSetups] of Object.entries(trackSetups)) {\n      const propConfig = parentPropConfig.props[propKey]\n      addProp(\n        sheetObject,\n        setupOrSetups!,\n        [...pathSoFar, propKey],\n        propConfig,\n        arrayOfChildren,\n        level,\n        shouldRender,\n      )\n    }\n  }\n\n  function addProp(\n    sheetObject: SheetObject,\n    trackIdOrMapping: SequenceTrackId | IPropPathToTrackIdTree,\n    pathToProp: PathToProp,\n    conf: PropTypeConfig,\n    arrayOfChildren: Array<\n      SequenceEditorTree_PrimitiveProp | SequenceEditorTree_PropWithChildren\n    >,\n    level: number,\n    shouldRender: boolean,\n  ) {\n    if (conf.type === 'compound') {\n      const trackMapping =\n        trackIdOrMapping as $IntentionalAny as IPropPathToTrackIdTree\n      addProp_compound(\n        sheetObject,\n        trackMapping,\n        conf,\n        pathToProp,\n        conf,\n        arrayOfChildren,\n        level,\n        shouldRender,\n      )\n    } else if (conf.type === 'enum') {\n      logger.warn('Prop type enum is not yet supported in the sequence editor')\n    } else {\n      const trackId = trackIdOrMapping as $IntentionalAny as SequenceTrackId\n\n      addProp_primitive(\n        sheetObject,\n        trackId,\n        pathToProp,\n        conf,\n        arrayOfChildren,\n        level,\n        shouldRender,\n      )\n    }\n  }\n\n  function addProp_compound(\n    sheetObject: SheetObject,\n    trackMapping: IPropPathToTrackIdTree,\n    propConf: PropTypeConfig_Compound<UnknownValidCompoundProps>,\n    pathToProp: PathToProp,\n    conf: PropTypeConfig_Compound<$FixMe>,\n    arrayOfChildren: Array<\n      SequenceEditorTree_PrimitiveProp | SequenceEditorTree_PropWithChildren\n    >,\n    level: number,\n    shouldRender: boolean,\n  ) {\n    const isCollapsedP =\n      collapsableItemSetP.byId[\n        createStudioSheetItemKey.forSheetObjectProp(sheetObject, pathToProp)\n      ].isCollapsed\n    const isCollapsed = pointerToPrism(isCollapsedP).getValue() ?? false\n\n    const row: SequenceEditorTree_PropWithChildren = {\n      type: 'propWithChildren',\n      isCollapsed,\n      propConf,\n      pathToProp,\n      sheetItemKey: createStudioSheetItemKey.forSheetObjectProp(\n        sheetObject,\n        pathToProp,\n      ),\n      sheetObject: sheetObject,\n      shouldRender,\n      top: topSoFar,\n      children: [],\n      nodeHeight: shouldRender ? HEIGHT_OF_ANY_TITLE : 0,\n      heightIncludingChildren: -1,\n      depth: level,\n      trackMapping,\n      n: nSoFar,\n    }\n    arrayOfChildren.push(row)\n\n    if (shouldRender) {\n      topSoFar += row.nodeHeight\n      nSoFar += 1\n    }\n\n    addProps(\n      sheetObject,\n      trackMapping,\n      pathToProp,\n      conf,\n      row.children,\n      level + 1,\n      // collapsed shouldn't render child props\n      shouldRender && !isCollapsed,\n    )\n    // }\n    row.heightIncludingChildren = topSoFar - row.top\n  }\n\n  function addProp_primitive(\n    sheetObject: SheetObject,\n    trackId: SequenceTrackId,\n    pathToProp: PathToProp,\n    propConf: PropTypeConfig_AllSimples,\n    arrayOfChildren: Array<\n      SequenceEditorTree_PrimitiveProp | SequenceEditorTree_PropWithChildren\n    >,\n    level: number,\n    shouldRender: boolean,\n  ) {\n    const row: SequenceEditorTree_PrimitiveProp = {\n      type: 'primitiveProp',\n      propConf: propConf,\n      depth: level,\n      sheetItemKey: createStudioSheetItemKey.forSheetObjectProp(\n        sheetObject,\n        pathToProp,\n      ),\n      sheetObject: sheetObject,\n      pathToProp,\n      shouldRender,\n      top: topSoFar,\n      nodeHeight: shouldRender ? HEIGHT_OF_ANY_TITLE : 0,\n      heightIncludingChildren: shouldRender ? HEIGHT_OF_ANY_TITLE : 0,\n      trackId,\n      n: nSoFar,\n    }\n    arrayOfChildren.push(row)\n    nSoFar += 1\n    topSoFar += row.nodeHeight\n  }\n\n  return tree\n}\n"
  },
  {
    "path": "packages/studio/src/panels/SequenceEditorPanel/whatPropIsHighlighted.ts",
    "content": "import type {Prism} from '@theatre/dataverse'\nimport {val} from '@theatre/dataverse'\nimport {Atom} from '@theatre/dataverse'\nimport {prism} from '@theatre/dataverse'\nimport type {\n  PropAddress,\n  WithoutSheetInstance,\n} from '@theatre/core/types/public'\n\nimport pointerDeep from '@theatre/utils/pointerDeep'\nimport type {$IntentionalAny, VoidFn} from '@theatre/core/types/public'\nimport lodashSet from 'lodash-es/set'\n\n/** constant global manager */\nexport const whatPropIsHighlighted = createWhatPropIsHighlightedState()\n\nexport type PropHighlighted = 'self' | 'descendent' | null\n\n/** Only used in prop highlighting with boolean. */\ntype PathToPropAsDeepObject<T extends boolean | number | string> = {\n  [key in string]: T | PathToPropAsDeepObject<T>\n}\n\nfunction createWhatPropIsHighlightedState() {\n  let lastLockId = 0\n  const whatIsHighlighted = new Atom<\n    | {hasLock: false; deepPath?: undefined}\n    | {\n        hasLock: true\n        lockId: number\n        cleanup: () => void\n        deepPath: PathToPropAsDeepObject<boolean>\n      }\n  >({hasLock: false})\n\n  return {\n    replaceLock(address: WithoutSheetInstance<PropAddress>, cleanup: VoidFn) {\n      const lockId = lastLockId++\n\n      const existingState = whatIsHighlighted.get()\n      if (existingState.hasLock) existingState.cleanup()\n\n      whatIsHighlighted.set({\n        hasLock: true,\n        lockId,\n        cleanup,\n        deepPath: arrayToDeepObject(addressToArray(address)),\n      })\n\n      return function unlock() {\n        const curr = whatIsHighlighted.get()\n        if (curr.hasLock && curr.lockId === lockId) {\n          curr.cleanup()\n          whatIsHighlighted.set({hasLock: false})\n        }\n      }\n    },\n    getIsPropHighlightedD(\n      address: WithoutSheetInstance<PropAddress>,\n    ): Prism<PropHighlighted> {\n      const highlightedP = pointerDeep(\n        whatIsHighlighted.pointer.deepPath,\n        addressToArray(address),\n      )\n      return prism(() => {\n        const value = val(highlightedP)\n        return value === true\n          ? 'self'\n          : // obj continues deep path prop from here\n            value\n            ? 'descendent'\n            : // some other prop or no lock\n              null\n      })\n    },\n  }\n}\n\nfunction addressToArray(\n  address: WithoutSheetInstance<PropAddress>,\n): Array<string | number> {\n  return [\n    address.projectId,\n    address.sheetId,\n    address.objectKey,\n    ...address.pathToProp,\n  ]\n}\n\nfunction arrayToDeepObject(\n  arr: Array<string | number>,\n): PathToPropAsDeepObject<boolean> {\n  const obj = {}\n  lodashSet(obj, arr, true)\n  return obj as $IntentionalAny\n}\n"
  },
  {
    "path": "packages/studio/src/propEditors/DefaultValueIndicator.tsx",
    "content": "import {transparentize} from 'polished'\nimport React from 'react'\nimport styled from 'styled-components'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {PathToProp} from '@theatre/utils/pathToProp'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type {PropTypeConfig} from '@theatre/core/types/public'\nimport {nextPrevCursorsTheme} from './NextPrevKeyframeCursors'\nimport {__private} from '@theatre/core'\nconst {isPropConfigComposite, iteratePropType} = __private.propTypeUtils\n\nconst theme = {\n  defaultState: {\n    color: transparentize(0.95, `#C4C4C4`),\n    hoverColor: transparentize(0.15, nextPrevCursorsTheme.onColor),\n  },\n  withStaticOverride: {\n    color: transparentize(0.85, `#C4C4C4`),\n    hoverColor: transparentize(0.15, nextPrevCursorsTheme.onColor),\n  },\n}\n\nconst Container = styled.div<{\n  hasStaticOverride: boolean\n}>`\n  width: 16px;\n  margin: 0 0px 0 2px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  cursor: pointer;\n\n  color: ${(props) =>\n    props.hasStaticOverride\n      ? theme.withStaticOverride.color\n      : theme.defaultState.color};\n\n  &:hover {\n    color: ${(props) =>\n      props.hasStaticOverride\n        ? theme.withStaticOverride.hoverColor\n        : theme.defaultState.hoverColor};\n  }\n`\n\nconst DefaultIcon = styled.div`\n  width: 5px;\n  height: 5px;\n  border-radius: 1px;\n  transform: rotate(45deg);\n  /* border: 1px solid currentColor; */\n  background-color: currentColor;\n`\n\nconst FilledIcon = styled.div`\n  width: 5px;\n  height: 5px;\n  background-color: currentColor;\n  border-radius: 1px;\n  transform: rotate(45deg);\n`\n\nconst DefaultOrStaticValueIndicator: React.FC<{\n  hasStaticOverride: boolean\n  pathToProp: PathToProp\n  obj: SheetObject\n  propConfig: PropTypeConfig\n}> = (props) => {\n  const {hasStaticOverride, obj, propConfig, pathToProp} = props\n  const sequenceCb = () => {\n    getStudio()!.transaction(({stateEditors}) => {\n      for (const {path, conf} of iteratePropType(propConfig, pathToProp)) {\n        if (isPropConfigComposite(conf)) continue\n        const propAddress = {...obj.address, pathToProp: path}\n\n        stateEditors.coreByProject.historic.sheetsById.sequence.setPrimitivePropAsSequenced(\n          propAddress,\n        )\n      }\n    })\n  }\n  return (\n    <Container\n      hasStaticOverride={hasStaticOverride}\n      onClick={sequenceCb}\n      title=\"Sequence this prop\"\n    >\n      {hasStaticOverride ? (\n        <FilledIcon title=\"The default value is overridden\" />\n      ) : (\n        <DefaultIcon title=\"This is the default value for this prop\" />\n      )}\n    </Container>\n  )\n}\n\nexport default DefaultOrStaticValueIndicator\n"
  },
  {
    "path": "packages/studio/src/propEditors/NextPrevKeyframeCursors.tsx",
    "content": "import type {VoidFn} from '@theatre/core/types/public'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport {transparentize} from 'polished'\nimport React from 'react'\nimport styled, {css} from 'styled-components'\nimport {PresenceFlag} from '@theatre/studio/uiComponents/usePresence'\nimport usePresence from '@theatre/studio/uiComponents/usePresence'\nimport type {StudioSheetItemKey} from '@theatre/core/types/private'\nimport type {BasicKeyframe} from '@theatre/core'\n\nexport type NearbyKeyframesControls = {\n  prev?: Pick<BasicKeyframe, 'position'> & {\n    jump: VoidFn\n    itemKey: StudioSheetItemKey\n  }\n  cur:\n    | {type: 'on'; toggle: VoidFn; itemKey: StudioSheetItemKey}\n    | {type: 'off'; toggle: VoidFn}\n  next?: Pick<BasicKeyframe, 'position'> & {\n    jump: VoidFn\n    itemKey: StudioSheetItemKey\n  }\n}\n\nconst Container = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 16px;\n  margin: 0 0px 0 2px;\n  position: relative;\n  z-index: 0;\n  opacity: 0.7;\n\n  &:after {\n    position: absolute;\n    left: -14px;\n    right: -14px;\n    top: -2px;\n    bottom: -2px;\n    content: ' ';\n    display: none;\n    z-index: -1;\n    background: ${transparentize(0.2, 'black')};\n  }\n\n  &:hover {\n    opacity: 1;\n    &:after {\n      display: block;\n    }\n  }\n`\n\nconst Button = styled.div`\n  background: none;\n  position: relative;\n  border: 0;\n  transition: transform 0.1s ease-out;\n  z-index: 0;\n  outline: none;\n  cursor: pointer;\n\n  &:after {\n    display: none;\n    ${Container}:hover & {\n      display: block;\n    }\n    position: absolute;\n    left: -4px;\n    right: -4px;\n    top: -4px;\n    bottom: -4px;\n    content: ' ';\n    z-index: -1;\n  }\n`\n\nexport const nextPrevCursorsTheme = {\n  offColor: '#555',\n  onColor: '#e0c917',\n}\n\nconst CurButton = styled(Button)<{\n  isOn: boolean\n  presence: PresenceFlag | undefined\n}>`\n  &:hover {\n    color: #e0c917;\n  }\n\n  color: ${(props) =>\n    props.presence === PresenceFlag.Primary\n      ? 'white'\n      : props.isOn\n        ? nextPrevCursorsTheme.onColor\n        : nextPrevCursorsTheme.offColor};\n`\n\nconst pointerEventsNone = css`\n  pointer-events: none !important;\n`\n\nconst PrevOrNextButton = styled(Button)<{\n  available: boolean\n  flag: PresenceFlag | undefined\n}>`\n  color: ${(props) =>\n    props.flag === PresenceFlag.Primary\n      ? 'white'\n      : props.available\n        ? nextPrevCursorsTheme.onColor\n        : nextPrevCursorsTheme.offColor};\n\n  ${(props) =>\n    props.available ? pointerEventsAutoInNormalMode : pointerEventsNone};\n`\n\nconst Prev = styled(PrevOrNextButton)<{\n  available: boolean\n  flag: PresenceFlag | undefined\n}>`\n  transform: translateX(2px);\n  ${Container}:hover & {\n    transform: translateX(-7px);\n  }\n`\nconst Next = styled(PrevOrNextButton)<{\n  available: boolean\n  flag: PresenceFlag | undefined\n}>`\n  transform: translateX(-2px);\n  ${Container}:hover & {\n    transform: translateX(7px);\n  }\n`\n\nnamespace Icons {\n  const Chevron_Group = styled.g`\n    stroke-width: 1;\n    ${PrevOrNextButton}:hover & path {\n      stroke-width: 3;\n    }\n  `\n\n  export const Prev = () => (\n    <svg\n      width=\"12\"\n      height=\"12\"\n      viewBox=\"0 0 12 12\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <Chevron_Group transform={`translate(6 3)`}>\n        <path d=\"M4 1L1 4L4 7\" stroke=\"currentColor\" />\n      </Chevron_Group>\n    </svg>\n  )\n\n  export const Next = () => (\n    <svg\n      width=\"12\"\n      height=\"12\"\n      viewBox=\"0 0 12 12\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <Chevron_Group transform={`translate(1 3)`}>\n        <path d=\"M1 1L4 4L1 7\" stroke=\"currentColor\" />\n      </Chevron_Group>\n    </svg>\n  )\n\n  const Cur_Group = styled.g`\n    stroke-width: 0;\n    ${CurButton}:hover & path {\n      stroke: currentColor;\n      stroke-width: 2;\n    }\n  `\n\n  export const Cur = () => (\n    <svg\n      width=\"8\"\n      height=\"12\"\n      viewBox=\"0 0 8 12\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <Cur_Group transform=\"translate(1 4)\">\n        <path d=\"M3 0L6 3L3 6L0 3L3 0Z\" fill=\"currentColor\" />\n      </Cur_Group>\n    </svg>\n  )\n}\n\nconst NextPrevKeyframeCursors: React.VFC<NearbyKeyframesControls> = (props) => {\n  const prevPresence = usePresence(props.prev?.itemKey)\n  const curPresence = usePresence(\n    props.cur?.type === 'on' ? props.cur.itemKey : undefined,\n  )\n  const nextPresence = usePresence(props.next?.itemKey)\n\n  return (\n    <Container>\n      <Prev\n        available={!!props.prev}\n        onClick={props.prev?.jump}\n        flag={prevPresence.flag}\n        {...prevPresence.attrs}\n      >\n        <Icons.Prev />\n      </Prev>\n      <CurButton\n        isOn={props.cur.type === 'on'}\n        onClick={props.cur.toggle}\n        presence={curPresence.flag}\n        {...curPresence.attrs}\n      >\n        <Icons.Cur />\n      </CurButton>\n      <Next\n        available={!!props.next}\n        onClick={props.next?.jump}\n        flag={nextPresence.flag}\n        {...nextPresence.attrs}\n      >\n        <Icons.Next />\n      </Next>\n    </Container>\n  )\n}\n\nexport default NextPrevKeyframeCursors\n"
  },
  {
    "path": "packages/studio/src/propEditors/getNearbyKeyframesOfTrack.tsx",
    "content": "import type {TrackData} from '@theatre/core/types/private/core'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport {createStudioSheetItemKey} from '@theatre/studio/utils/createStudioSheetItemKey'\nimport type {\n  KeyframeWithTrack,\n  TrackWithId,\n} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/collectAggregateKeyframes'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nconst cache = new WeakMap<\n  TrackData,\n  [seqPosition: number, nearbyKeyframes: NearbyKeyframes]\n>()\n\nconst noKeyframes: NearbyKeyframes = {}\n\nexport function getNearbyKeyframesOfTrack(\n  obj: SheetObject,\n  track: TrackWithId | undefined,\n  sequencePosition: number,\n): NearbyKeyframes {\n  if (\n    !track ||\n    keyframeUtils.getSortedKeyframesCached(track.data.keyframes).length === 0\n  )\n    return noKeyframes\n\n  const cachedItem = cache.get(track.data)\n  if (cachedItem && cachedItem[0] === sequencePosition) {\n    return cachedItem[1]\n  }\n\n  const sorted = keyframeUtils.getSortedKeyframesCached(track.data.keyframes)\n\n  function getKeyframeWithTrackId(idx: number): KeyframeWithTrack | undefined {\n    if (!track) return\n    const found = sorted[idx]\n    return (\n      found && {\n        kf: found,\n        track,\n        itemKey: createStudioSheetItemKey.forTrackKeyframe(\n          obj,\n          track.id,\n          found.id,\n        ),\n      }\n    )\n  }\n\n  const calculate = (): NearbyKeyframes => {\n    const nextOrCurIdx = sorted.findIndex(\n      (kf) => kf.position >= sequencePosition,\n    )\n\n    if (nextOrCurIdx === -1) {\n      return {\n        prev: getKeyframeWithTrackId(sorted.length - 1),\n      }\n    }\n\n    const nextOrCur = getKeyframeWithTrackId(nextOrCurIdx)!\n    if (nextOrCur.kf.position === sequencePosition) {\n      return {\n        prev: getKeyframeWithTrackId(nextOrCurIdx - 1),\n        cur: nextOrCur,\n        next: getKeyframeWithTrackId(nextOrCurIdx + 1),\n      }\n    } else {\n      return {\n        next: nextOrCur,\n        prev: getKeyframeWithTrackId(nextOrCurIdx - 1),\n      }\n    }\n  }\n\n  const result = calculate()\n  cache.set(track.data, [sequencePosition, result])\n\n  return result\n}\n\nexport type NearbyKeyframes = {\n  prev?: KeyframeWithTrack\n  cur?: KeyframeWithTrack\n  next?: KeyframeWithTrack\n}\n"
  },
  {
    "path": "packages/studio/src/propEditors/simpleEditors/BooleanPropEditor.tsx",
    "content": "import type {PropTypeConfig_Boolean} from '@theatre/core/types/public'\nimport React, {useCallback} from 'react'\nimport styled from 'styled-components'\nimport BasicCheckbox from '@theatre/studio/uiComponents/form/BasicCheckbox'\nimport type {ISimplePropEditorReactProps} from './ISimplePropEditorReactProps'\n\nconst Input = styled(BasicCheckbox)`\n  margin-left: 6px;\n\n  :focus {\n    outline: 1px solid #555;\n  }\n`\n\nfunction BooleanPropEditor({\n  propConfig,\n  editingTools,\n  value,\n  autoFocus,\n}: ISimplePropEditorReactProps<PropTypeConfig_Boolean>) {\n  const onChange = useCallback(\n    (el: React.ChangeEvent<HTMLInputElement>) => {\n      editingTools.permanentlySetValue(Boolean(el.target.checked))\n    },\n    [propConfig, editingTools],\n  )\n\n  return <Input checked={value} onChange={onChange} autoFocus={autoFocus} />\n}\n\nexport default BooleanPropEditor\n"
  },
  {
    "path": "packages/studio/src/propEditors/simpleEditors/FilePropEditor.tsx",
    "content": "import type {PropTypeConfig_File} from '@theatre/core/types/public'\nimport {Package, Trash} from '@theatre/studio/uiComponents/icons'\nimport React, {useCallback, useEffect} from 'react'\nimport styled, {css} from 'styled-components'\nimport type {ISimplePropEditorReactProps} from './ISimplePropEditorReactProps'\nimport type {$FixMe} from '@theatre/core/types/public'\n\nconst Container = styled.div<{empty: boolean}>`\n  display: flex;\n  align-items: center;\n  height: 100%;\n  gap: 4px;\n`\n\nconst AddFile = styled.div`\n  position: absolute;\n  inset: -5px;\n  // rotate 45deg\n  transform: rotate(45deg);\n  --checker-color: #ededed36;\n  &:hover {\n    --checker-color: #ededed77;\n  }\n  // checkerboard background with 4px squares\n  background-image: linear-gradient(\n      45deg,\n      var(--checker-color) 25%,\n      transparent 25%\n    ),\n    linear-gradient(-45deg, var(--checker-color) 25%, transparent 25%),\n    linear-gradient(45deg, transparent 75%, var(--checker-color) 75%),\n    linear-gradient(-45deg, transparent 75%, var(--checker-color) 75%);\n  background-size: 5px 5px;\n`\n\nconst InputLabel = styled.label<{empty: boolean}>`\n  position: relative;\n  cursor: default;\n  box-sizing: border-box;\n\n  height: 18px;\n  aspect-ratio: 1;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  font-size: 16px;\n\n  overflow: hidden;\n  color: #ccc;\n  &:hover {\n    color: white;\n  }\n\n  border-radius: 99999px;\n  border: 1px solid hwb(220deg 40% 52%);\n  &:hover {\n    border-color: hwb(220deg 45% 52%);\n  }\n\n  ${(props) => (props.empty ? css`` : css``)}\n`\n\n// file input\nconst Input = styled.input.attrs({type: 'file'})`\n  display: none;\n`\n\nconst DeleteButton = styled.button`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  outline: none;\n  background: transparent;\n  color: #a8a8a9;\n\n  border: none;\n  height: 100%;\n  aspect-ratio: 1/1;\n\n  opacity: 0;\n\n  ${Container}:hover & {\n    opacity: 0.8;\n  }\n\n  &:hover {\n    opacity: 1;\n    color: white;\n  }\n`\n\nfunction FilePropEditor({\n  propConfig,\n  editingTools,\n  value,\n  autoFocus,\n}: ISimplePropEditorReactProps<PropTypeConfig_File>) {\n  const [previewUrl, setPreviewUrl] = React.useState<string>()\n\n  useEffect(() => {\n    if (value) {\n      setPreviewUrl(editingTools.getAssetUrl(value))\n    } else {\n      setPreviewUrl(undefined)\n    }\n  }, [value])\n\n  const onChange = useCallback(\n    async (event: React.ChangeEvent<$FixMe>) => {\n      const file = event.target.files[0]\n      editingTools.permanentlySetValue({type: 'file', id: undefined})\n      const fileId = await editingTools.createAsset(file)\n\n      if (!fileId) {\n        editingTools.permanentlySetValue(value)\n      } else {\n        editingTools.permanentlySetValue({\n          type: 'file',\n          id: fileId,\n        })\n      }\n      event.target.value = null\n    },\n    [editingTools, value],\n  )\n\n  const empty = !value?.id\n\n  return (\n    <Container empty={empty}>\n      <InputLabel\n        empty={empty}\n        title={\n          empty ? 'Upload file' : `\"${value.id}\" (Click to upload new file)`\n        }\n      >\n        <Input type=\"file\" onChange={onChange} autoFocus={autoFocus} />\n        {previewUrl ? <Package /> : <AddFile />}\n      </InputLabel>\n\n      {!empty && (\n        <DeleteButton\n          title=\"Delete file\"\n          onClick={() => {\n            editingTools.permanentlySetValue({type: 'file', id: undefined})\n          }}\n        >\n          <Trash />\n        </DeleteButton>\n      )}\n    </Container>\n  )\n}\n\nexport default FilePropEditor\n"
  },
  {
    "path": "packages/studio/src/propEditors/simpleEditors/ISimplePropEditorReactProps.ts",
    "content": "import type {IBasePropType} from '@theatre/core/types/public'\nimport type {IEditingTools} from '@theatre/studio/propEditors/utils/IEditingTools'\n\n/** Helper for defining consistent prop editor components */\nexport type ISimplePropEditorReactProps<\n  TPropTypeConfig extends IBasePropType<string, any>,\n> = {\n  propConfig: TPropTypeConfig\n  editingTools: IEditingTools<TPropTypeConfig['valueType']>\n  value: TPropTypeConfig['valueType']\n  autoFocus?: boolean\n}\n"
  },
  {
    "path": "packages/studio/src/propEditors/simpleEditors/ImagePropEditor.tsx",
    "content": "import type {PropTypeConfig_Image} from '@theatre/core/types/public'\nimport type {$FixMe} from '@theatre/core/types/public'\nimport {Trash} from '@theatre/studio/uiComponents/icons'\nimport React, {useCallback, useEffect} from 'react'\nimport styled, {css} from 'styled-components'\nimport type {ISimplePropEditorReactProps} from './ISimplePropEditorReactProps'\n\nconst Container = styled.div<{empty: boolean}>`\n  display: flex;\n  align-items: center;\n  height: 100%;\n  gap: 4px;\n`\n\nconst AddImage = styled.div`\n  position: absolute;\n  inset: -5px;\n  // rotate 45deg\n  transform: rotate(45deg);\n  --checker-color: #ededed36;\n  &:hover {\n    --checker-color: #ededed77;\n  }\n  // checkerboard background with 4px squares\n  background-image: linear-gradient(\n      45deg,\n      var(--checker-color) 25%,\n      transparent 25%\n    ),\n    linear-gradient(-45deg, var(--checker-color) 25%, transparent 25%),\n    linear-gradient(45deg, transparent 75%, var(--checker-color) 75%),\n    linear-gradient(-45deg, transparent 75%, var(--checker-color) 75%);\n  background-size: 5px 5px;\n`\n\nconst InputLabel = styled.label<{empty: boolean}>`\n  position: relative;\n  cursor: default;\n  box-sizing: border-box;\n\n  height: 18px;\n  aspect-ratio: 1;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  font-size: 16px;\n\n  overflow: hidden;\n  color: #ccc;\n  &:hover {\n    color: white;\n  }\n\n  border-radius: 99999px;\n  border: 1px solid hwb(220deg 40% 52%);\n  &:hover {\n    border-color: hwb(220deg 45% 52%);\n  }\n\n  ${(props) => (props.empty ? css`` : css``)}\n`\n\n// file input\nconst Input = styled.input.attrs({type: 'file'})`\n  display: none;\n`\n\nconst Preview = styled.img`\n  position: absolute;\n  inset: 0;\n  height: 100%;\n  aspect-ratio: 1;\n\n  object-fit: cover;\n`\n\nconst DeleteButton = styled.button`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  outline: none;\n  background: transparent;\n  color: #a8a8a9;\n\n  border: none;\n  height: 100%;\n  aspect-ratio: 1/1;\n\n  opacity: 0;\n\n  ${Container}:hover & {\n    opacity: 0.8;\n  }\n\n  &:hover {\n    opacity: 1;\n    color: white;\n  }\n`\n\nfunction ImagePropEditor({\n  propConfig,\n  editingTools,\n  value,\n  autoFocus,\n}: ISimplePropEditorReactProps<PropTypeConfig_Image>) {\n  const [previewUrl, setPreviewUrl] = React.useState<string>()\n\n  useEffect(() => {\n    if (value) {\n      setPreviewUrl(editingTools.getAssetUrl(value))\n    } else {\n      setPreviewUrl(undefined)\n    }\n  }, [value])\n\n  const onChange = useCallback(\n    async (event: React.ChangeEvent<$FixMe>) => {\n      const file = event.target.files[0]\n      editingTools.permanentlySetValue({type: 'image', id: undefined})\n      const imageId = await editingTools.createAsset(file)\n\n      if (!imageId) {\n        editingTools.permanentlySetValue(value)\n      } else {\n        editingTools.permanentlySetValue({\n          type: 'image',\n          id: imageId,\n        })\n      }\n      event.target.value = null\n    },\n    [editingTools, value],\n  )\n\n  const empty = !value?.id\n\n  return (\n    <Container empty={empty}>\n      <InputLabel\n        empty={empty}\n        title={\n          empty ? 'Upload image' : `\"${value.id}\" (Click to upload new image)`\n        }\n      >\n        <Input\n          type=\"file\"\n          onChange={onChange}\n          accept=\"image/*,.hdr\"\n          autoFocus={autoFocus}\n        />\n        {previewUrl ? <Preview src={previewUrl} /> : <AddImage />}\n      </InputLabel>\n\n      {!empty && (\n        <DeleteButton\n          title=\"Delete image\"\n          onClick={() => {\n            editingTools.permanentlySetValue({type: 'image', id: undefined})\n          }}\n        >\n          <Trash />\n        </DeleteButton>\n      )}\n    </Container>\n  )\n}\n\nexport default ImagePropEditor\n"
  },
  {
    "path": "packages/studio/src/propEditors/simpleEditors/NumberPropEditor.tsx",
    "content": "import type {PropTypeConfig_Number} from '@theatre/core/types/public'\nimport BasicNumberInput from '@theatre/studio/uiComponents/form/BasicNumberInput'\nimport React, {useCallback} from 'react'\nimport type {ISimplePropEditorReactProps} from './ISimplePropEditorReactProps'\n\nfunction NumberPropEditor({\n  propConfig,\n  editingTools,\n  value,\n  autoFocus,\n}: ISimplePropEditorReactProps<PropTypeConfig_Number>) {\n  const nudge = useCallback(\n    (params: {deltaX: number; deltaFraction: number; magnitude: number}) => {\n      return propConfig.nudgeFn({...params, config: propConfig})\n    },\n    [propConfig],\n  )\n\n  return (\n    <BasicNumberInput\n      value={value}\n      temporarilySetValue={editingTools.temporarilySetValue}\n      discardTemporaryValue={editingTools.discardTemporaryValue}\n      permanentlySetValue={editingTools.permanentlySetValue}\n      range={propConfig.range}\n      nudge={nudge}\n      autoFocus={autoFocus}\n    />\n  )\n}\n\nexport default NumberPropEditor\n"
  },
  {
    "path": "packages/studio/src/propEditors/simpleEditors/RgbaPropEditor.tsx",
    "content": "import type {PropTypeConfig_Rgba, Rgba} from '@theatre/core/types/public'\nimport {validHexRegExp} from '@theatre/utils/color'\nimport {decorateRgba, rgba2hex, parseRgbaFromHex} from '@theatre/utils/color'\nimport React, {useCallback, useRef} from 'react'\nimport {RgbaColorPicker} from '@theatre/studio/uiComponents/colorPicker'\nimport styled from 'styled-components'\nimport usePopover from '@theatre/studio/uiComponents/Popover/usePopover'\nimport BasicStringInput from '@theatre/studio/uiComponents/form/BasicStringInput'\nimport {popoverBackgroundColor} from '@theatre/studio/uiComponents/Popover/BasicPopover'\nimport type {ISimplePropEditorReactProps} from './ISimplePropEditorReactProps'\n\nconst RowContainer = styled.div`\n  display: flex;\n  align-items: center;\n  height: 100%;\n  gap: 4px;\n`\n\ninterface ColorPreviewPuckProps {\n  rgbaColor: Rgba\n}\n\nconst ColorPreviewPuck = styled.div.attrs<ColorPreviewPuckProps>((props) => ({\n  style: {\n    // weirdly, rgba2hex is needed to ensure initial render was correct background?\n    // huge head scratcher.\n    background: rgba2hex(props.rgbaColor),\n  },\n}))<ColorPreviewPuckProps>`\n  height: 18px;\n  aspect-ratio: 1;\n  border-radius: 99999px;\n`\n\nconst HexInput = styled(BasicStringInput)`\n  flex: 1;\n`\n\nconst noop = () => {}\n\nconst RgbaPopover = styled.div`\n  position: absolute;\n  background-color: ${popoverBackgroundColor};\n  color: white;\n  margin: 0;\n  cursor: default;\n  border-radius: 3px;\n  z-index: 10000;\n  backdrop-filter: blur(8px);\n\n  padding: 4px;\n  pointer-events: all;\n\n  border: none;\n  box-shadow: none;\n`\n\nfunction RgbaPropEditor({\n  editingTools,\n  value,\n  autoFocus,\n}: ISimplePropEditorReactProps<PropTypeConfig_Rgba>) {\n  const containerRef = useRef<HTMLDivElement>(null!)\n\n  const onChange = useCallback(\n    (color: string) => {\n      const rgba = decorateRgba(parseRgbaFromHex(color))\n      editingTools.permanentlySetValue(rgba)\n    },\n    [editingTools],\n  )\n\n  const popover = usePopover({debugName: 'RgbaPropEditor'}, () => (\n    <RgbaPopover>\n      <RgbaColorPicker\n        color={{\n          r: value.r,\n          g: value.g,\n          b: value.b,\n          a: value.a,\n        }}\n        temporarilySetValue={(color) => {\n          const rgba = decorateRgba(color)\n          editingTools.temporarilySetValue(rgba)\n        }}\n        permanentlySetValue={(color) => {\n          const rgba = decorateRgba(color)\n          editingTools.permanentlySetValue(rgba)\n        }}\n        discardTemporaryValue={editingTools.discardTemporaryValue}\n      />\n    </RgbaPopover>\n  ))\n\n  return (\n    <>\n      <RowContainer>\n        <ColorPreviewPuck\n          rgbaColor={value}\n          ref={containerRef}\n          onClick={(e) => {\n            popover.toggle(e, containerRef.current)\n          }}\n        />\n        <HexInput\n          value={rgba2hex(value, {removeAlphaIfOpaque: true})}\n          temporarilySetValue={noop}\n          discardTemporaryValue={noop}\n          permanentlySetValue={onChange}\n          isValid={(v) => !!v.match(validHexRegExp)}\n          autoFocus={autoFocus}\n        />\n      </RowContainer>\n      {popover.node}\n    </>\n  )\n}\n\nexport default RgbaPropEditor\n"
  },
  {
    "path": "packages/studio/src/propEditors/simpleEditors/StringLiteralPropEditor.tsx",
    "content": "import type {PropTypeConfig_StringLiteral} from '@theatre/core/types/public'\nimport React, {useCallback} from 'react'\nimport BasicSwitch from '@theatre/studio/uiComponents/form/BasicSwitch'\nimport BasicSelect from '@theatre/studio/uiComponents/form/BasicSelect'\nimport type {ISimplePropEditorReactProps} from './ISimplePropEditorReactProps'\n\nfunction StringLiteralPropEditor<TLiteralOptions extends string>({\n  propConfig,\n  editingTools,\n  value,\n  autoFocus,\n}: ISimplePropEditorReactProps<PropTypeConfig_StringLiteral<TLiteralOptions>>) {\n  const onChange = useCallback(\n    (val: TLiteralOptions) => {\n      editingTools.permanentlySetValue(val)\n    },\n    [propConfig, editingTools],\n  )\n\n  return propConfig.as === 'menu' ? (\n    <BasicSelect\n      value={value}\n      onChange={onChange}\n      options={propConfig.valuesAndLabels}\n      autoFocus={autoFocus}\n    />\n  ) : (\n    <BasicSwitch\n      value={value}\n      onChange={onChange}\n      options={propConfig.valuesAndLabels}\n      autoFocus={autoFocus}\n    />\n  )\n}\n\nexport default StringLiteralPropEditor\n"
  },
  {
    "path": "packages/studio/src/propEditors/simpleEditors/StringPropEditor.tsx",
    "content": "import React from 'react'\nimport type {PropTypeConfig_String} from '@theatre/core/types/public'\nimport BasicStringInput from '@theatre/studio/uiComponents/form/BasicStringInput'\nimport type {ISimplePropEditorReactProps} from './ISimplePropEditorReactProps'\n\nfunction StringPropEditor({\n  editingTools,\n  value,\n  autoFocus,\n}: ISimplePropEditorReactProps<PropTypeConfig_String>) {\n  return (\n    <BasicStringInput\n      value={value}\n      temporarilySetValue={editingTools.temporarilySetValue}\n      discardTemporaryValue={editingTools.discardTemporaryValue}\n      permanentlySetValue={editingTools.permanentlySetValue}\n      autoFocus={autoFocus}\n    />\n  )\n}\n\nexport default StringPropEditor\n"
  },
  {
    "path": "packages/studio/src/propEditors/simpleEditors/simplePropEditorByPropType.ts",
    "content": "import type {PropTypeConfig_AllSimples} from '@theatre/core/types/public'\nimport type React from 'react'\nimport BooleanPropEditor from './BooleanPropEditor'\nimport NumberPropEditor from './NumberPropEditor'\nimport StringLiteralPropEditor from './StringLiteralPropEditor'\nimport StringPropEditor from './StringPropEditor'\nimport RgbaPropEditor from './RgbaPropEditor'\nimport type {ISimplePropEditorReactProps} from './ISimplePropEditorReactProps'\nimport type {PropConfigForType} from '@theatre/studio/propEditors/utils/PropConfigForType'\nimport ImagePropEditor from './ImagePropEditor'\nimport FilePropEditor from './FilePropEditor'\n\nexport const simplePropEditorByPropType: ISimplePropEditorByPropType = {\n  number: NumberPropEditor,\n  string: StringPropEditor,\n  boolean: BooleanPropEditor,\n  stringLiteral: StringLiteralPropEditor,\n  rgba: RgbaPropEditor,\n  image: ImagePropEditor,\n  file: FilePropEditor,\n}\n\ntype ISimplePropEditorByPropType = {\n  [K in PropTypeConfig_AllSimples['type']]: React.VFC<\n    ISimplePropEditorReactProps<PropConfigForType<K>>\n  >\n}\n"
  },
  {
    "path": "packages/studio/src/propEditors/useEditingToolsForCompoundProp.tsx",
    "content": "import type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport getStudio from '@theatre/studio/getStudio'\nimport getDeep from '@theatre/utils/getDeep'\nimport {usePrism} from '@theatre/react'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport {getPointerParts, prism, val} from '@theatre/dataverse'\nimport type {Pointer} from '@theatre/dataverse'\nimport get from 'lodash-es/get'\nimport React from 'react'\nimport DefaultOrStaticValueIndicator from './DefaultValueIndicator'\nimport type {PropTypeConfig_Compound} from '@theatre/core/types/public'\nimport type {SequenceTrackId} from '@theatre/core/types/public'\nimport type {IPropPathToTrackIdTree} from '@theatre/core/sheetObjects/SheetObjectTemplate'\nimport pointerDeep from '@theatre/utils/pointerDeep'\nimport type {NearbyKeyframesControls} from './NextPrevKeyframeCursors'\nimport NextPrevKeyframeCursors from './NextPrevKeyframeCursors'\nimport {getNearbyKeyframesOfTrack} from './getNearbyKeyframesOfTrack'\nimport type {KeyframeWithTrack} from '@theatre/studio/panels/SequenceEditorPanel/DopeSheet/Right/collectAggregateKeyframes'\nimport {emptyObject} from '@theatre/utils'\nimport {createStudioSheetItemKey} from '@theatre/studio/utils/createStudioSheetItemKey'\nimport type {ContextMenuItem} from '@theatre/studio/uiComponents/chordial/chordialInternals'\nimport {__private} from '@theatre/core'\nconst {iteratePropType, compoundHasSimpleDescendants, isPropConfigComposite} =\n  __private.propTypeUtils\n\ninterface CommonStuff {\n  beingScrubbed: boolean\n  contextMenuItems: Array<ContextMenuItem>\n  controlIndicators: React.ReactElement\n}\n\n/**\n * For compounds that have _no_ sequenced track in all of their descendants\n */\ninterface AllStatic extends CommonStuff {\n  type: 'AllStatic'\n}\n\n/**\n * For compounds that have at least one sequenced track in their descendants\n */\ninterface HasSequences extends CommonStuff {\n  type: 'HasSequences'\n}\n\ntype Stuff = AllStatic | HasSequences\n\nexport function useEditingToolsForCompoundProp(\n  pointerToProp: Pointer<{}>,\n  obj: SheetObject,\n  propConfig: PropTypeConfig_Compound<{}>,\n): Stuff {\n  const pathToProp = getPointerParts(pointerToProp).path\n\n  return usePrism((): Stuff => {\n    // if the compound has no simple descendants, then there isn't much the user can do with it\n    if (!compoundHasSimpleDescendants(propConfig)) {\n      return {\n        type: 'AllStatic',\n        beingScrubbed: false,\n        contextMenuItems: [],\n        controlIndicators: (\n          <DefaultOrStaticValueIndicator\n            hasStaticOverride={false}\n            obj={obj}\n            pathToProp={pathToProp}\n            propConfig={propConfig}\n          />\n        ),\n      }\n    }\n\n    /**\n     * TODO This implementation is wrong because {@link stateEditors.studio.ephemeral.projects.stateByProjectId.stateBySheetId.stateByObjectKey.propsBeingScrubbed.flag}\n     * does not prune empty objects\n     */\n    const someDescendantsBeingScrubbed = !!val(\n      get(\n        getStudio()!.atomP.ephemeral.projects.stateByProjectId[\n          obj.address.projectId\n        ].stateBySheetId[obj.address.sheetId].stateByObjectKey[\n          obj.address.objectKey\n        ].valuesBeingScrubbed,\n        getPointerParts(pointerToProp).path,\n      ),\n    )\n\n    const contextMenuItems: ContextMenuItem[] = []\n\n    const common: CommonStuff = {\n      beingScrubbed: someDescendantsBeingScrubbed,\n      contextMenuItems,\n      controlIndicators: <></>,\n    }\n\n    const validSequencedTracks = val(\n      obj.template.getMapOfValidSequenceTracks_forStudio(),\n    )\n\n    const possibleSequenceTrackIds = getDeep(\n      validSequencedTracks,\n      pathToProp,\n    ) as undefined | IPropPathToTrackIdTree\n\n    const hasOneOrMoreSequencedTracks =\n      possibleSequenceTrackIds !== undefined &&\n      Object.keys(possibleSequenceTrackIds).length !== 0 // check if object is empty or undefined\n    const listOfDescendantTrackIds: SequenceTrackId[] = []\n\n    const allStaticOverrides = val(\n      obj.template.getStaticButNotSequencedOverrides(),\n    )\n    const staticOverrides = getDeep(\n      allStaticOverrides ?? emptyObject,\n      pathToProp,\n    )\n\n    let hasStatics = staticOverrides !== undefined\n\n    if (hasOneOrMoreSequencedTracks) {\n      for (const descendant of iteratePropType(propConfig, [])) {\n        if (isPropConfigComposite(descendant.conf)) continue\n        const sequencedTrackIdBelongingToDescendant = getDeep(\n          possibleSequenceTrackIds,\n          descendant.path,\n        ) as SequenceTrackId | undefined\n        if (typeof sequencedTrackIdBelongingToDescendant !== 'string') {\n          hasStatics = true\n        } else {\n          listOfDescendantTrackIds.push(sequencedTrackIdBelongingToDescendant)\n        }\n      }\n    }\n\n    if (hasStatics || hasOneOrMoreSequencedTracks) {\n      contextMenuItems.push({\n        type: 'normal',\n        label: 'Reset all to default',\n        callback: () => {\n          getStudio()!.transaction(({unset}) => {\n            unset(pointerToProp)\n          })\n        },\n      })\n    }\n\n    if (hasOneOrMoreSequencedTracks) {\n      contextMenuItems.push({\n        type: 'normal',\n        label: 'Make all static',\n        callback: () => {\n          getStudio()!.transaction(({stateEditors}) => {\n            for (const {path: subPath, conf} of iteratePropType(\n              propConfig,\n              [],\n            )) {\n              if (isPropConfigComposite(conf)) continue\n              const propAddress = {\n                ...obj.address,\n                pathToProp: [...pathToProp, ...subPath],\n              }\n              const pointerToSub = pointerDeep(pointerToProp, subPath)\n\n              stateEditors.coreByProject.historic.sheetsById.sequence.setPrimitivePropAsStatic(\n                {\n                  ...propAddress,\n                  value: obj.getValueByPointer(pointerToSub as $IntentionalAny),\n                },\n              )\n            }\n          })\n        },\n      })\n    }\n\n    if (\n      !hasOneOrMoreSequencedTracks ||\n      (hasOneOrMoreSequencedTracks && hasStatics)\n    ) {\n      contextMenuItems.push({\n        type: 'normal',\n        label: 'Sequence all',\n        callback: () => {\n          getStudio()!.transaction(({stateEditors}) => {\n            for (const {path, conf} of iteratePropType(\n              propConfig,\n              pathToProp,\n            )) {\n              if (isPropConfigComposite(conf)) continue\n              const propAddress = {...obj.address, pathToProp: path}\n\n              stateEditors.coreByProject.historic.sheetsById.sequence.setPrimitivePropAsSequenced(\n                propAddress,\n              )\n            }\n          })\n        },\n      })\n    }\n\n    if (hasOneOrMoreSequencedTracks) {\n      const controlIndicators = prism.memo(\n        `controlIndicators`,\n        () => (\n          <ControlIndicators\n            {...{\n              pointerToProp,\n              obj,\n              possibleSequenceTrackIds,\n              listOfDescendantTrackIds,\n            }}\n          />\n        ),\n        [possibleSequenceTrackIds, listOfDescendantTrackIds],\n      )\n\n      const ret: HasSequences = {\n        ...common,\n        type: 'HasSequences',\n        controlIndicators,\n      }\n\n      return ret\n    } else {\n      return {\n        ...common,\n        type: 'AllStatic',\n        controlIndicators: (\n          <DefaultOrStaticValueIndicator\n            hasStaticOverride={hasStatics}\n            obj={obj}\n            pathToProp={pathToProp}\n            propConfig={propConfig}\n          />\n        ),\n      }\n    }\n  }, [])\n}\n\nfunction ControlIndicators({\n  pointerToProp,\n  obj,\n  possibleSequenceTrackIds,\n  listOfDescendantTrackIds,\n}: {\n  pointerToProp: Pointer<{}>\n  obj: SheetObject\n  possibleSequenceTrackIds: IPropPathToTrackIdTree\n  listOfDescendantTrackIds: SequenceTrackId[]\n}) {\n  return usePrism(() => {\n    const pathToProp = getPointerParts(pointerToProp).path\n\n    const sequencePosition = val(obj.sheet.getSequence().positionPrism)\n\n    /*\n    2/10 perf concern:\n    When displaying a hierarchy like {props: {transform: {position: {x, y, z}}}},\n    we'd be recalculating this variable for both `position` and `transform`. While\n    we _could_ be re-using the calculation of `transform` in `position`, I think\n    it's unlikely that this optimization would matter.\n    */\n    const nearbyKeyframesInEachTrack = listOfDescendantTrackIds\n      .map((trackId) => ({\n        trackId,\n        track: val(\n          obj.template.project.pointers.historic.sheetsById[obj.address.sheetId]\n            .sequence.tracksByObject[obj.address.objectKey].trackData[trackId],\n        ),\n      }))\n      .filter(({track}) => !!track)\n      .map((s) => ({\n        ...s,\n        nearbies: getNearbyKeyframesOfTrack(\n          obj,\n          {id: s.trackId, data: s.track!, sheetObject: obj},\n          sequencePosition,\n        ),\n      }))\n\n    const hasCur = nearbyKeyframesInEachTrack.find(\n      ({nearbies}) => !!nearbies.cur,\n    )\n    const allCur = nearbyKeyframesInEachTrack.every(\n      ({nearbies}) => !!nearbies.cur,\n    )\n\n    const closestPrev = nearbyKeyframesInEachTrack.reduce<\n      undefined | KeyframeWithTrack\n    >((acc, s) => {\n      if (s.nearbies.prev) {\n        if (\n          acc === undefined ||\n          s.nearbies.prev.kf.position > acc.kf.position\n        ) {\n          return s.nearbies.prev\n        } else {\n          return acc\n        }\n      } else {\n        return acc\n      }\n    }, undefined)\n\n    const closestNext = nearbyKeyframesInEachTrack.reduce<\n      undefined | KeyframeWithTrack\n    >((acc, s) => {\n      if (s.nearbies.next) {\n        if (\n          acc === undefined ||\n          s.nearbies.next.kf.position < acc.kf.position\n        ) {\n          return s.nearbies.next\n        } else {\n          return acc\n        }\n      } else {\n        return acc\n      }\n    }, undefined)\n\n    const toggle = () => {\n      if (allCur) {\n        getStudio().transaction((api) => {\n          api.unset(pointerToProp)\n        })\n      } else if (hasCur) {\n        getStudio().transaction((api) => {\n          api.set(pointerToProp, val(pointerToProp))\n        })\n      } else {\n        getStudio().transaction((api) => {\n          api.set(pointerToProp, val(pointerToProp))\n        })\n      }\n    }\n\n    const pr: NearbyKeyframesControls = {\n      cur: hasCur\n        ? {\n            type: 'on',\n            itemKey: createStudioSheetItemKey.forCompoundPropAggregateKeyframe(\n              obj,\n              pathToProp,\n              sequencePosition,\n            ),\n            toggle,\n          }\n        : {\n            toggle,\n            type: 'off',\n          },\n      prev:\n        closestPrev !== undefined\n          ? {\n              position: closestPrev.kf.position,\n              itemKey:\n                createStudioSheetItemKey.forCompoundPropAggregateKeyframe(\n                  obj,\n                  pathToProp,\n                  closestPrev.kf.position,\n                ),\n              jump: () => {\n                obj.sheet.getSequence().position = closestPrev.kf.position\n              },\n            }\n          : undefined,\n      next:\n        closestNext !== undefined\n          ? {\n              position: closestNext.kf.position,\n              itemKey:\n                createStudioSheetItemKey.forCompoundPropAggregateKeyframe(\n                  obj,\n                  pathToProp,\n                  closestNext.kf.position,\n                ),\n              jump: () => {\n                obj.sheet.getSequence().position = closestNext.kf.position\n              },\n            }\n          : undefined,\n    }\n\n    return <NextPrevKeyframeCursors {...pr} />\n  }, [pointerToProp, obj, possibleSequenceTrackIds, listOfDescendantTrackIds])\n}\n"
  },
  {
    "path": "packages/studio/src/propEditors/useEditingToolsForSimpleProp.tsx",
    "content": "import get from 'lodash-es/get'\nimport React from 'react'\nimport type {Prism, Pointer} from '@theatre/dataverse'\nimport {getPointerParts, prism, val} from '@theatre/dataverse'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport getStudio from '@theatre/studio/getStudio'\nimport type Scrub from '@theatre/studio/Scrub'\nimport getDeep from '@theatre/utils/getDeep'\nimport {usePrismInstance} from '@theatre/react'\nimport type {\n  SerializablePrimitive as SerializablePrimitive,\n  Asset,\n  File as AssetFile,\n} from '@theatre/core/types/public'\nimport type {PropTypeConfig_AllSimples} from '@theatre/core/types/public'\nimport type {SequenceTrackId} from '@theatre/core/types/public'\nimport DefaultOrStaticValueIndicator from './DefaultValueIndicator'\nimport type {NearbyKeyframes} from './getNearbyKeyframesOfTrack'\nimport {getNearbyKeyframesOfTrack} from './getNearbyKeyframesOfTrack'\nimport type {NearbyKeyframesControls} from './NextPrevKeyframeCursors'\nimport NextPrevKeyframeCursors from './NextPrevKeyframeCursors'\nimport type {ContextMenuItem} from '@theatre/studio/uiComponents/chordial/chordialInternals'\nimport {__private} from '@theatre/core'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\n\nconst {isPropConfSequencable} = __private.propTypeUtils\n\ninterface EditingToolsCommon<T> {\n  value: T\n  beingScrubbed: boolean\n  contextMenuItems: Array<ContextMenuItem>\n  /** e.g. `< • >` or `<   >` for {@link EditingToolsSequenced} */\n  controlIndicators: React.ReactElement\n\n  temporarilySetValue(v: T): void\n  discardTemporaryValue(): void\n  permanentlySetValue(v: T): void\n\n  getAssetUrl: (asset: Asset | AssetFile) => string | undefined\n  createAsset(asset: File): Promise<string | null>\n}\n\ninterface EditingToolsDefault<T> extends EditingToolsCommon<T> {\n  type: 'Default'\n  shade: Shade\n}\n\ninterface EditingToolsStatic<T> extends EditingToolsCommon<T> {\n  type: 'Static'\n  shade: Shade\n}\n\ninterface EditingToolsSequenced<T> extends EditingToolsCommon<T> {\n  type: 'Sequenced'\n  shade: Shade\n  /** based on the position of the playhead */\n  nearbyKeyframes: NearbyKeyframes\n}\n\ntype EditingTools<T> =\n  | EditingToolsDefault<T>\n  | EditingToolsStatic<T>\n  | EditingToolsSequenced<T>\n\nconst cache = new WeakMap<{}, Prism<EditingTools<$IntentionalAny>>>()\n\n/**\n * Note: we're able to get `obj` and `propConfig` from `pointerToProp`,\n * so the only reason they're still in the arguments list is that\n */\nfunction createPrism<T extends SerializablePrimitive>(\n  pointerToProp: Pointer<T>,\n  obj: SheetObject,\n  propConfig: PropTypeConfig_AllSimples,\n): Prism<EditingTools<T>> {\n  return prism(() => {\n    const pathToProp = getPointerParts(pointerToProp).path\n\n    const final = obj.getValueByPointer(pointerToProp) as T\n\n    const editPropValue = prism.memo(\n      'editPropValue',\n      () => {\n        let currentScrub: Scrub | null = null\n\n        return {\n          temporarilySetValue(v: T): void {\n            if (!currentScrub) {\n              currentScrub = getStudio()!.scrub()\n            }\n            currentScrub.capture((api) => {\n              api.set(pointerToProp, v)\n            })\n          },\n          discardTemporaryValue(): void {\n            if (currentScrub) {\n              currentScrub.discard()\n              currentScrub = null\n            }\n          },\n          permanentlySetValue(v: T): void {\n            if (currentScrub) {\n              currentScrub.capture((api) => {\n                api.set(pointerToProp, v)\n              })\n              currentScrub.commit()\n              currentScrub = null\n            } else {\n              getStudio()!.transaction((api) => {\n                api.set(pointerToProp, v)\n              })\n            }\n          },\n        }\n      },\n      [],\n    )\n\n    const editAssets = {\n      createAsset: (asset: File): Promise<string | null> =>\n        obj.sheet.project.assetStorage.createAsset(asset),\n      getAssetUrl: (asset: Asset | AssetFile) =>\n        asset.id\n          ? obj.sheet.project.assetStorage.getAssetUrl(asset.id)\n          : undefined,\n    }\n\n    const beingScrubbed =\n      val(\n        get(\n          getStudio()!.atomP.ephemeral.projects.stateByProjectId[\n            obj.address.projectId\n          ].stateBySheetId[obj.address.sheetId].stateByObjectKey[\n            obj.address.objectKey\n          ].valuesBeingScrubbed,\n          getPointerParts(pointerToProp).path,\n        ),\n      ) === true\n\n    const contextMenuItems: ContextMenuItem[] = []\n\n    const common: EditingToolsCommon<T> = {\n      ...editPropValue,\n      ...editAssets,\n      value: final,\n      beingScrubbed,\n      contextMenuItems,\n      controlIndicators: <></>,\n    }\n\n    const isSequencable = isPropConfSequencable(propConfig)\n\n    if (isSequencable) {\n      const validSequencedTracks = val(\n        obj.template.getMapOfValidSequenceTracks_forStudio(),\n      )\n      const possibleSequenceTrackId = getDeep(validSequencedTracks, pathToProp)\n\n      const isSequenced = typeof possibleSequenceTrackId === 'string'\n\n      if (isSequenced) {\n        contextMenuItems.push({\n          type: 'normal',\n          label: 'Make static',\n          callback: () => {\n            getStudio()!.transaction(({stateEditors}) => {\n              const propAddress = {...obj.address, pathToProp}\n              stateEditors.coreByProject.historic.sheetsById.sequence.setPrimitivePropAsStatic(\n                {\n                  ...propAddress,\n                  value: obj.getValueByPointer(pointerToProp) as T,\n                },\n              )\n            })\n          },\n        })\n\n        const sequenceTrackId = possibleSequenceTrackId as SequenceTrackId\n        const nearbyKeyframes = prism.sub(\n          'lcr',\n          (): NearbyKeyframes => {\n            const track = val(\n              obj.template.project.pointers.historic.sheetsById[\n                obj.address.sheetId\n              ].sequence.tracksByObject[obj.address.objectKey].trackData[\n                sequenceTrackId\n              ],\n            )\n            const sequencePosition = val(obj.sheet.getSequence().positionPrism)\n            return getNearbyKeyframesOfTrack(\n              obj,\n              track && {\n                data: track,\n                id: sequenceTrackId,\n                sheetObject: obj,\n              },\n              sequencePosition,\n            )\n          },\n          [sequenceTrackId],\n        )\n\n        let shade: Shade\n\n        if (common.beingScrubbed) {\n          shade = 'Sequenced_OnKeyframe_BeingScrubbed'\n        } else {\n          if (nearbyKeyframes.cur) {\n            shade = 'Sequenced_OnKeyframe'\n          } else if (nearbyKeyframes.prev?.kf.connectedRight === true) {\n            shade = 'Sequenced_BeingInterpolated'\n          } else {\n            shade = 'Sequened_NotBeingInterpolated'\n          }\n        }\n\n        const toggle = () => {\n          if (nearbyKeyframes.cur) {\n            getStudio()!.transaction((api) => {\n              api.unset(pointerToProp)\n            })\n          } else {\n            getStudio()!.transaction((api) => {\n              api.set(pointerToProp, common.value)\n            })\n          }\n        }\n        const controls: NearbyKeyframesControls = {\n          cur: nearbyKeyframes.cur\n            ? {\n                type: 'on',\n                itemKey: nearbyKeyframes.cur.itemKey,\n                toggle,\n              }\n            : {\n                type: 'off',\n                toggle,\n              },\n          prev:\n            nearbyKeyframes.prev !== undefined\n              ? {\n                  itemKey: nearbyKeyframes.prev.itemKey,\n                  position: nearbyKeyframes.prev.kf.position,\n                  jump: () => {\n                    obj.sheet.getSequence().position =\n                      nearbyKeyframes.prev!.kf.position\n                  },\n                }\n              : undefined,\n          next:\n            nearbyKeyframes.next !== undefined\n              ? {\n                  itemKey: nearbyKeyframes.next.itemKey,\n                  position: nearbyKeyframes.next.kf.position,\n                  jump: () => {\n                    obj.sheet.getSequence().position =\n                      nearbyKeyframes.next!.kf.position\n                  },\n                }\n              : undefined,\n        }\n\n        const nextPrevKeyframeCursors = (\n          <NextPrevKeyframeCursors {...controls} />\n        )\n\n        const ret: EditingToolsSequenced<T> = {\n          ...common,\n          type: 'Sequenced',\n          shade,\n          nearbyKeyframes,\n          controlIndicators: nextPrevKeyframeCursors,\n        }\n\n        return ret\n      }\n    }\n\n    const allStaticOverrides = val(obj.template.getStaticValues())\n\n    const staticOverride = getDeep(allStaticOverrides, pathToProp)\n\n    if (typeof staticOverride !== 'undefined') {\n      contextMenuItems.push({\n        type: 'normal',\n        label: 'Reset to default',\n        callback: () => {\n          getStudio()!.transaction(({unset: unset}) => {\n            unset(pointerToProp)\n          })\n        },\n      })\n    }\n\n    if (isSequencable) {\n      contextMenuItems.push({\n        type: 'normal',\n        label: 'Sequence',\n        callback: () => {\n          getStudio()!.transaction(({stateEditors}) => {\n            const propAddress = {...obj.address, pathToProp}\n\n            stateEditors.coreByProject.historic.sheetsById.sequence.setPrimitivePropAsSequenced(\n              propAddress,\n            )\n          })\n        },\n      })\n    }\n\n    if (typeof staticOverride !== 'undefined') {\n      const ret: EditingToolsStatic<T> = {\n        ...common,\n        type: 'Static',\n        shade: common.beingScrubbed ? 'Static_BeingScrubbed' : 'Static',\n        controlIndicators: (\n          <DefaultOrStaticValueIndicator\n            hasStaticOverride={true}\n            obj={obj}\n            pathToProp={pathToProp}\n            propConfig={propConfig}\n          />\n        ),\n      }\n      return ret\n    }\n\n    const ret: EditingToolsDefault<T> = {\n      ...common,\n      type: 'Default',\n      shade: 'Default',\n      controlIndicators: (\n        <DefaultOrStaticValueIndicator\n          hasStaticOverride={true}\n          obj={obj}\n          pathToProp={pathToProp}\n          propConfig={propConfig}\n        />\n      ),\n    }\n\n    return ret\n  })\n}\n\nfunction getPrism<T extends SerializablePrimitive>(\n  pointerToProp: Pointer<T>,\n  obj: SheetObject,\n  propConfig: PropTypeConfig_AllSimples,\n): Prism<EditingTools<T>> {\n  if (cache.has(pointerToProp)) {\n    return cache.get(pointerToProp)!\n  } else {\n    const d = createPrism(pointerToProp, obj, propConfig)\n    cache.set(pointerToProp, d)\n    return d\n  }\n}\n\n/**\n * Notably, this uses the {@link Scrub} API to support\n * indicating in the UI which pointers (values/props) are being\n * scrubbed. See how impl of {@link Scrub} manages\n * `state.flagsTransaction` to keep a list of these touched paths\n * for the UI to be able to recognize. (e.g. to highlight the\n * item in r3f as you change its scale).\n */\nexport function useEditingToolsForSimplePropInDetailsPanel<\n  T extends SerializablePrimitive,\n>(\n  pointerToProp: Pointer<T>,\n  obj: SheetObject,\n  propConfig: PropTypeConfig_AllSimples,\n): EditingTools<T> {\n  const der = getPrism(pointerToProp, obj, propConfig)\n  return usePrismInstance(der)\n}\n\ntype Shade =\n  | 'Default'\n  | 'Static'\n  | 'Static_BeingScrubbed'\n  | 'Sequenced_OnKeyframe'\n  | 'Sequenced_OnKeyframe_BeingScrubbed'\n  | 'Sequenced_BeingInterpolated'\n  | 'Sequened_NotBeingInterpolated'\n"
  },
  {
    "path": "packages/studio/src/propEditors/utils/IEditingTools.tsx",
    "content": "import type {Asset, File} from '@theatre/core/types/public'\n\nexport interface IEditingTools<T> {\n  temporarilySetValue(v: T): void\n  discardTemporaryValue(): void\n  permanentlySetValue(v: T): void\n\n  getAssetUrl(asset: Asset | File): string | undefined\n  createAsset(asset: Blob): Promise<string | null>\n}\n"
  },
  {
    "path": "packages/studio/src/propEditors/utils/PropConfigForType.ts",
    "content": "import type {PropTypeConfig} from '@theatre/core/types/public'\n\nexport type PropConfigForType<K extends PropTypeConfig['type']> = Extract<\n  PropTypeConfig,\n  {type: K}\n>\n"
  },
  {
    "path": "packages/studio/src/propEditors/utils/getPropTypeByPointer.tsx",
    "content": "import type {PropTypeConfig} from '@theatre/core/types/public'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport {getPointerParts} from '@theatre/dataverse'\n\n/**\n * @deprecated because it uses obj.template.staticConfig\n *\n * Returns the PropTypeConfig by path. Assumes `path` is a valid prop path and that\n * it exists in obj.\n *\n * Example usage:\n * ```\n * const propConfig = getPropTypeByPointer(propP, sheetObject)\n *\n * if (propConfig.type === 'number') {\n * //... etc.\n * }\n * ```\n */\n\nexport function getPropTypeByPointer(\n  pointerToProp: SheetObject['propsP'],\n  obj: SheetObject,\n): PropTypeConfig {\n  const rootConf = obj.template.staticConfig\n\n  const p = getPointerParts(pointerToProp).path\n  let conf = rootConf as PropTypeConfig\n\n  while (p.length !== 0) {\n    const key = p.shift()\n    if (typeof key === 'string') {\n      if (conf.type === 'compound') {\n        conf = conf.props[key]\n        if (!conf) {\n          throw new Error(\n            `getPropTypeConfigByPath() is called with an invalid path.`,\n          )\n        }\n      } else if (conf.type === 'enum') {\n        conf = conf.cases[key]\n        if (!conf) {\n          throw new Error(\n            `getPropTypeConfigByPath() is called with an invalid path.`,\n          )\n        }\n      } else {\n        throw new Error(\n          `getPropTypeConfigByPath() is called with an invalid path.`,\n        )\n      }\n    } else if (typeof key === 'number') {\n      throw new Error(`Number indexes are not implemented yet. @todo`)\n    } else {\n      throw new Error(\n        `getPropTypeConfigByPath() is called with an invalid path.`,\n      )\n    }\n  }\n\n  return conf\n}\n"
  },
  {
    "path": "packages/studio/src/propEditors/utils/propNameTextCSS.tsx",
    "content": "import type {PropHighlighted} from '@theatre/studio/panels/SequenceEditorPanel/whatPropIsHighlighted'\nimport {css} from 'styled-components'\n\nexport const propNameTextCSS = css<{isHighlighted?: PropHighlighted}>`\n  font-weight: 300;\n  font-size: 11px;\n  color: ${(props) => (props.isHighlighted === 'self' ? '#CCC' : '#919191')};\n  text-shadow: 0.5px 0.5px 2px rgba(0, 0, 0, 0.3);\n`\n"
  },
  {
    "path": "packages/studio/src/selectors.ts",
    "content": "import type Project from '@theatre/core/projects/Project'\nimport type Sequence from '@theatre/core/sequences/Sequence'\nimport type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport {prism, val} from '@theatre/dataverse'\nimport type {$IntentionalAny} from '@theatre/dataverse/src/types'\nimport type {SheetId} from '@theatre/core/types/public'\nimport {uniq} from 'lodash-es'\nimport getStudio from './getStudio'\nimport {__private} from '@theatre/core'\nconst {isSheet, isSheetObject} = __private.instanceTypes\n\nexport type OutlineSelectable = Project | Sheet | SheetObject\nexport type OutlineSelection = OutlineSelectable[]\n\nexport const outlineSelection = prism((): OutlineSelection => {\n  const projects = val(getStudio().projectsP)\n\n  const mapped: (OutlineSelectable | undefined)[] = (\n    val(getStudio().atomP.historic.panels.outlinePanel.selection) ?? []\n  ).map((s) => {\n    const project = projects[s.projectId]\n    if (!project) return\n    if (s.type === 'Project') return project\n    const sheetTemplate = val(project.sheetTemplatesP[s.sheetId])\n    if (!sheetTemplate) {\n      return\n    }\n    const sheetInstance = getSelectedInstanceOfSheetId(project, s.sheetId)\n    if (!sheetInstance) return\n    if (s.type === 'Sheet') {\n      return sheetInstance\n    }\n    const obj = val(sheetInstance.objectsP[s.objectKey])\n    if (!obj) return\n    return obj\n  })\n\n  return uniq(\n    mapped.filter((s): s is OutlineSelectable => typeof s !== 'undefined'),\n  )\n})\n\nexport const getSelectedInstanceOfSheetId = (\n  project: Project,\n  selectedSheetId: string,\n): Sheet | undefined => {\n  const projectStateP =\n    getStudio()!.atomP.historic.projects.stateByProjectId[\n      project.address.projectId\n    ]\n\n  const instanceId = val(\n    projectStateP.stateBySheetId[selectedSheetId as SheetId].selectedInstanceId,\n  )\n\n  const template = val(project.sheetTemplatesP[selectedSheetId])\n\n  if (!template) return undefined\n\n  if (instanceId) {\n    return val(template.instancesP[instanceId])\n  } else {\n    // @todo #perf this will update every time an instance is added/removed.\n    const allInstances = val(template.instancesP)\n\n    return allInstances[keys(allInstances)[0]]\n  }\n}\n\nfunction keys<T extends object>(obj: T): Exclude<keyof T, symbol | number>[] {\n  return Object.keys(obj) as $IntentionalAny\n}\n\n/**\n * component instances could come and go all the time. This hook\n * makes sure we don't cause re-renders\n */\nexport function getRegisteredSheetIds(project: Project): string[] {\n  return Object.keys(val(project.sheetTemplatesP))\n}\n\nexport function getSelectedSequence(): undefined | Sequence {\n  const selectedSheets = uniq(\n    outlineSelection\n      .getValue()\n      .filter((s): s is SheetObject | Sheet => isSheet(s) || isSheetObject(s))\n      .map((s) => (isSheetObject(s) ? s.sheet : s)),\n  )\n  const sheet = selectedSheets[0]\n  if (!sheet) return\n\n  return sheet.getSequence()\n}\n"
  },
  {
    "path": "packages/studio/src/toolbars/ExtensionToolbar/ExtensionToolbar.tsx",
    "content": "import {Atom} from '@theatre/dataverse'\nimport {useVal} from '@theatre/react'\n/* eslint-disable import/no-extraneous-dependencies */\nimport type {IExtension} from '@theatre/core/types/public'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {ToolsetConfig} from '@theatre/core/types/public'\nimport React, {useLayoutEffect, useMemo} from 'react'\n\nimport styled from 'styled-components'\nimport Toolset from './Toolset'\n\nconst Container = styled.div`\n  height: 36px;\n  /* pointer-events: none; */\n\n  display: flex;\n  gap: 0.5rem;\n  justify-content: center;\n`\n\nconst GroupDivider = styled.div`\n  position: abolute;\n  height: 32px;\n  width: 1px;\n  background: #373b40;\n  opacity: 0.4;\n`\n\nconst ExtensionToolsetRender: React.FC<{\n  extension: IExtension\n  toolbarId: string\n}> = ({extension, toolbarId}) => {\n  const toolsetConfigBox = useMemo(() => new Atom<ToolsetConfig>([]), [])\n\n  const attachFn = extension.toolbars?.[toolbarId]\n\n  useLayoutEffect(() => {\n    const detach = attachFn?.(\n      toolsetConfigBox.set.bind(toolsetConfigBox),\n      getStudio()!.publicApi,\n    )\n\n    if (typeof detach === 'function') return detach\n  }, [extension, toolbarId, attachFn])\n\n  const config = useVal(toolsetConfigBox.prism)\n\n  return <Toolset config={config} />\n}\n\nexport const ExtensionToolbar: React.FC<{\n  toolbarId: string\n  showLeftDivider?: boolean\n}> = ({toolbarId, showLeftDivider}) => {\n  const groups: Array<React.ReactNode> = []\n  const extensionsById = useVal(\n    getStudio().ephemeralAtom.pointer.extensions.byId,\n  )\n\n  let isAfterFirstGroup = false\n  for (const [, extension] of Object.entries(extensionsById)) {\n    if (!extension || !extension.toolbars?.[toolbarId]) continue\n\n    groups.push(\n      <React.Fragment key={'extensionToolbar-' + extension.id}>\n        {isAfterFirstGroup ? <GroupDivider></GroupDivider> : undefined}\n        <ExtensionToolsetRender extension={extension} toolbarId={toolbarId} />\n      </React.Fragment>,\n    )\n\n    isAfterFirstGroup = true\n  }\n\n  if (groups.length === 0) return null\n\n  return (\n    <Container data-testid={`theatre-extensionToolbar-${toolbarId}`}>\n      {showLeftDivider ? <GroupDivider></GroupDivider> : undefined}\n      {groups}\n    </Container>\n  )\n}\n\nexport default ExtensionToolbar\n"
  },
  {
    "path": "packages/studio/src/toolbars/ExtensionToolbar/Toolset.tsx",
    "content": "import didYouMean from '@theatre/utils/didYouMean'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport userReadableTypeOfValue from '@theatre/utils/userReadableTypeOfValue'\nimport type {ToolConfig, ToolsetConfig} from '@theatre/core/types/public'\nimport React from 'react'\nimport IconButton from './tools/IconButton'\nimport Switch from './tools/Switch'\nimport ExtensionFlyoutMenu from './tools/ExtensionFlyoutMenu'\n\nconst Toolset: React.FC<{\n  config: ToolsetConfig\n}> = (props) => {\n  return (\n    <>\n      {props.config.map((toolConfig, i) => {\n        return <Tool config={toolConfig} key={i} />\n      })}\n    </>\n  )\n}\n\nconst toolByType: {\n  [Key in ToolConfig['type']]: React.FC<{\n    config: Extract<ToolConfig, {type: Key}>\n  }>\n} = {\n  Icon: IconButton,\n  Switch: Switch,\n  Flyout: ExtensionFlyoutMenu,\n}\n\nfunction getToolByType<Type extends ToolConfig['type']>(\n  type: Type,\n): React.FC<{config: Extract<ToolConfig, {type: Type}>}> {\n  return toolByType[type] as $IntentionalAny\n}\n\nconst Tool: React.FC<{config: ToolConfig}> = ({config}) => {\n  const Comp = getToolByType(config.type)\n\n  if (!Comp) {\n    throw new Error(\n      `No tool with tool.type ${userReadableTypeOfValue(\n        config.type,\n      )} exists. Did you mean ${didYouMean(\n        config.type,\n        Object.keys(toolByType),\n      )}`,\n    )\n  }\n\n  return <Comp config={config} />\n}\n\nexport default Toolset\n"
  },
  {
    "path": "packages/studio/src/toolbars/ExtensionToolbar/tools/ExtensionFlyoutMenu.tsx",
    "content": "import React, {useRef} from 'react'\nimport styled from 'styled-components'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport type {\n  ToolConfigFlyoutMenu,\n  ToolconfigFlyoutMenuItem,\n} from '@theatre/core/types/public'\nimport ToolbarIconButton from '@theatre/studio/uiComponents/toolbar/ToolbarIconButton'\nimport BaseMenu from '@theatre/studio/uiComponents/simpleContextMenu/ContextMenu/BaseMenu'\nimport usePopover from '@theatre/studio/uiComponents/Popover/usePopover'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\n\nconst Container = styled.div`\n  ${pointerEventsAutoInNormalMode};\n  & > svg {\n    width: 1em;\n    height: 1em;\n    pointer-events: none;\n  }\n`\n\nconst ExtensionFlyoutMenu: React.FC<{\n  config: ToolConfigFlyoutMenu\n}> = ({config}) => {\n  const triggerRef = useRef<null | HTMLElement>(null)\n\n  const popover = usePopover(\n    () => {\n      const triggerBounds = triggerRef.current!.getBoundingClientRect()\n      return {\n        debugName: 'ExtensionFlyoutMenu:' + config.label,\n\n        constraints: {\n          maxX: triggerBounds.right,\n          maxY: 8,\n          minX: triggerBounds.left,\n          minY: 8,\n        },\n        verticalGap: 2,\n      }\n    },\n    () => {\n      return (\n        <BaseMenu\n          items={config.items.map(\n            (option: ToolconfigFlyoutMenuItem, index: number) => ({\n              label: option.label,\n              callback: () => {\n                // this is a user-defined function, so we need to wrap it in a try/catch\n                try {\n                  option.onClick?.()\n                } catch (e) {\n                  console.error(e)\n                }\n              },\n            }),\n          )}\n          onRequestClose={() => {\n            popover.close('clicked')\n          }}\n        />\n      )\n    },\n  )\n\n  return (\n    <Container>\n      {popover.node}\n      <ToolbarIconButton\n        ref={triggerRef as $IntentionalAny}\n        onClick={(e) => {\n          popover.open(e, triggerRef.current!)\n        }}\n      >\n        {config.label}\n      </ToolbarIconButton>\n    </Container>\n  )\n}\n\nexport default ExtensionFlyoutMenu\n"
  },
  {
    "path": "packages/studio/src/toolbars/ExtensionToolbar/tools/IconButton.tsx",
    "content": "import React from 'react'\nimport ToolbarIconButton from '@theatre/studio/uiComponents/toolbar/ToolbarIconButton'\nimport styled from 'styled-components'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport type {ToolConfigIcon} from '@theatre/core/types/public'\n\nconst Container = styled(ToolbarIconButton)`\n  ${pointerEventsAutoInNormalMode};\n  & > svg {\n    width: 1em;\n    height: 1em;\n    pointer-events: none;\n  }\n`\n\nconst IconButton: React.FC<{\n  config: ToolConfigIcon\n  testId?: string\n}> = ({config, testId}) => {\n  return (\n    <Container\n      onClick={config.onClick}\n      data-testid={testId}\n      title={config.title}\n      dangerouslySetInnerHTML={{__html: config['svgSource'] ?? ''}}\n    />\n  )\n}\n\nexport default IconButton\n"
  },
  {
    "path": "packages/studio/src/toolbars/ExtensionToolbar/tools/Switch.tsx",
    "content": "import React from 'react'\nimport styled from 'styled-components'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport type {ToolConfigSwitch} from '@theatre/core/types/public'\nimport ToolbarSwitchSelect from '@theatre/studio/uiComponents/toolbar/ToolbarSwitchSelect'\n\nconst IconContainer = styled.div`\n  ${pointerEventsAutoInNormalMode};\n  & > svg {\n    width: 1em;\n    height: 1em;\n    pointer-events: none;\n  }\n`\n\nconst Switch: React.FC<{\n  config: ToolConfigSwitch\n}> = ({config}) => {\n  return (\n    <ToolbarSwitchSelect\n      onChange={config.onChange}\n      options={config.options.map(({label, value, svgSource}) => ({\n        label,\n        value,\n        icon: <IconContainer dangerouslySetInnerHTML={{__html: svgSource}} />,\n      }))}\n      value={config.value}\n    />\n  )\n}\n\nexport default Switch\n"
  },
  {
    "path": "packages/studio/src/toolbars/GlobalToolbar/GlobalToolbar.tsx",
    "content": "import {useVal} from '@theatre/react'\nimport getStudio from '@theatre/studio/getStudio'\nimport React from 'react'\nimport styled from 'styled-components'\nimport ExtensionToolbar from '@theatre/studio/toolbars/ExtensionToolbar/ExtensionToolbar'\nimport {\n  useNotifications,\n  useEmptyNotificationsTooltip,\n} from '@theatre/studio/notify'\nimport {\n  uesConflicts,\n  useOutlineTriggerTooltip,\n  useMoreMenu,\n  useShouldShowUpdatesBadge,\n} from './globalToolbarHooks'\nimport LeftStrip from './LeftStrip/LeftStrip'\nimport RightStrip from './RightStrip/RightStrip'\n\nconst Container = styled.div`\n  position: fixed;\n  left: 0;\n  right: 0;\n  top: 12px;\n  height: 42px;\n  display: flex;\n  justify-content: space-between;\n  pointer-events: none;\n`\n\nconst NumberOfConflictsIndicator = styled.div`\n  color: white;\n  width: 14px;\n  height: 14px;\n  background: #d00;\n  border-radius: 4px;\n  text-align: center;\n  line-height: 14px;\n  font-weight: 600;\n  font-size: 8px;\n  position: relative;\n  left: -6px;\n  top: -11px;\n  margin-right: -14px;\n  box-shadow: 0 4px 6px -4px #00000059;\n`\n\nconst SubContainer = styled.div`\n  display: flex;\n  gap: 8px;\n`\n\nconst HasUpdatesBadge = styled.div<{type: 'info' | 'warning'}>`\n  position: absolute;\n  background: ${({type}) => (type === 'info' ? '#40aaa4' : '#f59e0b')};\n  width: 6px;\n  height: 6px;\n  border-radius: 50%;\n  right: -2px;\n  top: -2px;\n`\n\nconst GlobalToolbar: React.FC = () => {\n  const conflicts = uesConflicts()\n  const [outlineTriggerTooltip, outlineTriggerRef] =\n    useOutlineTriggerTooltip(conflicts)\n\n  const outlinePinned = useVal(getStudio().atomP.ahistoric.pinOutline) ?? true\n  const detailsPinned = useVal(getStudio().atomP.ahistoric.pinDetails) ?? true\n\n  const {moreMenu, moreMenuTriggerRef} = useMoreMenu()\n\n  const showUpdatesBadge = useShouldShowUpdatesBadge()\n\n  const {hasNotifications} = useNotifications()\n\n  const [notificationsTooltip, notificationsTriggerRef] =\n    useEmptyNotificationsTooltip()\n\n  return (\n    <Container>\n      <SubContainer>\n        <LeftStrip />\n      </SubContainer>\n      {outlineTriggerTooltip}\n      <SubContainer>\n        {/* <PinButton\n          ref={outlineTriggerRef as $IntentionalAny}\n          data-testid=\"OutlinePanel-TriggerButton\"\n          onClick={() => {\n            const prev = val(getStudio().atomP.ahistoric.pinOutline)\n            getStudio().transaction(({stateEditors}) => {\n              stateEditors.studio.ahistoric.setPinOutline(!(prev ?? true))\n            })\n          }}\n          icon={<Outline />}\n          pinHintIcon={<DoubleChevronRight />}\n          unpinHintIcon={<DoubleChevronLeft />}\n          pinned={outlinePinned}\n        /> */}\n        {/* <AuthState /> */}\n        {conflicts.length > 0 ? (\n          <NumberOfConflictsIndicator>\n            {conflicts.length}\n          </NumberOfConflictsIndicator>\n        ) : null}\n        <ExtensionToolbar showLeftDivider toolbarId=\"global\" />\n      </SubContainer>\n      <SubContainer>\n        <RightStrip />\n        {/* \n        {notificationsTooltip}\n        <PinButton\n          ref={notificationsTriggerRef as $IntentionalAny}\n          onClick={() => {\n            const prev = val(getStudio().atomP.ahistoric.pinNotifications)\n            getStudio().transaction(({stateEditors}) => {\n              stateEditors.studio.ahistoric.setPinNotifications(\n                !(prev ?? false),\n              )\n            })\n          }}\n          icon={<Bell />}\n          pinHintIcon={<Bell />}\n          unpinHintIcon={<Bell />}\n          pinned={useVal(getStudio().atomP.ahistoric.pinNotifications) ?? false}\n        >\n          {hasNotifications && <HasUpdatesBadge type=\"warning\" />}\n        </PinButton> */}\n        {/* {moreMenu.node}\n        <ToolbarIconButton\n          ref={moreMenuTriggerRef}\n          onClick={(e) => {\n            moreMenu.toggle(e, moreMenuTriggerRef.current!)\n          }}\n        >\n          <Ellipsis />\n          {showUpdatesBadge && <HasUpdatesBadge type=\"info\" />}\n        </ToolbarIconButton> */}\n        {/* <PinButton\n          ref={outlineTriggerRef as $IntentionalAny}\n          onClick={() => {\n            const prev = val(getStudio().atomP.ahistoric.pinDetails)\n            getStudio().transaction(({stateEditors}) => {\n              stateEditors.studio.ahistoric.setPinDetails(!(prev ?? true))\n            })\n          }}\n          icon={<Details />}\n          pinHintIcon={<DoubleChevronLeft />}\n          unpinHintIcon={<DoubleChevronRight />}\n          pinned={detailsPinned}\n        /> */}\n      </SubContainer>\n    </Container>\n  )\n}\n\nexport default GlobalToolbar\n"
  },
  {
    "path": "packages/studio/src/toolbars/GlobalToolbar/LeftStrip/AppButton/AppButton.tsx",
    "content": "import {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport useChordial from '@theatre/studio/uiComponents/chordial/useChodrial'\nimport React from 'react'\nimport styled from 'styled-components'\nimport logo from '@theatre/studio/assets/logo.png'\nimport DropdownChevron from '@theatre/studio/uiComponents/icons/DropdownChevron'\nimport BaseMenu from '@theatre/studio/uiComponents/simpleContextMenu/ContextMenu/BaseMenu'\n\nconst Container = styled.div`\n  height: 100%;\n  width: 42px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  position: relative;\n  ${pointerEventsAutoInNormalMode};\n  &:hover {\n    --chevron-down: 1;\n    background: rgba(255, 255, 255, 0.08);\n  }\n`\n\nconst Logo = styled.img`\n  width: 16px;\n  height: 15px;\n`\n\nconst appButtonTitle = 'Theatre.js 0.8'\nconst AppButton: React.FC<{}> = (props) => {\n  const s = useChordial(() => {\n    return {\n      items: [],\n      title: appButtonTitle,\n      invoke: {\n        type: 'popover',\n        render: ({close}) => {\n          return (\n            <BaseMenu\n              onRequestClose={close}\n              items={[\n                {label: \"What's new?\", callback: () => {}},\n                {type: 'separator'},\n                {label: 'Chat with us', callback: () => {}},\n                {label: 'Help', callback: () => {}},\n                {label: 'Changelog', callback: () => {}},\n                {type: 'separator'},\n                {label: 'Github', callback: () => {}},\n                {label: 'Discord', callback: () => {}},\n                {label: 'Twitter', callback: () => {}},\n                {type: 'separator'},\n                {label: 'Settings', callback: () => {}},\n              ]}\n              displayName={appButtonTitle}\n            />\n          )\n        },\n      },\n    }\n  })\n  return (\n    <>\n      <Container ref={s.targetRef}>\n        <Logo src={logo} />\n        <DropdownChevron />\n      </Container>\n    </>\n  )\n}\n\nexport default AppButton\n"
  },
  {
    "path": "packages/studio/src/toolbars/GlobalToolbar/LeftStrip/LeftStrip.tsx",
    "content": "import React from 'react'\nimport styled from 'styled-components'\nimport AppButton from './AppButton/AppButton'\nimport WorkspaceButton from './WorkspaceButton/WorkspaceButton'\n\nconst Container = styled.div`\n  height: 28px;\n  flex-shrink: 0;\n  flex-grow: 1;\n  display: flex;\n  align-items: center;\n  flex-direction: row;\n  margin-left: 13px;\n\n  border-radius: 3px;\n  background: rgba(47, 50, 53, 0.88);\n  box-shadow: 0px 4px 4px -1px rgba(0, 0, 0, 0.2);\n  backdrop-filter: blur(10px);\n`\n\nconst Separator = styled.div`\n  background: rgba(0, 0, 0, 0.24);\n  width: 1px;\n  height: 100%;\n`\n\nconst LeftStrip: React.FC<{}> = (props) => {\n  return (\n    <Container>\n      <AppButton />\n      <Separator />\n      <WorkspaceButton />\n    </Container>\n  )\n}\n\nexport default LeftStrip\n"
  },
  {
    "path": "packages/studio/src/toolbars/GlobalToolbar/LeftStrip/WorkspaceButton/WorkspaceButton.tsx",
    "content": "import {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport DropdownChevron from '@theatre/studio/uiComponents/icons/DropdownChevron'\nimport React from 'react'\nimport styled from 'styled-components'\n\nconst Container = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  text-wrap: nowrap;\n  padding: 0 10px;\n  height: 100%;\n  font-weight: 500;\n  ${pointerEventsAutoInNormalMode};\n  cursor: default;\n  &:hover {\n    --chevron-down: 1;\n    background: rgba(255, 255, 255, 0.08);\n  }\n`\n\nconst Team = styled.span`\n  color: rgba(255, 255, 255, 0.38);\n`\nconst Separator = styled.span`\n  color: rgba(255, 255, 255, 0.38);\n`\nconst WorkspaceName = styled.span``\n\nconst WorkspaceButton: React.FC<{}> = (props) => {\n  const team = `Team Freight`\n  const wsName = `Solar Play`\n  return (\n    <Container>\n      <Team>{team}</Team>\n      <Separator>{`/`}</Separator>\n      <WorkspaceName>{wsName}</WorkspaceName>\n      <DropdownChevron />\n    </Container>\n  )\n}\n\nexport default WorkspaceButton\n"
  },
  {
    "path": "packages/studio/src/toolbars/GlobalToolbar/MoreMenu/MoreMenu.tsx",
    "content": "import {useVal} from '@theatre/react'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport getStudio from '@theatre/studio/getStudio'\nimport React from 'react'\nimport styled from 'styled-components'\nimport {env} from '@theatre/studio/env'\n\nconst Container = styled.div`\n  width: 138px;\n  border-radius: 2px;\n  background-color: rgba(42, 45, 50, 0.9);\n  position: absolute;\n  display: flex;\n  flex-direction: column;\n  align-items: stretch;\n  justify-content: flex-start;\n  box-shadow:\n    0px 1px 1px rgba(0, 0, 0, 0.25),\n    0px 2px 6px rgba(0, 0, 0, 0.15);\n  backdrop-filter: blur(14px);\n  pointer-events: auto;\n  // makes the edges of the item highlights match the rounded corners\n  overflow: hidden;\n\n  @supports not (backdrop-filter: blur()) {\n    background-color: rgba(42, 45, 50, 0.98);\n  }\n\n  color: rgba(255, 255, 255, 0.9);\n\n  & a {\n    // Fix colors of links to not be default\n    color: inherit;\n  }\n`\n\nconst Item = styled.div`\n  position: relative;\n  padding: 0px 12px;\n  font-weight: 400;\n  font-size: 11px;\n  height: 32px;\n  text-decoration: none;\n  user-select: none;\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  cursor: default;\n`\n\nconst Link = styled(Item)`\n  &:before {\n    position: absolute;\n    display: block;\n    content: ' ';\n    inset: 3px;\n    border-radius: 3px;\n    background: rgba(255, 255, 255, 0.1);\n    opacity: 0;\n  }\n\n  &.secondary {\n    color: rgba(255, 255, 255, 0.5);\n  }\n\n  &:hover {\n    /* background-color: #398995; */\n    color: white !important;\n    &:before {\n      opacity: 1;\n    }\n  }\n`\n\nconst VersionContainer = styled(Item)`\n  height: auto;\n  min-height: 32px;\n  padding-top: 12px;\n  padding-bottom: 10px;\n  flex-direction: column;\n  justify-content: flex-start;\n  align-items: stretch;\n  gap: 8px;\n  color: rgba(255, 255, 255, 0.5);\n`\n\nconst VersionLabel = styled.div`\n  font-weight: 600;\n`\n\nconst VersionValueRow = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n`\n\nconst VersionValue = styled.div`\n  margin-left: 2px;\n`\n\nconst Divider = styled.div`\n  height: 1px;\n  margin: 0 2px;\n  background: rgba(255, 255, 255, 0.02);\n`\n\nconst UpdateDot = styled.div`\n  position: absolute;\n  width: 8px;\n  height: 8px;\n  background: #40aaa4;\n  right: 14px;\n  top: 12px;\n  border-radius: 50%;\n`\n\nconst version: string = env.THEATRE_VERSION ?? '0.4.0'\n\nconst untaggedVersion: string = version.match(/^[^\\-]+/)![0]\n\nconst MoreMenu = React.forwardRef((props: {}, ref) => {\n  const hasUpdates = useVal(\n    getStudio().ahistoricAtom.pointer.updateChecker.result.hasUpdates,\n  )\n\n  return (\n    <Container ref={ref as $IntentionalAny}>\n      <Link\n        as=\"a\"\n        href=\"https://www.theatrejs.com/docs/latest\"\n        className=\"\"\n        target=\"_blank\"\n      >\n        Docs\n      </Link>\n\n      <Link\n        as=\"a\"\n        href={`https://www.theatrejs.com/docs/latest/releases`}\n        className=\"\"\n        target=\"_blank\"\n      >\n        Changelog\n      </Link>\n\n      <Divider />\n      <Link\n        as=\"a\"\n        href=\"https://github.com/theatre-js/theatre\"\n        className=\"\"\n        target=\"_blank\"\n      >\n        Github\n      </Link>\n      <Link\n        as=\"a\"\n        href=\"https://twitter.com/theatre_js\"\n        className=\"\"\n        target=\"_blank\"\n      >\n        Twitter\n      </Link>\n      <Link\n        className=\"\"\n        as=\"a\"\n        href=\"https://discord.gg/bm9f8F9Y9N\"\n        target=\"_blank\"\n      >\n        Discord\n      </Link>\n      <Divider />\n      <VersionContainer>\n        <VersionLabel>Version</VersionLabel>\n        <VersionValueRow>\n          <VersionValue>\n            {version}{' '}\n            {hasUpdates === true\n              ? '(outdated)'\n              : hasUpdates === false\n                ? '(latest)'\n                : ''}\n          </VersionValue>\n        </VersionValueRow>\n      </VersionContainer>\n      {hasUpdates === true && (\n        <>\n          <Divider />\n          <Link\n            as=\"a\"\n            href={`https://www.theatrejs.com/docs/latest/releases${encodeURIComponent(\n              untaggedVersion,\n            )}`}\n            className=\"\"\n            target=\"_blank\"\n          >\n            Update\n            <UpdateDot />\n          </Link>\n          <Link\n            as=\"a\"\n            href={`https://www.theatrejs.com/docs/latest/releases#${encodeURIComponent(\n              untaggedVersion,\n            )}`}\n            className=\"\"\n            target=\"_blank\"\n          >\n            What's new?\n          </Link>\n        </>\n      )}\n    </Container>\n  )\n})\n\nexport default MoreMenu\n"
  },
  {
    "path": "packages/studio/src/toolbars/GlobalToolbar/RightStrip/AuthState/AuthState.tsx",
    "content": "import {useVal} from '@theatre/react'\nimport getStudio from '@theatre/studio/getStudio'\nimport ToolbarButton from '@theatre/studio/uiComponents/toolbar/ToolbarButton'\nimport React from 'react'\nimport Unauthorized from './Unauthorized'\nimport Avatar from './Avatar'\n\nconst auth = getStudio().auth\n\nconst AuthState: React.FC<{}> = (props) => {\n  const authState = useVal(auth.derivedState)\n\n  if (authState === 'loading') {\n    return <></>\n  }\n\n  if (!authState.loggedIn) {\n    return <Unauthorized authState={authState} />\n  } else {\n    return (\n      <>\n        <ToolbarButton primary={true} onClick={() => {}}>\n          Share\n        </ToolbarButton>\n        <Avatar authState={authState} />\n      </>\n    )\n  }\n}\n\nexport default AuthState\n"
  },
  {
    "path": "packages/studio/src/toolbars/GlobalToolbar/RightStrip/AuthState/Avatar.tsx",
    "content": "import type {AuthDerivedState} from '@theatre/studio/Auth'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport getStudio from '@theatre/studio/getStudio'\nimport type {ContextMenuItem} from '@theatre/studio/uiComponents/chordial/chordialInternals'\nimport useChordial from '@theatre/studio/uiComponents/chordial/useChodrial'\nimport BaseMenu from '@theatre/studio/uiComponents/simpleContextMenu/ContextMenu/BaseMenu'\nimport React from 'react'\nimport styled from 'styled-components'\n\nconst Container = styled.div`\n  width: 28px;\n  height: 28px;\n  position: relative;\n  ${pointerEventsAutoInNormalMode};\n\n  &:active {\n    transform: translateY(1px);\n  }\n`\n\nconst AvatarImage = styled.img`\n  width: 100%;\n  height: 100%;\n  aspect-ratio: 1;\n  border-radius: 50px;\n  --box-shadow-color: rgba(0, 0, 0, 0.7);\n  box-shadow: 0px 4px 4px -1px var(--box-shadow-color);\n\n  ${Container}:hover & {\n    --box-shadow-color: rgba(0, 0, 0, 1);\n  }\n`\n\nconst auth = getStudio().auth\n\nconst Stroke = styled.div`\n  position: absolute;\n  inset: -2px;\n  border-radius: 50px;\n  background: rgba(151, 208, 249, 0.6);\n\n  ${Container}:hover & {\n    background: rgba(151, 208, 249, 0.9);\n    transform: scale(1.05);\n  }\n\n  ${Container}:active & {\n    background: rgba(151, 208, 249, 0.9);\n    transform: scale(1.05);\n  }\n\n  backdrop-filter: blur(2px);\n\n  --gradient-cutoff: 62%;\n\n  // add a mask, so that a circle is cut out of the stroke\n  mask-image: radial-gradient(\n    circle at center,\n    transparent 0%,\n    transparent var(--gradient-cutoff),\n    black var(--gradient-cutoff)\n  );\n`\n\ntype Props = {authState: Extract<AuthDerivedState, {loggedIn: true}>}\n\nconst Avatar: React.FC<Props> = (props) => {\n  // const p = usePopover(\n  //   () => {\n  //     return {debugName: 'Avatar popover'}\n  //   },\n  //   ,\n  // )\n  const c = useChordial(() => {\n    const userFullName = 'Aria Minaei'\n    return {\n      title: `User: ${userFullName}`,\n      menuTitle: 'User',\n      items: [],\n      invoke: {\n        type: 'popover',\n        render: ({close}) => {\n          const items: ContextMenuItem[] = [\n            {label: 'My account', type: 'normal', callback: () => {}},\n            {type: 'separator'},\n            {label: 'Help', type: 'normal', callback: () => {}},\n            {label: 'Keyboard shortcuts', type: 'normal', callback: () => {}},\n            {type: 'separator'},\n            {\n              label: 'Log out',\n              type: 'normal',\n              callback: () => auth.deauthorize(),\n            },\n          ]\n\n          return <BaseMenu items={items} onRequestClose={close} />\n        },\n      },\n    }\n  })\n\n  const url = `https://pbs.twimg.com/profile_images/1367137683/aria_400x400.jpg`\n\n  return (\n    <>\n      <Container ref={c.targetRef}>\n        <AvatarImage src={url} />\n        <Stroke />\n      </Container>\n    </>\n  )\n}\n\nexport default Avatar\n"
  },
  {
    "path": "packages/studio/src/toolbars/GlobalToolbar/RightStrip/AuthState/Unauthorized.tsx",
    "content": "import type {AuthDerivedState} from '@theatre/studio/Auth'\nimport getStudio from '@theatre/studio/getStudio'\nimport ToolbarButton from '@theatre/studio/uiComponents/toolbar/ToolbarButton'\nimport React from 'react'\nimport SimplePopover from '@theatre/studio/uiComponents/Popover/SimplePopover'\nimport styled from 'styled-components'\n\nconst ThePopover = styled(SimplePopover)`\n  width: 380px;\n  padding: 24px 14px;\n  font-weight: 500;\n  backdrop-filter: blur(8px) contrast(65%) brightness(59%);\n  --popover-bg: rgb(58 59 67);\n  --popover-outer-stroke: rgb(99 100 112);\n  box-shadow: rgb(0 0 0 / 55%) 1px 8px 13px 6px;\n`\n\nconst P1 = styled.p`\n  margin-bottom: 1em;\n`\n\nconst auth = getStudio().auth\n\nconst Unauthorized: React.FC<{\n  authState: Extract<AuthDerivedState, {loggedIn: false}>\n}> = ({authState}) => {\n  // const authState: Extract<AuthDerivedState, {loggedIn: false}> = {\n  //   loggedIn: false,\n  //   procedureState: {\n  //     type: 'authorize',\n  //     deviceTokenFlowState: {\n  //       type: 'waitingForDeviceCode',\n  //       // verificationUriComplete: 'https://google.com',\n  //     },\n  //   },\n  // }\n\n  const buttonRef = React.useRef<HTMLButtonElement>(null)\n\n  const {procedureState} = authState\n  if (!procedureState)\n    return (\n      <ToolbarButton primary={true} onClick={() => auth.authorize()}>\n        Log in\n      </ToolbarButton>\n    )\n\n  let popoverBody = null\n  if (procedureState.type === 'authorize') {\n    const {deviceTokenFlowState} = procedureState\n    if (deviceTokenFlowState?.type === 'waitingForDeviceCode') {\n      popoverBody = (\n        <>\n          <P1 className=\"text-lg font-mdium text-center\">Logging you in...</P1>\n          <p className=\"font-medium text-center\">\n            <span className=\"text-color-pale\">Waiting for OAuth token.</span>\n          </p>\n        </>\n      )\n    } else if (deviceTokenFlowState?.type === 'codeReady') {\n      popoverBody = (\n        <>\n          <P1 className=\"text-lg font-mdium text-center\">\n            Complete log in in the popup.\n          </P1>\n          <p className=\"font-medium text-center\">\n            <span className=\"text-color-pale\">Popup didn't show up?</span>{' '}\n            <a\n              href={deviceTokenFlowState.verificationUriComplete}\n              target=\"_blank\"\n            >\n              Try this link.\n            </a>\n          </p>\n        </>\n      )\n    } else {\n      popoverBody = `Logging in...`\n    }\n  }\n\n  return (\n    <>\n      <ToolbarButton disabled={true} ref={buttonRef}>\n        {procedureState.type === 'authorize' ? 'Logging in' : 'Log in'}\n      </ToolbarButton>\n      {popoverBody && (\n        <ThePopover verticalGap={4} target={buttonRef}>\n          {popoverBody}\n        </ThePopover>\n      )}\n    </>\n  )\n  return <></>\n}\n\nexport default Unauthorized\n"
  },
  {
    "path": "packages/studio/src/toolbars/GlobalToolbar/RightStrip/AuthState/shared.tsx",
    "content": "export {}\n"
  },
  {
    "path": "packages/studio/src/toolbars/GlobalToolbar/RightStrip/RightStrip.tsx",
    "content": "import React from 'react'\nimport styled from 'styled-components'\nimport AuthState from './AuthState/AuthState'\n\nconst Container = styled.div`\n  margin-right: 12px;\n  display: flex;\n  align-items: flex-start;\n  justify-content: flex-end;\n  gap: 12px;\n  flex-wrap: nowrap;\n`\n\nconst RightStrip: React.FC<{}> = (props) => {\n  return (\n    <Container>\n      <AuthState />\n    </Container>\n  )\n}\n\nexport default RightStrip\n"
  },
  {
    "path": "packages/studio/src/toolbars/GlobalToolbar/globalToolbarHooks.tsx",
    "content": "import {usePrism, useVal} from '@theatre/react'\nimport getStudio from '@theatre/studio/getStudio'\nimport React, {useMemo, useRef} from 'react'\nimport useTooltip from '@theatre/studio/uiComponents/Popover/useTooltip'\nimport ErrorTooltip from '@theatre/studio/uiComponents/Popover/ErrorTooltip'\nimport BasicTooltip from '@theatre/studio/uiComponents/Popover/BasicTooltip'\nimport {val} from '@theatre/dataverse'\nimport usePopover from '@theatre/studio/uiComponents/Popover/usePopover'\nimport MoreMenu from './MoreMenu/MoreMenu'\n\nlet showedVisualTestingWarning = false\n\nexport function useOutlineTriggerTooltip(\n  conflicts: ReturnType<typeof uesConflicts>,\n) {\n  return useTooltip(\n    {enabled: conflicts.length > 0, enterDelay: conflicts.length > 0 ? 0 : 200},\n    () =>\n      conflicts.length > 0 ? (\n        <ErrorTooltip>\n          {conflicts.length === 1\n            ? `There is a state conflict in project \"${conflicts[0].projectId}\". Select the project in the outline below in order to fix it.`\n            : `There are ${conflicts.length} projects that have state conflicts. They are highlighted in the outline below. `}\n        </ErrorTooltip>\n      ) : (\n        <BasicTooltip>\n          <>Outline</>\n        </BasicTooltip>\n      ),\n  )\n}\n\nexport function uesConflicts() {\n  return usePrism(() => {\n    const ephemeralStateOfAllProjects = val(\n      getStudio().ephemeralAtom.pointer.coreByProject,\n    )\n    return Object.entries(ephemeralStateOfAllProjects)\n      .map(([projectId, state]) => ({projectId, state}))\n      .filter(\n        ({state}) =>\n          state.loadingState.type === 'browserStateIsNotBasedOnDiskState',\n      )\n  }, [])\n}\n\nexport function useMoreMenu() {\n  const moreMenu = usePopover(\n    () => {\n      const triggerBounds = moreMenuTriggerRef.current!.getBoundingClientRect()\n      return {\n        debugName: 'More Menu',\n\n        constraints: {\n          maxX: triggerBounds.right,\n          maxY: 8,\n          // MVP: Don't render the more menu all the way to the left\n          // when it doesn't fit on the screen height\n          // See https://linear.app/theatre/issue/P-178/bug-broken-updater-ui-in-simple-html-page\n          // 1/10 There's a better way to solve this.\n          // 1/10 Perhaps consider separate constraint like \"rightSideMinX\" & for future: \"bottomSideMinY\"\n          // 2/10 Or, consider constraints being a function of the dimensions of the box => constraints.\n          minX: triggerBounds.left - 140,\n          minY: 8,\n        },\n        verticalGap: 2,\n      }\n    },\n    () => {\n      return <MoreMenu />\n    },\n  )\n  const moreMenuTriggerRef = useRef<HTMLButtonElement>(null)\n  return {moreMenu, moreMenuTriggerRef}\n}\n\nexport function useShouldShowUpdatesBadge(): boolean {\n  const hasUpdates =\n    useVal(\n      getStudio().ahistoricAtom.pointer.updateChecker.result.hasUpdates,\n    ) === true\n\n  return useMemo(() => {\n    if (window.__IS_VISUAL_REGRESSION_TESTING) {\n      if (!showedVisualTestingWarning) {\n        showedVisualTestingWarning = true\n        console.warn(\n          \"Visual regression testing enabled, so we're showing the updates badge unconditionally\",\n        )\n      }\n    }\n    if (hasUpdates || window.__IS_VISUAL_REGRESSION_TESTING) {\n      return true\n    }\n\n    return hasUpdates\n  }, [hasUpdates])\n}\n"
  },
  {
    "path": "packages/studio/src/toolbars/PinButton.tsx",
    "content": "import styled from 'styled-components'\nimport type {ComponentPropsWithRef, ReactNode} from 'react'\nimport React, {forwardRef, useState} from 'react'\nimport ToolbarIconButton from '@theatre/studio/uiComponents/toolbar/ToolbarIconButton'\n\nconst Container = styled(ToolbarIconButton)<{pinned?: boolean}>`\n  color: ${({pinned}) => (pinned ? 'rgba(255, 255, 255, 0.8)' : '#A8A8A9')};\n\n  border-bottom: 1px solid\n    ${({pinned}) =>\n      pinned ? 'rgba(255, 255, 255, 0.7)' : 'rgba(255, 255, 255, 0.08)'};\n`\n\ninterface PinButtonProps extends ComponentPropsWithRef<'button'> {\n  icon: ReactNode\n  pinHintIcon: ReactNode\n  unpinHintIcon: ReactNode\n  hint?: boolean\n  pinned?: boolean\n}\n\nconst PinButton = forwardRef<HTMLButtonElement, PinButtonProps>(\n  (\n    {children, hint, pinned, icon, pinHintIcon, unpinHintIcon, ...props},\n    ref,\n  ) => {\n    const [hovered, setHovered] = useState(false)\n\n    const showHint = hovered || hint\n\n    return (\n      <Container\n        {...props}\n        pinned={pinned}\n        ref={ref}\n        onMouseOver={() => setHovered(true)}\n        onMouseOut={() => setHovered(false)}\n      >\n        {/* Necessary for hover to work properly. */}\n        <div\n          style={{\n            pointerEvents: 'none',\n            width: 'fit-content',\n            height: 'fit-content',\n            inset: 0,\n          }}\n        >\n          {showHint && !pinned\n            ? pinHintIcon\n            : showHint && pinned\n              ? unpinHintIcon\n              : icon}\n        </div>\n        {children}\n      </Container>\n    )\n  },\n)\n\nexport default PinButton\n"
  },
  {
    "path": "packages/studio/src/uiComponents/DetailPanelButton.tsx",
    "content": "import styled from 'styled-components'\n\nconst DetailPanelButton = styled.button<{disabled?: boolean}>`\n  text-align: center;\n  padding: 8px;\n  border-radius: 2px;\n  border: 1px solid #627b7b87;\n  background-color: #4b787d3d;\n  color: #eaeaea;\n  font-weight: 400;\n  display: block;\n  appearance: none;\n  flex-grow: 1;\n  cursor: ${(props) => (props.disabled ? 'none' : 'pointer')};\n  opacity: ${(props) => (props.disabled ? 0.4 : 1)};\n\n  &:hover {\n    background-color: #7dc1c878;\n    border-color: #9ebcbf;\n  }\n`\n\nexport default DetailPanelButton\n"
  },
  {
    "path": "packages/studio/src/uiComponents/ExternalLink.tsx",
    "content": "import React from 'react'\nimport {RxExternalLink} from 'react-icons/rx'\nimport styled from 'styled-components'\n\nconst A = styled.a`\n  text-decoration: none;\n  border-bottom: 1px solid #888;\n  position: relative;\n  display: inline-block;\n  margin-left: 0.4em;\n\n  &:hover,\n  &:active {\n    border-color: #ccc;\n  }\n`\n\nconst IconContainer = styled.span`\n  padding-right: 0.2em;\n  fotn-size: 0.8em;\n  position: relative;\n  top: 2px;\n`\n\nconst ExternalLink = React.forwardRef<\n  HTMLAnchorElement,\n  React.ComponentProps<typeof A>\n>(({children, ...props}, ref) => {\n  return (\n    <A {...props} ref={ref}>\n      {/* <FaExternalLinkAlt /> */}\n      <IconContainer>\n        <RxExternalLink />\n      </IconContainer>\n      {children}\n    </A>\n  )\n})\n\nexport default ExternalLink\n"
  },
  {
    "path": "packages/studio/src/uiComponents/PointerEventsHandler.tsx",
    "content": "import type {$IntentionalAny} from '@theatre/core/types/public'\nimport React, {\n  createContext,\n  forwardRef,\n  useContext,\n  useLayoutEffect,\n  useMemo,\n  useState,\n} from 'react'\nimport styled from 'styled-components'\n\n// using an ID to make CSS selectors faster\nconst elementId = 'pointer-root'\n\n/**\n * When the cursor is locked, this css var is added to #pointer-root\n * whose value will be the locked cursor (e.g. ew-resize).\n *\n * Look up references of this constant for examples of how it is used.\n *\n * See {@link useCssCursorLock} - code that locks the cursor\n */\nexport const lockedCursorCssVarName = '--lockedCursor'\n\nconst Container = styled.div`\n  pointer-events: auto;\n  &.normal {\n    pointer-events: none;\n  }\n`\n\nconst CursorOverride = styled.div`\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n\n  #pointer-root:not(.normal) > & {\n    pointer-events: auto;\n  }\n`\n\ntype Context = {\n  getLock: (className: string, cursor?: string) => () => void\n}\n\ntype Lock = {className: string; cursor?: string}\n\nconst context = createContext<Context>({} as $IntentionalAny)\n\nconst PointerEventsHandler: React.FC<{\n  className?: string\n  children?: React.ReactNode\n}> = forwardRef((props, ref) => {\n  const [locks, setLocks] = useState<Lock[]>([])\n  const contextValue = useMemo<Context>(() => {\n    const getLock = (className: string, cursor?: string) => {\n      const lock = {className, cursor}\n      setLocks((s) => [...s, lock])\n      const unlock = () => {\n        setLocks((s) => s.filter((l) => l !== lock))\n      }\n      return unlock\n    }\n    return {\n      getLock,\n    }\n  }, [])\n\n  const lockedCursor = locks[0]?.cursor ?? ''\n  return (\n    <context.Provider value={contextValue}>\n      <Container\n        id={elementId}\n        className={(locks[0]?.className ?? 'normal') + ' ' + props.className}\n        ref={ref as $IntentionalAny}\n      >\n        <CursorOverride\n          style={{\n            cursor: lockedCursor,\n            // @ts-ignore\n            [lockedCursorCssVarName]: lockedCursor,\n          }}\n        >\n          {props.children}\n        </CursorOverride>\n      </Container>\n    </context.Provider>\n  )\n})\n\n/**\n * A \"locking\" mechanism for managing style.cursor values.\n *\n * Putting this behind a lock is important so we can properly manage\n * multiple features all coordinating to style the cursor.\n *\n * This will also track a stack of different cursor styles so that\n * adding a style to be the \"foremost\" cursor can override a previous style,\n * but then \"unlocking\" that style will again reveal the existing styles.\n *\n * It behaves a bit like a stack.\n *\n * See {@link lockedCursorCssVarName}\n */\nexport const useCssCursorLock = (\n  /** Whether to enable the provided cursor style */\n  enabled: boolean,\n  className: string,\n  /** e.g. `\"ew\"`, `\"help\"`, `\"pointer\"`, `\"text\"`, etc */\n  cursor?: string,\n) => {\n  const ctx = useContext(context)\n  useLayoutEffect(() => {\n    if (!enabled) return\n    return ctx.getLock(className, cursor)\n  }, [enabled, className, cursor])\n}\n\nexport default PointerEventsHandler\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/ArrowContext.tsx",
    "content": "import {createContext} from 'react'\n\nconst ArrowContext = createContext<Record<string, string>>({})\nexport default ArrowContext\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/BasicPopover.tsx",
    "content": "import type {$IntentionalAny} from '@theatre/core/types/public'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport React from 'react'\nimport styled from 'styled-components'\nimport PopoverArrow from './PopoverArrow'\n\nexport const popoverBackgroundColor = `rgb(51 45 66 / 40%)`\n\nconst Container = styled.div`\n  position: absolute;\n  --popover-bg: ${popoverBackgroundColor};\n  --popover-inner-stroke: #505159;\n  --popover-outer-stroke: rgb(86 100 110 / 46%);\n\n  border-radius: 4px;\n  box-shadow: rgb(0 0 0 / 25%) 0px 2px 4px;\n  backdrop-filter: blur(8px) saturate(300%) contrast(65%) brightness(55%);\n  /* background-color: rgb(45 46 66 / 50%); */\n  border: 0.5px solid var(--popover-outer-stroke);\n\n  background: var(--popover-bg);\n  /* border: 1px solid var(--popover-inner-stroke); */\n\n  color: white;\n  padding: 1px 2px 1px 10px;\n  margin: 0;\n  cursor: default;\n  ${pointerEventsAutoInNormalMode};\n  z-index: 10000;\n\n  & a {\n    color: inherit;\n  }\n`\n\nconst BasicPopover: React.FC<{\n  className?: string\n  showPopoverEdgeTriangle?: boolean\n  children: React.ReactNode\n  ref?: React.Ref<HTMLDivElement>\n}> = React.forwardRef(\n  (\n    {\n      children,\n      className,\n      showPopoverEdgeTriangle: showPopoverEdgeTriangle = false,\n    },\n    ref,\n  ) => {\n    return (\n      <Container className={className} ref={ref as $IntentionalAny}>\n        {showPopoverEdgeTriangle ? <PopoverArrow /> : undefined}\n        {children}\n      </Container>\n    )\n  },\n)\n\nexport default BasicPopover\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/BasicTooltip.tsx",
    "content": "import styled from 'styled-components'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport React from 'react'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\n\nconst Container = styled.div`\n  position: absolute;\n\n  color: white;\n  padding: 0;\n  margin: 0;\n  cursor: default;\n  ${pointerEventsAutoInNormalMode};\n\n  color: white;\n  box-sizing: border-box;\n\n  border-radius: 4px;\n  box-shadow: rgb(0 0 0 / 25%) 0px 2px 4px;\n  backdrop-filter: blur(8px) saturate(300%) contrast(65%) brightness(55%);\n  background-color: rgb(45 46 66 / 50%);\n  border: 0.5px solid rgb(86 100 110 / 46%);\n  z-index: 10000;\n  padding: 8px 8px;\n  font-size: 10px;\n\n  z-index: 10000;\n\n  & a {\n    color: inherit;\n  }\n\n  max-width: 240px;\n  padding: 8px;\n  pointer-events: none !important;\n`\n\nconst BasicTooltip = React.forwardRef(\n  (\n    {\n      children,\n      className,\n    }: {\n      className?: string\n      showPopoverEdgeTriangle?: boolean\n      children: React.ReactNode\n    },\n    ref,\n  ) => {\n    return (\n      <Container className={className} ref={ref as $IntentionalAny}>\n        {children}\n      </Container>\n    )\n  },\n)\n\nexport default BasicTooltip\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/ErrorTooltip.tsx",
    "content": "import styled from 'styled-components'\nimport BasicTooltip from './BasicTooltip'\n\nconst ErrorTooltip = styled(BasicTooltip)`\n  --popover-outer-stroke: #e11c1c;\n  --popover-inner-stroke: #2c1c1c;\n  --popover-bg: #2c1c1c;\n  pointer-events: none !important;\n`\n\nexport default ErrorTooltip\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/MinimalTooltip.tsx",
    "content": "import styled from 'styled-components'\nimport BasicTooltip from './BasicTooltip'\n\nconst MinimalTooltip = styled(BasicTooltip)`\n  padding: 6px;\n`\nexport default MinimalTooltip\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/PopoverArrow.tsx",
    "content": "import React, {forwardRef, useContext} from 'react'\nimport styled from 'styled-components'\nimport ArrowContext from './ArrowContext'\n\nconst Container = styled.div`\n  position: absolute;\n  width: 0;\n  height: 0;\n  color: var(--popover-arrow-color);\n  pointer-events: none;\n`\n\nconst Adjust = styled.div`\n  width: 12px;\n  height: 8px;\n  position: absolute;\n  left: -7px;\n  top: -6px;\n  text-align: center;\n  line-height: 0;\n`\n\ntype Props = {\n  className?: string\n  color?: string\n}\n\nconst InnerTriangle = styled.path`\n  fill: var(--popover-bg);\n`\n\nconst InnerStroke = styled.path`\n  fill: var(--popover-inner-stroke);\n`\n\nconst OuterStroke = styled.path`\n  fill: var(--popover-outer-stroke);\n`\n\nconst PopoverArrow = forwardRef<HTMLDivElement, Props>(({className}, ref) => {\n  const arrowStyle = useContext(ArrowContext)\n  return (\n    <Container className={className} ref={ref} style={{...arrowStyle}}>\n      <Adjust>\n        <svg\n          width=\"12\"\n          height=\"8\"\n          viewBox=\"0 0 12 8\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <OuterStroke d=\"M6 0L0 6H12L6 0Z\" />\n          {/* <InnerStroke d=\"M6 1.5L0 7.5H12L6 1.5Z\" /> */}\n          <InnerTriangle d=\"M6 3L0 9H12L6 3Z\" />\n        </svg>\n      </Adjust>\n    </Container>\n  )\n})\n\nexport default PopoverArrow\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/PopoverPositioner.tsx",
    "content": "import React from 'react'\nimport {cloneElement, useLayoutEffect, useState} from 'react'\nimport useWindowSize from 'react-use/esm/useWindowSize'\nimport useBoundingClientRect from '@theatre/studio/uiComponents/useBoundingClientRect'\nimport ArrowContext from './ArrowContext'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport useOnClickOutside from '@theatre/studio/uiComponents/useOnClickOutside'\nimport onPointerOutside from '@theatre/studio/uiComponents/onPointerOutside'\nimport noop from '@theatre/utils/noop'\nimport {clamp} from 'lodash-es'\n\nconst minimumDistanceOfArrowToEdgeOfPopover = 8\n\nexport type AbsolutePlacementBoxConstraints = {\n  minX?: number\n  maxX?: number\n  minY?: number\n  maxY?: number\n}\n\nexport type PopoverPositionerProps = {\n  target: Element | React.MutableRefObject<Element | null>\n  onClickOutside?: (e: MouseEvent) => void\n  children: () => React.ReactElement\n  onPointerOutside?: {\n    threshold: number\n    callback: (e: MouseEvent) => void\n  }\n  verticalPlacement?: 'top' | 'bottom' | 'overlay'\n  verticalGap?: number // Has no effect if verticalPlacement === 'overlay'\n  constraints?: AbsolutePlacementBoxConstraints\n}\n\nconst PopoverPositioner: React.FC<PopoverPositionerProps> = (props) => {\n  const originalElement = props.children()\n  const [ref, container] = useRefAndState<HTMLElement | SVGElement | null>(null)\n  const style: Record<string, string> = originalElement.props.style\n    ? {...originalElement.props.style}\n    : {}\n  style.position = 'absolute'\n\n  const containerRect = useBoundingClientRect(container)\n  const targetRect = useBoundingClientRect(props.target)\n  const windowSize = useWindowSize()\n  const [arrowContextValue, setArrowContextValue] = useState<\n    Record<string, string>\n  >({})\n\n  useLayoutEffect(() => {\n    if (!containerRect || !container || !targetRect) return\n\n    const gap = props.verticalGap ?? 8\n    const arrowStyle: Record<string, string> = {}\n\n    let verticalPlacement: 'bottom' | 'top' | 'overlay' =\n      props.verticalPlacement ?? 'bottom'\n    let top = 0\n    let left = 0\n    if (verticalPlacement === 'bottom') {\n      if (targetRect.bottom + containerRect.height + gap < windowSize.height) {\n        verticalPlacement = 'bottom'\n        top = targetRect.bottom + gap\n        arrowStyle.top = '0px'\n      } else if (targetRect.top > containerRect.height + gap) {\n        verticalPlacement = 'top'\n        top = targetRect.top - (containerRect.height + gap)\n        arrowStyle.bottom = '0px'\n        arrowStyle.transform = 'rotateZ(180deg)'\n      } else {\n        verticalPlacement = 'overlay'\n      }\n    } else if (verticalPlacement === 'top') {\n      if (targetRect.top > containerRect.height + gap) {\n        verticalPlacement = 'top'\n        top = targetRect.top - (containerRect.height + gap)\n        arrowStyle.bottom = '0px'\n        arrowStyle.transform = 'rotateZ(180deg)'\n      } else if (\n        targetRect.bottom + containerRect.height + gap <\n        windowSize.height\n      ) {\n        verticalPlacement = 'bottom'\n        top = targetRect.bottom + gap\n        arrowStyle.top = '0px'\n      } else {\n        verticalPlacement = 'overlay'\n      }\n    }\n\n    let arrowLeft = 0\n    if (verticalPlacement !== 'overlay') {\n      const anchorLeft = targetRect.left + targetRect.width / 2\n      if (anchorLeft < containerRect.width / 2) {\n        left = gap\n        arrowLeft = Math.max(\n          anchorLeft - gap,\n          minimumDistanceOfArrowToEdgeOfPopover,\n        )\n      } else if (anchorLeft + containerRect.width / 2 > windowSize.width) {\n        left = windowSize.width - (gap + containerRect.width)\n        arrowLeft = Math.min(\n          anchorLeft - left,\n          containerRect.width - minimumDistanceOfArrowToEdgeOfPopover,\n        )\n      } else {\n        left = anchorLeft - containerRect.width / 2\n        arrowLeft = containerRect.width / 2\n      }\n      arrowStyle.left = arrowLeft + 'px'\n    }\n\n    const {\n      minX = -Infinity,\n      maxX = Infinity,\n      minY = -Infinity,\n      maxY = Infinity,\n    } = props.constraints ?? {}\n    const pos = {\n      left: clamp(left, minX, maxX - containerRect.width),\n      top: clamp(top, minY, maxY + containerRect.height),\n    }\n\n    container.style.left = pos.left + 'px'\n    container.style.top = pos.top + 'px'\n    setArrowContextValue(arrowStyle)\n\n    if (props.onPointerOutside) {\n      return onPointerOutside(\n        container,\n        props.onPointerOutside.threshold,\n        props.onPointerOutside.callback,\n      )\n    }\n  }, [\n    containerRect,\n    container,\n    props.target,\n    targetRect,\n    windowSize,\n    props.onPointerOutside,\n  ])\n\n  useOnClickOutside(\n    [container, props.target ?? null],\n    props.onClickOutside ?? noop,\n  )\n\n  return (\n    <ArrowContext.Provider value={arrowContextValue}>\n      {cloneElement(originalElement, {ref, style})}\n    </ArrowContext.Provider>\n  )\n}\n\nexport default PopoverPositioner\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/SimplePopover.tsx",
    "content": "import React, {useContext} from 'react'\nimport BasicPopover from './BasicPopover'\nimport {mergeRefs} from 'react-merge-refs'\nimport {createPortal} from 'react-dom'\nimport {PortalContext} from 'reakit'\nimport type {PopoverPositionerProps} from './PopoverPositioner'\nimport PopoverPositioner from './PopoverPositioner'\n\ntype Props = {\n  className?: string\n  children: React.ReactNode\n  isOpen?: boolean\n} & Omit<PopoverPositionerProps, 'children'>\n\nconst SimplePopover = React.forwardRef<{}, Props>((props, ref) => {\n  const portalLayer = useContext(PortalContext)\n\n  if (!portalLayer) {\n    return <></>\n  }\n\n  return props.isOpen !== false ? (\n    createPortal(\n      <PopoverPositioner\n        children={() => <BasicPopover ref={mergeRefs([ref])} {...props} />}\n        target={props.target}\n        onClickOutside={props.onClickOutside}\n        onPointerOutside={props.onPointerOutside}\n        constraints={props.constraints}\n        verticalGap={props.verticalGap}\n      />,\n      portalLayer!,\n    )\n  ) : (\n    <></>\n  )\n})\n\nexport default SimplePopover\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/TooltipContext.tsx",
    "content": "import {Atom} from '@theatre/dataverse'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {useCallback, useEffect, useMemo} from 'react'\n\nlet lastTooltipId = 0\n\nexport const useTooltipOpenState = (): [\n  isOpen: boolean,\n  setIsOpen: (isOpen: boolean, delay: number) => void,\n] => {\n  const id = useMemo(() => lastTooltipId++, [])\n  const [isOpenRef, isOpen] = useRefAndState<boolean>(false)\n\n  const setIsOpen = useCallback((shouldOpen: boolean, delay: number) => {\n    setCurrentTooltipId(shouldOpen ? id : -1, delay)\n  }, [])\n\n  useEffect(() => {\n    return currentTooltip.onStale(() => {\n      const flag = currentTooltip.getValue() === id\n\n      if (isOpenRef.current !== flag) isOpenRef.current = flag\n    })\n  }, [currentTooltip, id])\n\n  return [isOpen, setIsOpen]\n}\n\nconst currentTooltipId = new Atom(-1)\nlet lastTimeout: NodeJS.Timeout | undefined = undefined\nconst setCurrentTooltipId = (id: number, delay: number) => {\n  const overridingPreviousTimeout = lastTimeout !== undefined\n  if (lastTimeout !== undefined) {\n    clearTimeout(lastTimeout)\n    lastTimeout = undefined\n  }\n  if (delay === 0 || overridingPreviousTimeout) {\n    currentTooltipId.set(id)\n  } else {\n    lastTimeout = setTimeout(() => {\n      currentTooltipId.set(id)\n      lastTimeout = undefined\n    }, delay)\n  }\n}\n\nconst currentTooltip = currentTooltipId.prism\n\nexport const closeAllTooltips = () => {\n  setCurrentTooltipId(-1, 0)\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/TooltipWithIcon.tsx",
    "content": "import styled from 'styled-components'\nimport React from 'react'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport BasicTooltip from './BasicTooltip'\n\nconst Container = styled(BasicTooltip)`\n  display: flex;\n  align-items: center;\n  height: 30px;\n  position: relative;\n`\n\nconst Title = styled.div`\n  text-wrap: nowrap;\n`\n\nconst IconContainer = styled.div`\n  background: #59595938;\n  border-radius: 4px;\n  border: 0.5px solid #ffffff1a;\n  color: white;\n  padding: 4px;\n  font-size: 10px;\n  /* margin: 0; */\n  margin-left: 12px;\n  box-shadow: black 0px 2px 8px -4px;\n  flex-wrap: nowrap;\n`\n\nconst TooltipWithIcon: React.FC<{\n  className?: string\n  children: React.ReactNode\n  icon: React.ReactNode\n}> = React.forwardRef(({children, icon, className}, ref) => {\n  return (\n    <Container className={className} ref={ref as $IntentionalAny}>\n      <Title>{children}</Title>\n      <IconContainer>{icon}</IconContainer>\n    </Container>\n  )\n})\n\nexport default TooltipWithIcon\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/usePopover.tsx",
    "content": "import {usePointerCapturing} from '@theatre/studio/UIRoot/PointerCapturing'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport React, {useCallback, useContext, useEffect, useRef} from 'react'\nimport {createPortal} from 'react-dom'\nimport {PortalContext} from 'reakit'\nimport type {AbsolutePlacementBoxConstraints} from './PopoverPositioner'\nimport PopoverPositioner from './PopoverPositioner'\nimport {contextMenuShownContext} from '@theatre/studio/panels/DetailPanel/DetailPanel'\n\nexport type OpenFn = (\n  e:\n    | React.MouseEvent\n    | MouseEvent\n    | {clientX: number; clientY: number}\n    | undefined,\n  target: HTMLElement | SVGElement | Element,\n) => void\ntype CloseFn = (reason: string) => void\ntype State =\n  | {isOpen: false}\n  | {\n      isOpen: true\n      clickPoint: {\n        clientX: number\n        clientY: number\n      }\n      target: HTMLElement | SVGElement | Element\n      opts: Opts\n      onPointerOutside?: {\n        threshold: number\n        callback: (e: MouseEvent) => void\n      }\n      onClickOutside: () => void\n    }\n\nconst PopoverAutoCloseLock = React.createContext({\n  // defaults have no effects, since there would not be a\n  // parent popover to worry about auto-closing.\n  takeFocus() {\n    return {\n      releaseFocus() {},\n    }\n  },\n})\n\ntype Opts = {\n  debugName: string\n  closeWhenPointerIsDistant?: boolean\n  pointerDistanceThreshold?: number\n  closeOnClickOutside?: boolean\n  constraints?: AbsolutePlacementBoxConstraints\n  verticalGap?: number\n}\n\nexport interface IPopover {\n  /**\n   * The React node of the popover. Insert into your JSX using \\{node\\}. Its state\n   * will be managed automatically.\n   */\n  node: React.ReactNode\n  open: OpenFn\n  close: CloseFn\n  toggle: OpenFn\n  isOpen: boolean\n}\n\n/**\n * @deprecated Use useChordial() instead.\n */\nexport default function usePopover(\n  opts: Opts | (() => Opts),\n  render: () => React.ReactElement,\n): IPopover {\n  const _debug = (...args: any) => {}\n\n  // want to make sure that we don't close a popover when dragging something (like a curve editor handle)\n  // I think this could be improved to handle closing after done dragging, better.\n  const {isPointerBeingCaptured} = usePointerCapturing(`usePopover`)\n\n  const [stateRef, state] = useRefAndState<State>({\n    isOpen: false,\n  })\n\n  const optsRef = useRef(opts)\n\n  const close = useCallback<CloseFn>((reason: string): void => {\n    _debug(`closing due to \"${reason}\"`)\n    stateRef.current = {isOpen: false}\n  }, [])\n\n  const open = useCallback<OpenFn>((e, target) => {\n    const opts =\n      typeof optsRef.current === 'function'\n        ? optsRef.current()\n        : optsRef.current\n\n    function onClickOutside(): void {\n      if (lock.childHasFocusRef.current) return\n      if (opts.closeOnClickOutside !== false) {\n        close('clicked outside popover')\n      }\n    }\n\n    stateRef.current = {\n      isOpen: true,\n      clickPoint: {clientX: e?.clientX ?? 0, clientY: e?.clientY ?? 0},\n      target,\n      opts,\n      onClickOutside: onClickOutside,\n      onPointerOutside:\n        opts.closeWhenPointerIsDistant === false\n          ? undefined\n          : {\n              threshold: opts.pointerDistanceThreshold ?? 100,\n              callback: () => {\n                if (lock.childHasFocusRef.current) return\n                // this is a bit weird, because when you stop capturing, then the popover can close on you...\n                // TODO: Better fixes?\n                if (isPointerBeingCaptured()) return\n                close('pointer outside')\n              },\n            },\n    }\n  }, [])\n\n  const toggle = useCallback<OpenFn>((...args) => {\n    if (stateRef.current.isOpen) {\n      close('toggled')\n    } else {\n      open(...args)\n    }\n  }, [])\n\n  /**\n   * See doc comment on {@link useAutoCloseLockState}.\n   * Used to ensure that moving far away from a parent popover doesn't\n   * close a child popover.\n   */\n  const lock = useAutoCloseLockState({\n    _debug,\n    state,\n  })\n\n  // TODO: this lock is now exported from the detail panel, do refactor it when you get the chance\n  const [, addContextMenu] = useContext(contextMenuShownContext)\n\n  useEffect(() => {\n    let removeContextMenu: () => void | undefined\n    if (state.isOpen) {\n      removeContextMenu = addContextMenu()\n    }\n\n    return () => removeContextMenu?.()\n  }, [state.isOpen])\n\n  const portalLayer = useContext(PortalContext)\n\n  const node = state.isOpen ? (\n    createPortal(\n      <PopoverAutoCloseLock.Provider value={lock.childPopoverLock}>\n        <PopoverPositioner\n          children={render}\n          target={state.target}\n          onClickOutside={state.onClickOutside}\n          onPointerOutside={state.onPointerOutside}\n          constraints={state.opts.constraints}\n          verticalGap={state.opts.verticalGap}\n        />\n      </PopoverAutoCloseLock.Provider>,\n      portalLayer!,\n    )\n  ) : (\n    <></>\n  )\n\n  return {node, open, close, toggle, isOpen: state.isOpen}\n}\n\n/**\n * Keep track of the current lock state, and provide\n * a lock that can be passed down to popover children.\n *\n * Used to ensure that moving far away from a parent popover doesn't\n * close a child popover.\n * When child popovers are opened, we want to suspend all auto-closing\n * behaviors for parenting popovers.\n */\nfunction useAutoCloseLockState(options: {\n  state: {isOpen: boolean}\n  _debug: (message: string, args?: object) => void\n}) {\n  const parentLock = useContext(PopoverAutoCloseLock)\n\n  useEffect(() => {\n    if (options.state.isOpen) {\n      // when this \"popover\" is open, then take focus from parent\n      const focused = parentLock.takeFocus()\n      options._debug('take focus')\n      return () => {\n        // when closed / unmounted, release focus\n        options._debug('release focus')\n        focused.releaseFocus()\n      }\n    }\n  }, [options.state.isOpen])\n\n  // child of us\n  const childHasFocusRef = useRef(false)\n  return {\n    childHasFocusRef: childHasFocusRef,\n    childPopoverLock: {\n      takeFocus() {\n        childHasFocusRef.current = true\n        return {\n          releaseFocus() {\n            childHasFocusRef.current = false\n          },\n        }\n      },\n    },\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/usePopoverPosition.ts",
    "content": "import type React from 'react'\nimport {useLayoutEffect, useState} from 'react'\nimport useWindowSize from 'react-use/esm/useWindowSize'\nimport useBoundingClientRect from '@theatre/studio/uiComponents/useBoundingClientRect'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport {clamp} from 'lodash-es'\n\nconst minimumDistanceOfArrowToEdgeOfPopover = 8\n\ntype AbsolutePlacementBoxConstraints = {\n  minX?: number\n  maxX?: number\n  minY?: number\n  maxY?: number\n}\n\nconst usePopoverPosition = (props: {\n  target: HTMLElement | SVGElement | Element | null | undefined\n  verticalPlacement?: 'top' | 'bottom' | 'overlay'\n  verticalGap?: number // Has no effect if verticalPlacement === 'overlay'\n  constraints?: AbsolutePlacementBoxConstraints\n}): [\n  containerRef: React.MutableRefObject<HTMLElement | SVGElement | null>,\n  position: undefined | {top: number; left: number},\n] => {\n  const [containerRef, container] = useRefAndState<\n    HTMLElement | SVGElement | null\n  >(null)\n\n  const containerRect = useBoundingClientRect(container)\n  const targetRect = useBoundingClientRect(props.target)\n  const windowSize = useWindowSize()\n  const [arrowContextValue, setArrowContextValue] = useState<\n    Record<string, string>\n  >({})\n\n  const [positionRef, position] = useRefAndState<\n    undefined | {left: number; top: number}\n  >(undefined)\n\n  useLayoutEffect(() => {\n    if (!containerRect || !targetRect) {\n      positionRef.current = undefined\n      return\n    }\n\n    const gap = props.verticalGap ?? 8\n    const arrowStyle: Record<string, string> = {}\n\n    let verticalPlacement: 'bottom' | 'top' | 'overlay' =\n      props.verticalPlacement ?? 'bottom'\n    let top = 0\n    let left = 0\n    if (verticalPlacement === 'bottom') {\n      if (targetRect.bottom + containerRect.height + gap < windowSize.height) {\n        verticalPlacement = 'bottom'\n        top = targetRect.bottom + gap\n        arrowStyle.top = '0px'\n      } else if (targetRect.top > containerRect.height + gap) {\n        verticalPlacement = 'top'\n        top = targetRect.top - (containerRect.height + gap)\n        arrowStyle.bottom = '0px'\n        arrowStyle.transform = 'rotateZ(180deg)'\n      } else {\n        verticalPlacement = 'overlay'\n      }\n    } else if (verticalPlacement === 'top') {\n      if (targetRect.top > containerRect.height + gap) {\n        verticalPlacement = 'top'\n        top = targetRect.top - (containerRect.height + gap)\n        arrowStyle.bottom = '0px'\n        arrowStyle.transform = 'rotateZ(180deg)'\n      } else if (\n        targetRect.bottom + containerRect.height + gap <\n        windowSize.height\n      ) {\n        verticalPlacement = 'bottom'\n        top = targetRect.bottom + gap\n        arrowStyle.top = '0px'\n      } else {\n        verticalPlacement = 'overlay'\n      }\n    }\n\n    let arrowLeft = 0\n    if (verticalPlacement !== 'overlay') {\n      const anchorLeft = targetRect.left + targetRect.width / 2\n      if (anchorLeft < containerRect.width / 2) {\n        left = gap\n        arrowLeft = Math.max(\n          anchorLeft - gap,\n          minimumDistanceOfArrowToEdgeOfPopover,\n        )\n      } else if (anchorLeft + containerRect.width / 2 > windowSize.width) {\n        left = windowSize.width - (gap + containerRect.width)\n        arrowLeft = Math.min(\n          anchorLeft - left,\n          containerRect.width - minimumDistanceOfArrowToEdgeOfPopover,\n        )\n      } else {\n        left = anchorLeft - containerRect.width / 2\n        arrowLeft = containerRect.width / 2\n      }\n      arrowStyle.left = arrowLeft + 'px'\n    }\n\n    const {\n      minX = -Infinity,\n      maxX = Infinity,\n      minY = -Infinity,\n      maxY = Infinity,\n    } = props.constraints ?? {}\n\n    const pos = {\n      left: clamp(left, minX, maxX - containerRect.width),\n      top: clamp(top, minY, maxY + containerRect.height),\n    }\n\n    positionRef.current = pos\n  }, [containerRect, props.target, targetRect, windowSize])\n\n  return [containerRef, position]\n}\n\nexport default usePopoverPosition\n"
  },
  {
    "path": "packages/studio/src/uiComponents/Popover/useTooltip.tsx",
    "content": "import useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport type {MutableRefObject} from 'react'\nimport {useContext} from 'react'\nimport React from 'react'\nimport PopoverPositioner from './PopoverPositioner'\nimport {createPortal} from 'react-dom'\nimport {PortalContext} from 'reakit'\nimport noop from '@theatre/utils/noop'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport {Atom} from '@theatre/dataverse'\nimport {useCallback, useEffect, useMemo} from 'react'\n\n/**\n * Useful helper in development to prevent the tooltips from auto-closing,\n * so its easier to inspect the DOM / change the styles, etc.\n *\n * Call window.$disableAutoCloseTooltip() in the console to disable auto-close\n */\nconst shouldAutoCloseByDefault =\n  process.env.NODE_ENV === 'development'\n    ? (): boolean =>\n        (window as $IntentionalAny).__disableAutoCloseTooltip ?? true\n    : (): boolean => true\n\nif (process.env.NODE_ENV === 'development') {\n  ;(window as $IntentionalAny).$disableAutoCloseTooltip = () => {\n    ;(window as $IntentionalAny).__disableAutoCloseTooltip = false\n  }\n}\n\nexport default function useTooltip<T extends HTMLElement>(\n  opts: {\n    enabled?: boolean\n    enterDelay?: number\n    exitDelay?: number\n    verticalPlacement?: 'top' | 'bottom' | 'overlay'\n    verticalGap?: number\n  },\n  render: () => React.ReactElement,\n): [\n  node: React.ReactNode,\n  targetRef: MutableRefObject<T | null>,\n  isOpen: boolean,\n] {\n  const enabled = opts.enabled !== false\n  const [isOpen, setIsOpen] = useTooltipOpenState()\n\n  const [targetRef, targetNode] = useRefAndState<T | null>(null)\n\n  useEffect(() => {\n    if (!enabled) {\n      return\n    }\n\n    const target = targetNode\n    if (!target) return\n\n    const onMouseEnter = () => setIsOpen(true, opts.enterDelay ?? 800)\n    const onMouseLeave = () => {\n      if (shouldAutoCloseByDefault()) setIsOpen(false, opts.exitDelay ?? 200)\n    }\n\n    target.addEventListener('mouseenter', onMouseEnter)\n    target.addEventListener('mouseleave', onMouseLeave)\n\n    return () => {\n      target.removeEventListener('mouseenter', onMouseEnter)\n      target.removeEventListener('mouseleave', onMouseLeave)\n    }\n  }, [targetNode, enabled, opts.enterDelay, opts.exitDelay])\n\n  const portalLayer = useContext(PortalContext)\n\n  const node =\n    enabled && isOpen && targetNode ? (\n      createPortal(\n        <PopoverPositioner\n          children={render}\n          target={targetNode}\n          onClickOutside={noop}\n          verticalPlacement={opts.verticalPlacement}\n          verticalGap={opts.verticalGap}\n        />,\n        portalLayer!,\n      )\n    ) : (\n      <></>\n    )\n\n  return [node, targetRef, isOpen]\n}\n\nlet lastTooltipId = 0\n\nexport const useTooltipOpenState = (): [\n  isOpen: boolean,\n  setIsOpen: (isOpen: boolean, delay: number) => void,\n] => {\n  const id = useMemo(() => lastTooltipId++, [])\n  const [isOpenRef, isOpen] = useRefAndState<boolean>(false)\n\n  const setIsOpen = useCallback((shouldOpen: boolean, delay: number) => {\n    setCurrentTooltipId(shouldOpen ? id : -1, delay)\n  }, [])\n\n  useEffect(() => {\n    return currentTooltip.onStale(() => {\n      const flag = currentTooltip.getValue() === id\n\n      if (isOpenRef.current !== flag) isOpenRef.current = flag\n    })\n  }, [currentTooltip, id])\n\n  return [isOpen, setIsOpen]\n}\n\nconst currentTooltipId = new Atom(-1)\nlet lastTimeout: NodeJS.Timeout | undefined = undefined\nconst setCurrentTooltipId = (id: number, delay: number) => {\n  const overridingPreviousTimeout = lastTimeout !== undefined\n  if (lastTimeout !== undefined) {\n    clearTimeout(lastTimeout)\n    lastTimeout = undefined\n  }\n  if (delay === 0 || overridingPreviousTimeout) {\n    currentTooltipId.set(id)\n  } else {\n    lastTimeout = setTimeout(() => {\n      currentTooltipId.set(id)\n      lastTimeout = undefined\n    }, delay)\n  }\n}\n\nconst currentTooltip = currentTooltipId.prism\n\nexport const closeAllTooltips = () => {\n  setCurrentTooltipId(-1, 0)\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/RoomToClick.tsx",
    "content": "import React from 'react'\nimport styled from 'styled-components'\n\nconst Container = styled.div<{room: number}>`\n  position: absolute;\n  inset: ${(props) => props.room * -1}px;\n`\n\nconst RoomToClick: React.FC<{room: number}> = (props) => {\n  return <Container room={props.room} />\n}\n\nexport default RoomToClick\n"
  },
  {
    "path": "packages/studio/src/uiComponents/SVGIcon.tsx",
    "content": "import React from 'react'\nimport styled, {css} from 'styled-components'\n\nconst Container = styled.div<{sizing: Sizing}>`\n  width: ${(props) => (props.sizing === 'em' ? '1em' : '100%')};\n  ${(props) =>\n    props.sizing === 'absoluteFill' &&\n    css`\n      & > svg {\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n      }\n    `}\n`\n\ntype Sizing = 'em' | 'fill' | 'none' | 'absoluteFill'\n\nconst SvgIcon: React.FC<{\n  src: string\n  sizing?: Sizing\n}> = (props) => {\n  return (\n    <Container\n      sizing={props.sizing || 'em'}\n      dangerouslySetInnerHTML={{__html: props.src}}\n    />\n  )\n}\n\nexport default SvgIcon\n"
  },
  {
    "path": "packages/studio/src/uiComponents/ShowMousePosition.tsx",
    "content": "import mousePositionD from '@theatre/studio/utils/mousePositionD'\nimport {usePrism} from '@theatre/react'\nimport {val} from '@theatre/dataverse'\nimport React from 'react'\nimport {createPortal} from 'react-dom'\n\nconst ShowMousePosition: React.FC<{}> = (props) => {\n  const pos = usePrism(\n    () => val(mousePositionD) ?? {clientX: 0, clientY: 0},\n    [],\n  )\n  return createPortal(\n    <>\n      <div\n        style={{\n          position: 'fixed',\n          top: '0',\n          bottom: '0',\n          width: '1px',\n          background: 'rgba(255, 255, 255, 0.2)',\n          pointerEvents: 'none',\n          zIndex: 9999,\n          left: `${pos.clientX}px`,\n        }}\n      />\n      <div\n        style={{\n          position: 'fixed',\n          left: '0',\n          right: '0',\n          height: '1px',\n          background: 'rgba(255, 255, 255, 0.2)',\n          pointerEvents: 'none',\n          zIndex: 9999,\n          top: `${pos.clientY}px`,\n        }}\n      />\n    </>,\n    document.body,\n  )\n}\n\nexport default ShowMousePosition\n"
  },
  {
    "path": "packages/studio/src/uiComponents/chordial/ChordialOverlay.tsx",
    "content": "import React, {useContext} from 'react'\nimport {TooltipOverlay} from './TooltipOverlay'\nimport {ContextOverlay} from './ContextOverlay'\nimport {createPortal} from 'react-dom'\nimport {PortalContext} from 'reakit'\nimport {PopoverOverlay} from './PopoverOverlay'\n\nexport const ChordialOverlay = () => {\n  const portalLayer = useContext(PortalContext)\n\n  if (!portalLayer) return null\n\n  return createPortal(\n    <>\n      <TooltipOverlay />\n      <ContextOverlay />\n      <PopoverOverlay />\n    </>,\n    portalLayer,\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/chordial/ContextOverlay.tsx",
    "content": "import React from 'react'\nimport {usePrism, useVal} from '@theatre/react'\nimport type {ChodrialElement, ChordialOpts} from './chordialInternals'\nimport {contextActor, contextStatus} from './contextActor'\nimport ContextMenu from '@theatre/studio/uiComponents/simpleContextMenu/ContextMenu/ContextMenu'\nimport {val} from '@theatre/dataverse'\n\nexport const ContextOverlay: React.FC<{}> = () => {\n  const currentStatus = useVal(contextStatus)\n\n  const s = usePrism(():\n    | undefined\n    | {\n        originalMoseEvent: MouseEvent\n        opts: ChordialOpts\n        element: ChodrialElement\n      } => {\n    const status = val(contextStatus)\n    if (!status) return undefined\n    const optsFn = val(status.element.atom.pointer.optsFn)\n    const opts = optsFn()\n    return {\n      opts,\n      originalMoseEvent: status.originalMouseEvent,\n      element: status.element,\n    }\n  }, [])\n\n  if (!s) return null\n\n  return (\n    <ContextMenu\n      items={s.opts.items}\n      displayName={s.opts.menuTitle ?? s.opts.title}\n      clickPoint={s.originalMoseEvent}\n      onRequestClose={() => {\n        contextActor.send({type: 'requestClose', element: s.element})\n      }}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/chordial/PopoverOverlay.tsx",
    "content": "import React from 'react'\nimport {usePrism} from '@theatre/react'\nimport type {ChodrialElement, InvokeTypePopover} from './chordialInternals'\nimport {val} from '@theatre/dataverse'\nimport {popoverActor} from './popoverActor'\nimport PopoverPositioner from '@theatre/studio/uiComponents/Popover/PopoverPositioner'\nimport {usePointerCapturing} from '@theatre/studio/UIRoot/PointerCapturing'\n\nexport const PopoverOverlay: React.FC<{}> = () => {\n  const s = usePrism(():\n    | undefined\n    | ({\n        originalTriggerEvent: MouseEvent | undefined\n        element: ChodrialElement\n        domEl: Element\n      } & InvokeTypePopover) => {\n    const status = val(popoverActor.pointer)\n    if (!status) return undefined\n\n    const domEl = status.element.target\n\n    if (!(domEl instanceof Element)) {\n      return undefined\n    }\n\n    const optsFn = val(status.element.atom.pointer.optsFn)\n    const opts = optsFn()\n    const {invoke} = opts\n    if (invoke && typeof invoke !== 'function' && invoke.type === 'popover') {\n      return {\n        ...invoke,\n        domEl,\n        originalTriggerEvent: status.originalTriggerEvent,\n        element: status.element,\n      }\n    } else {\n      return undefined\n    }\n  }, [])\n\n  const {isPointerBeingCaptured} = usePointerCapturing(`PopoverOverlay`)\n\n  if (!s) return null\n\n  const close = () => {\n    popoverActor.send({type: 'close', el: s.element})\n  }\n\n  const onPointerOutside =\n    s.closeWhenPointerIsDistant === false\n      ? undefined\n      : {\n          threshold: s.pointerDistanceThreshold ?? 100,\n          callback: () => {\n            // if (lock.childHasFocusRef.current) return\n            // this is a bit weird, because when you stop capturing, then the popover can close on you...\n            // TODO: Better fixes?\n            if (isPointerBeingCaptured()) return\n            close()\n          },\n        }\n\n  return (\n    <PopoverPositioner\n      children={() => s.render({close})}\n      target={s.domEl}\n      onClickOutside={close}\n      onPointerOutside={onPointerOutside}\n      constraints={s.constraints}\n      verticalGap={s.verticalGap}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/chordial/TooltipOverlay.tsx",
    "content": "import React from 'react'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport {val} from '@theatre/dataverse'\nimport {usePrism, useVal} from '@theatre/react'\nimport styled from 'styled-components'\nimport usePopoverPosition from '@theatre/studio/uiComponents/Popover/usePopoverPosition'\nimport {useTransition, animated, easings} from '@react-spring/web'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport {tooltipTarget} from './tooltipActor'\n\nexport const TooltipOverlay: React.FC<{}> = () => {\n  const currentTarget = useVal(tooltipTarget)\n\n  const tooltipDisabled =\n    useVal(currentTarget?.atom.pointer.tooltipDisabled) ?? false\n\n  const title = usePrism((): React.ReactNode => {\n    const chordial = currentTarget\n    if (!chordial) return null\n    const a = chordial.atom\n    const optsFn = val(a.pointer.optsFn)\n    const opts = optsFn()\n    return opts.title\n  }, [currentTarget])\n\n  const [popoverContainerRef, positioning] = usePopoverPosition({\n    target: currentTarget?.target,\n  })\n\n  const data: Array<{\n    key: string\n    title: React.ReactNode\n    positioning: {left: number; top: number}\n  }> = []\n\n  const chordial = currentTarget\n  if (chordial && positioning && !tooltipDisabled) {\n    data.push({\n      key: chordial.id,\n      title,\n      positioning,\n    })\n  }\n\n  const transitions = useTransition(data, {\n    from: {\n      opacity: 0.5,\n      transform: `translateY(0px) perspective(200px) scale(0.95) rotateX(-45deg) `,\n    },\n    enter: {\n      opacity: 1,\n      transform: `translateY(0px) perspective(200px) scale(1) rotateX(0deg) `,\n    },\n    leave: {\n      opacity: 0,\n      transform: `translateY(0px) perspective(200px) scale(0.9) rotateX(-10deg) `,\n    },\n    keys: (item) => item.key,\n    config: (item, index, phase) => (key) => {\n      return {\n        // velocity: phase === 'leave' ? 0.5 : 6,\n        duration: phase === 'leave' ? 33 * 3 : 33 * 4,\n        easing: easings.easeOutCubic,\n      }\n    },\n  })\n\n  return (\n    <>\n      {title && (\n        <Container\n          ref={popoverContainerRef as React.MutableRefObject<$IntentionalAny>}\n          style={{opacity: 0}}\n        >\n          <Title>{title}</Title>\n          <IconContainer>{theIcon}</IconContainer>\n        </Container>\n      )}\n\n      {transitions((style, item) => {\n        return (\n          <Container\n            style={{\n              ...style,\n              left: item.positioning.left + 'px',\n              top: item.positioning.top + 'px',\n              willChange: 'transform, opacity',\n            }}\n          >\n            <Title>{item.title}</Title>\n            <IconContainer>{theIcon}</IconContainer>\n          </Container>\n        )\n      })}\n    </>\n  )\n}\n\nconst theIcon = (\n  <svg\n    stroke=\"currentColor\"\n    fill=\"currentColor\"\n    strokeWidth=\"2\"\n    viewBox=\"0 0 24 24\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    height=\"0.8em\"\n    width=\"0.8em\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"m4 4 7.07 17 2.51-7.39L21 11.07z\"></path>\n  </svg>\n)\n\nconst Container = styled(animated.div)`\n  display: flex;\n  align-items: center;\n  height: 30px;\n  position: relative;\n  position: absolute;\n  transform-origin: top center;\n\n  cursor: default;\n  ${pointerEventsAutoInNormalMode};\n\n  color: white;\n  box-sizing: border-box;\n\n  border-radius: 4px;\n  box-shadow: rgb(0 0 0 / 25%) 0px 2px 4px;\n  backdrop-filter: blur(8px) saturate(300%) contrast(65%) brightness(55%);\n  background-color: rgb(45 46 66 / 50%);\n  border: 0.5px solid rgb(86 100 110 / 46%);\n  z-index: 10000;\n  padding: 8px 8px;\n  font-size: 10px;\n\n  z-index: 10000;\n\n  & a {\n    color: inherit;\n  }\n\n  max-width: 240px;\n  padding: 8px;\n  pointer-events: none !important;\n`\n\nconst Title = styled.div`\n  text-wrap: nowrap;\n`\n\nconst IconContainer = styled.div`\n  background: #59595938;\n  border-radius: 4px;\n  border: 0.5px solid #ffffff1a;\n  color: white;\n  padding: 4px;\n  font-size: 10px;\n  /* margin: 0; */\n  margin-left: 12px;\n  box-shadow: black 0px 2px 8px -4px;\n  flex-wrap: nowrap;\n`\n"
  },
  {
    "path": "packages/studio/src/uiComponents/chordial/chordialInternals.ts",
    "content": "import {Atom} from '@theatre/dataverse'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport {useEffect, type ElementType, type MutableRefObject} from 'react'\nimport type {DragOpts} from '@theatre/studio/uiComponents/useDrag'\nimport type React from 'react'\nimport type {AbsolutePlacementBoxConstraints} from '@theatre/studio/uiComponents/Popover/PopoverPositioner'\n\nexport type InvokeTypePopover = {\n  type: 'popover'\n  render: (props: {close: () => void}) => React.ReactElement\n  closeWhenPointerIsDistant?: boolean\n  pointerDistanceThreshold?: number\n  closeOnClickOutside?: boolean\n  constraints?: AbsolutePlacementBoxConstraints\n  verticalGap?: number\n}\n\nexport type InvokeType =\n  | InvokeTypePopover\n  | ((\n      e:\n        | {\n            type: 'MouseEvent'\n            event: MouseEvent\n          }\n        | {\n            type: 'KeyboardEvent'\n            event: KeyboardEvent\n          }\n        | undefined,\n    ) => void)\n\nexport type ChordialOpts = {\n  // shown on the tooltip\n  title: string | React.ReactNode\n  // shown as the top item in the menu\n  menuTitle?: string | React.ReactNode\n  items: Array<ContextMenuItem>\n  invoke?: InvokeType\n  drag?: DragOpts\n}\n\nexport type ContextMenuItem =\n  | {\n      type: 'normal'\n      label: string | ElementType\n      callback?: (e: React.MouseEvent) => void\n      focus?: () => void\n      enabled?: boolean\n      key?: string\n    }\n  | {type: 'separator'}\n\nexport type ChordialOptsFn = () => ChordialOpts\n\nexport type ChodrialElement = {\n  id: string\n  returnValue: {\n    targetRef: MutableRefObject<$IntentionalAny>\n    useDisableTooltip: (disable: boolean) => void\n  }\n  target: HTMLElement | null | undefined\n  atom: Atom<{optsFn: ChordialOptsFn; tooltipDisabled: boolean}>\n}\n\nexport type MaybeChodrialEl = ChodrialElement | undefined\n\nlet lastId = 0\n\nexport function createChordialElement(optsFn: ChordialOptsFn): ChodrialElement {\n  const id = (lastId++).toString()\n  const atom = new Atom({optsFn, tooltipDisabled: false})\n  const chordialRef: ChodrialElement = {\n    id,\n    target: null,\n    atom,\n    returnValue: {\n      useDisableTooltip: (disable: boolean) => {\n        useEffect(() => {\n          atom.setByPointer((p) => p.tooltipDisabled, disable)\n          return () => atom.setByPointer((p) => p.tooltipDisabled, false)\n        }, [disable])\n      },\n      targetRef: {\n        get current() {\n          return chordialRef.target\n        },\n        set current(target: HTMLElement | null | undefined) {\n          chordialRef.target = target\n          if (!target) return\n          targetsWeakmap.set(target, chordialRef)\n        },\n      },\n    },\n  }\n\n  return chordialRef\n}\n\nexport function findChodrialByDomNode(\n  el: EventTarget | null,\n): ChodrialElement | undefined {\n  if (!(el instanceof HTMLElement)) return undefined\n\n  let current = el\n  while (current) {\n    if (targetsWeakmap.has(current)) {\n      return targetsWeakmap.get(current)\n    }\n    current = current.parentElement!\n  }\n  return undefined\n}\n\nconst targetsWeakmap = new WeakMap<HTMLElement, ChodrialElement>()\n"
  },
  {
    "path": "packages/studio/src/uiComponents/chordial/contextActor.ts",
    "content": "import {basicFSM} from '@theatre/utils/basicFSM'\nimport type {ChodrialElement} from './chordialInternals'\nimport {findChodrialByDomNode} from './chordialInternals'\nimport {prism, val} from '@theatre/dataverse'\n\nexport const contextActor = basicFSM<\n  | {type: 'rclick'; mouseEvent: MouseEvent}\n  | {type: 'requestClose'; element: ChodrialElement},\n  {element: ChodrialElement; originalMouseEvent: MouseEvent} | undefined\n>((t) => {\n  function idle() {\n    t('idle', undefined, (e) => {\n      switch (e.type) {\n        case 'rclick':\n          const chordialEl = findChodrialByDomNode(e.mouseEvent.target)\n          if (chordialEl) {\n            active(e.mouseEvent, chordialEl)\n          }\n          break\n        default:\n          break\n      }\n    })\n  }\n\n  function active(originalEvent: MouseEvent, originalEl: ChodrialElement) {\n    originalEvent.preventDefault()\n    originalEvent.stopPropagation()\n    t(\n      'active',\n      {element: originalEl, originalMouseEvent: originalEvent},\n      (e) => {\n        switch (e.type) {\n          case 'rclick':\n            const newEl = findChodrialByDomNode(e.mouseEvent.target)\n            if (!newEl) return idle()\n            active(e.mouseEvent, newEl)\n            break\n          case 'requestClose':\n            if (e.element === originalEl) {\n              idle()\n            }\n            break\n        }\n      },\n    )\n  }\n\n  idle()\n})({name: 'contextActor'})\n\nexport const contextStatus = prism(() => val(contextActor.pointer))\n"
  },
  {
    "path": "packages/studio/src/uiComponents/chordial/gestureActor.ts",
    "content": "import {basicFSM} from '@theatre/utils/basicFSM'\nimport type {DragHandlers, DragOpts} from '@theatre/studio/uiComponents/useDrag'\nimport {\n  DRAG_DETECTION_DISTANCE_THRESHOLD,\n  MouseButton,\n  didPointerLockCauseMovement,\n} from '@theatre/studio/uiComponents/useDrag'\nimport {isSafari} from '@theatre/studio/uiComponents/isSafari'\nimport type {CapturedPointer} from '@theatre/studio/UIRoot/PointerCapturing'\nimport {createPointerCapturing} from '@theatre/studio/UIRoot/PointerCapturing'\nimport type {\n  ChodrialElement,\n  ChordialOpts,\n  InvokeType,\n} from './chordialInternals'\nimport {findChodrialByDomNode} from './chordialInternals'\nimport {popoverActor} from './popoverActor'\n\nfunction handleInvoke(\n  invoke: undefined | InvokeType,\n  el: ChodrialElement,\n  mouseEvent: MouseEvent,\n) {\n  if (!invoke) return\n  if (typeof invoke === 'function') {\n    invoke({type: 'MouseEvent', event: mouseEvent})\n  } else if (invoke.type === 'popover') {\n    popoverActor.send({type: 'open', el, triggerEvent: mouseEvent})\n  }\n}\n\nexport const gestureActor = basicFSM<\n  | {type: 'mousedown'; mouseEvent: MouseEvent}\n  | {type: 'mouseup'; mouseEvent: MouseEvent}\n  | {type: 'mousemove'; mouseEvent: MouseEvent}\n  | {type: 'click'; mouseEvent: MouseEvent},\n  undefined | ChodrialElement\n>((t) => {\n  function idle() {\n    t('idle', undefined, (e) => {\n      switch (e.type) {\n        case 'click':\n          {\n            const el = findChodrialByDomNode(e.mouseEvent.target)\n            if (!el) return\n            const {invoke} = el.atom.get().optsFn()\n            handleInvoke(invoke, el, e.mouseEvent)\n          }\n          break\n        case 'mousedown':\n          {\n            const el = findChodrialByDomNode(e.mouseEvent.target)\n            if (!el) return\n            const opts = el.atom.get().optsFn()\n            const {drag} = opts\n            if (!drag || drag.disabled === true) return\n\n            // defensively release\n            // TIODO\n            // capturedPointerRef.current?.release()\n            const acceptedButtons: MouseButton[] = drag.buttons ?? [\n              MouseButton.Left,\n            ]\n\n            if (!acceptedButtons.includes(e.mouseEvent.button)) return\n\n            const dragHandlers = drag.onDragStart(e.mouseEvent)\n\n            if (dragHandlers === false) {\n              // we should ignore the gesture\n              return\n            }\n\n            // need to capture pointer after we know the provided handler wants to handle drag start\n            const capturedPointer =\n              createPointerCapturing('Drag').capturing.capturePointer(\n                'dragStart',\n              )\n\n            if (!drag.dontBlockMouseDown) {\n              e.mouseEvent.stopPropagation()\n              e.mouseEvent.preventDefault()\n            }\n\n            beforeDetected(\n              el,\n              opts,\n              drag,\n              e.mouseEvent,\n              dragHandlers,\n              0,\n              capturedPointer,\n            )\n          }\n          break\n        default:\n          break\n      }\n    })\n  }\n\n  function handleMouseup(\n    el: ChodrialElement,\n    opts: ChordialOpts,\n    dragOpts: DragOpts,\n    e: MouseEvent,\n    handlers: DragHandlers,\n    dragHappened: boolean,\n    capturedPointer?: CapturedPointer,\n  ) {\n    capturedPointer?.release()\n    if (dragOpts.shouldPointerLock && !isSafari) document.exitPointerLock()\n    handlers.onDragEnd?.(dragHappened, e)\n\n    // ensure that the window is focused after a successful drag\n    // this fixes an issue where after dragging something like the playhead\n    // through an iframe, you can immediately hit [space] and the animation\n    // will play, even if you hadn't been focusing in the iframe at the start\n    // of the drag.\n    // Fixes https://linear.app/theatre/issue/P-177/beginners-scrubbing-the-playhead-from-within-an-iframe-then-[space]\n    window.focus()\n\n    if (!dragHappened) {\n      handlers.onClick?.(e)\n      handleInvoke(opts.invoke, el, e)\n      // opts.invoke?.({type: 'MouseEvent', event: e})\n    }\n    idle()\n  }\n\n  function beforeDetected(\n    el: ChodrialElement,\n    opts: ChordialOpts,\n    dragOpts: DragOpts,\n    mousedownEvent: MouseEvent,\n    handlers: DragHandlers,\n    originalTotalDistanceMoved: number,\n    capturedPointer: CapturedPointer,\n  ) {\n    t('beforeDetected', el, (e) => {\n      switch (e.mouseEvent.type) {\n        case 'mouseup':\n          handleMouseup(\n            el,\n            opts,\n            dragOpts,\n            e.mouseEvent,\n            handlers,\n            false,\n            capturedPointer,\n          )\n\n          break\n        case 'mousemove':\n          const isPointerLockUsed = dragOpts.shouldPointerLock && !isSafari\n\n          if (\n            didPointerLockCauseMovement(e.mouseEvent, {\n              detected: false,\n            })\n          )\n            return\n\n          const totalDistanceMoved =\n            originalTotalDistanceMoved +\n            Math.abs(e.mouseEvent.movementY) +\n            Math.abs(e.mouseEvent.movementX)\n\n          if (totalDistanceMoved > DRAG_DETECTION_DISTANCE_THRESHOLD) {\n            if (isPointerLockUsed) {\n              el.target!.requestPointerLock()\n            }\n\n            const stuff = {\n              // detected: true,\n              dragMovement: {x: 0, y: 0},\n              dragEventCount: 0,\n            }\n\n            afterDetected(\n              el,\n              opts,\n              dragOpts,\n              mousedownEvent,\n              handlers,\n              totalDistanceMoved,\n              stuff.dragMovement,\n              stuff.dragEventCount,\n              capturedPointer,\n            )\n          }\n\n          break\n      }\n    })\n  }\n\n  function afterDetected(\n    el: ChodrialElement,\n    opts: ChordialOpts,\n    dragOpts: DragOpts,\n    mousedownEvent: MouseEvent,\n    handlers: DragHandlers,\n    originalTotalDistanceMoved: number,\n    originalDragMovement: {x: number; y: number},\n    dragEventCount: number,\n    capturedPointer: CapturedPointer,\n  ) {\n    t('afterDetected', el, (e) => {\n      switch (e.mouseEvent.type) {\n        case 'mouseup':\n          handleMouseup(\n            el,\n            opts,\n            dragOpts,\n            e.mouseEvent,\n            handlers,\n            true,\n            capturedPointer,\n          )\n          break\n        case 'mousemove':\n          const isPointerLockUsed = dragOpts.shouldPointerLock && !isSafari\n\n          if (\n            didPointerLockCauseMovement(e.mouseEvent, {\n              detected: true,\n              dragEventCount,\n            })\n          )\n            return\n\n          const totalDistanceMoved =\n            originalTotalDistanceMoved +\n            Math.abs(e.mouseEvent.movementY) +\n            Math.abs(e.mouseEvent.movementX)\n\n          const dragMovement = isPointerLockUsed\n            ? {\n                // when locked, the pointer event screen position is going to be 0s, since the pointer can't move.\n                // So, we use the movement on the event\n                x: originalDragMovement.x + e.mouseEvent.movementX,\n                y: originalDragMovement.y + e.mouseEvent.movementY,\n              }\n            : {\n                x: e.mouseEvent.screenX - mousedownEvent.screenX,\n                y: e.mouseEvent.screenY - mousedownEvent.screenY,\n              }\n\n          handlers.onDrag(\n            dragMovement.x,\n            dragMovement.y,\n            e.mouseEvent,\n            e.mouseEvent.movementX,\n            e.mouseEvent.movementY,\n          )\n\n          afterDetected(\n            el,\n            opts,\n            dragOpts,\n            mousedownEvent,\n            handlers,\n            totalDistanceMoved,\n            dragMovement,\n            dragEventCount + 1,\n            capturedPointer,\n          )\n\n          break\n      }\n    })\n  }\n\n  idle()\n})({name: 'gestureActor'})\n"
  },
  {
    "path": "packages/studio/src/uiComponents/chordial/hoverActor.ts",
    "content": "import {basicFSM} from '@theatre/utils/basicFSM'\nimport type {ChodrialElement} from './chordialInternals'\nimport {findChodrialByDomNode} from './chordialInternals'\n\nexport const hoverActor = basicFSM<\n  {type: 'mousemove'; mouseEvent: MouseEvent; source: 'window' | 'root'},\n  ChodrialElement | undefined\n>((transition) => {\n  function idle() {\n    transition('idle', undefined, (e) => {\n      switch (e.type) {\n        case 'mousemove':\n          if (e.source === 'window') return\n          const chordialEl = findChodrialByDomNode(e.mouseEvent.target)\n          if (!chordialEl) return\n          active(chordialEl)\n          break\n      }\n    })\n  }\n\n  function active(originalEl: ChodrialElement) {\n    const activationTime = Date.now()\n    transition('active', originalEl, (e) => {\n      switch (e.type) {\n        case 'mousemove':\n          if (e.source === 'window') {\n            if (Date.now() - activationTime > 100) {\n              idle()\n            }\n            return\n          }\n\n          const newEl = findChodrialByDomNode(e.mouseEvent.target)\n          if (newEl === originalEl) {\n            active(originalEl)\n            return\n          }\n          if (!newEl) {\n            idle()\n            return\n          }\n          active(newEl)\n          break\n      }\n    })\n  }\n\n  idle()\n})()\n"
  },
  {
    "path": "packages/studio/src/uiComponents/chordial/mousedownActor.ts",
    "content": "import {basicFSM} from '@theatre/utils/basicFSM'\n\nexport const mousedownActor = basicFSM<[isDown: boolean], boolean>((t) => {\n  function toggle(original: boolean) {\n    t('down', original, ([isDown]) => {\n      if (isDown !== original) toggle(isDown)\n    })\n  }\n\n  toggle(false)\n})({name: 'mouseDownActor'})\n"
  },
  {
    "path": "packages/studio/src/uiComponents/chordial/popoverActor.ts",
    "content": "import {basicFSM} from '@theatre/utils/basicFSM'\nimport type {ChodrialElement, InvokeTypePopover} from './chordialInternals'\nimport {prism, val} from '@theatre/dataverse'\n\nexport const popoverActor = basicFSM<\n  | {type: 'open'; el: ChodrialElement; triggerEvent: MouseEvent | undefined}\n  | {type: 'close'; el: ChodrialElement},\n  | ({\n      element: ChodrialElement\n      originalTriggerEvent: MouseEvent | undefined\n    } & InvokeTypePopover)\n  | undefined\n>((transition) => {\n  function idle() {\n    transition('idle', undefined, (e) => {\n      switch (e.type) {\n        case 'open':\n          const {el} = e\n          const {invoke} = el.atom.get().optsFn()\n          if (\n            invoke &&\n            typeof invoke !== 'function' &&\n            invoke.type === 'popover'\n          ) {\n            active(el, invoke, e.triggerEvent)\n          }\n          break\n        case 'close':\n          break\n      }\n    })\n  }\n\n  function active(\n    originalEl: ChodrialElement,\n    invoke: InvokeTypePopover,\n    triggerEvent: MouseEvent | undefined,\n  ) {\n    const activationTime = Date.now()\n    transition(\n      'active',\n      {element: originalEl, originalTriggerEvent: triggerEvent, ...invoke},\n      (e) => {\n        switch (e.type) {\n          case 'open':\n            const {el} = e\n            const {invoke} = el.atom.get().optsFn()\n            if (\n              invoke &&\n              typeof invoke !== 'function' &&\n              invoke.type === 'popover'\n            ) {\n              active(el, invoke, e.triggerEvent)\n            }\n            break\n          case 'close':\n            if (e.el === originalEl) {\n              idle()\n            }\n            break\n        }\n      },\n    )\n  }\n\n  idle()\n})()\n\nexport const popoverStatus = prism(() => val(popoverActor.pointer))\n"
  },
  {
    "path": "packages/studio/src/uiComponents/chordial/tooltipActor.ts",
    "content": "import {basicFSM} from '@theatre/utils/basicFSM'\nimport type {MaybeChodrialEl, ChodrialElement} from './chordialInternals'\nimport {prism, val} from '@theatre/dataverse'\nimport {contextActor} from './contextActor'\nimport {hoverActor} from './hoverActor'\nimport {mousedownActor} from './mousedownActor'\n\n/**\n * A state machine that determines which Chordial target should have a tooltip shown.\n */\nexport const tooltipActor = basicFSM<\n  | {type: 'hoverTargetChange'; element: MaybeChodrialEl}\n  // emitted when the mouse button is down, or some other gesture is active so that the tooltip must not be shown\n  | {type: 'tooltipBlocked'}\n  | {type: 'tooltipUnblocked'},\n  MaybeChodrialEl\n>((transition) => {\n  function tooltipBlocked() {\n    transition('tooltipBlocked', undefined, (e) => {\n      switch (e.type) {\n        case 'tooltipUnblocked':\n          idle()\n          break\n        default:\n          return\n      }\n    })\n  }\n\n  const wrap = (\n    stateName: string,\n    context: MaybeChodrialEl,\n    take: (newHover: MaybeChodrialEl) => void,\n  ): {isActive: boolean} => {\n    const status = {isActive: true}\n    transition(stateName, context, (e) => {\n      switch (e.type) {\n        case 'tooltipBlocked':\n          status.isActive = false\n          tooltipBlocked()\n          break\n        case 'hoverTargetChange':\n          take(e.element)\n          break\n        default:\n          // ?\n          break\n      }\n    })\n    return status\n  }\n\n  function idle() {\n    wrap('idle', undefined, (newHover: MaybeChodrialEl) => {\n      if (!newHover) return\n      waitingForActive(newHover)\n    })\n  }\n\n  // a 1s timeout before showing the tooltip\n  function waitingForActive(originalHover: ChodrialElement) {\n    const timeout = setTimeout(() => {\n      if (status.isActive) active(originalHover)\n    }, 1200)\n\n    const status = wrap('waitingForActive', undefined, (newHover) => {\n      clearTimeout(timeout)\n      if (newHover) {\n        waitingForActive(newHover)\n      } else {\n        idle()\n      }\n    })\n  }\n\n  function active(currentHover: ChodrialElement) {\n    wrap('active', currentHover, (newHover) => {\n      if (newHover) {\n        active(newHover)\n      } else {\n        waitingForIdle(currentHover)\n      }\n    })\n  }\n\n  function waitingForIdle(currentHover: ChodrialElement) {\n    const timeout = setTimeout(() => {\n      if (status.isActive) waitingForRevive()\n    }, 200)\n    const status = wrap('waitingForIdle', currentHover, (newHover) => {\n      if (!newHover) return\n      clearTimeout(timeout)\n      active(newHover)\n    })\n  }\n\n  function waitingForRevive() {\n    const timeout = setTimeout(() => {\n      if (status.isActive) idle()\n    }, 300)\n\n    const status = wrap('waitingForRevive', undefined, (newHover) => {\n      if (!newHover) return\n      clearTimeout(timeout)\n      active(newHover)\n    })\n  }\n\n  idle()\n})({name: 'tooltipActor'})\n\nconst isTooltipBlocked = prism(() => {\n  const isContextMenuOpen = !!val(contextActor.pointer)\n  const isMouseDown = val(mousedownActor.pointer)\n\n  return isContextMenuOpen || isMouseDown\n})\nisTooltipBlocked.onStale(() => {\n  tooltipActor.send({\n    type: val(isTooltipBlocked) ? 'tooltipBlocked' : 'tooltipUnblocked',\n  })\n})\n\nconst activeHoverTarget = prism(() => val(hoverActor.pointer))\n\nactiveHoverTarget.onStale(() => {\n  tooltipActor.send({\n    type: 'hoverTargetChange',\n    element: activeHoverTarget.getValue(),\n  })\n})\n\nexport const tooltipTarget = prism(() => val(tooltipActor.pointer))\n"
  },
  {
    "path": "packages/studio/src/uiComponents/chordial/useChodrial.tsx",
    "content": "import {useEffect, useRef} from 'react'\nimport type React from 'react'\nimport type {ChordialOptsFn, ChodrialElement} from './chordialInternals'\nimport {createChordialElement, findChodrialByDomNode} from './chordialInternals'\nimport {hoverActor} from './hoverActor'\nimport {contextActor} from './contextActor'\nimport {gestureActor} from './gestureActor'\nimport {mousedownActor} from './mousedownActor'\n\nexport default function useChordial(\n  optsFn: ChordialOptsFn,\n): ChodrialElement['returnValue'] {\n  const refs = useRef<ChodrialElement | undefined>()\n\n  if (!refs.current) {\n    refs.current = createChordialElement(optsFn)\n  }\n\n  refs.current.atom.setByPointer((p) => p.optsFn, optsFn)\n\n  return refs.current.returnValue\n}\n\nexport const useChordialCaptureEvents =\n  (): React.MutableRefObject<HTMLElement | null> => {\n    const ref = useRef<HTMLElement | null>(null)\n\n    useEffect(() => {\n      const root = ref.current!\n      if (!root) return\n\n      window.addEventListener('mousemove', eventHandlers.windowMouseMove)\n      root.addEventListener('contextmenu', eventHandlers.contextMenu)\n      root.addEventListener('mousemove', eventHandlers.mouseMove)\n      root.addEventListener('mousedown', eventHandlers.mouseDown)\n      root.addEventListener('mouseup', eventHandlers.mouseUp)\n      root.addEventListener('click', eventHandlers.click)\n\n      return () => {\n        root.removeEventListener('mousemove', eventHandlers.windowMouseMove)\n        root.removeEventListener('contextmenu', eventHandlers.contextMenu)\n        root.removeEventListener('mousemove', eventHandlers.mouseMove)\n        root.removeEventListener('mousedown', eventHandlers.mouseDown)\n        root.removeEventListener('mouseup', eventHandlers.mouseUp)\n        root.removeEventListener('click', eventHandlers.click)\n      }\n    }, [])\n    return ref\n  }\n\nconst eventHandlers = {\n  windowMouseMove: (mouseEvent: MouseEvent) => {\n    gestureActor.send({type: 'mousemove', mouseEvent})\n    hoverActor.send({type: 'mousemove', mouseEvent, source: 'window'})\n  },\n  mouseMove: (mouseEvent: MouseEvent) => {\n    hoverActor.send({type: 'mousemove', mouseEvent, source: 'root'})\n  },\n  mouseDown: (e: MouseEvent) => {\n    mousedownActor.send([true])\n    gestureActor.send({type: 'mousedown', mouseEvent: e})\n    const el = findChodrialByDomNode(e.target)\n    if (!el) return\n  },\n  mouseUp: (e: MouseEvent) => {\n    mousedownActor.send([false])\n    gestureActor.send({type: 'mouseup', mouseEvent: e})\n    const el = findChodrialByDomNode(e.target)\n    if (!el) return\n  },\n  click: (e: MouseEvent) => {\n    gestureActor.send({type: 'click', mouseEvent: e})\n    const el = findChodrialByDomNode(e.target)\n    if (!el) return\n  },\n  contextMenu: (e: MouseEvent) => {\n    contextActor.send({type: 'rclick', mouseEvent: e})\n  },\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/components/EditingProvider.tsx",
    "content": "import type {FC} from 'react'\nimport React, {createContext, useContext, useState} from 'react'\n\nconst editingContext = createContext<{\n  editing: boolean\n  setEditing: (editing: boolean) => void\n}>(undefined!)\n\n/**\n * Provides the current mode the color picker is in. When editing, the picker should be\n * stateful and disregard controlling props, while not editing, it should behave\n * in a controlled manner.\n */\nexport const EditingProvider: FC<{children: React.ReactNode}> = ({\n  children,\n}) => {\n  const [editing, setEditing] = useState(false)\n\n  return (\n    <editingContext.Provider\n      value={{\n        editing,\n        setEditing,\n      }}\n    >\n      {children}\n    </editingContext.Provider>\n  )\n}\n\nexport const useEditing = () => useContext(editingContext)\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/components/RgbaColorPicker.tsx",
    "content": "import React from 'react'\n\nimport {AlphaColorPicker} from './common/AlphaColorPicker'\nimport type {\n  ColorModel,\n  ColorPickerBaseProps,\n  HsvaColor,\n  RgbaColor,\n} from '@theatre/studio/uiComponents/colorPicker/types'\nimport {equalColorObjects} from '@theatre/studio/uiComponents/colorPicker/utils/compare'\nimport {\n  rgbaToHsva,\n  hsvaToRgba,\n} from '@theatre/studio/uiComponents/colorPicker/utils/convert'\nimport {EditingProvider} from './EditingProvider'\n\nconst normalizeRgba = (rgba: RgbaColor) => {\n  return {\n    r: rgba.r / 255,\n    g: rgba.g / 255,\n    b: rgba.b / 255,\n    a: rgba.a,\n  }\n}\n\nconst denormalizeRgba = (rgba: RgbaColor) => {\n  return {\n    r: rgba.r * 255,\n    g: rgba.g * 255,\n    b: rgba.b * 255,\n    a: rgba.a,\n  }\n}\n\nconst colorModel: ColorModel<RgbaColor> = {\n  defaultColor: {r: 0, g: 0, b: 0, a: 1},\n  toHsva: (rgba: RgbaColor) => rgbaToHsva(denormalizeRgba(rgba)),\n  fromHsva: (hsva: HsvaColor) => normalizeRgba(hsvaToRgba(hsva)),\n  equal: equalColorObjects,\n}\n\nexport const RgbaColorPicker = (\n  props: ColorPickerBaseProps<RgbaColor>,\n): JSX.Element => (\n  <EditingProvider>\n    <AlphaColorPicker\n      {...props}\n      permanentlySetValue={(newColor) => {\n        props.permanentlySetValue!(newColor)\n      }}\n      colorModel={colorModel}\n    />\n  </EditingProvider>\n)\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/components/common/Alpha.tsx",
    "content": "import React from 'react'\n\nimport type {Interaction} from './Interactive'\nimport {Interactive} from './Interactive'\nimport {Pointer} from './Pointer'\n\nimport {hsvaToHslaString} from '@theatre/studio/uiComponents/colorPicker/utils/convert'\nimport {clamp} from '@theatre/studio/uiComponents/colorPicker/utils/clamp'\nimport {round} from '@theatre/studio/uiComponents/colorPicker/utils/round'\nimport type {HsvaColor} from '@theatre/studio/uiComponents/colorPicker/types'\nimport styled from 'styled-components'\n\nconst Container = styled.div`\n  position: relative;\n  height: 16px;\n  border-radius: 2px;\n  // Checkerboard\n  background-color: #fff;\n  background-image: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill-opacity=\".05\"><rect x=\"8\" width=\"8\" height=\"8\"/><rect y=\"8\" width=\"8\" height=\"8\"/></svg>');\n`\n\ninterface GradientProps {\n  colorFrom: string\n  colorTo: string\n}\n\nconst Gradient = styled.div.attrs<GradientProps>(({colorFrom, colorTo}) => ({\n  style: {\n    backgroundImage: `linear-gradient(90deg, ${colorFrom}, ${colorTo})`,\n  },\n}))<GradientProps>`\n  content: '';\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  pointer-events: none;\n  border-radius: inherit;\n\n  // Improve rendering on light backgrounds\n  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05);\n`\n\nconst StyledPointer = styled(Pointer)`\n  // Checkerboard\n  background-color: #fff;\n  background-image: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill-opacity=\".05\"><rect x=\"8\" width=\"8\" height=\"8\"/><rect y=\"8\" width=\"8\" height=\"8\"/></svg>');\n`\n\ninterface Props {\n  className?: string\n  hsva: HsvaColor\n  onChange: (newAlpha: {a: number}) => void\n}\n\nexport const Alpha = ({className, hsva, onChange}: Props): JSX.Element => {\n  const handleMove = (interaction: Interaction) => {\n    onChange({a: interaction.left})\n  }\n\n  const handleKey = (offset: Interaction) => {\n    // Alpha always fit into [0, 1] range\n    onChange({a: clamp(hsva.a + offset.left)})\n  }\n\n  // We use `Object.assign` instead of the spread operator\n  // to prevent adding the polyfill (about 150 bytes gzipped)\n  const colorFrom = hsvaToHslaString(Object.assign({}, hsva, {a: 0}))\n  const colorTo = hsvaToHslaString(Object.assign({}, hsva, {a: 1}))\n\n  return (\n    <Container className={className}>\n      <Gradient colorFrom={colorFrom} colorTo={colorTo} />\n      <Interactive\n        onMove={handleMove}\n        onKey={handleKey}\n        aria-label=\"Alpha\"\n        aria-valuetext={`${round(hsva.a * 100)}%`}\n      >\n        <StyledPointer left={hsva.a} color={hsvaToHslaString(hsva)} />\n      </Interactive>\n    </Container>\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/components/common/AlphaColorPicker.tsx",
    "content": "import React, {useEffect} from 'react'\n\nimport {Hue} from './Hue'\nimport {Saturation} from './Saturation'\nimport {Alpha} from './Alpha'\n\nimport type {\n  ColorModel,\n  ColorPickerBaseProps,\n  AnyColor,\n} from '@theatre/studio/uiComponents/colorPicker/types'\nimport {useColorManipulation} from '@theatre/studio/uiComponents/colorPicker/hooks/useColorManipulation'\nimport styled from 'styled-components'\n\nconst Container = styled.div`\n  position: relative;\n  display: flex;\n  gap: 4px;\n  flex-direction: column;\n  width: 200px;\n  height: 200px;\n  user-select: none;\n  cursor: default;\n`\n\ninterface Props<T extends AnyColor> extends ColorPickerBaseProps<T> {\n  colorModel: ColorModel<T>\n}\n\nexport const AlphaColorPicker = <T extends AnyColor>({\n  className,\n  colorModel,\n  color = colorModel.defaultColor,\n  temporarilySetValue,\n  permanentlySetValue,\n  discardTemporaryValue,\n  ...rest\n}: Props<T>): JSX.Element => {\n  const [tempHsva, updateHsva] = useColorManipulation<T>(\n    colorModel,\n    color,\n    temporarilySetValue,\n    permanentlySetValue,\n  )\n\n  useEffect(() => {\n    return () => {\n      discardTemporaryValue()\n    }\n  }, [])\n\n  return (\n    <Container {...rest}>\n      <Saturation hsva={tempHsva} onChange={updateHsva} />\n      <Hue hue={tempHsva.h} onChange={updateHsva} />\n      <Alpha hsva={tempHsva} onChange={updateHsva} />\n    </Container>\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/components/common/Hue.tsx",
    "content": "import React from 'react'\n\nimport type {Interaction} from './Interactive'\nimport {Interactive} from './Interactive'\nimport {Pointer} from './Pointer'\n\nimport {hsvaToHslString} from '@theatre/studio/uiComponents/colorPicker/utils/convert'\nimport {clamp} from '@theatre/studio/uiComponents/colorPicker/utils/clamp'\nimport {round} from '@theatre/studio/uiComponents/colorPicker/utils/round'\nimport styled from 'styled-components'\n\nconst Container = styled.div`\n  position: relative;\n  height: 16px;\n  border-radius: 2px;\n\n  background: linear-gradient(\n    to right,\n    #f00 0%,\n    #ff0 17%,\n    #0f0 33%,\n    #0ff 50%,\n    #00f 67%,\n    #f0f 83%,\n    #f00 100%\n  );\n`\n\nconst StyledPointer = styled(Pointer)`\n  z-index: 2;\n`\n\ninterface Props {\n  className?: string\n  hue: number\n  onChange: (newHue: {h: number}) => void\n}\n\nconst HueBase = ({className, hue, onChange}: Props) => {\n  const handleMove = (interaction: Interaction) => {\n    onChange({h: 360 * interaction.left})\n  }\n\n  const handleKey = (offset: Interaction) => {\n    // Hue measured in degrees of the color circle ranging from 0 to 360\n    onChange({\n      h: clamp(hue + offset.left * 360, 0, 360),\n    })\n  }\n\n  return (\n    <Container className={className}>\n      <Interactive\n        onMove={handleMove}\n        onKey={handleKey}\n        aria-label=\"Hue\"\n        aria-valuetext={round(hue)}\n      >\n        <StyledPointer\n          left={hue / 360}\n          color={hsvaToHslString({h: hue, s: 100, v: 100, a: 1})}\n        />\n      </Interactive>\n    </Container>\n  )\n}\n\nexport const Hue = React.memo(HueBase)\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/components/common/Interactive.tsx",
    "content": "import React, {useRef, useMemo, useEffect} from 'react'\n\nimport {useEventCallback} from '@theatre/studio/uiComponents/colorPicker/hooks/useEventCallback'\nimport {clamp} from '@theatre/studio/uiComponents/colorPicker/utils/clamp'\nimport styled from 'styled-components'\nimport {useEditing} from '@theatre/studio/uiComponents/colorPicker/components/EditingProvider'\n\nexport interface Interaction {\n  left: number\n  top: number\n}\n\n// Check if an event was triggered by touch\nconst isTouch = (event: MouseEvent | TouchEvent): event is TouchEvent =>\n  'touches' in event\n\n// Finds a proper touch point by its identifier\nconst getTouchPoint = (touches: TouchList, touchId: null | number): Touch => {\n  for (let i = 0; i < touches.length; i++) {\n    if (touches[i].identifier === touchId) return touches[i]\n  }\n  return touches[0]\n}\n\n// Finds the proper window object to fix iframe embedding issues\nconst getParentWindow = (node?: HTMLDivElement | null): Window => {\n  return (node && node.ownerDocument.defaultView) || self\n}\n\n// Returns a relative position of the pointer inside the node's bounding box\nconst getRelativePosition = (\n  node: HTMLDivElement,\n  event: MouseEvent | TouchEvent,\n  touchId: null | number,\n): Interaction => {\n  const rect = node.getBoundingClientRect()\n\n  // Get user's pointer position from `touches` array if it's a `TouchEvent`\n  const pointer = isTouch(event)\n    ? getTouchPoint(event.touches, touchId)\n    : (event as MouseEvent)\n\n  return {\n    left: clamp(\n      (pointer.pageX - (rect.left + getParentWindow(node).pageXOffset)) /\n        rect.width,\n    ),\n    top: clamp(\n      (pointer.pageY - (rect.top + getParentWindow(node).pageYOffset)) /\n        rect.height,\n    ),\n  }\n}\n\n// Browsers introduced an intervention, making touch events passive by default.\n// This workaround removes `preventDefault` call from the touch handlers.\n// https://github.com/facebook/react/issues/19651\nconst preventDefaultMove = (event: MouseEvent | TouchEvent): void => {\n  !isTouch(event) && event.preventDefault()\n}\n\n// Prevent mobile browsers from handling mouse events (conflicting with touch ones).\n// If we detected a touch interaction before, we prefer reacting to touch events only.\nconst isInvalid = (\n  event: MouseEvent | TouchEvent,\n  hasTouch: boolean,\n): boolean => {\n  return hasTouch && !isTouch(event)\n}\n\ninterface Props {\n  onMove: (interaction: Interaction) => void\n  onKey: (offset: Interaction) => void\n  children: React.ReactNode\n}\n\nconst Container = styled.div`\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  border-radius: inherit;\n  outline: none;\n  /* Don't trigger the default scrolling behavior when the event is originating from this element */\n  touch-action: none;\n`\n\nconst InteractiveBase = ({onMove, onKey, ...rest}: Props) => {\n  const container = useRef<HTMLDivElement>(null)\n  const onMoveCallback = useEventCallback<Interaction>(onMove)\n  const onKeyCallback = useEventCallback<Interaction>(onKey)\n  const touchId = useRef<null | number>(null)\n  const hasTouch = useRef(false)\n\n  const {setEditing} = useEditing()\n\n  const [handleMoveStart, handleKeyDown, toggleDocumentEvents] = useMemo(() => {\n    const handleMoveStart = ({\n      nativeEvent,\n    }: React.MouseEvent | React.TouchEvent) => {\n      const el = container.current\n      if (!el) return\n\n      // Prevent text selection\n      preventDefaultMove(nativeEvent)\n\n      if (isInvalid(nativeEvent, hasTouch.current) || !el) return\n\n      if (isTouch(nativeEvent)) {\n        hasTouch.current = true\n        const changedTouches = nativeEvent.changedTouches || []\n        if (changedTouches.length)\n          touchId.current = changedTouches[0].identifier\n      }\n\n      el.focus()\n      setEditing(true)\n      onMoveCallback(getRelativePosition(el, nativeEvent, touchId.current))\n      toggleDocumentEvents(true)\n    }\n\n    const handleMove = (event: MouseEvent | TouchEvent) => {\n      // Prevent text selection\n      preventDefaultMove(event)\n\n      // If user moves the pointer outside the window or iframe bounds and release it there,\n      // `mouseup`/`touchend` won't be fired. In order to stop the picker from following the cursor\n      // after the user has moved the mouse/finger back to the document, we check `event.buttons`\n      // and `event.touches`. It allows us to detect that the user is just moving his pointer\n      // without pressing it down\n      // Note: we should use pointer events to fix this, since we don't have strict compatibility\n      // requirements.\n      const isDown = isTouch(event)\n        ? event.touches.length > 0\n        : event.buttons > 0\n\n      if (isDown && container.current) {\n        onMoveCallback(\n          getRelativePosition(container.current, event, touchId.current),\n        )\n      } else {\n        setEditing(false)\n        toggleDocumentEvents(false)\n      }\n    }\n\n    // Use move-end anyway (see above) so we can terminate early if we receive one\n    // instead of having to wait for the user to move the mouse, which they might not do.\n    const handleMoveEnd = (event: MouseEvent | TouchEvent) => {\n      setEditing(false)\n      toggleDocumentEvents(false)\n    }\n\n    const handleKeyDown = (event: React.KeyboardEvent) => {\n      const keyCode = event.which || event.keyCode\n\n      // Ignore all keys except arrow ones\n      if (keyCode < 37 || keyCode > 40) return\n      // Do not scroll page by arrow keys when document is focused on the element\n      event.preventDefault()\n      // Send relative offset to the parent component.\n      // We use codes (37←, 38↑, 39→, 40↓) instead of keys ('ArrowRight', 'ArrowDown', etc)\n      // to reduce the size of the library\n      onKeyCallback({\n        left: keyCode === 39 ? 0.05 : keyCode === 37 ? -0.05 : 0,\n        top: keyCode === 40 ? 0.05 : keyCode === 38 ? -0.05 : 0,\n      })\n    }\n\n    function toggleDocumentEvents(state?: boolean) {\n      const touch = hasTouch.current\n      const el = container.current\n      const parentWindow = getParentWindow(el)\n\n      // Add or remove additional pointer event listeners\n      const toggleEvent = state\n        ? parentWindow.addEventListener\n        : parentWindow.removeEventListener\n      toggleEvent(touch ? 'touchmove' : 'mousemove', handleMove)\n      toggleEvent(touch ? 'touchend' : 'mouseup', handleMoveEnd)\n    }\n\n    return [handleMoveStart, handleKeyDown, toggleDocumentEvents]\n  }, [onKeyCallback, onMoveCallback])\n\n  // Remove window event listeners before unmounting\n  useEffect(() => toggleDocumentEvents, [toggleDocumentEvents])\n\n  return (\n    <Container\n      {...rest}\n      onTouchStart={handleMoveStart}\n      onMouseDown={handleMoveStart}\n      ref={container}\n      onKeyDown={handleKeyDown}\n      tabIndex={0}\n      role=\"slider\"\n    />\n  )\n}\n\nexport const Interactive = React.memo(InteractiveBase)\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/components/common/Pointer.tsx",
    "content": "import React from 'react'\nimport styled from 'styled-components'\nimport {Interactive} from './Interactive'\n\n// Create an \"empty\" styled version, so we can reference it for contextual styling\nconst StyledInteractive = styled(Interactive)``\n\nconst Container = styled.div`\n  position: absolute;\n  z-index: 1;\n  box-sizing: border-box;\n  width: 16px;\n  height: 16px;\n  transform: translate(-50%, -50%);\n  background-color: #fff;\n  border: 1px solid #ffffff00;\n  border-radius: 2px;\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n\n  ${StyledInteractive}:focus & {\n    transform: translate(-50%, -50%) scale(1.1);\n  }\n`\n\nconst Fill = styled.div`\n  content: '';\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  pointer-events: none;\n  border-radius: inherit;\n`\n\ninterface Props {\n  className?: string\n  top?: number\n  left: number\n  color: string\n}\n\nexport const Pointer = ({\n  className,\n  color,\n  left,\n  top = 0.5,\n}: Props): JSX.Element => {\n  const style = {\n    top: `${top * 100}%`,\n    left: `${left * 100}%`,\n  }\n\n  return (\n    <Container style={style} className={className}>\n      <Fill style={{backgroundColor: color}} />\n    </Container>\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/components/common/Saturation.tsx",
    "content": "import React from 'react'\nimport type {Interaction} from './Interactive'\nimport {Interactive} from './Interactive'\nimport {Pointer} from './Pointer'\nimport type {HsvaColor} from '@theatre/studio/uiComponents/colorPicker/types'\nimport {hsvaToHslString} from '@theatre/studio/uiComponents/colorPicker/utils/convert'\nimport {clamp} from '@theatre/studio/uiComponents/colorPicker/utils/clamp'\nimport {round} from '@theatre/studio/uiComponents/colorPicker/utils/round'\nimport styled from 'styled-components'\n\nconst Container = styled.div`\n  position: relative;\n  flex-grow: 1;\n  border-color: transparent; /* Fixes https://github.com/omgovich/react-colorful/issues/139 */\n  border-bottom: 12px solid #000;\n  border-radius: 2px;\n  background-image: linear-gradient(to top, #000, rgba(0, 0, 0, 0)),\n    linear-gradient(to right, #fff, rgba(255, 255, 255, 0));\n\n  // Improve elements rendering on light backgrounds\n  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05);\n`\n\nconst StyledPointer = styled(Pointer)`\n  z-index: 3;\n`\n\ninterface Props {\n  hsva: HsvaColor\n  onChange: (newColor: {s: number; v: number}) => void\n}\n\nconst SaturationBase = ({hsva, onChange}: Props) => {\n  const handleMove = (interaction: Interaction) => {\n    onChange({\n      s: interaction.left * 100,\n      v: 100 - interaction.top * 100,\n    })\n  }\n\n  const handleKey = (offset: Interaction) => {\n    // Saturation and brightness always fit into [0, 100] range\n    onChange({\n      s: clamp(hsva.s + offset.left * 100, 0, 100),\n      v: clamp(hsva.v - offset.top * 100, 0, 100),\n    })\n  }\n\n  const containerStyle = {\n    backgroundColor: hsvaToHslString({h: hsva.h, s: 100, v: 100, a: 1}),\n  }\n\n  return (\n    <Container style={containerStyle}>\n      <Interactive\n        onMove={handleMove}\n        onKey={handleKey}\n        aria-label=\"Color\"\n        aria-valuetext={`Saturation ${round(hsva.s)}%, Brightness ${round(\n          hsva.v,\n        )}%`}\n      >\n        <StyledPointer\n          top={1 - hsva.v / 100}\n          left={hsva.s / 100}\n          color={hsvaToHslString(hsva)}\n        />\n      </Interactive>\n    </Container>\n  )\n}\n\nexport const Saturation = React.memo(SaturationBase)\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/hooks/useColorManipulation.ts",
    "content": "import {useState, useEffect, useCallback, useRef} from 'react'\nimport type {\n  ColorModel,\n  AnyColor,\n  HsvaColor,\n} from '@theatre/studio/uiComponents/colorPicker/types'\nimport {equalColorObjects} from '@theatre/studio/uiComponents/colorPicker/utils/compare'\nimport {useEventCallback} from './useEventCallback'\nimport {useEditing} from '@theatre/studio/uiComponents/colorPicker/components/EditingProvider'\n\nexport function useColorManipulation<T extends AnyColor>(\n  colorModel: ColorModel<T>,\n  color: T,\n  onTemporarilyChange: (color: T) => void,\n  onPermanentlyChange: (color: T) => void,\n): [HsvaColor, (color: Partial<HsvaColor>) => void] {\n  const {editing} = useEditing()\n  const [editingValue, setEditingValue] = useState<T>(color)\n\n  // Save onChange callbacks in refs for to avoid unnecessarily updating when parent doesn't use useCallback\n  const onTemporarilyChangeCallback = useEventCallback<T>(onTemporarilyChange)\n  const onPermanentlyChangeCallback = useEventCallback<T>(onPermanentlyChange)\n\n  // If editing, be uncontrolled, if not editing, be controlled\n  let value = editing ? editingValue : color\n\n  // No matter which color model is used (HEX, RGB(A) or HSL(A)),\n  // all internal calculations are in HSVA\n  const [hsva, updateHsva] = useState<HsvaColor>(() => colorModel.toHsva(value))\n\n  // Use refs to prevent infinite update loops. They basically serve as a more\n  // explicit hack around the rigidity of React hooks' dep lists, since we want\n  // to do all color equality checks in HSVA, without breaking the roles of hooks.\n  // We use separate refs for temporary updates and permanent updates,\n  // since they are two independent update models.\n  const tempCache = useRef({color: value, hsva})\n  const permCache = useRef({color: value, hsva})\n\n  // When entering editing mode, set the internal state of the uncontrolled mode\n  // to the last value of the controlled mode.\n  useEffect(() => {\n    if (editing) {\n      setEditingValue(tempCache.current.color)\n    }\n  }, [editing])\n\n  // Trigger `on*Change` callbacks only if an updated color is different from\n  // the  cached one; save the new color to the ref to prevent unnecessary updates.\n  useEffect(() => {\n    let newColor = colorModel.fromHsva(hsva)\n\n    if (editing) {\n      if (\n        !equalColorObjects(hsva, tempCache.current.hsva) &&\n        !colorModel.equal(newColor, tempCache.current.color)\n      ) {\n        tempCache.current = {hsva, color: newColor}\n\n        setEditingValue(newColor)\n        onTemporarilyChangeCallback(newColor)\n      }\n    } else {\n      if (\n        !equalColorObjects(hsva, permCache.current.hsva) &&\n        !colorModel.equal(newColor, permCache.current.color)\n      ) {\n        permCache.current = {hsva, color: newColor}\n        tempCache.current = {hsva, color: newColor}\n\n        onPermanentlyChangeCallback(newColor)\n      }\n    }\n  }, [\n    editing,\n    hsva,\n    colorModel,\n    onTemporarilyChangeCallback,\n    onPermanentlyChangeCallback,\n  ])\n\n  // This has to come after the callback calling effect, so that the cache isn't\n  // updated before the above effect checks for equality, otherwise no updates would\n  // be issued.\n  // Note: it doesn't make sense to have an editing version of this effect because\n  // the callback calling effect already updates the caches.\n  useEffect(() => {\n    if (!editing) {\n      if (!colorModel.equal(value, permCache.current.color)) {\n        const newHsva = colorModel.toHsva(value)\n        permCache.current = {hsva: newHsva, color: value}\n        updateHsva(newHsva)\n      }\n    }\n  }, [editing, value, colorModel])\n\n  // Merge the current HSVA color object with updated params.\n  // For example, when a child component sends `h` or `s` only\n  const handleChange = useCallback((params: Partial<HsvaColor>) => {\n    updateHsva((current) => Object.assign({}, current, params))\n  }, [])\n\n  return [hsva, handleChange]\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/hooks/useEventCallback.ts",
    "content": "import {useRef} from 'react'\n\n// Saves incoming handler to the ref in order to avoid \"useCallback hell\"\nexport function useEventCallback<T>(\n  handler?: (value: T) => void,\n): (value: T) => void {\n  const callbackRef = useRef(handler)\n  const fn = useRef((value: T) => {\n    callbackRef.current && callbackRef.current(value)\n  })\n  callbackRef.current = handler\n\n  return fn.current\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/hooks/useIsomorphicLayoutEffect.ts",
    "content": "import {useLayoutEffect, useEffect} from 'react'\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nexport const useIsomorphicLayoutEffect =\n  typeof window !== 'undefined' ? useLayoutEffect : useEffect\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/index.ts",
    "content": "export {RgbaColorPicker} from './components/RgbaColorPicker'\n\n// Color model types\nexport type {\n  RgbColor,\n  RgbaColor,\n  HslColor,\n  HslaColor,\n  HsvColor,\n  HsvaColor,\n} from './types'\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/types.ts",
    "content": "import type React from 'react'\n\nexport interface RgbColor {\n  r: number\n  g: number\n  b: number\n}\n\nexport interface RgbaColor extends RgbColor {\n  a: number\n}\n\nexport interface HslColor {\n  h: number\n  s: number\n  l: number\n}\n\nexport interface HslaColor extends HslColor {\n  a: number\n}\n\nexport interface HsvColor {\n  h: number\n  s: number\n  v: number\n}\n\nexport interface HsvaColor extends HsvColor {\n  a: number\n}\n\nexport type ObjectColor =\n  | RgbColor\n  | HslColor\n  | HsvColor\n  | RgbaColor\n  | HslaColor\n  | HsvaColor\n\nexport type AnyColor = string | ObjectColor\n\nexport interface ColorModel<T extends AnyColor> {\n  defaultColor: T\n  toHsva: (defaultColor: T) => HsvaColor\n  fromHsva: (hsva: HsvaColor) => T\n  equal: (first: T, second: T) => boolean\n}\n\ntype ColorPickerHTMLAttributes = Partial<\n  Omit<\n    React.HTMLAttributes<HTMLDivElement>,\n    'color' | 'onChange' | 'onChangeCapture'\n  >\n>\n\nexport interface ColorPickerBaseProps<T extends AnyColor>\n  extends ColorPickerHTMLAttributes {\n  color: T\n  temporarilySetValue: (newColor: T) => void\n  permanentlySetValue: (newColor: T) => void\n  discardTemporaryValue: () => void\n}\n\ntype ColorInputHTMLAttributes = Omit<\n  React.InputHTMLAttributes<HTMLInputElement>,\n  'onChange' | 'value'\n>\n\nexport interface ColorInputBaseProps extends ColorInputHTMLAttributes {\n  color?: string\n  onChange?: (newColor: string) => void\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/utils/clamp.ts",
    "content": "// Clamps a value between an upper and lower bound.\n// We use ternary operators because it makes the minified code\n// 2 times shorter then `Math.min(Math.max(a,b),c)`\nexport const clamp = (number: number, min = 0, max = 1): number => {\n  return number > max ? max : number < min ? min : number\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/utils/compare.ts",
    "content": "import {hexToRgba} from './convert'\nimport type {ObjectColor} from '@theatre/studio/uiComponents/colorPicker/types'\n\nexport const equalColorObjects = (\n  first: ObjectColor,\n  second: ObjectColor,\n): boolean => {\n  if (first === second) return true\n\n  for (const prop in first) {\n    // The following allows for a type-safe calling of this function (first & second have to be HSL, HSV, or RGB)\n    // with type-unsafe iterating over object keys. TS does not allow this without an index (`[key: string]: number`)\n    // on an object to define how iteration is normally done. To ensure extra keys are not allowed on our types,\n    // we must cast our object to unknown (as RGB demands `r` be a key, while `Record<string, x>` does not care if\n    // there is or not), and then as a type TS can iterate over.\n    if (\n      (first as unknown as Record<string, number>)[prop] !==\n      (second as unknown as Record<string, number>)[prop]\n    )\n      return false\n  }\n\n  return true\n}\n\nexport const equalColorString = (first: string, second: string): boolean => {\n  return first.replace(/\\s/g, '') === second.replace(/\\s/g, '')\n}\n\nexport const equalHex = (first: string, second: string): boolean => {\n  if (first.toLowerCase() === second.toLowerCase()) return true\n\n  // To compare colors like `#FFF` and `ffffff` we convert them into RGB objects\n  return equalColorObjects(hexToRgba(first), hexToRgba(second))\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/utils/convert.ts",
    "content": "import {round} from './round'\nimport type {\n  RgbaColor,\n  RgbColor,\n  HslaColor,\n  HslColor,\n  HsvaColor,\n  HsvColor,\n} from '@theatre/studio/uiComponents/colorPicker/types'\n\n/**\n * Valid CSS <angle> units.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/angle\n */\nconst angleUnits: Record<string, number> = {\n  grad: 360 / 400,\n  turn: 360,\n  rad: 360 / (Math.PI * 2),\n}\n\nexport const hexToHsva = (hex: string): HsvaColor => rgbaToHsva(hexToRgba(hex))\n\nexport const hexToRgba = (hex: string): RgbaColor => {\n  if (hex[0] === '#') hex = hex.substr(1)\n\n  if (hex.length < 6) {\n    return {\n      r: parseInt(hex[0] + hex[0], 16),\n      g: parseInt(hex[1] + hex[1], 16),\n      b: parseInt(hex[2] + hex[2], 16),\n      a: 1,\n    }\n  }\n\n  return {\n    r: parseInt(hex.substr(0, 2), 16),\n    g: parseInt(hex.substr(2, 2), 16),\n    b: parseInt(hex.substr(4, 2), 16),\n    a: 1,\n  }\n}\n\nexport const parseHue = (value: string, unit = 'deg'): number => {\n  return Number(value) * (angleUnits[unit] || 1)\n}\n\nexport const hslaStringToHsva = (hslString: string): HsvaColor => {\n  const matcher =\n    /hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i\n  const match = matcher.exec(hslString)\n\n  if (!match) return {h: 0, s: 0, v: 0, a: 1}\n\n  return hslaToHsva({\n    h: parseHue(match[1], match[2]),\n    s: Number(match[3]),\n    l: Number(match[4]),\n    a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1),\n  })\n}\n\nexport const hslStringToHsva = hslaStringToHsva\n\nexport const hslaToHsva = ({h, s, l, a}: HslaColor): HsvaColor => {\n  s *= (l < 50 ? l : 100 - l) / 100\n\n  return {\n    h: h,\n    s: s > 0 ? ((2 * s) / (l + s)) * 100 : 0,\n    v: l + s,\n    a,\n  }\n}\n\nexport const hsvaToHex = (hsva: HsvaColor): string =>\n  rgbaToHex(hsvaToRgba(hsva))\n\nexport const hsvaToHsla = ({h, s, v, a}: HsvaColor): HslaColor => {\n  const hh = ((200 - s) * v) / 100\n\n  return {\n    h: round(h),\n    s: round(\n      hh > 0 && hh < 200\n        ? ((s * v) / 100 / (hh <= 100 ? hh : 200 - hh)) * 100\n        : 0,\n    ),\n    l: round(hh / 2),\n    a: round(a, 2),\n  }\n}\n\nexport const hsvaToHslString = (hsva: HsvaColor): string => {\n  const {h, s, l} = hsvaToHsla(hsva)\n  return `hsl(${h}, ${s}%, ${l}%)`\n}\n\nexport const hsvaToHsvString = (hsva: HsvaColor): string => {\n  const {h, s, v} = roundHsva(hsva)\n  return `hsv(${h}, ${s}%, ${v}%)`\n}\n\nexport const hsvaToHsvaString = (hsva: HsvaColor): string => {\n  const {h, s, v, a} = roundHsva(hsva)\n  return `hsva(${h}, ${s}%, ${v}%, ${a})`\n}\n\nexport const hsvaToHslaString = (hsva: HsvaColor): string => {\n  const {h, s, l, a} = hsvaToHsla(hsva)\n  return `hsla(${h}, ${s}%, ${l}%, ${a})`\n}\n\nexport const hsvaToRgba = ({h, s, v, a}: HsvaColor): RgbaColor => {\n  h = (h / 360) * 6\n  s = s / 100\n  v = v / 100\n\n  const hh = Math.floor(h),\n    b = v * (1 - s),\n    c = v * (1 - (h - hh) * s),\n    d = v * (1 - (1 - h + hh) * s),\n    module = hh % 6\n\n  return {\n    r: round([v, c, b, b, d, v][module] * 255),\n    g: round([d, v, v, c, b, b][module] * 255),\n    b: round([b, b, d, v, v, c][module] * 255),\n    a: round(a, 2),\n  }\n}\n\nexport const hsvaToRgbString = (hsva: HsvaColor): string => {\n  const {r, g, b} = hsvaToRgba(hsva)\n  return `rgb(${r}, ${g}, ${b})`\n}\n\nexport const hsvaToRgbaString = (hsva: HsvaColor): string => {\n  const {r, g, b, a} = hsvaToRgba(hsva)\n  return `rgba(${r}, ${g}, ${b}, ${a})`\n}\n\nexport const hsvaStringToHsva = (hsvString: string): HsvaColor => {\n  const matcher =\n    /hsva?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i\n  const match = matcher.exec(hsvString)\n\n  if (!match) return {h: 0, s: 0, v: 0, a: 1}\n\n  return roundHsva({\n    h: parseHue(match[1], match[2]),\n    s: Number(match[3]),\n    v: Number(match[4]),\n    a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1),\n  })\n}\n\nexport const hsvStringToHsva = hsvaStringToHsva\n\nexport const rgbaStringToHsva = (rgbaString: string): HsvaColor => {\n  const matcher =\n    /rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i\n  const match = matcher.exec(rgbaString)\n\n  if (!match) return {h: 0, s: 0, v: 0, a: 1}\n\n  return rgbaToHsva({\n    r: Number(match[1]) / (match[2] ? 100 / 255 : 1),\n    g: Number(match[3]) / (match[4] ? 100 / 255 : 1),\n    b: Number(match[5]) / (match[6] ? 100 / 255 : 1),\n    a: match[7] === undefined ? 1 : Number(match[7]) / (match[8] ? 100 : 1),\n  })\n}\n\nexport const rgbStringToHsva = rgbaStringToHsva\n\nconst format = (number: number) => {\n  const hex = number.toString(16)\n  return hex.length < 2 ? '0' + hex : hex\n}\n\nexport const rgbaToHex = ({r, g, b}: RgbaColor): string => {\n  return '#' + format(r) + format(g) + format(b)\n}\n\nexport const rgbaToHsva = ({r, g, b, a}: RgbaColor): HsvaColor => {\n  const max = Math.max(r, g, b)\n  const delta = max - Math.min(r, g, b)\n\n  // prettier-ignore\n  const hh = delta\n    ? max === r\n      ? (g - b) / delta\n      : max === g\n        ? 2 + (b - r) / delta\n        : 4 + (r - g) / delta\n    : 0;\n\n  return {\n    h: round(60 * (hh < 0 ? hh + 6 : hh)),\n    s: round(max ? (delta / max) * 100 : 0),\n    v: round((max / 255) * 100),\n    a,\n  }\n}\n\nexport const roundHsva = (hsva: HsvaColor): HsvaColor => ({\n  h: round(hsva.h),\n  s: round(hsva.s),\n  v: round(hsva.v),\n  a: round(hsva.a, 2),\n})\n\nexport const rgbaToRgb = ({r, g, b}: RgbaColor): RgbColor => ({r, g, b})\n\nexport const hslaToHsl = ({h, s, l}: HslaColor): HslColor => ({h, s, l})\n\nexport const hsvaToHsv = (hsva: HsvaColor): HsvColor => {\n  const {h, s, v} = roundHsva(hsva)\n  return {h, s, v}\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/utils/round.ts",
    "content": "export const round = (\n  number: number,\n  digits = 0,\n  base = Math.pow(10, digits),\n): number => {\n  return Math.round(base * number) / base\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/colorPicker/utils/validate.ts",
    "content": "const matcher = /^#?([0-9A-F]{3,8})$/i\n\nexport const validHex = (value: string, alpha?: boolean): boolean => {\n  const match = matcher.exec(value)\n  const length = match ? match[1].length : 0\n\n  return (\n    length === 3 || // '#rgb' format\n    length === 6 || // '#rrggbb' format\n    (!!alpha && length === 4) || // '#rgba' format\n    (!!alpha && length === 8) // '#rrggbbaa' format\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/createCursorLock.ts",
    "content": "// import getStudio from '@theatre/studio/getStudio'\n\n// export function createCursorLock(cursor: string) {\n//   const el = getStudio()!.ui.containerShadow.getElementById(\n//     'pointer-events-root',\n//   )! as HTMLDivElement\n\n//   el.style.cursor = cursor\n//   el.classList.remove('pointer-events-mode-normal')\n//   el.classList.add('pointer-events-mode-locked-for-drag')\n//   const relinquish = () => {\n//     el.style.cursor = ''\n//     el.classList.add('pointer-events-mode-normal')\n//     el.classList.remove('pointer-events-mode-locked-for-drag')\n//   }\n\n//   return relinquish\n// }\nexport {}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/form/BasicCheckbox.tsx",
    "content": "import styled from 'styled-components'\n\nconst BasicCheckbox = styled.input.attrs({type: 'checkbox'})`\n  outline: none;\n`\n\nexport default BasicCheckbox\n"
  },
  {
    "path": "packages/studio/src/uiComponents/form/BasicNumberInput.tsx",
    "content": "import {clamp, isInteger, round} from 'lodash-es'\nimport type {MutableRefObject} from 'react'\nimport {useEffect} from 'react'\nimport {useState} from 'react'\nimport React, {useMemo, useRef} from 'react'\nimport styled from 'styled-components'\nimport {mergeRefs} from 'react-merge-refs'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport useOnClickOutside from '@theatre/studio/uiComponents/useOnClickOutside'\nimport useDrag from '@theatre/studio/uiComponents/useDrag'\n\nconst Container = styled.div`\n  height: 100%;\n  width: 100%;\n  position: relative;\n  z-index: 0;\n  box-sizing: border-box;\n  display: flex;\n  align-items: center;\n\n  &:after {\n    position: absolute;\n    inset: 1px 0 2px;\n    display: block;\n    content: ' ';\n    background-color: transparent;\n    border: 1px solid transparent;\n    z-index: -2;\n    box-sizing: border-box;\n    border-radius: 1px;\n  }\n\n  &:hover,\n  &.dragging,\n  &.editingViaKeyboard {\n    &:after {\n      background-color: #10101042;\n      border-color: #00000059;\n    }\n  }\n`\n\nconst Input = styled.input`\n  background: transparent;\n  border: 1px solid transparent;\n  color: rgba(255, 255, 255, 0.9);\n  padding: 1px 6px;\n  font: inherit;\n  outline: none;\n  cursor: ew-resize;\n  text-align: left;\n  width: 100%;\n  height: calc(100% - 4px);\n  border-radius: 2px;\n\n  &:focus {\n    cursor: text;\n  }\n`\n\nconst FillIndicator = styled.div`\n  position: absolute;\n  inset: 3px 2px 4px;\n  transform: scale(var(--percentage), 1);\n  transform-origin: top left;\n  background-color: #2d5561;\n  z-index: -1;\n  border-radius: 2px;\n  pointer-events: none;\n\n  ${Container}.dragging &, ${Container}.noFocus:hover & {\n    background-color: #338198;\n  }\n`\n\nconst DragWrap = styled.div`\n  display: contents;\n`\n\ntype IState_NoFocus = {\n  mode: 'noFocus'\n}\n\ntype IState_EditingViaKeyboard = {\n  mode: 'editingViaKeyboard'\n  currentEditedValueInString: string\n  valueBeforeEditing: number\n}\n\ntype IState_Dragging = {\n  mode: 'dragging'\n}\n\ntype IState = IState_NoFocus | IState_EditingViaKeyboard | IState_Dragging\n\nconst alwaysValid = (v: number) => true\n\nexport type BasicNumberInputNudgeFn = (params: {\n  deltaX: number\n  deltaFraction: number\n  magnitude: number\n}) => number\n\nconst BasicNumberInput: React.FC<{\n  value: number\n  temporarilySetValue: (v: number) => void\n  discardTemporaryValue: () => void\n  permanentlySetValue: (v: number) => void\n  className?: string\n  range?: [min: number, max: number]\n  isValid?: (v: number) => boolean\n  inputRef?: MutableRefObject<HTMLInputElement | null>\n  /**\n   * Called when the user hits Enter. One of the *SetValue() callbacks will be called\n   * before this, so use this for UI purposes such as closing a popover.\n   */\n  onBlur?: () => void\n  nudge: BasicNumberInputNudgeFn\n  autoFocus?: boolean\n}> = (propsA) => {\n  const [stateRef] = useRefAndState<IState>({mode: 'noFocus'})\n  const isValid = propsA.isValid ?? alwaysValid\n\n  const propsRef = useRef(propsA)\n  propsRef.current = propsA\n\n  const inputRef = useRef<HTMLInputElement | null>(null)\n\n  useOnClickOutside(\n    inputRef.current,\n    () => {\n      inputRef.current!.blur()\n    },\n    stateRef.current.mode === 'editingViaKeyboard',\n  )\n\n  const bodyCursorBeforeDrag = useRef<string | null>(null)\n\n  const callbacks = useMemo(() => {\n    const inputChange = (e: React.ChangeEvent) => {\n      const target = e.target as HTMLInputElement\n      const {value} = target\n      const curState = stateRef.current as IState_EditingViaKeyboard\n\n      stateRef.current = {...curState, currentEditedValueInString: value}\n\n      const valInFloat = parseFloat(value)\n      if (!isFinite(valInFloat) || !isValid(valInFloat)) return\n\n      propsRef.current.temporarilySetValue(valInFloat)\n    }\n\n    const onBlur = () => {\n      if (stateRef.current.mode === 'editingViaKeyboard') {\n        commitKeyboardInput()\n        stateRef.current = {mode: 'noFocus'}\n      }\n      if (propsA.onBlur) propsA.onBlur()\n    }\n\n    const commitKeyboardInput = () => {\n      const curState = stateRef.current as IState_EditingViaKeyboard\n      const value = parseFloat(curState.currentEditedValueInString)\n\n      if (!isFinite(value) || !isValid(value)) {\n        propsRef.current.discardTemporaryValue()\n      } else {\n        if (curState.valueBeforeEditing === value) {\n          propsRef.current.discardTemporaryValue()\n        } else {\n          propsRef.current.permanentlySetValue(value)\n        }\n      }\n    }\n\n    const onInputKeyDown = (e: React.KeyboardEvent) => {\n      if (e.key === 'Escape') {\n        propsRef.current.discardTemporaryValue()\n        stateRef.current = {mode: 'noFocus'}\n        inputRef.current!.blur()\n      } else if (e.key === 'Enter' || e.key === 'Tab') {\n        commitKeyboardInput()\n        inputRef.current!.blur()\n      }\n    }\n\n    const onClick = (e: React.MouseEvent) => {\n      if (stateRef.current.mode === 'noFocus') {\n        const c = inputRef.current!\n        c.focus()\n        e.preventDefault()\n        e.stopPropagation()\n      } else {\n        e.stopPropagation()\n      }\n    }\n\n    const onFocus = () => {\n      if (stateRef.current.mode === 'noFocus') {\n        transitionToEditingViaKeyboardMode()\n      } else if (stateRef.current.mode === 'editingViaKeyboard') {\n      }\n    }\n\n    const transitionToEditingViaKeyboardMode = () => {\n      const curValue = propsRef.current.value\n      stateRef.current = {\n        mode: 'editingViaKeyboard',\n        currentEditedValueInString: String(curValue),\n        valueBeforeEditing: curValue,\n      }\n\n      setTimeout(() => {\n        inputRef.current!.focus()\n        inputRef.current!.setSelectionRange(0, 100)\n      })\n    }\n\n    let inputWidth: number\n\n    const transitionToDraggingMode = () => {\n      const curValue = propsRef.current.value\n      inputWidth = inputRef.current?.getBoundingClientRect().width!\n\n      stateRef.current = {\n        mode: 'dragging',\n      }\n\n      let valueBeforeDragging = curValue\n      let valueDuringDragging = curValue\n\n      bodyCursorBeforeDrag.current = document.body.style.cursor\n\n      return {\n        onDrag(_dx: number, _dy: number, e: MouseEvent, mx: number) {\n          // We use `mx` here because it allows us to offer better UX when dragging\n          // a value beyond its range. If we were to use `_dx`, and the number had a range,\n          // and the user nudged the number beyond its range, they would have to un-nudge all\n          // the way back until the number's value is within its range. But with `mx`,\n          // as soon as they reverse their mouse drag, the number will jump back to its range.\n          const deltaX = e.altKey ? mx / 10 : mx\n          const newValue =\n            valueDuringDragging +\n            propsA.nudge({\n              deltaX,\n              deltaFraction: deltaX / inputWidth,\n              magnitude: 1,\n            })\n\n          valueDuringDragging = propsA.range\n            ? clamp(newValue, propsA.range[0], propsA.range[1])\n            : newValue\n\n          propsRef.current.temporarilySetValue(valueDuringDragging)\n        },\n        onDragEnd(happened: boolean) {\n          if (!happened) {\n            propsRef.current.discardTemporaryValue()\n            stateRef.current = {mode: 'noFocus'}\n          } else {\n            if (valueBeforeDragging === valueDuringDragging) {\n              propsRef.current.discardTemporaryValue()\n            } else {\n              propsRef.current.permanentlySetValue(valueDuringDragging)\n            }\n            stateRef.current = {mode: 'noFocus'}\n          }\n        },\n        onClick() {\n          inputRef.current!.focus()\n          inputRef.current!.setSelectionRange(0, 100)\n        },\n      }\n    }\n\n    return {\n      inputChange,\n      onBlur,\n      transitionToDraggingMode,\n      onInputKeyDown,\n      onClick,\n      onFocus,\n    }\n  }, [])\n\n  // Call onBlur on unmount. Because technically it _is_ a blur, but also, otherwise edits wouldn't be committed.\n  useEffect(() => {\n    return () => {\n      callbacks.onBlur()\n    }\n  }, [])\n\n  let value =\n    stateRef.current.mode !== 'editingViaKeyboard'\n      ? format(propsA.value)\n      : stateRef.current.currentEditedValueInString\n\n  if (typeof value === 'number' && isNaN(value)) {\n    value = 'NaN'\n  }\n\n  const _refs = [inputRef]\n  if (propsA.inputRef) _refs.push(propsA.inputRef)\n\n  const theInput = (\n    <Input\n      key=\"input\"\n      type=\"text\"\n      onChange={callbacks.inputChange}\n      value={value}\n      onBlur={callbacks.onBlur}\n      onKeyDown={callbacks.onInputKeyDown}\n      onClick={callbacks.onClick}\n      onFocus={callbacks.onFocus}\n      ref={mergeRefs(_refs)}\n      onMouseDown={(e: React.MouseEvent) => {\n        e.stopPropagation()\n      }}\n      onDoubleClick={(e: React.MouseEvent) => {\n        e.preventDefault()\n        e.stopPropagation()\n      }}\n      autoFocus={propsA.autoFocus}\n    />\n  )\n\n  const {range} = propsA\n  const num = parseFloat(value)\n\n  const fillIndicator = range ? (\n    <FillIndicator\n      style={{\n        // @ts-ignore\n        '--percentage': clamp((num - range[0]) / (range[1] - range[0]), 0, 1),\n      }}\n    />\n  ) : null\n\n  const [dragNode, setDragNode] = useState<HTMLDivElement | null>(null)\n  useDrag(dragNode, {\n    debugName: 'form/BasicNumberInput',\n    onDragStart: callbacks.transitionToDraggingMode,\n    lockCSSCursorTo: 'ew-resize',\n    shouldPointerLock: true,\n    disabled: stateRef.current.mode === 'editingViaKeyboard',\n  })\n\n  return (\n    <Container className={propsA.className + ' ' + stateRef.current.mode}>\n      <DragWrap ref={setDragNode}>{theInput}</DragWrap>\n      {fillIndicator}\n    </Container>\n  )\n}\n\nfunction format(v: number): string {\n  return isNaN(v) ? 'NaN' : isInteger(v) ? v.toFixed(0) : round(v, 3).toString()\n}\n\nexport default BasicNumberInput\n"
  },
  {
    "path": "packages/studio/src/uiComponents/form/BasicSelect.tsx",
    "content": "import React, {useCallback} from 'react'\nimport styled from 'styled-components'\nimport {CgSelect} from 'react-icons/cg'\n\nconst Container = styled.div`\n  width: 100%;\n  position: relative;\n`\n\nconst IconContainer = styled.div`\n  position: absolute;\n  right: 0px;\n  top: 0;\n  bottom: 0;\n  width: 1.5em;\n  font-size: 14px;\n  display: flex;\n  align-items: center;\n  color: #6b7280;\n  pointer-events: none;\n`\n\nconst Select = styled.select`\n  appearance: none;\n  background-color: transparent;\n  box-sizing: border-box;\n  border: 1px solid transparent;\n  color: rgba(255, 255, 255, 0.85);\n  padding: 1px 6px;\n  font: inherit;\n  outline: none;\n  text-align: left;\n  width: 100%;\n  border-radius: 2px;\n  /*\n  looks like putting percentages in the height of a select box doesn't work in Firefox. Not sure why.\n  So we're hard-coding the height to 26px, unlike all other inputs that use a relative height.\n  */\n  height: 26px /* calc(100% - 4px); */;\n\n  @supports (-moz-appearance: none) {\n    /* Ugly hack to remove the extra left padding that shows up only in Firefox */\n    text-indent: -2px;\n  }\n\n  &:hover,\n  &:focus {\n    background-color: #10101042;\n    border-color: #00000059;\n  }\n`\n\nfunction BasicSelect<TLiteralOptions extends string>({\n  value,\n  onChange,\n  options,\n  className,\n  autoFocus,\n}: {\n  value: TLiteralOptions\n  onChange: (val: TLiteralOptions) => void\n  options: Record<TLiteralOptions, string>\n  className?: string\n  autoFocus?: boolean\n}) {\n  const _onChange = useCallback(\n    (el: React.ChangeEvent<HTMLSelectElement>) => {\n      onChange(String(el.target.value) as TLiteralOptions)\n    },\n    [onChange],\n  )\n\n  return (\n    <Container>\n      <Select\n        className={className}\n        value={value}\n        onChange={_onChange}\n        autoFocus={autoFocus}\n      >\n        {Object.keys(options).map((key, i) => (\n          <option key={'option-' + i} value={key}>\n            {options[key]}\n          </option>\n        ))}\n      </Select>\n      <IconContainer>\n        <CgSelect />\n      </IconContainer>\n    </Container>\n  )\n}\n\nexport default BasicSelect\n"
  },
  {
    "path": "packages/studio/src/uiComponents/form/BasicStringInput.tsx",
    "content": "import styled from 'styled-components'\nimport type {MutableRefObject} from 'react'\nimport {useEffect} from 'react'\nimport React, {useMemo, useRef} from 'react'\nimport {mergeRefs} from 'react-merge-refs'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\nimport useOnClickOutside from '@theatre/studio/uiComponents/useOnClickOutside'\n\nconst Input = styled.input.attrs({type: 'text'})`\n  background: transparent;\n  border: 1px solid transparent;\n  color: rgba(255, 255, 255, 0.9);\n  padding: 1px 6px;\n  font: inherit;\n  outline: none;\n  cursor: text;\n  text-align: left;\n  width: 100%;\n  height: calc(100% - 4px);\n  border-radius: 2px;\n  border: 1px solid transparent;\n  box-sizing: border-box;\n\n  &:hover {\n    background-color: #10101042;\n    border-color: #00000059;\n  }\n\n  &:hover,\n  &:focus {\n    cursor: text;\n    background-color: #10101042;\n    border-color: #00000059;\n  }\n\n  &.invalid {\n    border-color: red;\n  }\n`\n\ntype IState_NoFocus = {\n  mode: 'noFocus'\n}\n\ntype IState_EditingViaKeyboard = {\n  mode: 'editingViaKeyboard'\n  currentEditedValueInString: string\n  valueBeforeEditing: string\n}\n\ntype IState = IState_NoFocus | IState_EditingViaKeyboard\n\nconst alwaysValid = (v: string) => true\n\nconst BasicStringInput: React.FC<{\n  value: string\n  temporarilySetValue: (v: string) => void\n  discardTemporaryValue: () => void\n  permanentlySetValue: (v: string) => void\n  className?: string\n  isValid?: (v: string) => boolean\n  inputRef?: MutableRefObject<HTMLInputElement | null>\n  /**\n   * Called when the user hits Enter. One of the *SetValue() callbacks will be called\n   * before this, so use this for UI purposes such as closing a popover.\n   */\n  onBlur?: () => void\n  autoFocus?: boolean\n}> = (props) => {\n  const [stateRef] = useRefAndState<IState>({mode: 'noFocus'})\n  const isValid = props.isValid ?? alwaysValid\n\n  const propsRef = useRef(props)\n  propsRef.current = props\n\n  const inputRef = useRef<HTMLInputElement | null>(null)\n\n  useOnClickOutside(\n    inputRef.current,\n    () => {\n      inputRef.current!.blur()\n    },\n    stateRef.current.mode === 'editingViaKeyboard',\n  )\n\n  const callbacks = useMemo(() => {\n    const inputChange = (e: React.ChangeEvent) => {\n      const target = e.target as HTMLInputElement\n      const {value} = target\n      const curState = stateRef.current as IState_EditingViaKeyboard\n\n      stateRef.current = {...curState, currentEditedValueInString: value}\n\n      if (!isValid(value)) return\n\n      propsRef.current.temporarilySetValue(value)\n    }\n\n    const onBlur = () => {\n      if (stateRef.current.mode === 'editingViaKeyboard') {\n        commitKeyboardInput()\n        stateRef.current = {mode: 'noFocus'}\n      }\n      propsRef.current.onBlur?.()\n    }\n\n    const commitKeyboardInput = () => {\n      const curState = stateRef.current as IState_EditingViaKeyboard\n      const value = curState.currentEditedValueInString\n\n      if (!isValid(value)) {\n        propsRef.current.discardTemporaryValue()\n      } else {\n        if (curState.valueBeforeEditing === value) {\n          propsRef.current.discardTemporaryValue()\n        } else {\n          propsRef.current.permanentlySetValue(value)\n        }\n      }\n    }\n\n    const onInputKeyDown = (e: React.KeyboardEvent) => {\n      if (e.key === 'Escape') {\n        propsRef.current.discardTemporaryValue()\n        stateRef.current = {mode: 'noFocus'}\n        inputRef.current!.blur()\n      } else if (e.key === 'Enter' || e.key === 'Tab') {\n        commitKeyboardInput()\n        inputRef.current!.blur()\n      }\n    }\n\n    const onClick = (e: React.MouseEvent) => {\n      if (stateRef.current.mode === 'noFocus') {\n        const c = inputRef.current!\n        c.focus()\n        e.preventDefault()\n        e.stopPropagation()\n      } else {\n        e.stopPropagation()\n      }\n    }\n\n    const onFocus = () => {\n      if (stateRef.current.mode === 'noFocus') {\n        transitionToEditingViaKeyboardMode()\n      } else if (stateRef.current.mode === 'editingViaKeyboard') {\n      }\n    }\n\n    const transitionToEditingViaKeyboardMode = () => {\n      const curValue = propsRef.current.value\n      stateRef.current = {\n        mode: 'editingViaKeyboard',\n        currentEditedValueInString: String(curValue),\n        valueBeforeEditing: curValue,\n      }\n\n      setTimeout(() => {\n        inputRef.current!.focus()\n      })\n    }\n\n    return {\n      inputChange,\n      onBlur,\n      onInputKeyDown,\n      onClick,\n      onFocus,\n    }\n  }, [])\n\n  // Call onBlur on unmount. Because technically it _is_ a blur, but also, otherwise edits wouldn't be committed.\n  useEffect(() => {\n    return () => {\n      callbacks.onBlur()\n    }\n  }, [])\n\n  let value =\n    stateRef.current.mode !== 'editingViaKeyboard'\n      ? format(props.value)\n      : stateRef.current.currentEditedValueInString\n\n  const _refs = [inputRef]\n  if (props.inputRef) _refs.push(props.inputRef)\n\n  const theInput = (\n    <Input\n      key=\"input\"\n      type=\"text\"\n      className={`${props.className ?? ''} ${!isValid(value) ? 'invalid' : ''}`}\n      onChange={callbacks.inputChange}\n      value={value}\n      onBlur={callbacks.onBlur}\n      onKeyDown={callbacks.onInputKeyDown}\n      onClick={callbacks.onClick}\n      onFocus={callbacks.onFocus}\n      ref={mergeRefs(_refs)}\n      onMouseDown={(e: React.MouseEvent) => {\n        e.stopPropagation()\n      }}\n      onDoubleClick={(e: React.MouseEvent) => {\n        e.preventDefault()\n        e.stopPropagation()\n      }}\n      autoFocus={props.autoFocus}\n    />\n  )\n\n  return theInput\n}\n\nfunction format(v: string): string {\n  return v\n}\n\nexport default BasicStringInput\n"
  },
  {
    "path": "packages/studio/src/uiComponents/form/BasicSwitch.tsx",
    "content": "import {darken} from 'polished'\nimport React, {useCallback} from 'react'\nimport styled from 'styled-components'\n\nconst Container = styled.form`\n  display: flex;\n  flex-direction: row;\n  align-items: stretch;\n  vertical-align: middle;\n  justify-content: stretch;\n  height: 24px;\n  width: 100%;\n`\nconst Label = styled.label`\n  padding: 0 0.5em;\n  background: transparent;\n  /* background: #373748; */\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  color: #a7a7a7;\n  border: 1px solid transparent;\n  box-sizing: border-box;\n  border-right-width: 0px;\n\n  & + &:last-child {\n    border-right-width: 1px;\n  }\n\n  ${Container}:hover > & {\n    border-color: #1c2123;\n    /* background-color: #373748; */\n    /* color: ${darken(0.1, 'white')}; */\n  }\n\n  &&:hover {\n    background-color: #464654;\n  }\n\n  &&[data-checked='true'] {\n    color: white;\n    background: #3f3f4c;\n  }\n`\n\nconst Input = styled.input`\n  position: absolute;\n  opacity: 0;\n  pointer-events: none;\n  width: 0;\n  height: 0;\n`\n\nfunction BasicSwitch<TLiteralOptions extends string>({\n  value,\n  onChange,\n  options,\n  autoFocus,\n}: {\n  value: TLiteralOptions\n  onChange: (val: TLiteralOptions) => void\n  options: Record<TLiteralOptions, string>\n  autoFocus?: boolean\n}) {\n  const _onChange = useCallback(\n    (el: React.ChangeEvent<HTMLInputElement>) => {\n      onChange(String(el.target.value) as TLiteralOptions)\n    },\n    [onChange],\n  )\n  return (\n    <Container role=\"radiogroup\">\n      {Object.keys(options).map((key, i) => (\n        <Label key={'label-' + i} data-checked={value === key}>\n          {options[key]}\n          <Input\n            type=\"radio\"\n            checked={value === key}\n            value={key}\n            onChange={_onChange}\n            name=\"switchbox\"\n            autoFocus={autoFocus}\n          />\n        </Label>\n      ))}\n    </Container>\n  )\n}\n\nexport default BasicSwitch\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/AddImage.tsx",
    "content": "import * as React from 'react'\n\nfunction AddImage(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M3.335 13.998c-.367 0-.68-.13-.942-.391a1.285 1.285 0 01-.391-.942v-9.33c0-.367.13-.68.391-.942.261-.26.575-.391.942-.391h5.998v3.332h1.333v1.333h3.332v5.998c0 .367-.13.68-.391.942-.261.26-.575.391-.942.391h-9.33zM4 11.332H12L9.499 8 7.5 10.666l-1.5-2-1.999 2.666zm7.331-5.331V4.668H10V3.335h1.333V2.002h1.333v1.333h1.333v1.333h-1.333V6h-1.333z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default AddImage\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/ArrowClockwise.tsx",
    "content": "import * as React from 'react'\n\nfunction ArrowClockwise(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M5.586 3.38a5 5 0 015.45 1.087L12.574 6h-1.572a.5.5 0 000 1h3a.5.5 0 00.5-.5v-3a.5.5 0 10-1 0v2.013l-1.76-1.754a6 6 0 100 8.482.5.5 0 10-.707-.707A5 5 0 115.587 3.38z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default ArrowClockwise\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/ArrowsOutCardinal.tsx",
    "content": "import * as React from 'react'\n\nfunction ArrowsOutCardinal(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M8 1a.498.498 0 01.358.15l1.764 1.765a.5.5 0 01-.707.707L8.5 2.707V6a.5.5 0 01-1 0V2.707l-.915.915a.5.5 0 11-.707-.707l1.768-1.769A.498.498 0 018 1zM8 9.5a.5.5 0 01.5.5v3.292l.915-.915a.5.5 0 01.707.707L8.37 14.836a.499.499 0 01-.74.001l-1.752-1.753a.5.5 0 01.707-.707l.915.915V10a.5.5 0 01.5-.5zM3.622 6.584a.5.5 0 10-.707-.707L1.146 7.646a.498.498 0 00.018.724l1.751 1.752a.5.5 0 10.707-.708L2.708 8.5H6a.5.5 0 000-1H2.706l.916-.916zM12.378 5.877a.5.5 0 01.707 0l1.768 1.769a.498.498 0 01-.017.724l-1.751 1.752a.5.5 0 01-.707-.708l.914-.914H10a.5.5 0 010-1h3.294l-.916-.916a.5.5 0 010-.707z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default ArrowsOutCardinal\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/Bell.tsx",
    "content": "import * as React from 'react'\n\nfunction Bell(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M8 1.57c-.416 0-.752.36-.752.804v.482c-1.715.372-3.006 1.994-3.006 3.938v.473c0 1.18-.407 2.32-1.14 3.205l-.173.208a.85.85 0 00-.125.864.75.75 0 00.686.475h9.019a.752.752 0 00.686-.475.845.845 0 00-.125-.864l-.174-.208a5.026 5.026 0 01-1.139-3.205v-.473c0-1.944-1.291-3.566-3.006-3.938v-.482c0-.445-.336-.804-.752-.804zm1.063 12.39c.282-.301.44-.71.44-1.138H6.496c0 .428.158.837.44 1.138.281.302.664.47 1.063.47.4 0 .783-.168 1.064-.47z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default Bell\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/Camera.tsx",
    "content": "import * as React from 'react'\n\nfunction Camera(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M7.767 5.75a2.75 2.75 0 100 5.5 2.75 2.75 0 000-5.5zM6.017 8.5a1.75 1.75 0 113.5 0 1.75 1.75 0 01-3.5 0z\"\n        fill=\"currentColor\"\n      />\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M5.773 2.25a.5.5 0 00-.416.223l-.85 1.277H2.782a1.496 1.496 0 00-1.497 1.5v7a1.501 1.501 0 001.497 1.5h9.972a1.496 1.496 0 001.498-1.5v-7a1.501 1.501 0 00-1.498-1.5h-1.726l-.849-1.277a.5.5 0 00-.416-.223H5.773zm-.58 2.277L6.04 3.25h3.453l.849 1.277a.5.5 0 00.416.223h1.994a.496.496 0 01.498.5v7a.501.501 0 01-.498.5H2.781a.495.495 0 01-.497-.5v-7a.501.501 0 01.497-.5h1.995a.5.5 0 00.416-.223z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default Camera\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/ChevronDown.tsx",
    "content": "import * as React from 'react'\n\nfunction ChevronDown(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M8 10.5L4 6.654 5.2 5.5 8 8.385 10.8 5.5 12 6.654 8 10.5z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default ChevronDown\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/ChevronLeft.tsx",
    "content": "import * as React from 'react'\n\nfunction ChevronLeft(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M10.45 2.266l.956.954-4.763 4.763 4.763 4.762-.955.954-5.712-5.716 5.712-5.717z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default ChevronLeft\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/ChevronRight.tsx",
    "content": "import * as React from 'react'\n\nfunction ChevronRight(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M5.694 2.266l-.955.954 4.763 4.763-4.763 4.762.955.954 5.712-5.716-5.712-5.717z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default ChevronRight\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/Cube.tsx",
    "content": "import * as React from 'react'\n\nfunction Cube(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M7.51.953L2.01 4.046c-.314.178-.51.51-.511.87v6.168c.002.354.202.695.51.87l5.5 3.093c.298.171.682.171.98 0l5.5-3.093c.308-.175.508-.516.51-.87V4.919a1.008 1.008 0 00-.51-.872L8.49.953a1.003 1.003 0 00-.98 0zm5.474 3.674L8 1.824l-4.977 2.8 5.03 2.804 4.93-2.8zM2.5 5.477v5.605l5.007 2.816.047-5.604L2.5 5.477zm6.007 8.414l4.99-2.807.003-5.6-4.946 2.81-.047 5.597z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default Cube\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/CubeFull.tsx",
    "content": "import * as React from 'react'\n\nfunction CubeFull(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M2.135 4.253l5.968 3.241 5.746-3.241-5.252-3.064a1 1 0 00-.993-.008L2.135 4.253zM7.586 14.947V8.338l-5.922-3.25v5.918a1 1 0 00.507.87l5.415 3.071zM8.414 14.947V8.338l5.922-3.25v5.918a1 1 0 01-.507.87l-5.415 3.071z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default CubeFull\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/CubeHalf.tsx",
    "content": "import * as React from 'react'\n\nfunction CubeHalf(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M13.988 4.05L8.488.958a1.015 1.015 0 00-.975 0l-5.5 3.094c-.286.161-.514.533-.513.868v6.163c0 .356.202.7.513.875l5.5 3.094c.3.164.671.168.975 0l5.5-3.094c.31-.175.511-.519.512-.875V4.919c.002-.327-.223-.705-.512-.868zM8.056 7.427l-5.031-2.8L8 1.826l4.981 2.8-4.925 2.8zm5.444 3.656l-4.994 2.813.05-5.6L13.5 5.481v5.6z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default CubeHalf\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/CubeRendered.tsx",
    "content": "import * as React from 'react'\n\nfunction CubeRendered(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M8.202 2.973l-2.92 1.58 2.714 1.58 2.817-1.58-2.61-1.58zM3.532 10.555v-3.22l3.031 1.72v3l-3.03-1.5zM12.532 10.555v-3.22l-3.031 1.72v3l3.031-1.5z\"\n        fill=\"#fff\"\n      />\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M7.51.955c.298-.171.682-.171.98 0l5.5 3.093c.315.179.508.51.51.87v6.165a1.024 1.024 0 01-.51.873l-5.5 3.093a1.003 1.003 0 01-.98 0L2.01 11.957a1.025 1.025 0 01-.511-.874V4.918c.002-.355.203-.696.51-.87L7.51.955zm.49.871l4.982 2.802-4.928 2.8-5.03-2.803L8 1.826zm-5.5 9.255V5.477l5.054 2.817-.047 5.606L2.5 11.08zm6.007 2.812l4.99-2.807.003-5.602-4.946 2.81-.047 5.599z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default CubeRendered\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/Details.tsx",
    "content": "import * as React from 'react'\n\nfunction Details(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M3.5 3c-1.072 0-1.969.904-1.969 1.969 0 1 .929 1.968 1.969 1.968h9A1.969 1.969 0 1012.5 3h-9zm9 1H5.531v1.938H12.5A.969.969 0 0012.5 4zM3.5 9.14a1.969 1.969 0 000 3.938h9a1.969 1.969 0 100-3.937h-9zm9 1H8.406v1.938H12.5a.969.969 0 100-1.937z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default Details\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/DoubleChevronLeft.tsx",
    "content": "import * as React from 'react'\n\nfunction DoubleChevronLeft(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M12.732 4.048l-.792-.792L7.2 8l4.74 4.744.792-.792L8.781 8l3.951-3.952zm-3.932 0l-.792-.792L3.268 8l4.74 4.744.792-.792L4.848 8 8.8 4.048z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default DoubleChevronLeft\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/DoubleChevronRight.tsx",
    "content": "import * as React from 'react'\n\nfunction DoubleChevronRight(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M3.694 3.765l.792-.792 4.74 4.744-4.74 4.744-.792-.793 3.951-3.951-3.951-3.952zm3.932 0l.792-.792 4.74 4.744-4.74 4.744-.792-.793 3.952-3.951-3.952-3.952z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default DoubleChevronRight\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/DropdownChevron.tsx",
    "content": "import React from 'react'\nimport styled from 'styled-components'\n\n/**\n * A chevron icon specifically for dropdowns and elements that open a menu.\n * If you want the chevron to shift down on hover, set `--chevron-down: 1` on the parent element like:\n *\n * ```tsx\n * const Container = styled.div`\n *  &:hover {\n *   --chevron-down: 1;\n * }\n * `\n * ```\n */\nconst DropdownChevron = React.forwardRef<HTMLDivElement, {}>(\n  function DropdownChevron(props, ref) {\n    return (\n      <Container ref={ref} {...props}>\n        {icon}\n      </Container>\n    )\n  },\n)\n\nconst Container = styled.div`\n  color: #aaaaaa;\n  transition: all 0.12s;\n\n  transform: translateY(calc(2px * var(--chevron-down, 0)));\n`\n\nconst icon = (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"10\"\n    height=\"11\"\n    viewBox=\"0 0 10 11\"\n    fill=\"none\"\n  >\n    <path\n      d=\"M2.49878 3.94232L4.99878 6.44232L7.49878 3.94232\"\n      stroke=\"currentColor\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n)\n\nexport default DropdownChevron\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/Ellipsis.tsx",
    "content": "import * as React from 'react'\n\nfunction Ellipsis(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M.166 7.994a2.26 2.26 0 114.518 0 2.26 2.26 0 01-4.518 0zM2.425 6.91a1.085 1.085 0 100 2.17 1.085 1.085 0 000-2.17zM5.74 7.994a2.26 2.26 0 114.519 0 2.26 2.26 0 01-4.519 0zM8 6.91a1.085 1.085 0 100 2.17 1.085 1.085 0 000-2.17zM13.575 5.735a2.26 2.26 0 100 4.519 2.26 2.26 0 000-4.52zm-1.086 2.26a1.085 1.085 0 112.171 0 1.085 1.085 0 01-2.17 0z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default Ellipsis\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/EllipsisFill.tsx",
    "content": "import * as React from 'react'\n\nfunction EllipsisFill(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M10.667 8a1.333 1.333 0 112.666 0 1.333 1.333 0 01-2.666 0zm-4 0a1.333 1.333 0 112.666 0 1.333 1.333 0 01-2.666 0zm-4 0a1.333 1.333 0 112.666 0 1.333 1.333 0 01-2.666 0z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default EllipsisFill\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/GlobeSimple.tsx",
    "content": "import * as React from 'react'\n\nfunction GlobeSimple(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zm4.75-5.216A5.505 5.505 0 002.522 7.5H5.01c.051-1.468.328-2.807.764-3.825.14-.326.298-.626.477-.89zM13.478 7.5A5.505 5.505 0 009.75 2.784c.179.265.338.565.477.891.436 1.018.713 2.357.764 3.825h2.487zm0 1a5.505 5.505 0 01-3.729 4.716c.18-.264.339-.566.478-.892.436-1.018.713-2.356.764-3.824h2.487zM6.25 13.216A5.505 5.505 0 012.522 8.5H5.01c.051 1.468.328 2.806.764 3.824.14.326.299.627.478.892zm.44-9.147c-.374.874-.63 2.074-.682 3.431h3.982c-.051-1.357-.308-2.557-.683-3.431-.21-.491-.448-.857-.686-1.092-.236-.234-.446-.315-.622-.315s-.386.081-.622.315c-.238.235-.476.6-.686 1.092zm2.617 7.862c.375-.875.631-2.075.683-3.431H6.009c.052 1.356.308 2.556.683 3.43.21.492.448.857.686 1.093.236.233.446.314.622.314s.386-.081.622-.314c.238-.236.476-.601.686-1.092z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default GlobeSimple\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/Outline.tsx",
    "content": "import * as React from 'react'\n\nfunction Outline(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M1.775 2.781a.5.5 0 01.5.5v1.7H4.67c.108-.957.92-1.7 1.905-1.7h6.608a1.917 1.917 0 110 3.834H6.574c-.78 0-1.452-.466-1.751-1.135H2.275v5.03h2.39a2.032 2.032 0 012.023-1.854h6.38a2.031 2.031 0 110 4.063h-6.38c-.83 0-1.543-.497-1.858-1.21H1.775a.5.5 0 01-.5-.5V3.281a.5.5 0 01.5-.5zm4.799 1.5h6.608a.917.917 0 110 1.834H6.574a.917.917 0 110-1.834zm.114 5.875h6.38a1.031 1.031 0 110 2.063h-6.38a1.032 1.032 0 110-2.063z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default Outline\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/Package.tsx",
    "content": "import * as React from 'react'\n\nfunction Package(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M8.339 4.5l-2.055.644 4.451 1.393v2.748l-2.966.928-2.504-.783V6.738l2.42.758 2.055-.644-4.458-1.395L4 5.858v4.463L7.768 11.5 12 10.175V5.646L8.339 4.5z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default Package\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/Resize.tsx",
    "content": "import * as React from 'react'\n\nfunction Resize(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M1.452 3.452a2 2 0 012-2h9.096a2 2 0 012 2v9.096a2 2 0 01-2 2H3.452a2 2 0 01-2-2V3.452zm2-1h9.096a1 1 0 011 1v9.096a1 1 0 01-1 1h-5.06V8.511H2.451V3.452a1 1 0 011-1z\"\n        fill=\"currentColor\"\n      />\n      <path\n        d=\"M12.501 4.09a.5.5 0 00-.5-.5H8.95a.5.5 0 100 1h1.98l-2.45 2.449a.5.5 0 10.707.707l2.315-2.315v1.627a.5.5 0 001 0V4.09z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default Resize\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/Trash.tsx",
    "content": "import * as React from 'react'\n\nfunction Trash(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      width={16}\n      height={16}\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M6.8 11.6a.6.6 0 00.6-.6V7.4a.6.6 0 00-1.2 0V11a.6.6 0 00.6.6zm6-7.2h-2.4v-.6A1.8 1.8 0 008.6 2H7.4a1.8 1.8 0 00-1.8 1.8v.6H3.2a.6.6 0 100 1.2h.6v6.6A1.8 1.8 0 005.6 14h4.8a1.8 1.8 0 001.8-1.8V5.6h.6a.6.6 0 100-1.2zm-6-.6a.6.6 0 01.6-.6h1.2a.6.6 0 01.6.6v.6H6.8v-.6zm4.2 8.4a.6.6 0 01-.6.6H5.6a.6.6 0 01-.6-.6V5.6h6v6.6zm-1.8-.6a.6.6 0 00.6-.6V7.4a.6.6 0 00-1.2 0V11a.6.6 0 00.6.6z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  )\n}\n\nexport default Trash\n"
  },
  {
    "path": "packages/studio/src/uiComponents/icons/index.ts",
    "content": "export {default as Outline} from './Outline'\nexport {default as ArrowClockwise} from './ArrowClockwise'\nexport {default as ArrowsOutCardinal} from './ArrowsOutCardinal'\nexport {default as Camera} from './Camera'\nexport {default as ChevronDown} from './ChevronDown'\nexport {default as ChevronRight} from './ChevronRight'\nexport {default as ChevronLeft} from './ChevronLeft'\nexport {default as Cube} from './Cube'\nexport {default as CubeFull} from './CubeFull'\nexport {default as CubeHalf} from './CubeHalf'\nexport {default as CubeRendered} from './CubeRendered'\nexport {default as Details} from './Details'\nexport {default as Ellipsis} from './Ellipsis'\nexport {default as GlobeSimple} from './GlobeSimple'\nexport {default as Resize} from './Resize'\nexport {default as Package} from './Package'\nexport {default as Bell} from './Bell'\nexport {default as Trash} from './Trash'\nexport {default as AddImage} from './AddImage'\nexport {default as EllipsisFill} from './EllipsisFill'\n"
  },
  {
    "path": "packages/studio/src/uiComponents/isSafari.ts",
    "content": "export const isSafari =\n  typeof window !== 'undefined' &&\n  /^((?!chrome|android).)*safari/i.test(navigator.userAgent)\n"
  },
  {
    "path": "packages/studio/src/uiComponents/onPointerOutside.ts",
    "content": "/**\n * Calls the callback when the mouse pointer moves outside the\n * bounds of the node.\n */\nexport default function onPointerOutside(\n  node: Element,\n  threshold: number,\n  onPointerOutside: (e: MouseEvent) => void,\n) {\n  const containerRect = node.getBoundingClientRect()\n\n  const onMouseMove = (e: MouseEvent) => {\n    if (\n      e.clientX < containerRect.left - threshold ||\n      e.clientX > containerRect.left + containerRect.width + threshold ||\n      e.clientY < containerRect.top - threshold ||\n      e.clientY > containerRect.top + containerRect.height + threshold\n    ) {\n      onPointerOutside(e)\n    }\n  }\n\n  window.addEventListener('mousemove', onMouseMove)\n\n  return () => {\n    window.removeEventListener('mousemove', onMouseMove)\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/selects/BasicSelect.tsx",
    "content": "import type {ElementType} from 'react'\nimport React from 'react'\nimport styled from 'styled-components'\n\nconst Container = styled.div`\n  display: flex;\n  flex-grow: 1;\n`\n\nconst Label = styled.div`\n  flex-grow: 0;\n  color: hsl(0, 0%, 80%);\n`\n\nconst SelectedValueLabel = styled.div`\n  flex-grow: 1;\n  padding-left: 8px;\n`\n\ntype Option = {\n  label: string\n  value: string\n}\n\nconst BasicSelect: React.FC<{\n  label: string | ElementType\n  options: Array<Option>\n  value: string | undefined\n  defaultOption: undefined | string\n  onChange: (newValue: string) => void\n}> = (props) => {\n  // const [isOpen, setIsOpen] = useState<boolean>(false)\n  const selectedValue =\n    typeof props.value === 'string' ? props.value : props.defaultOption\n  const selectedLabel = props.options.find((opt) => opt.value === selectedValue)\n    ?.label\n\n  return (\n    <Container>\n      <Label>\n        <>{props.label}</>\n      </Label>\n      <SelectedValueLabel>\n        {selectedLabel}\n        {/* <select\n          value={selectedValue}\n          onChange={(ev) => {\n            props.onChange(ev.target.value)\n          }}\n        >\n          {props.options.map((opt, i) => {\n            return (\n              <option key={'opt-' + i} value={opt.value}>\n                {opt.label}\n              </option>\n            )\n          })}\n        </select> */}\n      </SelectedValueLabel>\n    </Container>\n  )\n}\n\nexport default BasicSelect\n"
  },
  {
    "path": "packages/studio/src/uiComponents/simpleContextMenu/ContextMenu/BaseMenu.tsx",
    "content": "import type {ElementType} from 'react'\nimport React from 'react'\nimport Item from './Item'\nimport type {$FixMe} from '@theatre/core/types/public'\nimport styled from 'styled-components'\nimport {transparentize} from 'polished'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\n\nconst minWidth = 190\n\nconst SHOW_OPTIONAL_MENU_TITLE = true\n\nconst MenuContainer = styled.ul`\n  position: absolute;\n  min-width: ${minWidth}px;\n  z-index: 10000;\n  /* background: ${transparentize(0.4, '#000000')};\n  backdrop-filter: blur(8px) saturate(300%) contrast(65%) brightness(70%); */\n\n  background: rgb(45 55 66 / 75%);\n  backdrop-filter: blur(8px) brightness(70%);\n  color: white;\n  border: 0.5px solid #6262622c;\n  box-sizing: border-box;\n  box-shadow: ${transparentize(0.75, '#000000')} 0px 4px 20px;\n  list-style-type: none;\n  padding: 0;\n  margin: 0;\n  cursor: default;\n  ${pointerEventsAutoInNormalMode};\n  border-radius: 4px;\n`\n\nconst MenuTitle = styled.div`\n  padding: 8px 10px 6px;\n  position: relative;\n\n  color: #d1d1d1;\n  font-size: 10px;\n  font-weight: 500;\n\n  /* &:after {\n    // a horizontal line, taking up no space, with 4px padding on each side\n    content: '';\n    display: block;\n    height: 1px;\n    background: #6262622c;\n    position: absolute;\n    left: 4px;\n    right: 4px;\n    bottom: 0px;\n  } */\n`\n\ntype MenuItem =\n  | {\n      type?: 'normal'\n      label: string | ElementType\n      callback?: (e: React.MouseEvent) => void\n      enabled?: boolean\n      // subs?: Item[]\n    }\n  | {type: 'separator'}\n\nconst BaseMenu: React.FC<{\n  items: MenuItem[]\n  ref?: $FixMe\n  displayName?: React.ReactNode\n  onRequestClose: () => void\n}> = React.forwardRef((props, ref: $FixMe) => {\n  return (\n    <MenuContainer ref={ref}>\n      {SHOW_OPTIONAL_MENU_TITLE && props.displayName ? (\n        <MenuTitle>{props.displayName}</MenuTitle>\n      ) : null}\n      {props.items.map((item, i) =>\n        item.type === 'separator' ? (\n          <Separator key={`item-${i}`} />\n        ) : (\n          <Item\n            key={`item-${i}`}\n            label={item.label}\n            enabled={item.enabled === false ? false : true}\n            onClick={(e) => {\n              if (item.callback) {\n                item.callback(e)\n              }\n              props.onRequestClose()\n            }}\n          />\n        ),\n      )}\n    </MenuContainer>\n  )\n})\n\nconst Separator = styled.div`\n  height: 1px;\n  margin: 2px 8px;\n  background: #6262622c;\n`\n\nexport default BaseMenu\n"
  },
  {
    "path": "packages/studio/src/uiComponents/simpleContextMenu/ContextMenu/ContextMenu.tsx",
    "content": "import useBoundingClientRect from '@theatre/studio/uiComponents/useBoundingClientRect'\nimport {useMemo} from 'react'\nimport {useContext} from 'react'\nimport React, {useLayoutEffect, useState} from 'react'\nimport {createPortal} from 'react-dom'\nimport useWindowSize from 'react-use/esm/useWindowSize'\nimport {height as itemHeight} from './Item'\nimport {PortalContext} from 'reakit'\nimport useOnKeyDown from '@theatre/studio/uiComponents/useOnKeyDown'\nimport BaseMenu from './BaseMenu'\nimport type {ContextMenuItem} from '@theatre/studio/uiComponents/chordial/chordialInternals'\n\n/**\n * How far from the menu should the pointer travel to auto close the menu\n */\nconst pointerDistanceThreshold = 20\n\nexport type IContextMenuItemCustomNodeRenderFn = (controls: {\n  closeMenu(): void\n}) => React.ReactElement\n\nexport type IContextMenuItemsValue =\n  | ContextMenuItem[]\n  | (() => ContextMenuItem[])\n\nexport type ContextMenuProps = {\n  items: IContextMenuItemsValue\n  displayName?: React.ReactNode\n  clickPoint?: {\n    clientX: number\n    clientY: number\n  }\n  onRequestClose: () => void\n  // default: true\n  closeOnPointerLeave?: boolean\n}\n\n/**\n * TODO let's make sure that triggering a context menu would close\n * the other open context menu (if one _is_ open).\n */\nconst ContextMenu: React.FC<ContextMenuProps> = (props) => {\n  const [container, setContainer] = useState<HTMLElement | null>(null)\n  const rect = useBoundingClientRect(container)\n  const windowSize = useWindowSize()\n\n  useLayoutEffect(() => {\n    if (!rect || !container) return\n\n    const windowGap = 10\n    const windowEdges = {\n      left: windowGap,\n      top: windowGap,\n      right: windowSize.width - windowGap,\n      bottom: windowSize.height - windowGap,\n    }\n\n    const preferredAnchorPoint = {\n      left: rect.width / 2,\n      // if there is a displayName, make sure to move the context menu up by one item,\n      // so that the first active item is the one the mouse is hovering over\n      top: itemHeight / 2 + (props.displayName ? itemHeight : 0),\n    }\n\n    const clickPoint = props.clickPoint ?? {clientX: 0, clientY: 0}\n\n    const pos = {\n      left: clickPoint.clientX - preferredAnchorPoint.left,\n      top: clickPoint.clientY - preferredAnchorPoint.top,\n    }\n\n    if (pos.left < windowEdges.left) {\n      pos.left = windowEdges.left\n    } else if (pos.left + rect.width > windowEdges.right) {\n      pos.left = windowEdges.right - rect.width\n    }\n\n    if (pos.top < windowEdges.top) {\n      pos.top = windowEdges.top\n    } else if (pos.top + rect.height > windowEdges.bottom) {\n      pos.top = windowEdges.bottom - rect.height\n    }\n\n    container.style.left = pos.left + 'px'\n    container.style.top = pos.top + 'px'\n\n    const onMouseMove = (e: MouseEvent) => {\n      if (\n        e.clientX < pos.left - pointerDistanceThreshold ||\n        e.clientX > pos.left + rect.width + pointerDistanceThreshold ||\n        e.clientY < pos.top - pointerDistanceThreshold ||\n        e.clientY > pos.top + rect.height + pointerDistanceThreshold\n      ) {\n        if (props.closeOnPointerLeave !== false) props.onRequestClose()\n      }\n    }\n\n    window.addEventListener('mousemove', onMouseMove)\n\n    return () => {\n      window.removeEventListener('mousemove', onMouseMove)\n    }\n  }, [\n    rect,\n    container,\n    props.clickPoint,\n    windowSize,\n    props.onRequestClose,\n    props.closeOnPointerLeave,\n  ])\n  const portalLayer = useContext(PortalContext)\n\n  useOnKeyDown((ev) => {\n    if (ev.key === 'Escape') props.onRequestClose()\n  })\n\n  const items = useMemo(() => {\n    const itemsArr = Array.isArray(props.items) ? props.items : props.items()\n    if (itemsArr.length > 0) return itemsArr\n    else\n      return [\n        {\n          /**\n           * TODO Need design for this\n           */\n          label: props.displayName\n            ? `No actions for ${props.displayName}`\n            : `No actions found`,\n          enabled: false,\n        },\n      ]\n  }, [props.items])\n\n  return createPortal(\n    <BaseMenu\n      items={items}\n      onRequestClose={props.onRequestClose}\n      displayName={props.displayName}\n      ref={setContainer}\n    />,\n    portalLayer!,\n  )\n}\n\nexport default ContextMenu\n"
  },
  {
    "path": "packages/studio/src/uiComponents/simpleContextMenu/ContextMenu/Item.tsx",
    "content": "import noop from '@theatre/utils/noop'\nimport type {ElementType} from 'react'\nimport React from 'react'\nimport styled from 'styled-components'\n\nexport const height = 30\n\nconst ItemContainer = styled.li<{enabled: boolean}>`\n  height: ${height}px;\n  padding: 0 12px;\n  margin: 0;\n  display: flex;\n  align-items: center;\n  font-weight: 400;\n  position: relative;\n  color: ${(props) => (props.enabled ? 'white' : '#8f8f8f')};\n  cursor: ${(props) => (props.enabled ? 'default' : 'not-allowed')};\n\n  &:after {\n    position: absolute;\n    inset: 2px;\n    display: block;\n    content: ' ';\n    pointer-events: none;\n    z-index: -1;\n    border-radius: 4px;\n  }\n\n  &:hover:after {\n    background-color: ${(props) =>\n      props.enabled ? 'rgba(255, 255, 255, 0.075)' : 'initial'};\n  }\n`\n\nconst ItemLabel = styled.span``\n\nconst Item: React.FC<{\n  label: string | ElementType\n  onClick: (e: React.MouseEvent) => void\n  enabled: boolean\n}> = (props) => {\n  return (\n    <ItemContainer\n      onClick={props.enabled ? props.onClick : noop}\n      enabled={props.enabled}\n      title={props.enabled ? undefined : 'Disabled'}\n    >\n      <ItemLabel>\n        <>{props.label}</>\n      </ItemLabel>\n    </ItemContainer>\n  )\n}\n\nexport default Item\n"
  },
  {
    "path": "packages/studio/src/uiComponents/simpleContextMenu/useContextMenu.tsx",
    "content": "import type {$FixMe, VoidFn} from '@theatre/core/types/public'\nimport type React from 'react'\nimport {useEffect} from 'react'\nimport useMenu from './useMenu'\n\nexport default function useContextMenu(\n  target: HTMLElement | SVGElement | null,\n  opts: Parameters<typeof useMenu>[0],\n): [node: React.ReactNode, close: VoidFn, isOpen: boolean] {\n  const [node, open, close, isOpen] = useMenu(opts)\n\n  useEffect(() => {\n    if (!target || opts.disabled === true) {\n      close()\n      return\n    }\n\n    const onTrigger = (event: MouseEvent) => {\n      open(event)\n      event.preventDefault()\n      event.stopPropagation()\n    }\n    target.addEventListener('contextmenu', onTrigger as $FixMe)\n    return () => {\n      target.removeEventListener('contextmenu', onTrigger as $FixMe)\n    }\n  }, [target, opts.disabled])\n\n  return [node, close, isOpen]\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/simpleContextMenu/useMenu.tsx",
    "content": "import type {VoidFn} from '@theatre/core/types/public'\nimport React, {useContext, useEffect, useState} from 'react'\nimport ContextMenu from './ContextMenu/ContextMenu'\nimport type {ContextMenuProps} from './ContextMenu/ContextMenu'\nimport {contextMenuShownContext} from '@theatre/studio/panels/DetailPanel/DetailPanel'\nimport {closeAllTooltips} from '@theatre/studio/uiComponents/Popover/useTooltip'\n\nconst emptyNode = <></>\n\ntype IState =\n  | {isOpen: true; event: undefined | Pick<MouseEvent, 'clientX' | 'clientY'>}\n  | {isOpen: false}\n\nexport default function useMenu(\n  _opts: {\n    disabled?: boolean\n    displayName?: string\n    onOpen?: () => void\n  } & Omit<ContextMenuProps, 'onRequestClose' | 'clickPoint'>,\n): [\n  node: React.ReactNode,\n  open: (ev: undefined | Pick<MouseEvent, 'clientX' | 'clientY'>) => void,\n  close: VoidFn,\n  isOpen: boolean,\n] {\n  const {onOpen, ...contextMenuProps} = _opts\n\n  const [state, setState] = useState<IState>({isOpen: false})\n\n  const close = () => setState({isOpen: false})\n\n  // TODO: this lock is now exported from the detail panel, do refactor it when you get the chance\n  const [, addContextMenu] = useContext(contextMenuShownContext)\n\n  useEffect(() => {\n    let removeContextMenu: () => void | undefined\n    if (state.isOpen) {\n      closeAllTooltips()\n      onOpen?.()\n      removeContextMenu = addContextMenu()\n    }\n\n    return () => removeContextMenu?.()\n  }, [state.isOpen, onOpen])\n\n  const node = !state.isOpen ? (\n    emptyNode\n  ) : (\n    <ContextMenu\n      {...contextMenuProps}\n      clickPoint={state.event}\n      onRequestClose={close}\n    />\n  )\n\n  const open = (ev: undefined | Pick<MouseEvent, 'clientX' | 'clientY'>) => {\n    setState({isOpen: true, event: ev})\n  }\n\n  return [node, open, close, state.isOpen]\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/toolbar/ToolbarButton.tsx",
    "content": "import styled from 'styled-components'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport React from 'react'\n\nexport const Container = styled.button<{disabled?: boolean; primary?: boolean}>`\n  ${pointerEventsAutoInNormalMode};\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-weight: 600;\n  height: 32px;\n  outline: none;\n  padding: 0 8px;\n\n  color: ${({disabled, primary}) =>\n    disabled === true ? '#919191' : primary === true ? 'white' : '#a8a8a9'};\n\n  background: ${({disabled, primary}) =>\n    disabled === true\n      ? 'rgba(64, 67, 71, 0.8)'\n      : primary === true\n        ? 'rgb(41 110 120 / 60%)'\n        : 'rgba(40, 43, 47, 0.8)'};\n\n  backdrop-filter: blur(14px);\n  border: none;\n  border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n  border-radius: 3px;\n  box-shadow: 0px 4px 4px -1px rgba(0, 0, 0, 0.48);\n\n  svg {\n    display: block;\n  }\n\n  &:hover {\n    background: ${({disabled, primary}) =>\n      disabled === true\n        ? 'rgba(64, 67, 71, 0.8)'\n        : primary === true\n          ? 'rgba(50, 155, 169, 0.80)'\n          : 'rgba(59, 63, 69, 0.8)'};\n  }\n\n  &:active {\n    background: rgba(82, 88, 96, 0.8);\n  }\n`\n\nconst ToolbarButton = React.forwardRef<\n  HTMLButtonElement,\n  React.ComponentProps<typeof Container>\n>((props, ref) => {\n  return <Container ref={ref} {...props} />\n})\n\nexport default ToolbarButton\n"
  },
  {
    "path": "packages/studio/src/uiComponents/toolbar/ToolbarDropdownSelect.tsx",
    "content": "import React from 'react'\nimport styled from 'styled-components'\n\nconst Container = styled.div``\n\nconst ToolbarDropdownSelect: React.FC<{\n  value: string\n  options: Array<{label: string; value: string; icon: React.ReactElement}>\n  onChange: (value: string) => void\n  label: (cur: {label: string; value: string}) => string\n}> = (props) => {\n  return <Container></Container>\n}\n\nexport default ToolbarDropdownSelect\n"
  },
  {
    "path": "packages/studio/src/uiComponents/toolbar/ToolbarIconButton.tsx",
    "content": "import styled from 'styled-components'\nimport {pointerEventsAutoInNormalMode} from '@theatre/studio/css'\nimport React from 'react'\nimport type {$FixMe, $IntentionalAny} from '@theatre/core/types/public'\nimport {mergeRefs} from 'react-merge-refs'\nimport ToolbarSwitchSelectContainer from './ToolbarSwitchSelectContainer'\nimport useChordial from '@theatre/studio/uiComponents/chordial/useChodrial'\n\nexport const Container = styled.button`\n  ${pointerEventsAutoInNormalMode};\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 14px;\n  font-weight: 600;\n  width: 32px;\n  height: 32px;\n  outline: none;\n\n  color: #a8a8a9;\n\n  background: rgba(40, 43, 47, 0.8);\n  backdrop-filter: blur(14px);\n  border: none;\n  border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n  border-radius: 3px;\n\n  svg {\n    display: block;\n  }\n\n  &:hover {\n    background: rgba(59, 63, 69, 0.8);\n  }\n\n  &:active {\n    background: rgba(82, 88, 96, 0.8);\n  }\n\n  &.selected {\n    color: rgba(255, 255, 255, 0.8);\n    border-bottom: 1px solid rgba(255, 255, 255, 0.7);\n  }\n\n  // Don't blur if in a button group, because it already blurs. We need to blur\n  // on the group-level, otherwise we get seams.\n  ${ToolbarSwitchSelectContainer} > & {\n    backdrop-filter: none;\n    filter: none;\n    border-radius: 0;\n\n    &:first-child {\n      border-top-left-radius: 2px;\n      border-bottom-left-radius: 2px;\n    }\n\n    &:last-child {\n      border-bottom-right-radius: 2px;\n      border-top-right-radius: 2px;\n    }\n  }\n\n  @supports not (backdrop-filter: blur()) {\n    background: rgba(40, 43, 47, 0.95);\n  }\n`\n\nconst ToolbarIconButton: typeof Container = React.forwardRef(\n  ({title, ...props}: $FixMe, ref: $FixMe) => {\n    const c = useChordial(() => {\n      return {\n        title,\n        items: [],\n      }\n    })\n\n    return (\n      <>\n        <Container ref={mergeRefs([c.targetRef, ref])} {...props} />{' '}\n      </>\n    )\n  },\n) as $IntentionalAny\n\nexport default ToolbarIconButton\n"
  },
  {
    "path": "packages/studio/src/uiComponents/toolbar/ToolbarSwitchSelect.tsx",
    "content": "import type {ReactElement} from 'react'\nimport React from 'react'\nimport type {IconType} from 'react-icons'\nimport {Button} from 'reakit'\nimport ButtonImpl from './ToolbarIconButton'\nimport Container from './ToolbarSwitchSelectContainer'\n\nfunction OptionButton<T>({\n  value,\n  label,\n  icon,\n  onClick,\n  isSelected,\n}: {\n  value: T\n  label: string\n  icon: ReactElement<IconType>\n  onClick: () => void\n  isSelected: boolean\n}) {\n  return (\n    <>\n      <ButtonImpl\n        forwardedAs={Button}\n        className={isSelected ? 'selected' : undefined}\n        aria-label={label}\n        onClick={onClick}\n        title={label}\n      >\n        {icon}\n      </ButtonImpl>\n    </>\n  )\n}\n\ninterface Props<Option> {\n  value: Option\n  onChange: (value: Option) => void\n  options: {\n    value: Option\n    label: string\n    icon: ReactElement<IconType>\n  }[]\n}\n\nconst ToolbarSwitchSelect = <Option extends string | number>({\n  value: valueOfSwitch,\n  onChange,\n  options,\n}: Props<Option>) => {\n  return (\n    <Container>\n      {options.map(({label, icon, value: optionValue}) => (\n        <OptionButton\n          key={optionValue}\n          value={optionValue}\n          isSelected={valueOfSwitch === optionValue}\n          label={label}\n          icon={icon}\n          onClick={() => onChange(optionValue)}\n        />\n      ))}\n    </Container>\n  )\n}\n\nexport default ToolbarSwitchSelect\n"
  },
  {
    "path": "packages/studio/src/uiComponents/toolbar/ToolbarSwitchSelectContainer.ts",
    "content": "import styled from 'styled-components'\nimport {Group} from 'reakit'\n\nconst Container = styled(Group)`\n  display: flex;\n  height: fit-content;\n  backdrop-filter: blur(14px);\n  border-radius: 2px;\n`\n\nexport default Container\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useBoundingClientRect.ts",
    "content": "import {useLayoutEffect, useState} from 'react'\n\nexport default function useBoundingClientRect(\n  node: Element | React.MutableRefObject<Element | null> | null | undefined,\n): null | DOMRect {\n  const [bounds, set] = useState<null | DOMRect>(null)\n\n  useLayoutEffect(() => {\n    if (node) {\n      if (node instanceof Element) {\n        set(node.getBoundingClientRect())\n      } else if (node.current instanceof Element) {\n        set(node.current.getBoundingClientRect())\n      }\n    }\n\n    return () => {\n      set(null)\n    }\n  }, [node])\n\n  return bounds\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useDebugRefreshEvery.tsx",
    "content": "import {useEffect, useState} from 'react'\n\n/**\n * Little utility hook that refreshes a react element every `ms` milliseconds. Use\n * it to debug whether the props of the element, or the return values of its hooks\n * are getting properly updated.\n *\n * @param ms - interval in milliseconds\n */\nexport default function useDebugRefreshEvery(ms: number = 500) {\n  const [_, setState] = useState(0)\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      setState((i) => i + 1)\n    }, ms)\n\n    return () => {\n      clearInterval(interval)\n    }\n  }, [])\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useDrag.ts",
    "content": "import type {$FixMe} from '@theatre/core/types/public'\nimport {useLayoutEffect, useRef} from 'react'\nimport {useCssCursorLock} from './PointerEventsHandler'\nimport type {CapturedPointer} from '@theatre/studio/UIRoot/PointerCapturing'\nimport {usePointerCapturing} from '@theatre/studio/UIRoot/PointerCapturing'\nimport noop from '@theatre/utils/noop'\nimport {isSafari} from './isSafari'\nimport useRefAndState from '@theatre/studio/utils/useRefAndState'\n\nexport enum MouseButton {\n  Left = 0,\n  Middle = 1,\n  // Not including Right because it _might_ interfere with chord clicking.\n  // So we'll wait for chord-clicking to land before exploring right-button gestures\n}\n\n/**\n * dx, dy: delta x/y from the start of the drag\n *\n * Total movement since the start of the drag. This is commonly used with something like \"drag keyframe\" or \"drag handle\",\n * where you might be dragging an item around in the UI.\n * @param totalDragDeltaX - x moved total\n * @param totalDragDeltaY - y moved total\n *\n * Movement from the last event / on drag call. This is commonly used with something like \"prop nudge\".\n * @param dxFromLastEvent - x moved since last event\n * @param dyFromLastEvent - y moved since last event\n */\ntype OnDragCallback = (\n  totalDragDeltaX: number,\n  totalDragDeltaY: number,\n  event: MouseEvent,\n  dxFromLastEvent: number,\n  dyFromLastEvent: number,\n) => void\n\ntype OnClickCallback = (mouseUpEvent: MouseEvent) => void\n\ntype OnDragEndCallback = (dragHappened: boolean, event?: MouseEvent) => void\n\nexport type DragHandlers = {\n  /**\n   * Called at the end of the drag gesture.\n   * `dragHappened` will be `true` if the user actually moved the pointer\n   * (if onDrag isn't called, then this will be false becuase the user hasn't moved the pointer)\n   */\n  onDragEnd?: OnDragEndCallback\n  onDrag: OnDragCallback\n  onClick?: OnClickCallback\n}\n\nexport type DragOpts = {\n  /**\n   * Provide a name for the thing wanting to use the drag helper.\n   * This can show up in various errors and potential debug logs to help narrow down.\n   */\n  debugName: string\n  /**\n   * Setting it to true will disable the listeners.\n   */\n  disabled?: boolean\n  /**\n   * Setting it to true will allow the mouse down events to propagate up\n   */\n  dontBlockMouseDown?: boolean\n  /**\n   * Tells the browser to take control of the mouse pointer so that\n   * the user can drag endlessly in any direction without hitting the\n   * side of their screen.\n   *\n   * Note: that if we detect that the browser is\n   * safari then pointer lock is not used because the pointer lock\n   * banner annoyingly shifts the entire page down.\n   *\n   * ref: https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API\n   */\n  shouldPointerLock?: boolean\n  /**\n   * The css cursor property during the gesture will be locked to this value\n   */\n  lockCSSCursorTo?: string\n  /**\n   * Called at the start of the gesture. Mind you, that this would be called, even\n   * if the user is just clicking (and not dragging). However, if the gesture turns\n   * out to be a click, then `onDragEnd(false)` will be called. Otherwise,\n   * a series of `onDrag(dx, dy, event)` events will be called, and the\n   * gesture will end with `onDragEnd(true)`.\n   *\n   *\n   * @returns\n   * onDragStart can be undefined, in which case, we always handle useDrag,\n   * but when defined, we can allow the handler to return false to indicate ignore this dragging\n   */\n  onDragStart: (event: MouseEvent) => false | DragHandlers\n  buttons?:\n    | [MouseButton]\n    | [MouseButton, MouseButton]\n    | [MouseButton | MouseButton | MouseButton]\n}\n\n/** How far in total does the cursor have to move before we decide that the user is dragging */\nexport const DRAG_DETECTION_DISTANCE_THRESHOLD = 3\nexport const DRAG_DETECTION_WAS_POINTER_LOCK_MOVEMENT = 100\n\ntype IUseDragStateRef = IUseDragState_NotStarted | IUseDragState_Started\n\ntype IUseDragState_NotStarted = {\n  /** We have not yet encountered a `\"dragstart\"` event. */\n  domDragStarted: false\n}\n\ntype IUseDragState_Started = {\n  /** We have encountered a `\"dragstart\"` event. */\n  domDragStarted: true\n  detection:\n    | IUseDragStateDetection_Detected\n    | IUseDragStateDetection_NotDetected\n  /**\n   * Used when `isPointerLockUsed` is false, so we can calculate\n   * dx / dy based on the difference of the moved pointer from the start position of the pointer.\n   *\n   * This is generally going to give us a much more accurate estimation than accumulating\n   * movementX & movementY values.\n   */\n  startPos: {\n    x: number\n    y: number\n  }\n}\ntype IUseDragStateDetection_NotDetected = {\n  detected: false\n  // Used for detection thresholds\n  /** Accumulated in all directions */\n  totalDistanceMoved: number\n}\n\ntype IUseDragStateDetection_Detected = {\n  detected: true\n  dragMovement: {\n    x: number\n    y: number\n  }\n  /**\n   * Number of drag events since we started guessing this was a drag\n   * This is used to determine if requesting pointer lock causes a\n   * large change to mouse movement (since on at least FF, requesting\n   * pointer lock will move the pointer to the center of the screen)\n   */\n  dragEventCount: number\n}\n\nexport default function useDrag(\n  target: HTMLElement | SVGElement | undefined | null,\n  opts: DragOpts,\n): [isDragging: boolean] {\n  const optsRef = useRef<DragOpts>(opts)\n  optsRef.current = opts\n\n  /**\n   * Safari has a gross behavior with locking the pointer changes the height of the webpage\n   * See {@link DragOpts.shouldPointerLock} for more context.\n   */\n  const isPointerLockUsed = opts.shouldPointerLock && !isSafari\n\n  const stateRef = useRef<IUseDragStateRef>({\n    domDragStarted: false,\n  })\n\n  const {capturePointer} = usePointerCapturing(`useDrag for ${opts.debugName}`)\n\n  const callbacksRef = useRef<{\n    onDrag: OnDragCallback\n    onDragEnd: OnDragEndCallback\n    onClick: OnClickCallback\n  }>({onDrag: noop, onDragEnd: noop, onClick: noop})\n\n  const capturedPointerRef = useRef<undefined | CapturedPointer>()\n  // needed to have a state on the react lifecycle which can be updated\n  // via a ref (e.g. via the below layout effect).\n  const [isDraggingRef, isDragging] = useRefAndState(false)\n  useLayoutEffect(() => {\n    if (!target) return\n    const ensureIsDraggingUpToDateForReactLifecycle = () => {\n      const isDragging =\n        stateRef.current.domDragStarted && stateRef.current.detection.detected\n      if (isDraggingRef.current !== isDragging) {\n        isDraggingRef.current = isDragging\n      }\n    }\n\n    const dragHandler = (event: MouseEvent) => {\n      if (!stateRef.current.domDragStarted) return\n\n      const stateStarted = stateRef.current\n\n      if (didPointerLockCauseMovement(event, stateStarted.detection)) return\n\n      if (!stateStarted.detection.detected) {\n        stateStarted.detection.totalDistanceMoved +=\n          Math.abs(event.movementY) + Math.abs(event.movementX)\n\n        if (\n          stateStarted.detection.totalDistanceMoved >\n          DRAG_DETECTION_DISTANCE_THRESHOLD\n        ) {\n          if (isPointerLockUsed) {\n            target.requestPointerLock()\n          }\n\n          stateStarted.detection = {\n            detected: true,\n            dragMovement: {x: 0, y: 0},\n            dragEventCount: 0,\n          }\n          ensureIsDraggingUpToDateForReactLifecycle()\n        }\n      }\n\n      // drag detection threshold checking\n      if (stateStarted.detection.detected) {\n        stateStarted.detection.dragEventCount += 1\n        const {dragMovement} = stateStarted.detection\n        if (isPointerLockUsed) {\n          // when locked, the pointer event screen position is going to be 0s, since the pointer can't move.\n          // So, we use the movement on the event\n          dragMovement.x += event.movementX\n          dragMovement.y += event.movementY\n        } else {\n          const {startPos} = stateStarted\n          dragMovement.x = event.screenX - startPos.x\n          dragMovement.y = event.screenY - startPos.y\n        }\n\n        callbacksRef.current.onDrag(\n          dragMovement.x,\n          dragMovement.y,\n          event,\n          event.movementX,\n          event.movementY,\n        )\n      }\n    }\n\n    const dragEndHandler = (e: MouseEvent) => {\n      removeDragListeners()\n      if (!stateRef.current.domDragStarted) return\n      const dragHappened = stateRef.current.detection.detected\n      stateRef.current = {domDragStarted: false}\n\n      if (opts.shouldPointerLock && !isSafari) document.exitPointerLock()\n\n      callbacksRef.current.onDragEnd(dragHappened)\n\n      // ensure that the window is focused after a successful drag\n      // this fixes an issue where after dragging something like the playhead\n      // through an iframe, you can immediately hit [space] and the animation\n      // will play, even if you hadn't been focusing in the iframe at the start\n      // of the drag.\n      //\n      // Fixes https://linear.app/theatre/issue/P-177/beginners-scrubbing-the-playhead-from-within-an-iframe-then-[space]\n      window.focus()\n\n      if (!dragHappened) {\n        callbacksRef.current.onClick(e)\n      }\n      ensureIsDraggingUpToDateForReactLifecycle()\n    }\n\n    const addDragListeners = () => {\n      document.addEventListener('mousemove', dragHandler)\n      document.addEventListener('mouseup', dragEndHandler)\n    }\n\n    const removeDragListeners = () => {\n      capturedPointerRef.current?.release()\n      document.removeEventListener('mousemove', dragHandler)\n      document.removeEventListener('mouseup', dragEndHandler)\n    }\n\n    const preventUnwantedClick = (event: MouseEvent) => {\n      if (optsRef.current.disabled) return\n      if (!stateRef.current.domDragStarted) return\n      if (stateRef.current.detection.detected) {\n        if (!optsRef.current.dontBlockMouseDown) {\n          event.stopPropagation()\n          event.preventDefault()\n        }\n        stateRef.current.detection = {\n          detected: false,\n          totalDistanceMoved: 0,\n        }\n        ensureIsDraggingUpToDateForReactLifecycle()\n      }\n    }\n\n    const dragStartHandler = (event: MouseEvent) => {\n      // defensively release\n      capturedPointerRef.current?.release()\n\n      const opts = optsRef.current\n      if (opts.disabled === true) return\n\n      const acceptedButtons: MouseButton[] = opts.buttons ?? [MouseButton.Left]\n\n      if (!acceptedButtons.includes(event.button)) return\n\n      const returnOfOnDragStart = opts.onDragStart(event)\n\n      if (returnOfOnDragStart === false) {\n        // we should ignore the gesture\n        return\n      }\n\n      callbacksRef.current.onDrag = returnOfOnDragStart.onDrag\n      callbacksRef.current.onDragEnd = returnOfOnDragStart.onDragEnd ?? noop\n      callbacksRef.current.onClick = returnOfOnDragStart.onClick ?? noop\n\n      // need to capture pointer after we know the provided handler wants to handle drag start\n      capturedPointerRef.current = capturePointer('Drag start')\n\n      if (!opts.dontBlockMouseDown) {\n        event.stopPropagation()\n        event.preventDefault()\n      }\n\n      stateRef.current = {\n        domDragStarted: true,\n        startPos: {x: event.screenX, y: event.screenY},\n        detection: {\n          detected: false,\n          totalDistanceMoved: 0,\n        },\n      }\n      ensureIsDraggingUpToDateForReactLifecycle()\n\n      addDragListeners()\n    }\n\n    const onMouseDown = (e: MouseEvent) => {\n      dragStartHandler(e)\n    }\n\n    target.addEventListener('mousedown', onMouseDown as $FixMe)\n    target.addEventListener('click', preventUnwantedClick as $FixMe)\n\n    return () => {\n      removeDragListeners()\n      target.removeEventListener('mousedown', onMouseDown as $FixMe)\n      target.removeEventListener('click', preventUnwantedClick as $FixMe)\n\n      if (stateRef.current.domDragStarted) {\n        callbacksRef.current.onDragEnd?.(stateRef.current.detection.detected)\n      }\n      stateRef.current = {domDragStarted: false}\n      ensureIsDraggingUpToDateForReactLifecycle()\n    }\n  }, [target])\n\n  useCssCursorLock(\n    isDragging && !!opts.lockCSSCursorTo,\n    'dragging',\n    opts.lockCSSCursorTo,\n  )\n\n  return [isDragging]\n}\n\n/**\n * shouldPointerLock moves the mouse to the center of your screen in firefox, which\n * can cause it to report very large movementX when the pointer lock begins. This\n * function hackily detects unnaturally large movements of the mouse.\n *\n * @param event - MouseEvent from onDrag\n * @returns\n */\nexport function didPointerLockCauseMovement(\n  event: MouseEvent,\n  detection:\n    | Pick<IUseDragStateDetection_Detected, 'detected' | 'dragEventCount'>\n    | Pick<IUseDragStateDetection_NotDetected, 'detected'>,\n) {\n  const isEarlyInDragging =\n    !detection.detected || (detection.detected && detection.dragEventCount < 3)\n\n  return (\n    isEarlyInDragging &&\n    // sudden movement\n    (Math.abs(event.movementX) > DRAG_DETECTION_WAS_POINTER_LOCK_MOVEMENT ||\n      Math.abs(event.movementY) > DRAG_DETECTION_WAS_POINTER_LOCK_MOVEMENT)\n  )\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useHotspot.ts",
    "content": "import {useEffect, useState} from 'react'\n\nexport default function useHotspot(spot: 'left' | 'right') {\n  const [active, setActive] = useState(false)\n\n  useEffect(() => {\n    const hoverListener = (e: MouseEvent) => {\n      const threshold = active ? 200 : 25\n\n      // This is a super specific solution just for now so that the hotspot region\n      // excludes the pin button.\n      const topBuffer = 56\n\n      let mouseInside =\n        spot === 'left' ? e.x < threshold : e.x > window.innerWidth - threshold\n\n      mouseInside &&= e.y > topBuffer\n\n      if (mouseInside) {\n        setActive(true)\n      } else {\n        setActive(false)\n      }\n    }\n    document.addEventListener('mousemove', hoverListener)\n\n    const leaveListener = () => {\n      setActive(false)\n    }\n\n    document.addEventListener('mouseleave', leaveListener)\n\n    return () => {\n      document.removeEventListener('mousemove', hoverListener)\n      document.removeEventListener('mouseleave', leaveListener)\n    }\n  }, [active])\n\n  return active\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useHover.ts",
    "content": "import {useEffect, useState} from 'react'\n\nexport default function useHover(\n  target: HTMLElement | null | undefined,\n): boolean {\n  const [isHovered, setIsHovered] = useState<boolean>(false)\n\n  useEffect(() => {\n    setIsHovered(false)\n    if (!target) return\n    const onMouseEnter = () => {\n      setIsHovered(true)\n    }\n    const onMouseLeave = () => {\n      setIsHovered(false)\n    }\n\n    target.addEventListener('mouseenter', onMouseEnter)\n    target.addEventListener('mouseleave', onMouseLeave)\n\n    return () => {\n      setIsHovered(false)\n      target.removeEventListener('mouseenter', onMouseEnter)\n      target.removeEventListener('mouseleave', onMouseLeave)\n    }\n  }, [target])\n\n  return isHovered\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useHoverWithoutDescendants.ts",
    "content": "import {useEffect, useState} from 'react'\n\n/**\n * A react hook that returns true if the pointer is hovering over the target element and not its descendants\n */\nexport default function useHoverWithoutDescendants(\n  target: HTMLElement | null | undefined,\n): boolean {\n  const [isHovered, setIsHovered] = useState<boolean>(false)\n\n  useEffect(() => {\n    setIsHovered(false)\n    if (!target) return\n\n    const onMouseEnterOrMove = (e: MouseEvent) => {\n      if (e.target === target) {\n        setIsHovered(true)\n      } else {\n        setIsHovered(false)\n      }\n    }\n    const onMouseLeave = () => {\n      setIsHovered(false)\n    }\n\n    target.addEventListener('mouseenter', onMouseEnterOrMove)\n    target.addEventListener('mousemove', onMouseEnterOrMove)\n    target.addEventListener('mouseleave', onMouseLeave)\n\n    return () => {\n      setIsHovered(false)\n      target.removeEventListener('mouseenter', onMouseEnterOrMove)\n      target.removeEventListener('mousemove', onMouseEnterOrMove)\n      target.removeEventListener('mouseleave', onMouseLeave)\n    }\n  }, [target])\n\n  return isHovered\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useKeyDown.ts",
    "content": "import {useState} from 'react'\nimport useKeyDownCallback from './useKeyDownCallback'\n\nexport default function useKeyDown(\n  combo: Parameters<typeof useKeyDownCallback>[0],\n): boolean {\n  const [state, setState] = useState(false)\n  useKeyDownCallback(combo, ({down}) => {\n    setState(down)\n  })\n  return state\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useKeyDownCallback.tsx",
    "content": "import {useEffect, useRef} from 'react'\n\ntype AcceptableCombo = 'Shift' | 'Meta' | 'Control' | 'Alt'\n\nexport default function useKeyDownCallback(\n  combo: AcceptableCombo,\n  listener: (opts: {down: boolean; event: KeyboardEvent | undefined}) => void,\n) {\n  const refs = useRef({combo, listener})\n  refs.current = {combo, listener}\n  useEffect(() => {\n    function onKeyDown(event: KeyboardEvent) {\n      if (event.key === refs.current.combo) {\n        refs.current.listener({down: true, event})\n      }\n    }\n\n    function onKeyUp(event: KeyboardEvent) {\n      if (event.key === refs.current.combo) {\n        refs.current.listener({down: false, event})\n      }\n    }\n\n    function onBlur(event: unknown) {\n      refs.current.listener({down: false, event: undefined})\n    }\n\n    document.addEventListener('keydown', onKeyDown)\n    document.addEventListener('keyup', onKeyUp)\n    window.addEventListener('blur', onBlur)\n    return () => {\n      document.removeEventListener('keydown', onKeyDown)\n      document.removeEventListener('keyup', onKeyUp)\n      window.removeEventListener('blur', onBlur)\n    }\n  }, [])\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useLockSet.ts",
    "content": "import {useMemo, useState} from 'react'\n\ntype Unlock = () => void\n\ntype AddLock = () => Unlock\n\nexport default function useLockSet(): [isLocked: boolean, addLock: AddLock] {\n  const [isLocked, _setIsLocked] = useState(false)\n  const addLock = useMemo(() => {\n    const locks = new Set()\n    return () => {\n      const unlock = () => {\n        locks.delete(unlock)\n        _setIsLocked(locks.size > 0)\n      }\n      locks.add(unlock)\n      _setIsLocked(true)\n      return unlock\n    }\n  }, [])\n  return [isLocked, addLock]\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useLogger.tsx",
    "content": "import type {ILogger} from '@theatre/utils/logger'\nimport React, {useContext, useMemo} from 'react'\n\nconst loggerContext = React.createContext<ILogger>(null!)\nexport function ProvideLogger(\n  props: React.PropsWithChildren<{logger: ILogger}>,\n) {\n  return (\n    <loggerContext.Provider value={props.logger}>\n      {props.children}\n    </loggerContext.Provider>\n  )\n}\n\nexport function useLogger(name?: string, key?: number | string) {\n  const parentLogger = useContext(loggerContext)\n  return useMemo(() => {\n    if (name) {\n      return parentLogger.named(name, key)\n    } else {\n      return parentLogger\n    }\n  }, [parentLogger, name, key])\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useOnClickOutside.ts",
    "content": "import type {$IntentionalAny} from '@theatre/core/types/public'\nimport {useEffect} from 'react'\n\nexport default function useOnClickOutside(\n  container:\n    | Element\n    | null\n    | React.MutableRefObject<Element | null>\n    | (Element | null | React.MutableRefObject<Element | null>)[],\n  onOutside: (e: MouseEvent) => void,\n  enabled?: boolean,\n  // Can be used e.g. to prevent unexpected closing-reopening when clicking on a\n  // popover's trigger.\n) {\n  useEffect(() => {\n    let containers: Array<Element> = (\n      Array.isArray(container) ? container : [container]\n    )\n      .map((el) => (!el ? null : el instanceof Element ? el : el.current))\n      .filter((el) => !!el) as Element[]\n\n    if (containers.length === 0) return\n\n    const onMouseDown = (e: MouseEvent) => {\n      if (\n        containers.every((container) => !e.composedPath().includes(container))\n      ) {\n        onOutside(e)\n      }\n    }\n\n    window.addEventListener('mousedown', onMouseDown, {\n      capture: true,\n      passive: false,\n    })\n    return () => {\n      window.removeEventListener('mousedown', onMouseDown, {\n        capture: true,\n        passive: false,\n      } as unknown as $IntentionalAny)\n    }\n  }, [container, enabled])\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useOnKeyDown.ts",
    "content": "import {useEffect, useRef} from 'react'\n\nexport default function useOnKeyDown(callback: (ev: KeyboardEvent) => void) {\n  const ref = useRef(callback)\n  ref.current = callback\n  useEffect(() => {\n    const onKeyDown = (ev: KeyboardEvent) => ref.current(ev)\n    window.addEventListener('keydown', onKeyDown)\n    return () => {\n      window.removeEventListener('keydown', onKeyDown)\n    }\n  }, [])\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/usePresence.tsx",
    "content": "import type {StrictRecord} from '@theatre/core/types/public'\nimport React, {useMemo} from 'react'\nimport {useEffect} from 'react'\nimport {useLogger} from './useLogger'\nimport {prism, pointerToPrism} from '@theatre/dataverse'\nimport {Atom} from '@theatre/dataverse'\nimport {usePrismInstance} from '@theatre/react'\nimport {selectClosestHTMLAncestor} from '@theatre/studio/utils/selectClosestHTMLAncestor'\nimport pointerDeep from '@theatre/utils/pointerDeep'\nimport type {StudioSheetItemKey} from '@theatre/core/types/private'\n\n/** To mean the presence value */\nexport enum PresenceFlag {\n  /** Self is hovered or what represents \"self\" is being hovered */\n  Primary = 2,\n  /** Related item is hovered */\n  Secondary = 1,\n  // /** Tutorial */\n  // TutorialEmphasis = 0,\n}\n\nconst undefinedD = prism(() => undefined)\nundefinedD.keepHot() // constant anyway...\n\nfunction createPresenceContext(options: {\n  enabled: boolean\n}): InternalPresenceContext {\n  const currentUserHoverItemB = new Atom<StudioSheetItemKey | undefined>(\n    undefined,\n  )\n  const currentUserHoverFlagItemsAtom = new Atom(\n    {} as StrictRecord<StudioSheetItemKey, boolean>,\n  )\n\n  // keep as part of presence creation\n  const relationsAtom = new Atom(\n    {} as StrictRecord<\n      StudioSheetItemKey,\n      StrictRecord<\n        StudioSheetItemKey,\n        StrictRecord<string, {flag: PresenceFlag}>\n      >\n    >,\n  )\n\n  let lastRelationId = 0\n\n  return {\n    addRelatedFlags(itemKey, relationships) {\n      const relationId = String(++lastRelationId)\n      // \"clean up\" paths returned from relationships declared\n      const undoAtPaths = relationships.map((rel) => {\n        const presence: {flag: PresenceFlag} = {\n          flag: rel.flag,\n        }\n        const path = [rel.affects, itemKey, relationId]\n        relationsAtom.setByPointer((p) => pointerDeep(p, path), presence)\n        return path\n      })\n      return () => {\n        for (const pathToUndo of undoAtPaths) {\n          relationsAtom.setByPointer(\n            (p) => pointerDeep(p, pathToUndo),\n            undefined,\n          )\n        }\n      }\n    },\n    usePresenceFlag(itemKey) {\n      if (!options.enabled) return undefined\n\n      const focusD = useMemo(() => {\n        if (!itemKey) return undefinedD\n        // this is the thing being hovered\n        const currentD = currentUserHoverItemB.prism\n        const primaryFocusDer = pointerToPrism(\n          currentUserHoverFlagItemsAtom.pointer[itemKey],\n        )\n        const relationsDer = pointerToPrism(relationsAtom.pointer[itemKey])\n        return prism(() => {\n          const primary = primaryFocusDer.getValue()\n          if (primary) {\n            return PresenceFlag.Primary\n          } else {\n            const related = relationsDer.getValue()\n            const current = currentD.getValue()\n            const rels = related && current && related[current]\n            if (rels) {\n              // can this be cached into a derived atom?\n              let best: PresenceFlag | undefined\n              for (const rel of Object.values(rels)) {\n                if (!rel) continue\n                if (best && best >= rel.flag) continue\n                best = rel.flag\n              }\n              return best\n            }\n            return undefined\n          }\n        })\n      }, [itemKey])\n      return usePrismInstance(focusD)\n    },\n    setUserHover(itemKeyOpt) {\n      const prev = currentUserHoverItemB.get()\n      if (prev === itemKeyOpt) {\n        return\n      }\n      if (prev) {\n        currentUserHoverFlagItemsAtom.setByPointer((p) => p[prev], false)\n      }\n      currentUserHoverItemB.set(itemKeyOpt)\n      if (itemKeyOpt) {\n        currentUserHoverFlagItemsAtom.setByPointer((p) => p[itemKeyOpt], true)\n      }\n    },\n  }\n}\n\ntype FlagRelationConfig = {\n  affects: StudioSheetItemKey\n  /** adds this flag to affects */\n  flag: PresenceFlag\n}\n\ntype InternalPresenceContext = {\n  usePresenceFlag(\n    itemKey: StudioSheetItemKey | undefined,\n  ): PresenceFlag | undefined\n  setUserHover(itemKey: StudioSheetItemKey | undefined): void\n  addRelatedFlags(\n    itemKey: StudioSheetItemKey,\n    config: Array<FlagRelationConfig>,\n  ): () => void\n}\n\nconst presenceInternalCtx = React.createContext<InternalPresenceContext>(\n  createPresenceContext({enabled: false}),\n)\nexport function ProvidePresenceRoot({children}: React.PropsWithChildren<{}>) {\n  const presence = useMemo(() => createPresenceContext({enabled: false}), [])\n  return React.createElement(\n    presenceInternalCtx.Provider,\n    {children, value: presence},\n    children,\n  )\n}\n\nconst PRESENCE_ITEM_DATA_ATTR = 'data-pi-key'\n\nexport default function usePresence(key: StudioSheetItemKey | undefined): {\n  attrs: {[attr: `data-${string}`]: string}\n  flag: PresenceFlag | undefined\n  useRelations(getRelations: () => Array<FlagRelationConfig>, deps: any[]): void\n} {\n  const presenceInternal = React.useContext(presenceInternalCtx)\n  const flag = presenceInternal.usePresenceFlag(key)\n\n  return {\n    attrs: {\n      [PRESENCE_ITEM_DATA_ATTR]: key as string,\n    },\n    flag,\n    useRelations(getRelations, deps) {\n      useEffect(() => {\n        return key && presenceInternal.addRelatedFlags(key, getRelations())\n      }, [key, ...deps])\n    },\n  }\n}\n\nexport function usePresenceListenersOnRootElement(\n  target: HTMLElement | null | undefined,\n) {\n  const presence = React.useContext(presenceInternalCtx)\n  const logger = useLogger('PresenceListeners')\n  useEffect(() => {\n    // keep track of current primary hover to make sure we make changes to presence distinct\n    let currentItemKeyUserHover: any\n    if (!target) return\n    const onMouseOver = (event: MouseEvent) => {\n      if (event.target instanceof Node) {\n        const found = selectClosestHTMLAncestor(\n          event.target,\n          `[${PRESENCE_ITEM_DATA_ATTR}]`,\n        )\n        if (found) {\n          const itemKey = found.getAttribute(PRESENCE_ITEM_DATA_ATTR)\n          if (currentItemKeyUserHover !== itemKey) {\n            currentItemKeyUserHover = itemKey\n            presence.setUserHover(\n              (itemKey || undefined) as StudioSheetItemKey | undefined,\n            )\n            logger._debug('Updated current hover', {itemKey})\n          }\n          return\n        }\n\n        // remove hover\n        if (currentItemKeyUserHover != null) {\n          currentItemKeyUserHover = null\n          presence.setUserHover(undefined)\n          logger._debug('Cleared current hover')\n        }\n      }\n    }\n\n    target.addEventListener('mouseover', onMouseOver)\n\n    return () => {\n      target.removeEventListener('mouseover', onMouseOver)\n      // remove hover\n      if (currentItemKeyUserHover != null) {\n        currentItemKeyUserHover = null\n        logger._debug('Cleared current hover as part of cleanup')\n      }\n    }\n  }, [target, presence])\n}\n"
  },
  {
    "path": "packages/studio/src/uiComponents/useValToAtom.ts",
    "content": "import {Atom} from '@theatre/dataverse'\nimport {useLayoutEffect, useMemo} from 'react'\n\nexport default function useValToAtom<S>(val: S): Atom<S> {\n  const atom = useMemo(() => {\n    return new Atom(val)\n  }, [])\n\n  useLayoutEffect(() => {\n    atom.set(val)\n  }, [val])\n\n  return atom\n}\n"
  },
  {
    "path": "packages/studio/src/utils/absoluteDims.tsx",
    "content": "/** Create CSS rule string for centered and give it this width and height */\nexport const absoluteDims = (w: number, h = w) => `\n  left: ${w * -0.5}px;\n  top: ${h * -0.5}px;\n  width: ${w}px;\n  height: ${h}px;\n`\n"
  },
  {
    "path": "packages/studio/src/utils/assets.ts",
    "content": "import type {Asset} from '@theatre/core/types/public'\nimport type Project from '@theatre/core/projects/Project'\nimport {val} from '@theatre/dataverse'\nimport type {$IntentionalAny} from '@theatre/core/types/public'\nimport {__private} from '@theatre/core'\nconst {forEachPropDeep} = __private.propTypeUtils\nconst {keyframeUtils} = __private\n\nexport function getAllPossibleAssetIDs(project: Project, type?: string) {\n  const sheets = Object.values(val(project.pointers.historic.sheetsById) ?? {})\n  const staticValues = sheets\n    .flatMap((sheet) => Object.values(sheet?.staticOverrides.byObject ?? {}))\n    .flatMap((overrides) => Object.values(overrides ?? {}))\n\n  const keyframeValues = sheets\n    .flatMap((sheet) => Object.values(sheet?.sequence?.tracksByObject ?? {}))\n    .flatMap((tracks) => Object.values(tracks?.trackData ?? {}))\n    .flatMap((track) =>\n      keyframeUtils.getSortedKeyframesCached(\n        track?.keyframes ?? {byId: {}, allIds: {}},\n      ),\n    )\n    .map((keyframe) => keyframe?.value)\n\n  const allValues = [...keyframeValues]\n  staticValues.forEach((value) => {\n    forEachPropDeep(\n      value,\n      (v) => {\n        allValues.push(v as $IntentionalAny)\n      },\n      [],\n    )\n  })\n\n  const allAssets = allValues\n    // value is Asset of the type provided\n    .filter((value) => {\n      return (\n        (value as Asset | undefined)?.type &&\n        (type\n          ? (value as Asset | undefined)?.type == type\n          : typeof (value as Asset | undefined)?.type === 'string')\n      )\n    })\n    // map assets to their ids\n    .map((value) => (value as Asset).id)\n    // ensure ids are unique and not null and not empty\n    .filter(\n      (id, index, self) =>\n        id !== null && id !== '' && self.indexOf(id) === index,\n    ) as string[]\n\n  return allAssets\n}\n"
  },
  {
    "path": "packages/studio/src/utils/contextualWebComponents.tsx",
    "content": "import type {$IntentionalAny} from '@theatre/core/types/public'\nimport type React from 'react'\nimport {getMounter} from './renderInPortalInContext'\n\nexport function registerContextualWebComponent<Props>(\n  ReactComponent: React.ComponentType<Props>,\n  componentName: string,\n  // currently only supporting string prop types\n  propKeys: {[propKey in keyof Props]: 'string'},\n): void {\n  if (typeof window === 'undefined' || typeof customElements === 'undefined')\n    return\n\n  const propList = Object.keys(propKeys)\n\n  class CustomWebComponent extends HTMLElement {\n    _mounted = false\n    _mountOrRender: ReturnType<typeof getMounter>['mountOrRender']\n    _unmount: ReturnType<typeof getMounter>['unmount']\n    static get observedAttributes() {\n      return propList\n    }\n    constructor() {\n      super()\n      const {mountOrRender, unmount} = getMounter()\n      this._mountOrRender = mountOrRender\n      this._unmount = unmount\n    }\n\n    connectedCallback() {\n      // const shadow = this.attachShadow({mode: 'open'})\n      this._mounted = true\n      this._render()\n    }\n\n    _render() {\n      const props = Object.fromEntries(\n        propList.map((propName) => [\n          propName,\n          this.getAttribute(propName as $IntentionalAny),\n        ]),\n      )\n      this._mountOrRender(ReactComponent, props as $IntentionalAny, this)\n    }\n\n    attributeChangedCallback() {\n      if (!this._mounted) return\n      this._render()\n    }\n\n    disconnectedCallback() {\n      this._mounted = false\n      this._unmount()\n    }\n  }\n\n  customElements.define(componentName, CustomWebComponent)\n}\n"
  },
  {
    "path": "packages/studio/src/utils/createStudioSheetItemKey.ts",
    "content": "import type SheetObject from '@theatre/core/sheetObjects/SheetObject'\nimport type {PathToProp} from '@theatre/utils/pathToProp'\nimport stableValueHash from '@theatre/utils/stableJsonStringify'\nimport type Sheet from '@theatre/core/sheets/Sheet'\nimport type {KeyframeId, SequenceTrackId} from '@theatre/core/types/public'\nimport type {StudioSheetItemKey} from '@theatre/core/types/private'\n\n/**\n * This will not necessarily maintain consistent key values if any\n * versioning happens where something needs to\n */\nexport const createStudioSheetItemKey = {\n  forSheet(): StudioSheetItemKey {\n    return 'sheet' as StudioSheetItemKey\n  },\n  forSheetObject(obj: SheetObject): StudioSheetItemKey {\n    return stableValueHash({\n      o: obj.address.objectKey,\n    }) as StudioSheetItemKey\n  },\n  forSheetObjectProp(\n    obj: SheetObject,\n    pathToProp: PathToProp,\n  ): StudioSheetItemKey {\n    return stableValueHash({\n      o: obj.address.objectKey,\n      p: pathToProp,\n    }) as StudioSheetItemKey\n  },\n  forTrackKeyframe(\n    obj: SheetObject,\n    trackId: SequenceTrackId,\n    keyframeId: KeyframeId,\n  ): StudioSheetItemKey {\n    return stableValueHash({\n      o: obj.address.objectKey,\n      t: trackId,\n      k: keyframeId,\n    }) as StudioSheetItemKey\n  },\n  forSheetObjectAggregateKeyframe(\n    obj: SheetObject,\n    position: number,\n  ): StudioSheetItemKey {\n    return createStudioSheetItemKey.forCompoundPropAggregateKeyframe(\n      obj,\n      [],\n      position,\n    )\n  },\n  forSheetAggregateKeyframe(obj: Sheet, position: number): StudioSheetItemKey {\n    return stableValueHash({\n      o: obj.address.sheetId,\n      pos: position,\n    }) as StudioSheetItemKey\n  },\n  forCompoundPropAggregateKeyframe(\n    obj: SheetObject,\n    pathToProp: PathToProp,\n    position: number,\n  ): StudioSheetItemKey {\n    return stableValueHash({\n      o: obj.address.objectKey,\n      p: pathToProp,\n      pos: position,\n    }) as StudioSheetItemKey\n  },\n}\n"
  },
  {
    "path": "packages/studio/src/utils/derive-utils.tsx",
    "content": "import {isPrism, prism, val} from '@theatre/dataverse'\nimport type {Prism, Pointer} from '@theatre/dataverse'\nimport {usePrismInstance} from '@theatre/react'\nimport type {$FixMe, $IntentionalAny} from '@theatre/core/types/public'\nimport React, {useMemo, useRef} from 'react'\nimport {invariant} from './invariant'\n\ntype DeriveAll<T> = Prism<{\n  [P in keyof T]: T[P] extends $<infer R> ? R : never\n}>\n\nexport type $<T> = Prism<T> | Pointer<T>\n\nfunction deriveAllD<T extends [...$<any>[]]>(obj: T): DeriveAll<T>\nfunction deriveAllD<T extends Record<string, $<any>>>(obj: T): DeriveAll<T>\nfunction deriveAllD<T extends Record<string, $<any>> | $<any>[]>(\n  obj: T,\n): DeriveAll<T> {\n  return prism(() => {\n    if (Array.isArray(obj)) {\n      const values = new Array(obj.length)\n      for (let i = 0; i < obj.length; i++) {\n        values[i] = obj[i].getValue()\n      }\n      return values\n    } else {\n      const values: $IntentionalAny = {}\n      for (const k in obj) {\n        values[k] = val((obj as Record<string, $<any>>)[k])\n      }\n      return values\n    }\n  }) as $IntentionalAny\n}\n\n/** This is only used for type checking to make sure the APIs are used properly */\ninterface TSErrors<M> extends Error {}\n\ntype ReactDeriver<Props extends {}> = (props: {\n  [P in keyof Props]: Props[P] extends Prism<infer _>\n    ? TSErrors<\"Can't both use Derivation properties while wrapping with deriver\">\n    : Props[P] | Prism<Props[P]>\n}) => React.ReactElement | null\n\n/**\n * Wrap up the component to enable it to take derivable properties.\n * Invoked similarly to `React.memo`.\n *\n * @remarks\n * This is an experimental interface for wrapping components in a version\n * which allows you to pass in derivations for any of the properties that\n * previously took only values.\n */\nexport function deriver<Props extends {}>(\n  Component: React.ComponentType<Props>,\n): ReactDeriver<Omit<Props, keyof JSX.IntrinsicAttributes>> {\n  const finalComp = React.memo(\n    React.forwardRef(function deriverRender(\n      props: Record<string, $IntentionalAny>,\n      ref,\n    ) {\n      let observableArr = []\n      const observables: Record<string, Prism<$IntentionalAny>> = {}\n      const normalProps: Record<string, $IntentionalAny> = {\n        ref,\n      }\n      for (const key in props) {\n        const value = props[key]\n        if (isPrism(value)) {\n          observableArr.push(value)\n          observables[key] = value\n        } else {\n          normalProps[key] = value\n        }\n      }\n\n      const initialCount = useRef(observableArr.length)\n      invariant(\n        initialCount.current === observableArr.length,\n        `expect same number of observable props on every invocation of deriver wrapped component.`,\n        {initial: initialCount.current, count: observableArr.length},\n      )\n\n      const allD = useMemo(() => deriveAllD(observables), observableArr)\n      const observedPropState = usePrismInstance(allD)\n\n      return (\n        observedPropState &&\n        React.createElement(Component, {\n          ...normalProps,\n          ...observedPropState,\n        } as Props)\n      )\n    }),\n  )\n\n  finalComp.displayName = `deriver(${Component.displayName})`\n\n  return finalComp as $FixMe\n}\n"
  },
  {
    "path": "packages/studio/src/utils/ids.ts",
    "content": "import {nanoid as generateNonSecure} from 'nanoid/non-secure'\nimport type {SequenceMarkerId} from '@theatre/core/types/public'\n\nexport function generateSequenceMarkerId(): SequenceMarkerId {\n  return generateNonSecure(10) as SequenceMarkerId\n}\n"
  },
  {
    "path": "packages/studio/src/utils/invariant.ts",
    "content": "import {devStringify} from '@theatre/utils/devStringify'\n\ntype AllowedMessageTypes = string | number | object\n\n/**\n * invariants are like `expect` from jest or another testing library but\n * for use in implementations and not just tests. If the `condition` passed\n * to `invariant` is falsy then `message`, and optionally `found`, are thrown as a\n * {@link InvariantError} which has a developer-readable and command line friendly\n * stack trace and error message.\n */\nexport function invariant(\n  shouldBeTruthy: any,\n  message: (() => AllowedMessageTypes) | AllowedMessageTypes,\n  butFoundInstead?: any,\n): asserts shouldBeTruthy {\n  if (!shouldBeTruthy) {\n    const isFoundArgGiven = arguments.length > 2\n    if (isFoundArgGiven) {\n      invariantThrow(message, butFoundInstead)\n    } else {\n      invariantThrow(message)\n    }\n  }\n}\n\n/**\n * Throws an error message with a developer-readable and command line friendly\n * string of the argument `butFoundInstead`.\n *\n * Also see {@link invariant}, which accepts a condition.\n */\nexport function invariantThrow(\n  message: (() => AllowedMessageTypes) | AllowedMessageTypes,\n  butFoundInstead?: any,\n): never {\n  const isFoundArgGiven = arguments.length > 1\n  const prefix = devStringify(\n    typeof message === 'function' ? message() : message,\n  )\n  const suffix = isFoundArgGiven\n    ? `\\nInstead found: ${devStringify(butFoundInstead)}`\n    : ''\n  throw new InvariantError(`Invariant: ${prefix}${suffix}`, butFoundInstead)\n}\n\n/**\n * Enable exhaustive checking\n *\n * @example\n * ```ts\n * function a(x: 'a' | 'b') {\n *   if (x === 'a') {\n *\n *   } else if (x === 'b') {\n *\n *   } else {\n *     invariantUnreachable(x)\n *   }\n * }\n * ```\n */\nexport function invariantUnreachable(x: never): never {\n  invariantThrow(\n    'invariantUnreachable encountered value which was supposed to be never',\n    x,\n  )\n}\n\n// regexes to remove lines from thrown error stacktraces\nconst AT_NODE_INTERNAL_RE = /^\\s*at.+node:internal.+/gm\nconst AT_INVARIANT_RE = /^\\s*(at|[^@]+@) (?:Object\\.)?invariant.+/gm\nconst AT_TEST_HELPERS_RE = /^\\s*(at|[^@]+@).+test\\-helpers.+/gm\n// const AT_WEB_MODULES = /^\\s*(at|[^@]+@).+(web_modules|\\-[a-f0-9]{8}\\.js).*/gm\nconst AT_ASSORTED_HELPERS_RE =\n  /^\\s*(at|[^@]+@).+(debounce|invariant|iif)\\.[tj]s.*/gm\n\n/**\n * `InvariantError` removes lines from the `Error.stack` stack trace string\n * which cleans up the stack trace, making it more developer friendly to read.\n */\nclass InvariantError extends Error {\n  found: any\n  constructor(message: string, found?: any) {\n    super(message)\n    if (found !== undefined) {\n      this.found = found\n    }\n    // const before = this.stack\n    // prettier-ignore\n    this.stack = this.stack\n      ?.replace(AT_INVARIANT_RE, \"\")\n      .replace(AT_ASSORTED_HELPERS_RE, \"\")\n      .replace(AT_TEST_HELPERS_RE, \"\")\n      .replace(AT_NODE_INTERNAL_RE, \"\")\n    // console.error({ before, after: this.stack })\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/utils/mousePositionD.ts",
    "content": "import {prism} from '@theatre/dataverse'\n\n/**\n * A prism that holds the current mouse position.\n */\nconst mousePositionD = prism(() => {\n  const [pos, setPos] = prism.state<MouseEvent | null>('pos', null)\n  prism.effect(\n    'setupListeners',\n    () => {\n      const handleMouseMove = (e: MouseEvent) => {\n        setPos(e)\n      }\n      document.addEventListener('mousemove', handleMouseMove)\n\n      return () => {\n        document.removeEventListener('mousemove', handleMouseMove)\n      }\n    },\n    [],\n  )\n\n  return pos\n})\n\nexport default mousePositionD\n"
  },
  {
    "path": "packages/studio/src/utils/renderInPortalInContext.tsx",
    "content": "import {Atom} from '@theatre/dataverse'\nimport {useVal} from '@theatre/react'\nimport type {$FixMe, $IntentionalAny} from '@theatre/core/types/public'\nimport React from 'react'\nimport {createPortal} from 'react-dom'\n\ntype ElToRenderInContext = {\n  comp: React.ComponentType<$IntentionalAny>\n  props: {}\n  portalNode: HTMLElement | SVGElement\n}\n\nconst theAtom = new Atom<{\n  set: Record<number, true>\n  byId: Record<number, ElToRenderInContext>\n}>({\n  set: {},\n  byId: {},\n})\n\nlet lastId = 1\n\nexport const getMounter = () => {\n  const id = lastId++\n  function mountOrRender<Props extends {}>(\n    comp: React.ComponentType<Props>,\n    props: Props,\n    portalNode: HTMLElement,\n  ) {\n    theAtom.reduce((s) => {\n      return {\n        byId: {...s.byId, [id]: {comp, props, portalNode}},\n        set: {...s.set, [id]: true},\n      }\n    })\n  }\n\n  function unmount() {\n    theAtom.reduce((s) => {\n      const set = {...s.set}\n      const byId = {...s.byId}\n      delete set[id]\n      return {byId, set}\n    })\n  }\n\n  return {mountOrRender, unmount}\n}\n\nexport const MountAll = () => {\n  const ids = Object.keys(useVal(theAtom.pointer.set))\n  return (\n    <>\n      {ids.map((id) => (\n        <Mount key={'id-' + id} id={id} />\n      ))}\n    </>\n  )\n}\n\nconst Mount = ({id}: {id: number}) => {\n  const {comp, portalNode, props} = useVal(theAtom.pointer.byId[id])\n  const Comp = comp as $FixMe\n\n  return createPortal(<Comp {...props} />, portalNode)\n}\n"
  },
  {
    "path": "packages/studio/src/utils/selectClosestHTMLAncestor.ts",
    "content": "/**\n * Traverse upwards from the current element to find the first element that matches the selector.\n */\nexport function selectClosestHTMLAncestor(\n  start: Element | Node | null,\n  selector: string,\n): Element | null {\n  if (start == null) return null\n  if (start instanceof Element && start.matches(selector)) {\n    return start\n  } else {\n    return selectClosestHTMLAncestor(start.parentElement, selector)\n  }\n}\n"
  },
  {
    "path": "packages/studio/src/utils/useRefAndState.ts",
    "content": "import type {MutableRefObject} from 'react'\nimport {useMemo, useState} from 'react'\n\n/**\n * Combines useRef() and useState().\n *\n * @example\n * Usage:\n * ```ts\n * const [ref, val] = useRefAndState<HTMLDivElement | null>(null)\n *\n * useEffect(() => {\n *   val.addEventListener(...)\n * }, [val])\n *\n * return <div ref={ref}></div>\n * ```\n */\nexport default function useRefAndState<T>(\n  initialValue: T,\n): [ref: MutableRefObject<T>, state: T] {\n  const ref = useMemo(() => {\n    let current = initialValue\n    return {\n      get current() {\n        return current\n      },\n      set current(v: T) {\n        if (v === current) return\n        current = v\n        setState(v)\n      },\n    }\n  }, [])\n\n  const [state, setState] = useState<T>(() => initialValue)\n\n  return [ref, state]\n}\n"
  },
  {
    "path": "packages/studio/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \".temp/declarations\",\n    \"lib\": [\"es2017\", \"dom\", \"ESNext\"],\n    \"rootDir\": \".\",\n    \"composite\": true,\n    \"types\": [\"jest\", \"node\"],\n    \"emitDeclarationOnly\": true,\n    \"plugins\": [\n      {\n        \"name\": \"@styled/typescript-styled-plugin\",\n        \"lint\": {\n          \"unknownProperties\": \"ignore\"\n        }\n      }\n    ]\n  },\n  \"references\": [\n    {\"path\": \"../core\"},\n    {\"path\": \"../utils\"},\n    {\"path\": \"../dataverse\"},\n    {\"path\": \"../react\"},\n    {\"path\": \"../app\"},\n    {\"path\": \"../sync-server\"},\n    {\"path\": \"../saaz\"}\n  ],\n  \"include\": [\n    \"../core/globals.d.ts\",\n    \"./globals.d.ts\",\n    \"./src/**/*\",\n    \"./devEnv/**/*\"\n  ],\n  \"exclude\": [\"**/node_modules\", \"**/.*\", \"**/xeno\", \"**/dist\", \"**/.temp\"]\n}\n"
  },
  {
    "path": "packages/sync-server/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n.pnpm-debug.log*\n\n# local env files\n.env*.local\n/.env\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "packages/sync-server/README.md",
    "content": "The sync-server.\n\nImplementation status:\n\n- [x] Expose `@theatre/saaz` through tRPC.\n- [ ] Store `SaazBack`'s state in the DB\n"
  },
  {
    "path": "packages/sync-server/devEnv/cli.ts",
    "content": "import sade from 'sade'\nimport {$, fs, path} from '@cspotcode/zx'\nimport {config} from 'dotenv'\nimport {fromZodError} from 'zod-validation-error'\nimport * as envSchema from 'src/envSchema'\nimport type {Env} from 'src/envSchema'\n\nconst isProduction = process.env.NODE_ENV === 'production'\n\nif (!isProduction) {\n  if (!fs.existsSync(path.join(__dirname, '..', '.env'))) {\n    console.log(`Creating .env file`)\n    fs.copyFileSync(\n      path.join(__dirname, '..', '.env.example'),\n      path.join(__dirname, '..', '.env'),\n    )\n  }\n  config({path: '.env'})\n}\n\nconst usedSchema = isProduction\n  ? envSchema.productionSchema\n  : envSchema.devSchema\n\nfunction validateEnv() {\n  try {\n    usedSchema.parse(process.env)\n  } catch (error) {\n    console.error(\"Environment variables aren't valid.\")\n    console.error(fromZodError(error as any))\n    throw error\n  }\n\n  const env: Env = process.env as any\n  const url = new URL(env.DATABASE_URL)\n  if (url.protocol !== 'postgresql:' && url.protocol !== 'postgres:') {\n    throw new Error(`DATABASE_URL protocol must be postgresql: Given: ${url}`)\n  }\n\n  if (env.NODE_ENV !== 'production') {\n    if (\n      env.DATABASE_URL !==\n      `postgresql://postgres:${env.DEV_DB_PASSWORD}@localhost:${env.DEV_DB_PORT}/postgres`\n    ) {\n      throw new Error(\n        `We're in dev mode, so DATABASE_URL must match the other DB variables set in .env. DATABASE_URL should be: postgresql://postgres:${env.DEV_DB_PASSWORD}@localhost:${env.DEV_DB_PORT}/postgres`,\n      )\n    }\n  }\n}\n\nconst packageRoot = path.join(__dirname, '..')\n\nconst prog = sade('cli')\n\nprog\n  .command('dev all', 'Start all the development services, including next.js')\n  .action(async () => {\n    validateEnv()\n    await devDb()\n    await devServer()\n  })\n\nasync function devServer() {\n  validateEnv()\n  await $`tsx watch src/index.ts --tsconfig tsconfig.json`\n}\nprog.command('dev start', 'Start dev server').action(devServer)\n\nasync function devDb() {\n  validateEnv()\n  await devDbDocker()\n\n  await $`prisma generate`\n  await $`prisma migrate dev`\n  await $`prisma db seed`\n}\n\nprog.command('dev db', 'Start the database service').action(devDb)\n\nasync function devDbDocker() {\n  validateEnv()\n  await $`docker-compose up -d`\n  // wait for the database to be ready\n  await $`while ! (docker-compose ps postgres | grep -q \"Up\"); do sleep 2; done`\n}\nprog\n  .command(\n    'dev db docker',\n    `Start the database service. Don't generate bindings`,\n  )\n  .action(devDbDocker)\n\nprog.command('dev db nuke', 'Nuke the database').action(async () => {\n  validateEnv()\n  await $`docker-compose down --volumes --remove-orphans`\n  await $`rm -rf prisma/*.db**`\n})\n\nprog\n  .command('dev setup', 'Setup the development environment')\n  .action(async () => {\n    if (!fs.existsSync(path.join(packageRoot, '.env'))) {\n      console.log(`Creating .env file`)\n      fs.copyFileSync(\n        path.join(packageRoot, '.env.example'),\n        path.join(packageRoot, '.env'),\n      )\n    }\n  })\n\nprog.command('prod build', 'Build for production').action(async () => {\n  validateEnv()\n  await $`prisma migrate deploy`\n})\n\nprog.command('prod start', 'Start in production mode').action(async () => {\n  validateEnv()\n  await $`tsx src/index.ts --tsconfig tsconfig.json`\n})\n\nprog.command('prebuild', 'Prebuild').action(async () => {\n  validateEnv()\n  await $`prisma generate`\n  await $`tsc --project tsconfig.json`\n  await $`prisma migrate deploy`\n})\n\nprog.parse(process.argv)\n"
  },
  {
    "path": "packages/sync-server/docker-compose.yml",
    "content": "version: '3.6'\nservices:\n  postgres:\n    image: postgres:13\n    ports:\n      - '${DEV_DB_PORT}:5432'\n    restart: always\n    volumes:\n      - ./.temp/postgres/data:/var/lib/postgresql/data\n    env_file:\n      - ./.env\n    environment:\n      POSTGRES_PASSWORD: ${DEV_DB_PASSWORD}\n      POSTGRES_HOST_AUTH_METHOD: trust\n"
  },
  {
    "path": "packages/sync-server/env.d.ts",
    "content": "// Ideally we'd type process.env so that it matches our Env type in `src/envSchema.ts`, but since other packages in the monorepo\n// do the same, TS acts flaky, which is likely becuase a bug in TS itself. Our workaround is to use `./src/env.ts` as a typed proxy\n// to `process.env` and import that instead.\n\nexport {}\n"
  },
  {
    "path": "packages/sync-server/package.json",
    "content": "{\n  \"name\": \"@theatre/sync-server\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"build\": \"yarn cli build\",\n    \"cli\": \"tsx devEnv/cli.ts\",\n    \"prebuild\": \"yarn cli prebuild\",\n    \"postinstall\": \"prisma generate\"\n  },\n  \"prisma\": {\n    \"seed\": \"tsx prisma/seed.ts\"\n  },\n  \"dependencies\": {\n    \"@cspotcode/zx\": \"^6.1.2\",\n    \"@prisma/client\": \"^4.12.0\",\n    \"@theatre/app\": \"workspace:*\",\n    \"@theatre/core\": \"workspace:*\",\n    \"@theatre/saaz\": \"workspace:*\",\n    \"@theatre/utils\": \"workspace:*\",\n    \"@trpc/client\": \"^10.43.0\",\n    \"@trpc/server\": \"^10.43.0\",\n    \"@types/node\": \"20.10.5\",\n    \"@types/ws\": \"^8.5.5\",\n    \"cross-env\": \"^7.0.3\",\n    \"dotenv\": \"^16.3.1\",\n    \"esbuild\": \"^0.17.15\",\n    \"immer\": \"9.0.6\",\n    \"jose\": \"^4.14.4\",\n    \"lodash-es\": \"4.17.21\",\n    \"nanoid\": \"3.3.1\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"prisma\": \"^4.12.0\",\n    \"sade\": \"^1.8.1\",\n    \"superjson\": \"^1.13.1\",\n    \"tsx\": \"^3.12.7\",\n    \"typescript\": \"5.1.6\",\n    \"ws\": \"^8.13.0\",\n    \"yaml\": \"^2.3.1\",\n    \"zod\": \"^3.22.4\",\n    \"zod-validation-error\": \"^1.5.0\"\n  }\n}\n"
  },
  {
    "path": "packages/sync-server/prisma/.gitignore",
    "content": "client-generated"
  },
  {
    "path": "packages/sync-server/prisma/migrations/20230409105406_init/migration.sql",
    "content": "-- CreateTable\nCREATE TABLE \"ProjectState\" (\n    \"id\" TEXT NOT NULL,\n    \"data\" JSONB NOT NULL,\n\n    CONSTRAINT \"ProjectState_pkey\" PRIMARY KEY (\"id\")\n);\n"
  },
  {
    "path": "packages/sync-server/prisma/migrations/migration_lock.toml",
    "content": "# Please do not edit this file manually\n# It should be added in your version-control system (i.e. Git)\nprovider = \"postgresql\""
  },
  {
    "path": "packages/sync-server/prisma/schema.prisma",
    "content": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ngenerator client {\n  provider = \"prisma-client-js\"\n  output   = \"./client-generated\"\n}\n\ndatasource db {\n  provider = \"postgresql\"\n  url      = env(\"DATABASE_URL\")\n}\n\nmodel ProjectState {\n  id   String @id\n  data Json\n}\n"
  },
  {
    "path": "packages/sync-server/prisma/seed.ts",
    "content": "/**\n * Adds seed data to your db\n *\n * See https://www.prisma.io/docs/guides/database/seed-database\n */\nimport {PrismaClient} from './client-generated'\n\nconst prisma = new PrismaClient()\n\nasync function main() {\n  // nothing to seed rn\n}\n\nmain()\n  .catch((e) => {\n    console.error(e)\n    process.exit(1)\n  })\n  .finally(async () => {\n    await prisma.$disconnect()\n  })\n"
  },
  {
    "path": "packages/sync-server/src/appClient.ts",
    "content": "import type {AppRouter} from '@theatre/app/src/server/api/root'\nimport {createTRPCProxyClient, httpBatchLink} from '@trpc/client'\nimport superjson from 'superjson'\nimport {env} from './env'\n\nexport let appHost = env.APP_URL\n// if host does not start with a protocol:\nif (!appHost.startsWith('http')) {\n  // then assume it's https\n  appHost = 'https://' + appHost\n}\n\nconst appClient = createTRPCProxyClient<AppRouter>({\n  links: [\n    httpBatchLink({\n      url: appHost + '/api/trpc',\n    }),\n  ],\n  transformer: superjson,\n})\n\n// if (process.env.NODE_ENV === 'development') {\n//   void appClient..query({name: 'the lib'}).then((res) => {\n//     console.log('app/healthCheck', res)\n//   })\n// }\n\nexport default appClient\n"
  },
  {
    "path": "packages/sync-server/src/env.test.ts",
    "content": "import * as envSchema from './envSchema'\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport * as dotenv from 'dotenv'\nimport * as yaml from 'yaml'\n\ndescribe(`@theatre/sync-server env`, () => {\n  describe(`.env files`, () => {\n    test(`.env.example should be valid`, () => {\n      const pathToEnvExample = path.join(__dirname, '../.env.example')\n      const envAsString = fs.readFileSync(pathToEnvExample, {encoding: 'utf8'})\n      // this should use an INI parser\n      const envAsObject = dotenv.parse(envAsString)\n      envSchema.devSchema.parse(envAsObject)\n    })\n\n    test(`.env should be valid (if it exists)`, () => {\n      const pathToEnvExample = path.join(__dirname, '../.env')\n      if (!fs.existsSync(pathToEnvExample)) {\n        return\n      }\n      const envAsString = fs.readFileSync(pathToEnvExample, {encoding: 'utf8'})\n      // this should use an INI parser\n      const envAsObject = dotenv.parse(envAsString)\n      envSchema.devSchema.parse(envAsObject)\n    })\n  })\n  describe(`render.yaml`, () => {\n    test(`should include all the env variables required by the production schema`, () => {\n      const pathToRenderYaml = path.join(__dirname, '../../../render.yaml')\n      const yamlContent = yaml.parse(\n        fs.readFileSync(pathToRenderYaml, {encoding: 'utf8'}),\n      )\n\n      const service = yamlContent.services.find(\n        (service: any) => service.name === 'syncServer',\n      )\n\n      if (!service) {\n        throw new Error(`syncServer service not found`)\n      }\n\n      const envVars: Array<{key: string}> = service.envVars\n      const envVarKeys = envVars.map((envVar) => envVar.key)\n      // PORT is automatically added by render\n      envVarKeys.push('PORT')\n\n      const requiredKeys = Object.keys(envSchema.productionSchema.shape)\n\n      envVarKeys.sort()\n      requiredKeys.sort()\n\n      // make sure envVarKeys and requiredKeys have all the same values, and no more\n      expect(envVarKeys).toEqual(requiredKeys)\n    })\n  })\n})\n"
  },
  {
    "path": "packages/sync-server/src/env.ts",
    "content": "import type {Env} from './envSchema'\n\n// process.env is guaranteed to be of type Env, because we validate it in `devEnv/cli`\nexport const env = process.env as Env\n"
  },
  {
    "path": "packages/sync-server/src/envSchema.ts",
    "content": "import z from 'zod'\n\n// the env variables that are only required in development\nconst devOnly = z.object({\n  DEV_DB_PORT: z.string(),\n  DEV_DB_PASSWORD: z.string(),\n})\n\n// the env variables that both development and production require\nconst commonSchema = z.object({\n  DATABASE_URL: z.string(),\n  PORT: z.string().regex(/^\\d+$/),\n  HOST: z.string(),\n  APP_URL: z\n    .string()\n    .url()\n    .describe(\n      `the url to the app, like 'http://localhost:3000'. If the protocol is omitted,` +\n        ` then https is assumed. If the port is omitted, then 80 is assumed.`,\n    ),\n})\n\n// the env variables that are required in development (devOnly and commonSchema)\nexport const devSchema = commonSchema\n  .extend({\n    NODE_ENV: z.literal('development'),\n  })\n  .merge(devOnly)\n\n// the env variables that are only required in production\nconst productionOnly = z.object({})\n\n// the env variables that are required in production (productionOnly + commonSchema)\nexport const productionSchema = commonSchema\n  .extend({\n    NODE_ENV: z.literal('production'),\n  })\n  .merge(productionOnly)\n\n// the env variables that are required in both development and production\nexport const fullSchema = z.union([productionSchema, devSchema])\n\nexport type Env = z.infer<typeof fullSchema>\n"
  },
  {
    "path": "packages/sync-server/src/index.ts",
    "content": "import {createContext} from './trpc'\nimport syncServerRouter from './trpc/routes'\nimport {applyWSSHandler} from '@trpc/server/adapters/ws'\nimport ws from 'ws'\nimport http from 'http'\nimport {env} from './env'\n\nconst HOST = env.HOST && env.HOST !== 'localhost' ? env.HOST : undefined\n\nconst server = http.createServer((req, res) => {\n  const proto = req.headers['x-forwarded-proto']\n  if (proto && proto === 'http') {\n    // redirect to ssl\n    res.writeHead(303, {\n      location: `https://` + req.headers.host + (req.headers.url ?? ''),\n    })\n    res.end()\n    return\n  }\n  if (req.url === '/') {\n    res.writeHead(200, {'Content-Type': 'text/plain'})\n    res.end(\n      'Sync server is running. Access via ws://' +\n        env.HOST +\n        ' (if on ssl, use wss://)',\n    )\n  } else {\n    res.writeHead(404, {'Content-Type': 'text/plain'})\n    res.end('Error 404: Page not found.')\n  }\n})\n\nserver.listen(parseInt(env.PORT), () => {\n  console.log('✅ HTTP Server listening on ', env.HOST + ':' + env.PORT)\n})\n\nconst wss = new ws.Server({server})\nconst handler = applyWSSHandler({wss, router: syncServerRouter, createContext})\n\nwss.on('connection', (ws) => {\n  console.log(`➕➕ Connection (${wss.clients.size})`)\n  ws.once('close', () => {\n    console.log(`➖➖ Connection (${wss.clients.size})`)\n  })\n})\nconsole.log('✅ WebSocket Server listening on ', env.HOST + ':' + env.PORT)\n\nprocess.on('SIGTERM', () => {\n  console.log('SIGTERM')\n  handler.broadcastReconnectNotification()\n  wss.close()\n  server.close()\n})\n"
  },
  {
    "path": "packages/sync-server/src/prisma.ts",
    "content": "import {PrismaClient} from '../prisma/client-generated'\nimport {env} from './env'\n\nconst prisma = new PrismaClient({\n  datasources: {\n    db: {\n      url: env.DATABASE_URL,\n    },\n  },\n})\n\nexport default prisma\n"
  },
  {
    "path": "packages/sync-server/src/saaz/index.ts",
    "content": "import {BackMemoryAdapter, SaazBack} from '@theatre/saaz'\nimport {schema} from 'src/state/schema'\n\nconst backs: {[key in string]?: SaazBack} = {}\n\nexport function getSaazBack(dbName: string): SaazBack {\n  if (!backs[dbName]) {\n    backs[dbName] = new SaazBack({\n      dbName,\n      schema,\n      storageAdapter: new BackMemoryAdapter(),\n    })\n  }\n  return backs[dbName]!\n}\n"
  },
  {
    "path": "packages/sync-server/src/state/schema.ts",
    "content": "import type {\n  BasicKeyframedTrack,\n  HistoricPositionalSequence,\n  SheetState_Historic,\n  StudioSheetItemKey,\n  UIPanelId,\n  GraphEditorColors,\n} from '@theatre/core/types/private'\n\nimport type {\n  ProjectAddress,\n  PropAddress,\n  SheetAddress,\n  SheetObjectAddress,\n  WithoutSheetInstance,\n  KeyframeId,\n  SequenceTrackId,\n  PaneInstanceId,\n  BasicKeyframe,\n  KeyframeType,\n  SequenceMarkerId,\n  SerializableMap,\n  SerializablePrimitive,\n  SerializableValue,\n  IRange,\n} from '@theatre/core/types/public'\n\nimport {\n  encodePathToProp,\n  commonRootOfPathsToProps,\n} from '@theatre/utils/pathToProp'\nimport removePathFromObject from '@theatre/utils/removePathFromObject'\nimport {transformNumber} from '@theatre/utils/transformNumber'\nimport type {$IntentionalAny} from '@theatre/utils/types'\nimport findLastIndex from 'lodash-es/findLastIndex'\nimport keyBy from 'lodash-es/keyBy'\nimport pullFromArray from 'lodash-es/pull'\nimport set from 'lodash-es/set'\nimport type {\n  KeyframeWithPathToPropFromCommonRoot,\n  OutlineSelectionState,\n  PaneInstanceDescriptor,\n  PanelPosition,\n  StudioAhistoricState,\n  StudioHistoricStateSequenceEditorMarker,\n  StudioState,\n} from '@theatre/core/types/private/studio'\nimport {clamp, cloneDeep} from 'lodash-es'\nimport {pointableSetUtil} from '@theatre/utils/PointableSet'\nimport type {ProjectState_Historic} from '@theatre/core/types/private/core'\nimport {current} from '@theatre/saaz'\nimport type {Draft as _Draft} from 'immer'\nimport type {\n  EditorDefinitionToEditorInvocable,\n  Schema,\n} from '@theatre/saaz/src/types'\nimport {nanoid as generateNonSecure} from 'nanoid/non-secure'\nimport {__private} from '@theatre/core'\n\nconst {keyframeUtils} = __private\n\nexport const graphEditorColors: GraphEditorColors = {\n  '1': {iconColor: '#b98b08'},\n  '2': {iconColor: '#70a904'},\n  '3': {iconColor: '#2e928a'},\n  '4': {iconColor: '#a943bb'},\n  '5': {iconColor: '#b90808'},\n  '6': {iconColor: '#b4bf0e'},\n}\n\nfunction rand() {\n  return Math.random()\n}\n\nfunction generateKeyframeId(): KeyframeId {\n  return generateNonSecure(10) as KeyframeId\n}\n\nfunction generateSequenceTrackId(): SequenceTrackId {\n  return generateNonSecure(10) as SequenceTrackId\n}\n\nconst generators = {\n  rand,\n  generateKeyframeId,\n  generateSequenceTrackId,\n} as const\n\nexport type StateEditorsAPI = {}\n\ntype Draft = _Draft<StudioState>\ntype API = StateEditorsAPI\n\nconst initialState: StudioState = {\n  $schemaVersion: 1,\n  ahistoric: {\n    // visibilityState: 'everythingIsVisible',\n    projects: {\n      stateByProjectId: {},\n    },\n  },\n  historic: {\n    projects: {\n      stateByProjectId: {},\n    },\n    coreByProject: {},\n    panelInstanceDesceriptors: {},\n  },\n  ephemeral: {\n    projects: {\n      stateByProjectId: {},\n    },\n  },\n}\n\nexport namespace stateEditors {\n  function _ensureAll(draft: Draft): Required<StudioState> {\n    draft.ahistoric ??= initialState.ahistoric\n    draft.historic ??= initialState.historic\n    draft.ephemeral ??= initialState.ephemeral\n    return draft as Required<StudioState>\n  }\n  export namespace studio {\n    export namespace historic {\n      export namespace panelPositions {\n        export function setPanelPosition(\n          draft: Draft,\n          api: API,\n          p: {\n            panelId: UIPanelId\n            position: PanelPosition\n          },\n        ) {\n          const h = _ensureAll(draft).historic\n          h.panelPositions ??= {}\n          h.panelPositions[p.panelId] = p.position\n        }\n      }\n\n      export namespace panelInstanceDescriptors {\n        export function setDescriptor(\n          draft: Draft,\n          api: API,\n          {instanceId, paneClass}: PaneInstanceDescriptor,\n        ) {\n          _ensureAll(draft).historic.panelInstanceDesceriptors[instanceId] = {\n            instanceId,\n            paneClass,\n          }\n        }\n\n        export function remove(\n          draft: Draft,\n          api: API,\n          p: {instanceId: PaneInstanceId},\n        ) {\n          delete _ensureAll(draft).historic.panelInstanceDesceriptors[\n            p.instanceId\n          ]\n        }\n      }\n      export namespace panels {\n        export function _ensure(draft: Draft, api: API) {\n          _ensureAll(draft).historic.panels ??= {}\n          return _ensureAll(draft).historic.panels!\n        }\n\n        export namespace outline {\n          export function _ensure(draft: Draft, api: API) {\n            const panels = stateEditors.studio.historic.panels._ensure(\n              draft,\n              api,\n            )\n            panels.outlinePanel ??= {}\n            return panels.outlinePanel!\n          }\n          export namespace selection {\n            export function set(\n              draft: Draft,\n              api: API,\n              selection: Array<OutlineSelectionState>,\n            ) {\n              outline._ensure(draft, api).selection = selection\n            }\n\n            export function unset(draft: Draft, api: API) {\n              outline._ensure(draft, api).selection = []\n            }\n          }\n        }\n\n        export namespace sequenceEditor {\n          export function _ensure(draft: Draft, api: API) {\n            const panels = stateEditors.studio.historic.panels._ensure(\n              draft,\n              api,\n            )\n            panels.sequenceEditor ??= {}\n            return panels.sequenceEditor!\n          }\n          export namespace graphEditor {\n            function _ensure(draft: Draft, api: API) {\n              const s = sequenceEditor._ensure(draft, api)\n              s.graphEditor ??= {height: 0.5, isOpen: false}\n              return s.graphEditor!\n            }\n            export function setIsOpen(\n              draft: Draft,\n              api: API,\n              p: {isOpen: boolean},\n            ) {\n              _ensure(draft, api).isOpen = p.isOpen\n            }\n          }\n        }\n      }\n      export namespace projects {\n        export namespace stateByProjectId {\n          export function _ensure(draft: Draft, api: API, p: ProjectAddress) {\n            const s = _ensureAll(draft).historic\n            if (!s.projects.stateByProjectId[p.projectId]) {\n              s.projects.stateByProjectId[p.projectId] = {\n                stateBySheetId: {},\n              }\n            }\n\n            return s.projects.stateByProjectId[p.projectId]!\n          }\n\n          export namespace stateBySheetId {\n            export function _ensure(\n              draft: Draft,\n              api: API,\n              p: WithoutSheetInstance<SheetAddress>,\n            ) {\n              const projectState =\n                stateEditors.studio.historic.projects.stateByProjectId._ensure(\n                  draft,\n                  api,\n                  p,\n                )\n              if (!projectState.stateBySheetId[p.sheetId]) {\n                projectState.stateBySheetId[p.sheetId] = {\n                  selectedInstanceId: undefined,\n                  sequenceEditor: {\n                    selectedPropsByObject: {},\n                  },\n                }\n              }\n\n              return projectState.stateBySheetId[p.sheetId]!\n            }\n\n            export function setSelectedInstanceId(\n              draft: Draft,\n              api: API,\n              p: SheetAddress,\n            ) {\n              stateEditors.studio.historic.projects.stateByProjectId.stateBySheetId._ensure(\n                draft,\n                api,\n                p,\n              ).selectedInstanceId = p.sheetInstanceId\n            }\n\n            export namespace sequenceEditor {\n              export function addPropToGraphEditor(\n                draft: Draft,\n                api: API,\n                p: WithoutSheetInstance<PropAddress>,\n              ) {\n                const {selectedPropsByObject} = stateBySheetId._ensure(\n                  draft,\n                  api,\n                  p,\n                ).sequenceEditor\n                if (!selectedPropsByObject[p.objectKey]) {\n                  selectedPropsByObject[p.objectKey] = {}\n                }\n                const selectedProps = selectedPropsByObject[p.objectKey]!\n\n                const path = encodePathToProp(p.pathToProp)\n\n                const possibleColors = new Set<string>(\n                  Object.keys(graphEditorColors),\n                )\n                for (const [_, selectedProps] of Object.entries(\n                  selectedPropsByObject,\n                )) {\n                  for (const [_, takenColor] of Object.entries(\n                    selectedProps!,\n                  )) {\n                    possibleColors.delete(takenColor!)\n                  }\n                }\n\n                const color =\n                  possibleColors.size > 0\n                    ? possibleColors.values().next().value\n                    : Object.keys(graphEditorColors)[0]\n\n                selectedProps[path] = color\n              }\n\n              export function removePropFromGraphEditor(\n                draft: Draft,\n                api: API,\n                p: WithoutSheetInstance<PropAddress>,\n              ) {\n                const {selectedPropsByObject} = stateBySheetId._ensure(\n                  draft,\n                  api,\n                  p,\n                ).sequenceEditor\n                if (!selectedPropsByObject[p.objectKey]) {\n                  return\n                }\n                const selectedProps = selectedPropsByObject[p.objectKey]!\n\n                const path = encodePathToProp(p.pathToProp)\n\n                if (selectedProps[path]) {\n                  removePathFromObject(selectedPropsByObject, [\n                    p.objectKey,\n                    path,\n                  ])\n                }\n              }\n\n              function _ensureMarkers(\n                draft: Draft,\n                api: API,\n                sheetAddress: SheetAddress,\n              ) {\n                const sequenceEditor =\n                  stateEditors.studio.historic.projects.stateByProjectId.stateBySheetId._ensure(\n                    draft,\n                    api,\n                    sheetAddress,\n                  ).sequenceEditor\n\n                if (!sequenceEditor.markerSet) {\n                  sequenceEditor.markerSet = pointableSetUtil.create()\n                }\n\n                return sequenceEditor.markerSet\n              }\n\n              export function replaceMarkers(\n                draft: Draft,\n                api: API,\n                p: {\n                  sheetAddress: SheetAddress\n                  markers: Array<StudioHistoricStateSequenceEditorMarker>\n                  snappingFunction: (p: number) => number\n                },\n              ) {\n                const currentMarkerSet = _ensureMarkers(\n                  draft,\n                  api,\n                  p.sheetAddress,\n                )\n\n                const sanitizedMarkers = p.markers\n                  .filter((marker) => {\n                    if (!isFinite(marker.position)) return false\n\n                    return true // marker looks valid\n                  })\n                  .map((marker) => ({\n                    ...marker,\n                    position: p.snappingFunction(marker.position),\n                  }))\n\n                const newMarkersById = keyBy(sanitizedMarkers, 'id')\n\n                /** Usually starts as the \"unselected\" markers */\n                let markersThatArentBeingReplaced = pointableSetUtil.filter(\n                  currentMarkerSet,\n                  (marker) => marker && !newMarkersById[marker.id],\n                )\n\n                const markersThatArentBeingReplacedByPosition = keyBy(\n                  Object.values(markersThatArentBeingReplaced.byId),\n                  'position',\n                )\n\n                // If the new transformed markers overlap with any existing markers,\n                // we remove the overlapped markers\n                sanitizedMarkers.forEach(({position}) => {\n                  const existingMarkerAtThisPosition =\n                    markersThatArentBeingReplacedByPosition[position]\n                  if (existingMarkerAtThisPosition) {\n                    markersThatArentBeingReplaced = pointableSetUtil.remove(\n                      markersThatArentBeingReplaced,\n                      existingMarkerAtThisPosition.id,\n                    )\n                  }\n                })\n\n                Object.assign(\n                  currentMarkerSet,\n                  pointableSetUtil.merge([\n                    markersThatArentBeingReplaced,\n                    pointableSetUtil.create(\n                      sanitizedMarkers.map((marker) => [marker.id, marker]),\n                    ),\n                  ]),\n                )\n              }\n\n              export function removeMarker(\n                draft: Draft,\n                api: API,\n                options: {\n                  sheetAddress: SheetAddress\n                  markerId: SequenceMarkerId\n                },\n              ) {\n                const currentMarkerSet = _ensureMarkers(\n                  draft,\n                  api,\n                  options.sheetAddress,\n                )\n                Object.assign(\n                  currentMarkerSet,\n                  pointableSetUtil.remove(currentMarkerSet, options.markerId),\n                )\n              }\n\n              export function updateMarker(\n                draft: Draft,\n                api: API,\n                options: {\n                  sheetAddress: SheetAddress\n                  markerId: SequenceMarkerId\n                  label: string\n                },\n              ) {\n                const currentMarkerSet = _ensureMarkers(\n                  draft,\n                  api,\n                  options.sheetAddress,\n                )\n                const marker = currentMarkerSet.byId[options.markerId]\n                if (marker !== undefined) marker.label = options.label\n              }\n            }\n          }\n        }\n      }\n    }\n    export namespace ephemeral {\n      export namespace projects {\n        export namespace stateByProjectId {\n          export function _ensure(draft: Draft, api: API, p: ProjectAddress) {\n            const s = _ensureAll(draft).ephemeral\n            if (!s.projects.stateByProjectId[p.projectId]) {\n              s.projects.stateByProjectId[p.projectId] = {\n                stateBySheetId: {},\n              }\n            }\n\n            return s.projects.stateByProjectId[p.projectId]!\n          }\n\n          export namespace stateBySheetId {\n            export function _ensure(\n              draft: Draft,\n              api: API,\n              p: WithoutSheetInstance<SheetAddress>,\n            ) {\n              const projectState =\n                stateEditors.studio.ephemeral.projects.stateByProjectId._ensure(\n                  draft,\n                  api,\n                  p,\n                )\n              if (!projectState.stateBySheetId[p.sheetId]) {\n                projectState.stateBySheetId[p.sheetId] = {\n                  stateByObjectKey: {},\n                }\n              }\n\n              return projectState.stateBySheetId[p.sheetId]!\n            }\n\n            export namespace stateByObjectKey {\n              export function _ensure(\n                draft: Draft,\n                api: API,\n                p: WithoutSheetInstance<SheetObjectAddress>,\n              ) {\n                const s =\n                  stateEditors.studio.ephemeral.projects.stateByProjectId.stateBySheetId._ensure(\n                    draft,\n                    api,\n                    p,\n                  ).stateByObjectKey\n                s[p.objectKey] ??= {}\n                return s[p.objectKey]!\n              }\n              export namespace propsBeingScrubbed {\n                export function _ensure(\n                  draft: Draft,\n                  api: API,\n                  p: WithoutSheetInstance<SheetObjectAddress>,\n                ) {\n                  const s =\n                    stateEditors.studio.ephemeral.projects.stateByProjectId.stateBySheetId.stateByObjectKey._ensure(\n                      draft,\n                      api,\n                      p,\n                    )\n\n                  s.valuesBeingScrubbed ??= {}\n                  return s.valuesBeingScrubbed!\n                }\n                export function flag(\n                  draft: Draft,\n                  api: API,\n                  p: WithoutSheetInstance<PropAddress>,\n                ) {\n                  set(_ensure(draft, api, p), p.pathToProp, true)\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    export namespace ahistoric {\n      export function setPinOutline(\n        draft: Draft,\n        api: API,\n        pinOutline: StudioAhistoricState['pinOutline'],\n      ) {\n        _ensureAll(draft).ahistoric.pinOutline = pinOutline\n      }\n      export function setPinDetails(\n        draft: Draft,\n        api: API,\n        pinDetails: StudioAhistoricState['pinDetails'],\n      ) {\n        _ensureAll(draft).ahistoric.pinDetails = pinDetails\n      }\n      export function setPinNotifications(\n        draft: Draft,\n        api: API,\n        pinNotifications: StudioAhistoricState['pinNotifications'],\n      ) {\n        _ensureAll(draft).ahistoric.pinNotifications = pinNotifications\n      }\n      export function setVisibilityState(\n        draft: Draft,\n        api: API,\n        visibilityState: StudioAhistoricState['visibilityState'],\n      ) {\n        _ensureAll(draft).ahistoric.visibilityState = visibilityState\n      }\n\n      export function setClipboardKeyframes(\n        draft: Draft,\n        api: API,\n        keyframes: KeyframeWithPathToPropFromCommonRoot[],\n      ) {\n        const commonPath = commonRootOfPathsToProps(\n          keyframes.map((kf) => kf.pathToProp),\n        )\n\n        const keyframesWithCommonRootPath = keyframes.map(\n          ({keyframe, pathToProp}) => ({\n            keyframe,\n            pathToProp: pathToProp.slice(commonPath.length),\n          }),\n        )\n\n        const ahistoric = _ensureAll(draft).ahistoric\n        // save selection\n        if (ahistoric.clipboard) {\n          ahistoric.clipboard.keyframesWithRelativePaths =\n            keyframesWithCommonRootPath\n        } else {\n          _ensureAll(draft).ahistoric.clipboard = {\n            keyframesWithRelativePaths: keyframesWithCommonRootPath,\n          }\n        }\n      }\n\n      export namespace projects {\n        export namespace stateByProjectId {\n          export function _ensure(draft: Draft, api: API, p: ProjectAddress) {\n            const s = _ensureAll(draft).ahistoric\n            if (!s.projects.stateByProjectId[p.projectId]) {\n              s.projects.stateByProjectId[p.projectId] = {\n                stateBySheetId: {},\n              }\n            }\n\n            return s.projects.stateByProjectId[p.projectId]!\n          }\n\n          export namespace collapsedItemsInOutline {\n            export function _ensure(draft: Draft, api: API, p: ProjectAddress) {\n              const projectState =\n                stateEditors.studio.ahistoric.projects.stateByProjectId._ensure(\n                  draft,\n                  api,\n                  p,\n                )\n              if (!projectState.collapsedItemsInOutline) {\n                projectState.collapsedItemsInOutline = {}\n              }\n              return projectState.collapsedItemsInOutline!\n            }\n            export function set(\n              draft: Draft,\n              api: API,\n              p: ProjectAddress & {isCollapsed: boolean; itemKey: string},\n            ) {\n              const collapsedItemsInOutline =\n                stateEditors.studio.ahistoric.projects.stateByProjectId.collapsedItemsInOutline._ensure(\n                  draft,\n                  api,\n                  p,\n                )\n\n              if (p.isCollapsed) {\n                collapsedItemsInOutline[p.itemKey] = true\n              } else {\n                delete collapsedItemsInOutline[p.itemKey]\n              }\n            }\n          }\n\n          export namespace stateBySheetId {\n            export function _ensure(\n              draft: Draft,\n              api: API,\n              p: WithoutSheetInstance<SheetAddress>,\n            ) {\n              const projectState =\n                stateEditors.studio.ahistoric.projects.stateByProjectId._ensure(\n                  draft,\n                  api,\n                  p,\n                )\n              if (!projectState.stateBySheetId[p.sheetId]) {\n                projectState.stateBySheetId[p.sheetId] = {}\n              }\n\n              return projectState.stateBySheetId[p.sheetId]!\n            }\n\n            export namespace sequence {\n              export function _ensure(\n                draft: Draft,\n                api: API,\n                p: WithoutSheetInstance<SheetAddress>,\n              ) {\n                const sheetState =\n                  stateEditors.studio.ahistoric.projects.stateByProjectId.stateBySheetId._ensure(\n                    draft,\n                    api,\n                    p,\n                  )\n                if (!sheetState.sequence) {\n                  sheetState.sequence = {}\n                }\n                return sheetState.sequence!\n              }\n\n              export namespace focusRange {\n                export function set(\n                  draft: Draft,\n                  api: API,\n                  p: WithoutSheetInstance<SheetAddress> & {\n                    range: IRange\n                    enabled: boolean\n                  },\n                ) {\n                  stateEditors.studio.ahistoric.projects.stateByProjectId.stateBySheetId.sequence._ensure(\n                    draft,\n                    api,\n                    p,\n                  ).focusRange = {range: p.range, enabled: p.enabled}\n                }\n\n                export function unset(\n                  draft: Draft,\n                  api: API,\n                  p: WithoutSheetInstance<SheetAddress>,\n                ) {\n                  stateEditors.studio.ahistoric.projects.stateByProjectId.stateBySheetId.sequence._ensure(\n                    draft,\n                    api,\n                    p,\n                  ).focusRange = undefined\n                }\n              }\n\n              export namespace clippedSpaceRange {\n                export function set(\n                  draft: Draft,\n                  api: API,\n                  p: WithoutSheetInstance<SheetAddress> & {\n                    range: IRange\n                  },\n                ) {\n                  stateEditors.studio.ahistoric.projects.stateByProjectId.stateBySheetId.sequence._ensure(\n                    draft,\n                    api,\n                    p,\n                  ).clippedSpaceRange = [...p.range]\n                }\n              }\n\n              export namespace sequenceEditorCollapsableItems {\n                function _ensure(\n                  draft: Draft,\n                  api: API,\n                  p: WithoutSheetInstance<SheetAddress>,\n                ) {\n                  const seq =\n                    stateEditors.studio.ahistoric.projects.stateByProjectId.stateBySheetId.sequence._ensure(\n                      draft,\n                      api,\n                      p,\n                    )\n                  let existing = seq.collapsableItems\n                  if (!existing) {\n                    existing = seq.collapsableItems = pointableSetUtil.create()\n                  }\n                  return existing\n                }\n                export function set(\n                  draft: Draft,\n                  api: API,\n                  p: WithoutSheetInstance<SheetAddress> & {\n                    studioSheetItemKey: StudioSheetItemKey\n                    isCollapsed: boolean\n                  },\n                ) {\n                  const collapsableSet = _ensure(draft, api, p)\n                  Object.assign(\n                    collapsableSet,\n                    pointableSetUtil.add(collapsableSet, p.studioSheetItemKey, {\n                      isCollapsed: p.isCollapsed,\n                    }),\n                  )\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  export namespace coreByProject {\n    export namespace historic {\n      export function setProjectState(\n        draft: Draft,\n        api: API,\n        p: ProjectAddress & {state: ProjectState_Historic},\n      ) {\n        _ensureAll(draft).historic.coreByProject[p.projectId] = cloneDeep(\n          p.state,\n        )\n      }\n      export namespace revisionHistory {\n        export function add(\n          draft: Draft,\n          api: API,\n          p: ProjectAddress & {revision: string},\n        ) {\n          const revisionHistory =\n            _ensureAll(draft).historic.coreByProject[p.projectId]\n              .revisionHistory\n\n          const maxNumOfRevisionsToKeep = 50\n          revisionHistory.unshift(p.revision)\n          if (revisionHistory.length > maxNumOfRevisionsToKeep) {\n            revisionHistory.length = maxNumOfRevisionsToKeep\n          }\n        }\n      }\n      export namespace sheetsById {\n        export function _ensure(\n          draft: Draft,\n          api: API,\n          p: WithoutSheetInstance<SheetAddress>,\n        ): SheetState_Historic {\n          const sheetsById =\n            _ensureAll(draft).historic.coreByProject[p.projectId].sheetsById\n\n          if (!sheetsById[p.sheetId]) {\n            sheetsById[p.sheetId] = {staticOverrides: {byObject: {}}}\n          }\n          return sheetsById[p.sheetId]!\n        }\n\n        export function forgetObject(\n          draft: Draft,\n          api: API,\n          p: WithoutSheetInstance<SheetObjectAddress>,\n        ) {\n          const sheetState =\n            _ensureAll(draft).historic.coreByProject[p.projectId].sheetsById[\n              p.sheetId\n            ]\n          if (!sheetState) return\n          delete sheetState.staticOverrides.byObject[p.objectKey]\n\n          const sequence = sheetState.sequence\n          if (!sequence) return\n          delete sequence.tracksByObject[p.objectKey]\n        }\n\n        export function forgetSheet(\n          draft: Draft,\n          api: API,\n          p: WithoutSheetInstance<SheetAddress>,\n        ) {\n          const sheetState =\n            _ensureAll(draft).historic.coreByProject[p.projectId].sheetsById[\n              p.sheetId\n            ]\n          if (sheetState) {\n            delete _ensureAll(draft).historic.coreByProject[p.projectId]\n              .sheetsById[p.sheetId]\n          }\n        }\n\n        export namespace sequence {\n          export function _ensure(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetAddress>,\n          ): HistoricPositionalSequence {\n            const s = stateEditors.coreByProject.historic.sheetsById._ensure(\n              draft,\n              api,\n              p,\n            )\n            s.sequence ??= {\n              type: 'PositionalSequence',\n              tracksByObject: {},\n            }\n\n            return s.sequence!\n          }\n\n          export function setLength(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetAddress> & {length: number},\n          ) {\n            _ensure(draft, api, p).length = clamp(\n              parseFloat(p.length.toFixed(2)),\n              0.01,\n              Infinity,\n            )\n          }\n\n          function _ensureTracksOfObject(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetObjectAddress>,\n          ) {\n            const s =\n              stateEditors.coreByProject.historic.sheetsById.sequence._ensure(\n                draft,\n                api,\n                p,\n              ).tracksByObject\n\n            s[p.objectKey] ??= {trackData: {}, trackIdByPropPath: {}}\n\n            return s[p.objectKey]!\n          }\n\n          export function setPrimitivePropAsSequenced(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<PropAddress>,\n          ) {\n            const tracks = _ensureTracksOfObject(draft, api, p)\n            const pathEncoded = encodePathToProp(p.pathToProp)\n            const possibleTrackId = tracks.trackIdByPropPath[pathEncoded]\n            if (typeof possibleTrackId === 'string') return\n\n            const trackId = generators.generateSequenceTrackId()\n\n            const track: BasicKeyframedTrack = {\n              type: 'BasicKeyframedTrack',\n              __debugName: `${p.objectKey}:${pathEncoded}`,\n              keyframes: {allIds: {}, byId: {}},\n            }\n\n            tracks.trackData[trackId] = track\n            tracks.trackIdByPropPath[pathEncoded] = trackId\n          }\n\n          export function setPrimitivePropAsStatic(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<PropAddress> & {\n              value: SerializablePrimitive\n            },\n          ) {\n            const tracks = _ensureTracksOfObject(draft, api, p)\n            const encodedPropPath = encodePathToProp(p.pathToProp)\n            const trackId = tracks.trackIdByPropPath[encodedPropPath]\n\n            if (typeof trackId !== 'string') return\n\n            delete tracks.trackIdByPropPath[encodedPropPath]\n            delete tracks.trackData[trackId]\n\n            stateEditors.coreByProject.historic.sheetsById.staticOverrides.byObject.setValueOfPrimitiveProp(\n              draft,\n              api,\n              p,\n            )\n          }\n\n          export function setCompoundPropAsStatic(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<PropAddress> & {\n              value: SerializableMap\n            },\n          ) {\n            const tracks = _ensureTracksOfObject(draft, api, p)\n\n            for (const encodedPropPath of Object.keys(\n              tracks.trackIdByPropPath,\n            )) {\n              const propPath = JSON.parse(encodedPropPath)\n              const isSubOfTargetPath = p.pathToProp.every(\n                (key, i) => propPath[i] === key,\n              )\n              if (isSubOfTargetPath) {\n                const trackId = tracks.trackIdByPropPath[encodedPropPath]\n                if (typeof trackId !== 'string') continue\n                delete tracks.trackIdByPropPath[encodedPropPath]\n                delete tracks.trackData[trackId]\n              }\n            }\n\n            stateEditors.coreByProject.historic.sheetsById.staticOverrides.byObject.setValueOfCompoundProp(\n              draft,\n              api,\n              p,\n            )\n          }\n\n          function _getTrack(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetObjectAddress> & {\n              trackId: SequenceTrackId\n            },\n          ) {\n            return _ensureTracksOfObject(draft, api, p).trackData[p.trackId]\n          }\n\n          function _getKeyframeById(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetObjectAddress> & {\n              trackId: SequenceTrackId\n              keyframeId: KeyframeId\n            },\n          ): BasicKeyframe | undefined {\n            const track = _getTrack(draft, api, p)\n            if (!track) return\n            return track.keyframes.byId[p.keyframeId]\n          }\n\n          /**\n           * Sets a keyframe at the exact specified position.\n           * Any position snapping should be done by the caller.\n           */\n          export function setKeyframeAtPosition<T extends SerializableValue>(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetObjectAddress> & {\n              trackId: SequenceTrackId\n              position: number\n              handles?: [number, number, number, number]\n              value: T\n              snappingFunction: SnappingFunction\n              type?: KeyframeType\n            },\n          ) {\n            const position = p.snappingFunction(p.position)\n            const track = _getTrack(draft, api, p)\n            if (!track) return\n\n            const prevById = current(track.keyframes)\n            const keyframes = keyframeUtils.getSortedKeyframes(prevById)\n\n            const existingKeyframeIndex = keyframes.findIndex(\n              (kf) => kf.position === position,\n            )\n\n            if (existingKeyframeIndex !== -1) {\n              const kf = keyframes[existingKeyframeIndex]\n              track.keyframes.byId[kf.id]!.value = p.value\n              return\n            }\n\n            const indexOfLeftKeyframe = findLastIndex(\n              keyframes,\n              (kf) => kf.position < position,\n            )\n            if (indexOfLeftKeyframe === -1) {\n              keyframes.unshift({\n                // generating the keyframe within the `setKeyframeAtPosition` makes it impossible for us\n                // to make this business logic deterministic, which is important to guarantee for collaborative\n                // editing.\n                id: generators.generateKeyframeId(),\n                position,\n                connectedRight: true,\n                handles: p.handles || [0.5, 1, 0.5, 0],\n                type: p.type || 'bezier',\n                value: p.value,\n              })\n              track.keyframes = keyframeUtils.fromArray(keyframes)\n              return\n            }\n            const leftKeyframe = keyframes[indexOfLeftKeyframe]\n            keyframes.splice(indexOfLeftKeyframe + 1, 0, {\n              id: generators.generateKeyframeId(),\n              position,\n              connectedRight: leftKeyframe.connectedRight,\n              handles: p.handles || [0.5, 1, 0.5, 0],\n              type: p.type || 'bezier',\n              value: p.value,\n            })\n            track.keyframes = keyframeUtils.fromArray(keyframes)\n          }\n\n          export function unsetKeyframeAtPosition(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetObjectAddress> & {\n              trackId: SequenceTrackId\n              position: number\n            },\n          ) {\n            const track = _getTrack(draft, api, p)\n            if (!track) return\n            const keyframes = keyframeUtils.getSortedKeyframes(\n              current(track.keyframes),\n            )\n            const index = keyframes.findIndex(\n              (kf) => kf.position === p.position,\n            )\n            if (index === -1) return\n\n            keyframes.splice(index, 1)\n            track.keyframes = keyframeUtils.fromArray(keyframes)\n          }\n\n          type SnappingFunction = (p: number) => number\n\n          export function transformKeyframes(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetObjectAddress> & {\n              trackId: SequenceTrackId\n              keyframeIds: KeyframeId[]\n              translate: number\n              scale: number\n              origin: number\n              snappingFunction: SnappingFunction\n            },\n          ) {\n            const track = _getTrack(draft, api, p)\n            if (!track) return\n            const initialKeyframes = keyframeUtils.getSortedKeyframes(\n              current(track.keyframes),\n            )\n\n            const selectedKeyframes = initialKeyframes.filter((kf) =>\n              p.keyframeIds.includes(kf.id),\n            )\n\n            const transformed = selectedKeyframes.map((untransformedKf) => {\n              const oldPosition = untransformedKf.position\n              const newPosition = p.snappingFunction(\n                transformNumber(oldPosition, p),\n              )\n              return {...untransformedKf, position: newPosition}\n            })\n\n            replaceKeyframes(draft, api, {...p, keyframes: transformed})\n          }\n\n          /**\n           * Sets the easing between keyframes\n           *\n           * X = in keyframeIds\n           * * = not in keyframeIds\n           * + = modified handle\n           * ```\n           * X- --- -*- --- -X\n           * X+ --- +*- --- -X+\n           * ```\n           *\n           * TODO - explain further\n           */\n          export function setTweenBetweenKeyframes(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetObjectAddress> & {\n              trackId: SequenceTrackId\n              keyframeIds: KeyframeId[]\n              handles: [number, number, number, number]\n            },\n          ) {\n            const track = _getTrack(draft, api, p)\n            if (!track) return\n\n            const sorted = keyframeUtils.getSortedKeyframes(\n              current(track.keyframes),\n            )\n            sorted.map((kf, i) => {\n              const prevKf = sorted[i - 1]\n              const isBeingEdited = p.keyframeIds.includes(kf.id)\n              const isAfterEditedKeyframe = p.keyframeIds.includes(prevKf?.id)\n\n              if (isBeingEdited && !isAfterEditedKeyframe) {\n                return {\n                  ...kf,\n                  handles: [\n                    kf.handles[0],\n                    kf.handles[1],\n                    p.handles[0],\n                    p.handles[1],\n                  ],\n                }\n              } else if (isBeingEdited && isAfterEditedKeyframe) {\n                return {\n                  ...kf,\n                  handles: [\n                    p.handles[2],\n                    p.handles[3],\n                    p.handles[0],\n                    p.handles[1],\n                  ],\n                }\n              } else if (isAfterEditedKeyframe) {\n                return {\n                  ...kf,\n                  handles: [\n                    p.handles[2],\n                    p.handles[3],\n                    kf.handles[2],\n                    kf.handles[3],\n                  ],\n                }\n              } else {\n                return kf\n              }\n            })\n\n            track.keyframes = keyframeUtils.fromArray(sorted)\n          }\n\n          export function setHandlesForKeyframe(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetObjectAddress> & {\n              trackId: SequenceTrackId\n              keyframeId: KeyframeId\n              start?: [number, number]\n              end?: [number, number]\n            },\n          ) {\n            const keyframe = _getKeyframeById(draft, api, p)\n            if (keyframe) {\n              keyframe.handles = [\n                p.end?.[0] ?? keyframe.handles[0],\n                p.end?.[1] ?? keyframe.handles[1],\n                p.start?.[0] ?? keyframe.handles[2],\n                p.start?.[1] ?? keyframe.handles[3],\n              ]\n            }\n          }\n\n          export function deleteKeyframes(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetObjectAddress> & {\n              trackId: SequenceTrackId\n              keyframeIds: KeyframeId[]\n            },\n          ) {\n            const track = _getTrack(draft, api, p)\n            if (!track) return\n\n            for (const keyframeId of p.keyframeIds) {\n              delete track.keyframes.byId[keyframeId]\n              delete track.keyframes.allIds[keyframeId]\n            }\n          }\n\n          export function setKeyframeType(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetObjectAddress> & {\n              trackId: SequenceTrackId\n              keyframeId: KeyframeId\n              keyframeType: KeyframeType\n            },\n          ) {\n            const kf = _getKeyframeById(draft, api, p)\n            if (kf) {\n              kf.type = p.keyframeType\n            }\n          }\n\n          // Future: consider whether a list of \"partial\" keyframes requiring `id` is possible to accept\n          //  * Consider how common this pattern is, as this sort of concept would best be encountered\n          //    a few times to start to see an opportunity for improved ergonomics / crdt.\n          export function replaceKeyframes(\n            draft: Draft,\n            api: API,\n            p: WithoutSheetInstance<SheetObjectAddress> & {\n              trackId: SequenceTrackId\n              keyframes: Array<BasicKeyframe>\n              snappingFunction: SnappingFunction\n            },\n          ) {\n            const track = _getTrack(draft, api, p)\n            if (!track) return\n\n            const sanitizedKeyframes = p.keyframes\n              .filter((kf) => {\n                if (typeof kf.value === 'number' && !isFinite(kf.value))\n                  return false\n                if (!kf.handles.every((handleValue) => isFinite(handleValue)))\n                  return false\n\n                return true\n              })\n              .map((kf) => ({...kf, position: p.snappingFunction(kf.position)}))\n\n            const newKeyframesById = keyBy(sanitizedKeyframes, 'id')\n\n            const initialKeyframes = keyframeUtils.getSortedKeyframes(\n              current(track.keyframes),\n            )\n            const unselected = initialKeyframes.filter(\n              (kf) => !newKeyframesById[kf.id],\n            )\n\n            const unselectedByPosition = keyBy(unselected, 'position')\n\n            // If the new transformed keyframes overlap with any existing keyframes,\n            // we remove the overlapped keyframes\n            sanitizedKeyframes.forEach(({position}) => {\n              const existingKeyframeAtThisPosition =\n                unselectedByPosition[position]\n              if (existingKeyframeAtThisPosition) {\n                pullFromArray(unselected, existingKeyframeAtThisPosition)\n              }\n            })\n\n            const unsorted = [...unselected, ...sanitizedKeyframes]\n            // const sorted = sortBy(\n            //   unsorted,\n            //   'position',\n            // )\n\n            track.keyframes = keyframeUtils.fromArray(unsorted)\n          }\n        }\n\n        export namespace staticOverrides {\n          export namespace byObject {\n            function _ensure(\n              draft: Draft,\n              api: API,\n              p: WithoutSheetInstance<SheetObjectAddress>,\n            ) {\n              const byObject =\n                stateEditors.coreByProject.historic.sheetsById._ensure(\n                  draft,\n                  api,\n                  p,\n                ).staticOverrides.byObject\n              byObject[p.objectKey] ??= {}\n              return byObject[p.objectKey]!\n            }\n\n            export function setValueOfCompoundProp(\n              draft: Draft,\n              api: API,\n              p: WithoutSheetInstance<PropAddress> & {\n                value: SerializableMap\n              },\n            ) {\n              const existingOverrides = _ensure(draft, api, p)\n              set(existingOverrides, p.pathToProp, p.value)\n            }\n\n            export function setValueOfPrimitiveProp(\n              draft: Draft,\n              api: API,\n              p: WithoutSheetInstance<PropAddress> & {\n                value: SerializablePrimitive\n              },\n            ) {\n              const existingOverrides = _ensure(draft, api, p)\n              set(existingOverrides, p.pathToProp, p.value)\n            }\n\n            export function unsetValueOfPrimitiveProp(\n              draft: Draft,\n              api: API,\n              p: WithoutSheetInstance<PropAddress>,\n            ) {\n              const existingStaticOverrides =\n                stateEditors.coreByProject.historic.sheetsById._ensure(\n                  draft,\n                  api,\n                  p,\n                ).staticOverrides.byObject[p.objectKey]\n\n              if (!existingStaticOverrides) return\n\n              removePathFromObject(existingStaticOverrides, p.pathToProp)\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\nexport type IStateEditors = {}\nexport type IInvokableStateEditors =\n  EditorDefinitionToEditorInvocable<IStateEditors>\n\nexport type IInvokableDraftEditors = EditorDefinitionToEditorInvocable<\n  typeof stateEditors\n>\n\nexport const schema: Schema<{$schemaVersion: number}, IStateEditors, {}> = {\n  opShape: null as $IntentionalAny as {$schemaVersion: number},\n  version: 1,\n  // migrateOp(s: $IntentionalAny) {\n  //   s.$schemaVersion ??= 1\n  //   return\n  //   s.ahistoric ??= initialState.ahistoric\n  //   s.historic ??= initialState.historic\n  //   s.ephemeral ??= initialState.ephemeral\n  // },\n  // migrateCell(s: $IntentionalAny) {\n  //   s.ahistoric ??= initialState.ahistoric\n  //   s.historic ??= initialState.historic\n  //   s.ephemeral ??= initialState.ephemeral\n  // },\n  editors: {},\n  generators: {},\n  cellShape: null as $IntentionalAny as StudioState,\n}\n"
  },
  {
    "path": "packages/sync-server/src/trpc/index.ts",
    "content": "import type * as trpc from '@trpc/server'\nimport {initTRPC} from '@trpc/server'\nimport type {IncomingMessage} from 'http'\nimport type {NodeHTTPCreateContextFnOptions} from '@trpc/server/adapters/node-http'\nimport superjson from 'superjson'\nimport type ws from 'ws'\nimport {ZodError} from 'zod'\nimport type {Session} from 'src/utils/authUtils'\nimport {verifyAccessTokenOrThrow} from 'src/utils/authUtils'\n\nconst t = initTRPC.context<ServerContext>().create({\n  /**\n   * @see https://trpc.io/docs/v10/data-transformers\n   */\n  transformer: superjson,\n  /**\n   * @see https://trpc.io/docs/v10/error-formatting\n   */\n  errorFormatter({shape, error}) {\n    console.log(error)\n    return {\n      ...shape,\n      data: {\n        ...shape.data,\n        zodError:\n          error.cause instanceof ZodError ? error.cause.flatten() : null,\n      },\n    }\n  },\n})\n\n/**\n * Create a router\n * @see https://trpc.io/docs/v10/router\n */\nexport const createRouter = t.router\n\n/**\n * Create an unprotected procedure\n * @see https://trpc.io/docs/v10/procedures\n **/\nexport const procedure = t.procedure\n\n/**\n * @see https://trpc.io/docs/v10/middlewares\n */\nexport const middleware = t.middleware\n\n/**\n * @see https://trpc.io/docs/v10/merging-routers\n */\nexport const mergeRouters = t.mergeRouters\n\ntype SyncServerTrpcContext = {\n  requireValidSession: (opts: {\n    input: {studioAuth: {accessToken: string}}\n  }) => Promise<Session>\n}\n/**\n * Creates context for an incoming request\n * {@link https://trpc.io/docs/context}\n */\n\nexport const createContext = async (\n  opts: NodeHTTPCreateContextFnOptions<IncomingMessage, ws>,\n): Promise<SyncServerTrpcContext> => {\n  let cashedResult: null | Promise<Session> = null\n\n  return {\n    async requireValidSession(opts): Promise<Session> {\n      if (cashedResult) return cashedResult\n      cashedResult = verifyAccessTokenOrThrow(opts)\n      return cashedResult\n    },\n  }\n}\n\nexport type ServerContext = trpc.inferAsyncReturnType<typeof createContext>\n"
  },
  {
    "path": "packages/sync-server/src/trpc/routes/index.ts",
    "content": "import {createRouter, procedure} from '..'\nimport {z} from 'zod'\nimport {projectState} from './projectStateRouter'\n\nconst syncServerRouter = createRouter({\n  healthcheck: procedure.input(z.object({})).query((props) => {\n    return 'okay'\n  }),\n\n  projectState: projectState,\n})\n\nexport type SyncServerRootRouter = typeof syncServerRouter\n\nexport default syncServerRouter\n"
  },
  {
    "path": "packages/sync-server/src/trpc/routes/projectStateRouter.ts",
    "content": "import {z} from 'zod'\nimport {createRouter, procedure} from '..'\nimport {getSaazBack} from 'src/saaz'\nimport {observable} from '@trpc/server/observable'\n\nconst studioAuth = z.object({\n  accessToken: z.string(),\n})\n\n// type Session = {\n//   _accessToken: string\n// }\n\n// export async function ensureSessionHasAccessToProject(\n//   session: Session,\n//   projectId: string,\n// ) {\n//   const {canEdit} = await appClient.studioAuth.canIEditProject.query({\n//     studioAuth: {accessToken: session._accessToken},\n//     projectId,\n//   })\n//   return canEdit\n// }\n\nexport const projectState = createRouter({\n  saaz_applyUpdates: procedure\n    .input(z.object({dbName: z.string(), opts: z.any(), studioAuth}))\n    .output(z.any())\n    .mutation(async (opts) => {\n      await opts.ctx.requireValidSession(opts)\n      return getSaazBack(opts.input.dbName).applyUpdates(opts.input.opts)\n    }),\n\n  saaz_updatePresence: procedure\n    .input(z.object({dbName: z.string(), opts: z.any(), studioAuth}))\n    .output(z.any())\n    .mutation(async (opts) => {\n      await opts.ctx.requireValidSession(opts)\n      return getSaazBack(opts.input.dbName).updatePresence(opts.input.opts)\n    }),\n\n  saaz_closePeer: procedure\n    .input(\n      z.object({\n        dbName: z.string(),\n        opts: z.object({peerId: z.string()}),\n        studioAuth,\n      }),\n    )\n    .output(z.any())\n    .mutation(async (opts) => {\n      await opts.ctx.requireValidSession(opts)\n      return getSaazBack(opts.input.dbName).closePeer(opts.input.opts)\n    }),\n\n  saaz_getUpdatesSinceClock: procedure\n    .input(z.object({dbName: z.string(), opts: z.any(), studioAuth}))\n    .output(z.any())\n    .query(async (opts) => {\n      await opts.ctx.requireValidSession(opts)\n      return getSaazBack(opts.input.dbName).getUpdatesSinceClock(\n        opts.input.opts,\n      )\n    }),\n\n  saaz_getLastIncorporatedPeerClock: procedure\n    .input(\n      z.object({\n        dbName: z.string(),\n        opts: z.object({peerId: z.string()}),\n        studioAuth,\n      }),\n    )\n    .output(z.any())\n    .query(async (opts) => {\n      await opts.ctx.requireValidSession(opts)\n      return getSaazBack(opts.input.dbName).getLastIncorporatedPeerClock(\n        opts.input.opts,\n      )\n    }),\n\n  saaz_subscribe: procedure\n    .input(z.object({dbName: z.string(), opts: z.any(), studioAuth}))\n    .output(z.any())\n    .subscription(async (opts) => {\n      await opts.ctx.requireValidSession(opts)\n      return observable<{}>((emit) => {\n        const unsubPromise = getSaazBack(opts.input.dbName).subscribe(\n          opts.input.opts,\n          (s) => {\n            emit.next(s)\n          },\n        )\n\n        return () => {\n          void unsubPromise.then((unsub) => unsub())\n        }\n      })\n    }),\n})\n"
  },
  {
    "path": "packages/sync-server/src/types.ts",
    "content": "export type $IntentionalAny = any\nexport type $FixMe = any\n"
  },
  {
    "path": "packages/sync-server/src/utils/authUtils.ts",
    "content": "import * as jose from 'jose'\nimport {TRPCError} from '@trpc/server'\nimport {appHost} from 'src/appClient'\nimport type {studioAuthTokens} from '@theatre/app/types'\nimport type {$IntentionalAny} from '@theatre/utils/types'\n\nconst jwtPublicKey = fetch(appHost + `/api/jwt-public-key`)\n  .then((response) => response.json())\n  .then((json) => json.publicKey)\n  .then((publicKeyString) => jose.importSPKI(publicKeyString, 'RS256'))\n\nexport type Session = {\n  _accessToken: string\n} & studioAuthTokens.AccessTokenPayload\n\nexport async function verifyAccessTokenOrThrow(opts: {\n  input: {studioAuth: {accessToken: string}}\n}): Promise<Session> {\n  const {accessToken} = opts.input.studioAuth\n  console.log('verifying ', accessToken)\n\n  const publicKey = await jwtPublicKey\n  try {\n    const res = await jose.jwtVerify(accessToken, publicKey, {\n      maxTokenAge: '1h',\n    })\n\n    const {payload}: {payload: studioAuthTokens.AccessTokenPayload} =\n      res as $IntentionalAny\n\n    console.log('authorized')\n    return {_accessToken: accessToken, ...payload}\n  } catch (e) {\n    console.log('unauthorized')\n    throw new TRPCError({\n      code: 'UNAUTHORIZED',\n      cause: 'InvalidSession',\n      message: 'Access token could not be verified',\n    })\n  }\n}\n"
  },
  {
    "path": "packages/sync-server/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"outDir\": \"dist\",\n    \"types\": [\"node\", \"jest\"],\n    \"baseUrl\": \".\",\n    \"composite\": true,\n    \"paths\": {\n      \"@theatre/utils/*\": [\"../utils/src/*\"],\n      \"@theatre/app/*\": [\"../app/src/*\"],\n      \"@theatre/core/*\": [\"../core/src/*\"],\n      \"@theatre/core\": [\"../core/src/index.ts\"]\n    }\n  },\n  \"references\": [\n    {\"path\": \"../utils\"},\n    {\"path\": \"../app\"},\n    {\"path\": \"../saaz\"},\n    {\"path\": \"../core\"}\n  ],\n  \"include\": [\"./env.d.ts\", \"./src/**/*\", \"devEnv/**/*\", \"./prisma/seed.ts\"],\n  \"exclude\": [\"**/node_modules\", \"**/.*\", \"**/xeno\", \"**/dist\", \"**/.temp\"]\n}\n"
  },
  {
    "path": "packages/theatric/.gitignore",
    "content": "/dist"
  },
  {
    "path": "packages/theatric/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "packages/theatric/README.md",
    "content": "# Theatric\n\nAn easy to use [Tweakpane](https://cocopon.github.io/tweakpane/)/[Leva](https://github.com/pmndrs/leva)-like library for React, built on top of\n[Theatre.js](github.com/theatre-js/theatre).\n\nhttps://user-images.githubusercontent.com/2991360/214639118-b64a9464-9df4-489d-b408-b70492990883.mp4\n\nWith Theatric you can:\n\n* Create controls for your React components.\n* Tweak those values while while your tweaks are persisted in the browser.\n* Undo/redo your tweaks, even after a page refresh.\n* Try out different assets (such as `.hdr` files), and once you're done, download your assets from the browser storage and put them in a static folder in your app.\n\n## Quick start\n\n```bash\n$ npm install theatric\n```\n\n```tsx\n// index.jsx\nReactDOM.render(<App />, document.getElementById('root'))\n\n// App.jsx\nimport {useControls} from 'theatric'\nimport React from 'react'\n\nexport default function App() {\n  const {name, age} = useControls({name: 'Andrew', age: 28})\n\n  return (\n    <div>\n      Hey, I'm {name} and I'm {age} years old.\n    </div>\n  )\n}\n```\n\n- Example with `@react-three/fiber` on [Codesandbox](https://codesandbox.io/s/theatric-demo-vcgcmi?file=/src/App.js).\n- Example with assets on [Codesandbox](https://codesandbox.io/s/theatric-assets-demo-gl8x2k).\n\n## Supported prop types\n\nTheatric supports all the prop types that Theatre.js supports. You can find a list of supported prop types [here](https://www.theatrejs.com/docs/latest/manual/prop-types).\n\n## API\n\n[`useControls(controls, options?)`](#usecontrolscontrols-options)\n\n[`initialize(config)`](#initializeconfig)\n\n[`types`](#types)\n\n### `useControls(controls, options?)`\n\n`useControls` is Theatric's main API. It is a React hook which you can call from\nanywhere in your component tree. It takes an object of controls and returns an\nobject of values.\n\n```tsx\nimport {useControls} from 'theatric'\n\nfunction Introduction() {\n  const {name, age} = useControls({name: 'Andrew', age: 28})\n\n  return (\n    <div>\n      Hey, I'm {name} and I'm {age} years old.\n    </div>\n  )\n}\n```\n\nOptionally, you can also provide a folder option in the options argument, which\nwill namespace your controls to that folder in the UI. This is useful if you\nhave multiple instances of the same component, in which case the controls would\ncollide.\n\n```tsx\nimport {useControls} from 'theatric'\n\nfunction Introduction({id}) {\n  const {name, age} = useControls({name: 'Andrew', age: 28}, {folder: id})\n\n  return (\n    <div>\n      Hey, I'm {name} and I'm {age} years old.\n    </div>\n  )\n}\n```\n\n`useControls` also returns two special properties, `$get` and `$set`, which you\ncan use to get and set the values of your controls imperatively.\n\n```tsx\nimport {useControls} from 'theatric'\n\nfunction Introduction() {\n  const {name, age, $get, $set} = useControls({name: 'Andrew', age: 28})\n\n  const increaseAge = useCallback(() => {\n    $set((values) => values.age, $get((values) => values.age) + 1)\n  }, [$get, $set])\n\n  return (\n    <div>\n      <div>\n        Hey, I'm {name} and I'm {age} years old.\n      </div>\n      <button onClick={increaseAge}>Increase age</button>\n    </div>\n  )\n}\n```\n\nYou can also place buttons on the control panel to trigger actions. You can\ncombine this with the `$get` and `$set` methods to create a more convenient UI.\n\n```tsx\nimport {useControls, button} from 'theatric'\n\nfunction Introduction() {\n  const {name, age, $get, $set} = useControls({\n    name: 'Andrew',\n    age: 28,\n    IncrementAge: button(() => {\n      $set((values) => values.age, $get((values) => values.age) + 1)\n    }),\n  })\n\n  return (\n    <div>\n      <div>\n        Hey, I'm {name} and I'm {age} years old.\n      </div>\n    </div>\n  )\n}\n```\n\n`$get()` and `$set()` use pointers to specify which prop to get/set. Learn more about pointers [here](https://www.theatrejs.com/docs/latest/api/core#pointers).\n\nExample of setting a nested prop:\n\n```tsx\nimport {useControls, button} from 'theatric'\n\nfunction Introduction() {\n  const {person, $get, $set} = useControls({\n    // note how name and age are sub-props of person\n    person: {\n      name: 'Andrew',\n      age: 28,\n    },\n    \n    IncrementAge: button(() => {\n      // values.person.age is a pointer to the age prop of the person object\n      $set((values) => values.person.age, $get((values) => values.person.age) + 1)\n    }),\n  })\n\n  return (\n    <div>\n      <div>\n        Hey, I'm {person.name} and I'm {person.age} years old.\n      </div>\n    </div>\n  )\n}\n```\n\n### `initialize(config)`\n\nOptionally, you can call `initialize()` to initialize the UI with a certain\nstate, or to take advantage of features like\n[assets](https://www.theatrejs.com/docs/latest/manual/assets) support. `initialize()` takes the same\nconfig object as [`getProject()`](https://www.theatrejs.com/docs/latest/api/core#getproject_id-config_).\n\n\n```tsx\nimport {initialize, useControls, types, getAssetUrl} from 'theatric'\nimport theatricState from './theatricState.json'\n\ninitialize({\n  // use the state of the state.json file you exported from the UI\n  state: theatricState,\n}).then(() => {\n  // theatric is ready (although we don't have to wait for it unless we want to use assets)\n})\n  \nReactDOM.render(<App />, document.getElementById('root'))\n\nfunction App() {\n  const {img} = useControls({\n    name: 'Andrew',\n    age: types.number(28, {\n      range: [0, 150],\n    }),\n  })\n  \n\n  return (\n    <div>\n      Hey, I'm {name} and I'm {age} years old.\n    </div>\n  )\n}\n```\n\n### `types`\n\nThe `types` export lets you provide more advanced options for your controls.\n\nFor example, to specify a range for a number, or adjust the scrubbing\nsensitivity, you can use the `number` type.\n\n```tsx\nimport {useControls, types} from 'theatric'\n\nfunction Introduction() {\n  const {name, age} = useControls({\n    name: 'Andrew',\n    age: types.number(28, {\n      // The range allowed in the UI (just a visual guide, not a validation rule)\n      range: [0, 10],\n      // Factor influencing the mouse-sensitivity when scrubbing the input\n      nudgeMultiplier: 0.1,\n    }),\n  })\n\n  return (\n    <div>\n      Hey, I'm {name} and I'm {age} years old.\n    </div>\n  )\n}\n```\n\nThis is simply a re-export via `export {types} from '@theatre/core'`. To learn more about types, check out the\n[types documentation](https://www.theatrejs.com/docs/latest/manual/prop-types).\n\n## Using assets\n\nHere is an example of using image assets in your controls. Learn more about assets [here](https://www.theatrejs.com/docs/latest/manual/assets).\n\n```tsx\nimport {initialize, useControls, types, getAssetUrl} from 'theatric'\nimport theatricState from './theatricState.json'\n\ninitialize({\n  // if you're using assets in your controls, you can specify the base URL here.\n  \n  assets: {\n    // Defaults to '/'\n    // If you host your assets on a different domain, you can specify it here.\n    // For example if you're hosting your assets on https://cdn.example.com/theatric-assets\n    // you can set this to 'https://cdn.example.com/theatric-assets' (no trailing slash)\n    baseUrl: '/theatric-assets',\n  },\n}).then(() => {\n  // this is only necessary if you're using assets such as .hdr images in your prop values.\n  // awaiting the initialization ensures that the assets are loaded before rendering the app.\n  ReactDOM.render(<App />, document.getElementById('root'))\n})\n\nfunction App() {\n  const {img} = useControls({\n    // this will accept jpegs/pngs/hdrs/etc\n    // its default value is '' (empty string)\n    // learn more about assets here: https://www.theatrejs.com/docs/latest/manual/assets\n    img: types.image('')\n  })\n\n  const src = getAssetUrl(img)\n\n  return (\n    <div>\n      <img src={src} />\n    </div>\n  )\n}\n```\n\n## How does Theatric compare to Theatre.js?\n\n* You can use both Theatric and Theatre.js in the same project. That's a common use-case.\n* You'd use Theatre.js if you're creating complex animation, or if you have large projects with many objects and props to control.\n* On the other hand, if you're just looking for a quick way to tweak a few values in your app, Theatric is a good choice. It requires no setup, no configuration, and no boilerplate. All of your values end up in a single Theatre.js [Object](https://www.theatrejs.com/docs/latest/manual/objects).\n\n## License\n\nApache License Version 2.0. Theatric only embeds Theatre.js' studio in the development build, so studio won't be included in your production build.\n"
  },
  {
    "path": "packages/theatric/devEnv/api-extractor.json",
    "content": "/**\n * Config file for API Extractor.  For more info, please visit: https://api-extractor.com\n */\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json\",\n\n  /**\n   * Optionally specifies another JSON config file that this file extends from.  This provides a way for\n   * standard settings to be shared across multiple projects.\n   *\n   * If the path starts with \"./\" or \"../\", the path is resolved relative to the folder of the file that contains\n   * the \"extends\" field.  Otherwise, the first path segment is interpreted as an NPM package name, and will be\n   * resolved using NodeJS require().\n   *\n   * SUPPORTED TOKENS: none\n   * DEFAULT VALUE: \"\"\n   */\n  \"extends\": \"../../../devEnv/api-extractor-base.json\",\n  // \"extends\": \"my-package/include/api-extractor-base.json\"\n\n  /**\n   * Determines the \"<projectFolder>\" token that can be used with other config file settings.  The project folder\n   * typically contains the tsconfig.json and package.json config files, but the path is user-defined.\n   *\n   * The path is resolved relative to the folder of the config file that contains the setting.\n   *\n   * The default value for \"projectFolder\" is the token \"<lookup>\", which means the folder is determined by traversing\n   * parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder\n   * that contains a tsconfig.json file.  If a tsconfig.json file cannot be found in this way, then an error\n   * will be reported.\n   *\n   * SUPPORTED TOKENS: <lookup>\n   * DEFAULT VALUE: \"<lookup>\"\n   */\n  \"projectFolder\": \"..\"\n}\n"
  },
  {
    "path": "packages/theatric/devEnv/api-extractor.tsconfig.json",
    "content": "{\n  \"$schema\": \"https://json.schemastore.org/tsconfig\",\n  \"extends\": \"../tsconfig.json\",\n  \"compilerOptions\": {\n    \"paths\": {}\n  }\n}\n"
  },
  {
    "path": "packages/theatric/devEnv/build.ts",
    "content": "import * as path from 'path'\nimport {build} from 'esbuild'\nimport type {Plugin} from 'esbuild'\n\nconst externalPlugin = (patterns: RegExp[]): Plugin => {\n  return {\n    name: `external`,\n\n    setup(build) {\n      build.onResolve({filter: /.*/}, (args) => {\n        const external = patterns.some((p) => {\n          return p.test(args.path)\n        })\n\n        if (external) {\n          return {path: args.path, external}\n        }\n      })\n    },\n  }\n}\n\nconst definedGlobals = {\n  global: 'window',\n}\n\nasync function createBundles(watch: boolean) {\n  const pathToPackage = path.join(__dirname, '../')\n  const pkgJson = require(path.join(pathToPackage, 'package.json'))\n  const listOfDependencies = Object.keys(pkgJson.dependencies || {})\n  const listOfPeerDependencies = Object.keys(pkgJson.peerDependencies || {})\n  const listOfAllDependencies = [\n    ...listOfDependencies,\n    ...listOfPeerDependencies,\n  ]\n\n  const esbuildConfig: Parameters<typeof build>[0] = {\n    entryPoints: [path.join(pathToPackage, 'src/index.ts')],\n    bundle: true,\n    sourcemap: true,\n    define: definedGlobals,\n    watch,\n    platform: 'neutral',\n    mainFields: ['browser', 'module', 'main'],\n    target: ['firefox57', 'chrome58'],\n    conditions: ['browser', 'node'],\n    plugins: [\n      externalPlugin([\n        // if a dependency is listed in the package.json, it should be external\n        ...listOfAllDependencies.map((d) => new RegExp(`^${d}`)),\n      ]),\n    ],\n  }\n\n  await build({\n    ...esbuildConfig,\n    outfile: path.join(pathToPackage, 'dist/index.js'),\n    format: 'cjs',\n  })\n\n  // build({\n  //   ...esbuildConfig,\n  //   outfile: path.join(pathToPackage, 'dist/index.mjs'),\n  //   format: 'esm',\n  // })\n}\n\nvoid createBundles(false)\n"
  },
  {
    "path": "packages/theatric/devEnv/tsconfig.json",
    "content": "{\n  \n}"
  },
  {
    "path": "packages/theatric/package.json",
    "content": "{\n  \"name\": \"theatric\",\n  \"version\": \"0.7.0\",\n  \"license\": \"Apache-2.0\",\n  \"author\": {\n    \"name\": \"Andrew Prifer\",\n    \"email\": \"andrew.prifer@gmail.com\",\n    \"url\": \"https://github.com/AndrewPrifer\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/theatre-js/theatre\",\n    \"directory\": \"packages/theatric\"\n  },\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"files\": [\n    \"dist/**/*\"\n  ],\n  \"scripts\": {\n    \"prepack\": \"node ../../devEnv/ensurePublishing.js\",\n    \"typecheck\": \"yarn run build\",\n    \"build\": \"run-s build:ts build:js build:api-json\",\n    \"build:ts\": \"tsc --build ./tsconfig.json\",\n    \"build:js\": \"tsx ./devEnv/build.ts\",\n    \"build:api-json\": \"api-extractor run --local --config devEnv/api-extractor.json\",\n    \"prepublish\": \"node ../../devEnv/ensurePublishing.js\",\n    \"clean\": \"rm -rf ./dist && rm -f tsconfig.tsbuildinfo\"\n  },\n  \"devDependencies\": {\n    \"@microsoft/api-extractor\": \"^7.18.11\",\n    \"@theatre/dataverse\": \"workspace:*\",\n    \"@types/jest\": \"^26.0.23\",\n    \"@types/node\": \"^15.6.2\",\n    \"@types/react\": \"^18.2.18\",\n    \"esbuild\": \"^0.12.15\",\n    \"lodash-es\": \"^4.17.21\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"tsx\": \"4.7.0\",\n    \"typescript\": \"5.1.6\"\n  },\n  \"dependencies\": {\n    \"@theatre/core\": \"workspace:*\",\n    \"@theatre/react\": \"workspace:*\",\n    \"@theatre/studio\": \"workspace:*\",\n    \"oauth4webapi\": \"^2.4.0\"\n  },\n  \"peerDependencies\": {\n    \"react\": \"*\"\n  }\n}\n"
  },
  {
    "path": "packages/theatric/src/index.ts",
    "content": "import type {\n  IProject,\n  IProjectConfig,\n  ISheetObject,\n  UnknownShorthandCompoundProps,\n  IStudio,\n} from '@theatre/core'\nimport {getStudio, val, init, getStudioSync} from '@theatre/core'\nimport {getProject} from '@theatre/core'\nimport type {Pointer} from '@theatre/dataverse'\nimport {isPointer} from '@theatre/dataverse'\nimport isEqualWith from 'lodash-es/isEqualWith'\nimport isEqual from 'lodash-es/isEqual'\nimport {useEffect, useMemo, useState, useRef} from 'react'\n\ntype KeysMatching<T extends object, V> = {\n  [K in keyof T]-?: T[K] extends V ? K : never\n}[keyof T]\n\ntype OmitMatching<T extends object, V> = Omit<T, KeysMatching<T, V>>\n\n// Because treeshaking studio relies on static checks like the following, we can't make including studio configurable at runtime.\n// What we can do, if there arises a need to use studio in production with theatric, is to let users provide their own studio instance.\n// That way we can treeshake our own, and the user can give us theirs, if they want to.\n\nif (process.env.NODE_ENV === 'development') {\n  void getStudio().then((studio) => {\n    void init({studio: true})\n  })\n}\n\n// Just to be able to treeshake studio out of the bundle\nconst maybeTransaction: IStudio['transaction'] =\n  process.env.NODE_ENV === 'development'\n    ? (...args: Parameters<IStudio['transaction']>) =>\n        getStudioSync(true)!.transaction(...args)\n    : () => {}\n\nlet _projectConfig: IProjectConfig['state'] | undefined = undefined\n\n// used for comparing config objects, to avoid re-rendering when the config object is recreated\n// but the values are the same except for functions\nfunction equalityCheckWithFunctionsAlwaysEqual(\n  a: unknown,\n  b: unknown,\n): boolean | undefined {\n  if (typeof a === 'function' && typeof b === 'function') {\n    return true\n  }\n}\n\nexport function initialize(config: IProjectConfig): Promise<void> {\n  if (_project) {\n    console.warn(\n      'Theatric has already been initialized, either through another initialize call, or by calling useControls() before calling initialize().',\n    )\n    return _project.ready.then(() => {})\n  }\n  _projectConfig = config\n  const project = callGetProject()\n  return project.ready.then(() => {})\n}\n\nexport function getAssetUrl(asset: {\n  type: 'image' | 'file'\n  id: string | undefined\n}): string | undefined {\n  if (!_project) {\n    throw new Error(\n      'Theatric has not been initialized yet. Please call initialize() before calling getAssetUrl().',\n    )\n  }\n  if (!_project.isReady) {\n    throw new Error(\n      'Calling `getAssetUrl()` before `initialize()` is resolved.\\n' +\n        'The best way to solve this is to delay rendering your react app until `project.ready` is resolved, like this: \\n\\n' +\n        '```\\n' +\n        'project.ready.then(() => {ReactDom.render(...)})\\n' +\n        '```',\n    )\n  }\n  return _project.getAssetUrl(asset)\n}\n\nconst allProps: Record<string, UnknownShorthandCompoundProps[]> = {}\nconst allActions: Record<string, Record<string, () => void>[]> = {}\n\ntype Button = {\n  type: 'button'\n  onClick: () => void\n}\ntype Buttons = {\n  [key: string]: Button\n}\n\ntype ControlsAndButtons = {\n  [key: string]: {type: 'button'} | UnknownShorthandCompoundProps[string]\n}\n\n/**\n * The type of the `$set()` function returned by `useControls()`.\n */\ntype Setter<Config extends UnknownShorthandCompoundProps> = <S>(\n  pointer: (p: ISheetObject<Config>['props']) => Pointer<S>,\n  value: S,\n) => void\n\n/**\n * The type of the `$get()` function returned by `useControls()`.\n */\ntype Getter<Config extends UnknownShorthandCompoundProps> = <S>(\n  pointer: (p: ISheetObject<Config>['props']) => Pointer<S>,\n) => S\n\nexport function useControls<Config extends ControlsAndButtons>(\n  config: Config,\n  options: {panel?: string; folder?: string} = {},\n): ISheetObject<OmitMatching<Config, {type: 'button'}>>['value'] & {\n  $set: Setter<OmitMatching<Config, {type: 'button'}>>\n  $get: Getter<OmitMatching<Config, {type: 'button'}>>\n} {\n  // initialize state to null, if it hasn't been initialized yet\n  if (_projectConfig === undefined) {\n    _projectConfig = null\n  }\n\n  /*\n   * This is a performance hack just to avoid a bunch of unnecessary calculations and effect runs whenever the hook is called,\n   * since the config object is very likely not memoized by the user.\n   * Since the config object can include functions, we can't rely for correctness on just deep comparing the config object,\n   * we also have to perform a deep comparison on the theatre object values in onValuesChange before calling setState in order\n   * to truly make sure we avoid infinite loops in this case, since then the config object will always be reported to be different by isEqual.\n   *\n   * Note: normally object.onValuesChange wouldn't be called twice with the same values, but when the object is reconfigured (which it is),\n   * this doesn't seem to be the case.\n   *\n   * Also note: normally it'd be illegal to set refs during render (since renders might not be committed), but it is fine here\n   * because we are only using it for memoization, _config is never going to be stale.\n   */\n  const configRef = useRef(config)\n  const _config = useMemo(() => {\n    let currentConfig = configRef.current\n\n    if (\n      !isEqualWith(\n        config,\n        configRef.current,\n        equalityCheckWithFunctionsAlwaysEqual,\n      )\n    ) {\n      configRef.current = config\n      currentConfig = config\n    }\n\n    return currentConfig\n  }, [config])\n\n  const {folder} = options\n\n  const controlsWithoutButtons = useMemo(\n    () =>\n      Object.fromEntries(\n        Object.entries(_config).filter(\n          ([key, value]) => (value as any).type !== 'button',\n        ),\n      ) as UnknownShorthandCompoundProps,\n    [_config],\n  )\n\n  const buttons = useMemo(\n    () =>\n      Object.fromEntries(\n        Object.entries(_config).filter(\n          ([key, value]) => (value as any).type === 'button',\n        ),\n      ) as unknown as Buttons,\n    [_config],\n  )\n\n  const props = useMemo(\n    () =>\n      folder ? {[folder]: controlsWithoutButtons} : controlsWithoutButtons,\n    [folder, controlsWithoutButtons],\n  )\n\n  const actions = useMemo(\n    () =>\n      Object.fromEntries(\n        Object.entries(buttons).map(([key, value]) => [\n          `${folder ? `${folder}: ` : ''}${key}`,\n          () => {\n            // the value of the button is a function, so we can't use it as a dependency, but we can use it as a ref\n            // @ts-ignore\n            configRef.current[key].onClick?.()\n          },\n        ]),\n      ),\n    [buttons, folder],\n  )\n\n  const sheet = useMemo(() => callGetProject().sheet('Panels'), [])\n\n  const panel = options.panel ?? 'Default panel'\n  const allPanelProps = allProps[panel] ?? (allProps[panel] = [])\n  const allPanelActions = allActions[panel] ?? (allActions[panel] = [])\n\n  // have to do this to make sure the values are immediately available\n  const object = useMemo(\n    () =>\n      sheet.object(panel, Object.assign({}, ...allProps[panel], props), {\n        reconfigure: true,\n        __actions__THIS_API_IS_UNSTABLE_AND_WILL_CHANGE_IN_THE_NEXT_VERSION:\n          Object.assign({}, ...allActions[panel], actions),\n      }),\n    [panel, props, actions],\n  )\n\n  useEffect(() => {\n    allPanelProps.push(props)\n    allPanelActions.push(actions)\n    // cleanup runs after render, so we have to reconfigure with the new props here too, doing it during render just makes sure that\n    // the very first values returned are not undefined\n    let obj = sheet.object(panel, Object.assign({}, ...allPanelProps), {\n      reconfigure: true,\n      __actions__THIS_API_IS_UNSTABLE_AND_WILL_CHANGE_IN_THE_NEXT_VERSION:\n        Object.assign({}, ...allPanelActions),\n    })\n\n    selectObjectIfNecessary(obj)\n\n    return () => {\n      allPanelProps.splice(allPanelProps.indexOf(props), 1)\n      allActions[panel].splice(allPanelActions.indexOf(actions), 1)\n      sheet.object(panel, Object.assign({}, ...allPanelProps), {\n        reconfigure: true,\n        __actions__THIS_API_IS_UNSTABLE_AND_WILL_CHANGE_IN_THE_NEXT_VERSION:\n          Object.assign({}, ...allPanelActions),\n      })\n    }\n  }, [props, actions, allPanelActions, allPanelProps, sheet, panel])\n\n  const [values, setValues] = useState(\n    (folder ? object.value[folder] : object.value) as ISheetObject<\n      OmitMatching<Config, {type: 'button'}>\n    >['value'],\n  )\n\n  const valuesRef = useRef(object.value)\n\n  useEffect(() => {\n    const unsub = object.onValuesChange((newValues) => {\n      if (folder) newValues = newValues[folder]\n\n      // Normally object.onValuesChange wouldn't be called twice with the same values, but when the object is reconfigured (like we do above),\n      // this doesn't seem to be the case, so we need to explicitly do this here to avoid infinite loops.\n      if (isEqual(newValues, valuesRef.current)) return\n\n      valuesRef.current = newValues\n      setValues(newValues as any)\n    })\n\n    return unsub\n  }, [object])\n\n  const $setAndGet = useMemo(() => {\n    const rootPointer = folder\n      ? (object as ISheetObject).props[folder]\n      : object.props\n\n    const $set: Setter<OmitMatching<Config, {type: 'button'}>> = (\n      getPointer,\n      value,\n    ) => {\n      if (typeof getPointer !== 'function') {\n        throw new Error(\n          `The first argument to $set must be a function that returns a pointer. Instead, it was ${typeof getPointer}`,\n        )\n      }\n\n      const pointer = getPointer(rootPointer as any)\n      if (!isPointer(pointer)) {\n        throw new Error(\n          `The function passed to $set must return a pointer. Instead, it returned ${pointer}`,\n        )\n      }\n      // this is not ideal because it will create a separate undo level for each set call,\n      // but this is the only thing that theatre's public API allows us to do.\n      // Wrapping the whole thing in a transaction wouldn't work either because side effects\n      // would be run twice.\n      maybeTransaction((api) => {\n        api.set(pointer, value)\n      })\n    }\n\n    const $get: Getter<OmitMatching<Config, {type: 'button'}>> = (\n      getPointer,\n    ) => {\n      if (typeof getPointer !== 'function') {\n        throw new Error(\n          `The first argument to $get must be a function that returns a pointer. Instead, it was ${typeof getPointer}`,\n        )\n      }\n\n      const pointer = getPointer(rootPointer as any)\n      if (!isPointer(pointer)) {\n        throw new Error(\n          `The function passed to $get must return a pointer. Instead, it returned ${pointer}`,\n        )\n      }\n\n      return val(pointer)\n    }\n\n    return {$set, $get}\n  }, [folder, object])\n\n  return {...values, ...$setAndGet}\n}\n\nexport {types} from '@theatre/core'\n\nexport const button = (onClick: Button['onClick']) => {\n  return {\n    type: 'button' as const,\n    onClick,\n  }\n}\n\nlet _project: undefined | IProject\n\nfunction callGetProject() {\n  if (_project) return _project\n  _project = getProject('Theatric', _projectConfig ?? undefined)\n  return _project\n}\n\nlet objAlreadySelected = false\n// When the user first opens the page, no object will be selected, which for users\n// unfamiliar with theatre can be confusing. Let's help the user by selecting the first object\n// that is created using `useControls()`.\nfunction selectObjectIfNecessary(obj: ISheetObject) {\n  if (objAlreadySelected) return\n  objAlreadySelected = true\n  if (process.env.NODE_ENV === 'development') {\n    const studio = getStudioSync()!\n    if (studio.selection.length === 0) {\n      studio.setSelection([obj])\n    }\n  }\n}\n"
  },
  {
    "path": "packages/theatric/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \"src\",\n    \"types\": [\"jest\", \"node\"],\n    \"emitDeclarationOnly\": true,\n    \"target\": \"es6\",\n    \"composite\": true\n  },\n  \"include\": [\"./src/**/*\"],\n  \"references\": [{\"path\": \"../core\"}, {\"path\": \"../studio\"}]\n}\n"
  },
  {
    "path": "packages/utils/.gitignore",
    "content": "/dist"
  },
  {
    "path": "packages/utils/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "packages/utils/README.md",
    "content": "`@theatre/utils`\n"
  },
  {
    "path": "packages/utils/devEnv/api-extractor.json",
    "content": "/**\r\n * Config file for API Extractor.  For more info, please visit: https://api-extractor.com\r\n */\r\n{\r\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json\",\r\n\r\n  /**\r\n   * Optionally specifies another JSON config file that this file extends from.  This provides a way for\r\n   * standard settings to be shared across multiple projects.\r\n   *\r\n   * If the path starts with \"./\" or \"../\", the path is resolved relative to the folder of the file that contains\r\n   * the \"extends\" field.  Otherwise, the first path segment is interpreted as an NPM package name, and will be\r\n   * resolved using NodeJS require().\r\n   *\r\n   * SUPPORTED TOKENS: none\r\n   * DEFAULT VALUE: \"\"\r\n   */\r\n  \"extends\": \"../../../devEnv/api-extractor-base.json\",\r\n  // \"extends\": \"my-package/include/api-extractor-base.json\"\r\n\r\n  /**\r\n   * Determines the \"<projectFolder>\" token that can be used with other config file settings.  The project folder\r\n   * typically contains the tsconfig.json and package.json config files, but the path is user-defined.\r\n   *\r\n   * The path is resolved relative to the folder of the config file that contains the setting.\r\n   *\r\n   * The default value for \"projectFolder\" is the token \"<lookup>\", which means the folder is determined by traversing\r\n   * parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder\r\n   * that contains a tsconfig.json file.  If a tsconfig.json file cannot be found in this way, then an error\r\n   * will be reported.\r\n   *\r\n   * SUPPORTED TOKENS: <lookup>\r\n   * DEFAULT VALUE: \"<lookup>\"\r\n   */\r\n  \"projectFolder\": \"..\"\r\n}\r\n"
  },
  {
    "path": "packages/utils/devEnv/api-extractor.tsconfig.json",
    "content": "{\n  \"$schema\": \"https://json.schemastore.org/tsconfig\",\n  \"extends\": \"../tsconfig.json\"\n}\n"
  },
  {
    "path": "packages/utils/devEnv/build.ts",
    "content": "import * as path from 'path'\nimport {build} from 'esbuild'\n\nconst definedGlobals = {}\n\nfunction createBundles(watch: boolean) {\n  const pathToPackage = path.join(__dirname, '../')\n  const esbuildConfig: Parameters<typeof build>[0] = {\n    entryPoints: [path.join(pathToPackage, 'src/index.ts')],\n    bundle: true,\n    sourcemap: true,\n    define: definedGlobals,\n    watch,\n    platform: 'neutral',\n    mainFields: ['browser', 'module', 'main'],\n    target: ['firefox57', 'chrome58'],\n    conditions: ['browser', 'node'],\n  }\n\n  void build({\n    ...esbuildConfig,\n    outfile: path.join(pathToPackage, 'dist/index.js'),\n    format: 'cjs',\n  })\n\n  // build({\n  //   ...esbuildConfig,\n  //   outfile: path.join(pathToPackage, 'dist/index.mjs'),\n  //   format: 'esm',\n  // })\n}\n\ncreateBundles(false)\n"
  },
  {
    "path": "packages/utils/devEnv/tsconfig.json",
    "content": "{\n  \n}"
  },
  {
    "path": "packages/utils/package.json",
    "content": "{\n  \"name\": \"@theatre/utils\",\n  \"version\": \"0.7.0\",\n  \"license\": \"Apache-2.0\",\n  \"private\": true,\n  \"author\": {\n    \"name\": \"Aria Minaei\",\n    \"email\": \"aria@theatrejs.com\",\n    \"url\": \"https://github.com/AriaMinaei\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/theatre-js/theatre\",\n    \"directory\": \"packages/utils\"\n  },\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"files\": [\n    \"dist/**/*\"\n  ],\n  \"scripts\": {\n    \"prepack\": \"node ../../devEnv/ensurePublishing.js\",\n    \"typecheck\": \"yarn run build:ts\",\n    \"build\": \"run-s build:ts build:js build:api-json\",\n    \"build:ts\": \"tsc --build ./tsconfig.json\",\n    \"build:js\": \"tsx ./devEnv/build.ts\",\n    \"build:api-json\": \"api-extractor run --local --config devEnv/api-extractor.json\",\n    \"prepublish\": \"node ../../devEnv/ensurePublishing.js\",\n    \"clean\": \"rm -rf ./dist && rm -f tsconfig.tsbuildinfo\",\n    \"docs\": \"typedoc src/index.ts --out api --plugin typedoc-plugin-markdown --readme none\",\n    \"precommit\": \"yarn run docs\"\n  },\n  \"devDependencies\": {\n    \"@microsoft/api-extractor\": \"^7.36.4\",\n    \"@theatre/dataverse\": \"workspace:*\",\n    \"@types/jest\": \"^26.0.23\",\n    \"@types/lodash-es\": \"^4.17.4\",\n    \"@types/node\": \"^15.6.2\",\n    \"esbuild\": \"^0.12.15\",\n    \"fast-deep-equal\": \"^3.1.3\",\n    \"immer\": \"^9.0.6\",\n    \"jest-diff\": \"^29.6.4\",\n    \"lodash-es\": \"^4.17.21\",\n    \"nanoid\": \"^4.0.2\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"propose\": \"^0.0.5\",\n    \"tsx\": \"4.7.0\",\n    \"typedoc\": \"^0.24.8\",\n    \"typedoc-plugin-markdown\": \"^3.15.4\",\n    \"typescript\": \"5.1.6\"\n  },\n  \"dependencies\": {\n    \"idb\": \"^7.1.1\"\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/Nominal.ts",
    "content": "/**\n * Using a symbol, we can sort of add unique properties to arbitrary other types.\n * So, we use this to our advantage to add a \"marker\" of information to strings using\n * the {@link Nominal} type.\n *\n * Can be used with keys in pointers.\n * This identifier shows in the expanded {@link Nominal} as `string & {[nominal]:\"SequenceTrackId\"}`,\n * So, we're opting to keeping the identifier short.\n */\nconst nominal = Symbol()\n\n/**\n * This creates an \"opaque\"/\"nominal\" type.\n *\n * Our primary use case is to be able to use with keys in pointers.\n *\n * Numbers cannot be added together if they are \"nominal\"\n *\n * See {@link nominal} for more details.\n */\nexport type Nominal<N extends string> = string & {[nominal]: N}\n\ndeclare global {\n  // Fix Object.entries and Object.keys definitions for Nominal strict records\n  interface ObjectConstructor {\n    /** Nominal: Extension to the Object prototype definition to properly manage {@link Nominal} keyed records */\n    keys<T extends Record<Nominal<string>, any>>(\n      obj: T,\n    ): any extends T ? never[] : Extract<keyof T, string>[]\n    /** Nominal: Extension to the Object prototype definition to properly manage {@link Nominal} keyed records */\n    entries<T extends Record<Nominal<string>, any>>(\n      obj: T,\n    ): any extends T\n      ? [never, never][]\n      : Array<{[P in keyof T]: [P, T[P]]}[Extract<keyof T, string>]>\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/PointableSet.ts",
    "content": "import type {StrictRecord} from '@theatre/utils/types'\n\n/**\n * Consistent way to maintain an unordered structure which plays well with dataverse pointers and\n * data change tracking:\n * - paths to items are stable;\n * - changing one item does not change `allIds`, so it can be mapped over in React without\n *   unnecessary re-renders\n */\nexport type PointableSet<Id extends string, V> = {\n  /**\n   * Usually accessed through pointers before accessing the actual value, so we can separate\n   * changes to individual items from changes to the entire list of items.\n   */\n  byId: StrictRecord<Id, V>\n  /**\n   * Separate list of ids allows us to recognize changes to set item memberships, without being triggered changed when\n   * the contents of its items have changed.\n   */\n  allIds: StrictRecord<Id, true>\n}\n\nexport const pointableSetUtil = {\n  create<Id extends string, V>(\n    values?: Iterable<[Id, V]>,\n  ): PointableSet<Id, V> {\n    const set: PointableSet<Id, V> = {byId: {}, allIds: {}}\n    if (values) {\n      for (const [id, value] of values) {\n        set.byId[id] = value\n        set.allIds[id] = true\n      }\n    }\n    return set\n  },\n  shallowCopy<Id extends string, V>(\n    existing: PointableSet<Id, V> | undefined,\n  ): PointableSet<Id, V> {\n    return {\n      byId: {...existing?.byId},\n      allIds: {...existing?.allIds},\n    }\n  },\n  add<Id extends string, V>(\n    existing: PointableSet<Id, V> | undefined,\n    id: Id,\n    value: V,\n  ): PointableSet<Id, V> {\n    return {\n      byId: {...existing?.byId, [id]: value},\n      allIds: {...existing?.allIds, [id]: true},\n    }\n  },\n  merge<Id extends string, V>(\n    sets: PointableSet<Id, V>[],\n  ): PointableSet<Id, V> {\n    const target = pointableSetUtil.create<Id, V>()\n    for (let i = 0; i < sets.length; i++) {\n      target.byId = {...target.byId, ...sets[i].byId}\n      target.allIds = {...target.allIds, ...sets[i].allIds}\n    }\n    return target\n  },\n  remove<Id extends string, V>(\n    existing: PointableSet<Id, V>,\n    id: Id,\n  ): PointableSet<Id, V> {\n    const set = pointableSetUtil.shallowCopy(existing)\n    delete set.allIds[id]\n    delete set.byId[id]\n    return set\n  },\n  /**\n   * Note: this is not very performant (it's not crazy slow or anything)\n   * it's just that it's not able to re-use object classes in v8 due to\n   * excessive `delete obj[key]` instances.\n   *\n   * `Map`s would be faster, but they aren't used for synchronized JSON state stuff.\n   * See {@link StrictRecord} for related conversation.\n   */\n  filter<Id extends string, V>(\n    existing: PointableSet<Id, V>,\n    predicate: (value: V | undefined) => boolean | undefined | null,\n  ): PointableSet<Id, V> {\n    const set = pointableSetUtil.shallowCopy(existing)\n    for (const [id, value] of Object.entries(set.byId)) {\n      if (!predicate(value)) {\n        delete set.allIds[id]\n        delete set.byId[id]\n      }\n    }\n    return set\n  },\n}\n"
  },
  {
    "path": "packages/utils/src/SimpleCache.ts",
    "content": "import type {$IntentionalAny} from '@theatre/utils/types'\n\n/**\n * A basic cache\n */\nexport default class SimpleCache {\n  /**\n   * NOTE this could also be a Map.\n   */\n  protected _values: Record<string, unknown> = {}\n  constructor() {}\n\n  /**\n   * get the cache item at `key` or produce it using `producer` and cache _that_.\n   *\n   * Note that this won't work if you change the producer, like `get(key, producer1); get(key, producer2)`.\n   */\n  get<T>(key: string, producer: () => T): T {\n    if (this.has(key)) {\n      return this._values[key] as $IntentionalAny\n    } else {\n      const cachedValue = producer()\n      this._values[key] = cachedValue\n      return cachedValue\n    }\n  }\n\n  /**\n   * Returns true if the cache has an item at `key`.\n   */\n  has(key: string): boolean {\n    return this._values.hasOwnProperty(key)\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/WeakMapWithGetOrSet.ts",
    "content": "import type {$IntentionalAny} from '@theatre/utils/types'\n\n/**\n * A wrapper around a WeakMap that adds a convenient `getOrSet` method.\n */\nexport default class WeakMapWithGetOrSet<\n  K extends object = {},\n  V = any,\n> extends WeakMap<K, V> {\n  /**\n   * get the cache item at `key` or produce it using `producer` and cache _that_.\n   *\n   * Note that this won't work if you change the producer, like `getOrSet(key, producer1); getOrSet(key, producer2)`.\n   */\n  getOrSet<T extends V>(key: K, producer: () => T): T {\n    if (this.has(key)) {\n      return this.get(key) as $IntentionalAny\n    } else {\n      const cachedValue = producer()\n      this.set(key, cachedValue)\n      return cachedValue\n    }\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/_logger/logger.shouldLog.test.ts",
    "content": "import {TheatreLoggerLevel, _LoggerLevel} from './logger'\nimport {_loggerShouldLog} from './logger'\n\ndescribe('Theatre.js internal logger: shouldLog', () => {\n  testIncludes(\n    'TRACE dev/internal',\n    {\n      dev: true,\n      internal: true,\n      min: TheatreLoggerLevel.TRACE,\n    },\n    {\n      _ERROR: true,\n      _HMM: true,\n      _TODO: true,\n      ERROR_DEV: true,\n      ERROR_PUBLIC: true,\n      _KAPOW: true,\n      _WARN: true,\n      WARN_DEV: true,\n      WARN_PUBLIC: true,\n      _DEBUG: true,\n      DEBUG_DEV: true,\n      _TRACE: true,\n      TRACE_DEV: true,\n    },\n  )\n\n  testIncludes(\n    'DEBUG dev/internal',\n    {\n      dev: true,\n      internal: true,\n      min: TheatreLoggerLevel.DEBUG,\n    },\n    {\n      _ERROR: true,\n      _HMM: true,\n      _TODO: true,\n      ERROR_DEV: true,\n      ERROR_PUBLIC: true,\n      _WARN: true,\n      _KAPOW: true,\n      WARN_DEV: true,\n      WARN_PUBLIC: true,\n      _DEBUG: true,\n      DEBUG_DEV: true,\n      _TRACE: false,\n      TRACE_DEV: false,\n    },\n  )\n\n  testIncludes(\n    'TRACE dev',\n    {\n      dev: true,\n      internal: false,\n      min: TheatreLoggerLevel.TRACE,\n    },\n    {\n      _ERROR: false,\n      _HMM: false,\n      _KAPOW: false,\n      _TODO: false,\n      ERROR_DEV: true,\n      ERROR_PUBLIC: true,\n      _WARN: false,\n      WARN_DEV: true,\n      WARN_PUBLIC: true,\n      _DEBUG: false,\n      DEBUG_DEV: true,\n      _TRACE: false,\n      TRACE_DEV: true,\n    },\n  )\n\n  testIncludes(\n    'TRACE',\n    {\n      dev: false,\n      internal: false,\n      min: TheatreLoggerLevel.TRACE,\n    },\n    {\n      _ERROR: false,\n      _HMM: false,\n      _KAPOW: false,\n      _TODO: false,\n      ERROR_DEV: false,\n      ERROR_PUBLIC: true,\n      _WARN: false,\n      WARN_DEV: false,\n      WARN_PUBLIC: true,\n      _DEBUG: false,\n      DEBUG_DEV: false,\n      _TRACE: false,\n      TRACE_DEV: false,\n    },\n  )\n\n  testIncludes(\n    'WARN dev',\n    {\n      dev: true,\n      internal: false,\n      min: TheatreLoggerLevel.WARN,\n    },\n    {\n      _ERROR: false,\n      _HMM: false,\n      _KAPOW: false,\n      _TODO: false,\n      ERROR_DEV: true,\n      ERROR_PUBLIC: true,\n      _WARN: false,\n      WARN_DEV: true,\n      WARN_PUBLIC: true,\n      _DEBUG: false,\n      DEBUG_DEV: false,\n      _TRACE: false,\n      TRACE_DEV: false,\n    },\n  )\n\n  testIncludes(\n    'TRACE internal',\n    {\n      dev: false,\n      internal: true,\n      min: TheatreLoggerLevel.TRACE,\n    },\n    {\n      _ERROR: true,\n      _HMM: true,\n      _TODO: true,\n      ERROR_DEV: false,\n      ERROR_PUBLIC: true,\n      _KAPOW: true,\n      _WARN: true,\n      WARN_DEV: false,\n      WARN_PUBLIC: true,\n      _DEBUG: true,\n      DEBUG_DEV: false,\n      _TRACE: true,\n      TRACE_DEV: false,\n    },\n  )\n})\n\nfunction testIncludes(\n  name: string,\n  config: {\n    dev: boolean\n    internal: boolean\n    min: TheatreLoggerLevel\n  },\n  expectations: {[P in keyof typeof _LoggerLevel]: boolean},\n) {\n  test.each(Object.entries(expectations))(\n    `${name} + %s = %s`,\n    (level, expectIsIncluded) => {\n      const actual = _loggerShouldLog(config, _LoggerLevel[level])\n      if (actual !== expectIsIncluded) {\n        const stackless = new Error(\n          `Expected shouldLog({ dev: ${config.dev}, internal: ${\n            config.internal\n          }, max: ${TheatreLoggerLevel[config.min]} }, ${level}) = ${actual}`,\n        )\n        stackless.stack = undefined // stack is not useful in test\n        throw stackless\n      }\n    },\n  )\n}\n"
  },
  {
    "path": "packages/utils/src/_logger/logger.test-helpers.ts",
    "content": "import type {\n  ITheatreConsoleLogger,\n  _LogFns,\n  ITheatreInternalLoggerOptions,\n  IUtilLogger,\n  ILogger,\n} from './logger'\nimport {createTheatreInternalLogger} from './logger'\n\nconst DEBUG_LOGGER = false\n\nfunction noop() {}\n\nexport function describeLogger(\n  name: string,\n  body: (setup: () => ReturnType<typeof setupFn>) => void,\n) {\n  describe(name, () => {\n    body(\n      setupFn.bind(null, {\n        _debug: DEBUG_LOGGER ? console.log.bind(console, name) : noop,\n        _error: console.error.bind(console, name),\n      }),\n    )\n  })\n}\n\nfunction setupFn(options: ITheatreInternalLoggerOptions) {\n  const con = spyConsole()\n  const internal = createTheatreInternalLogger(con, options)\n  function t(logger = internal.getLogger()) {\n    return {\n      expectExcluded(kind: keyof _LogFns) {\n        try {\n          const message = `${kind} message`\n          logger[kind](message)\n          expect(con.debug).not.toBeCalled()\n          expect(con.info).not.toBeCalled()\n          expect(con.warn).not.toBeCalled()\n          expect(con.error).not.toBeCalled()\n        } catch (err) {\n          throw new LoggerTestError(\n            `Expected logger.${kind}(...) excluded from logging\\n${(\n              err as Error\n            ).toString()}`,\n          )\n        }\n      },\n      expectIncluded(\n        kind: keyof _LogFns,\n        expectOutputted: keyof ITheatreConsoleLogger,\n        includes: TestLoggerIncludes = [],\n      ) {\n        try {\n          const message = `${kind} message`\n          logger[kind](message)\n          if (expectOutputted !== 'debug') {\n            expect(con.debug).not.toBeCalled()\n          }\n          if (expectOutputted !== 'info') {\n            expect(con.info).not.toBeCalled()\n          }\n          if (expectOutputted !== 'warn') {\n            expect(con.warn).not.toBeCalled()\n          }\n          if (expectOutputted !== 'error') {\n            expect(con.error).not.toBeCalled()\n          }\n          expectLastCalledWith(con[expectOutputted], includes)\n        } catch (err) {\n          throw new LoggerTestError(\n            `Expected logger.${kind}(...) included and outputted via console.${expectOutputted}(...)\\n${(\n              err as Error\n            ).toString()}`,\n          )\n        }\n        con[expectOutputted].mockReset()\n      },\n      named(name: string, key?: string | number) {\n        return t(logger.named(name, key))\n      },\n      utilFor: objMap(\n        logger.utilFor,\n        ([audience, downgradeFn]) =>\n          () =>\n            setupUtilLogger(downgradeFn(), audience, con),\n      ),\n    }\n  }\n  return {\n    internal,\n    con,\n    t,\n  }\n}\n\nfunction expectLastCalledWith(\n  fn: jest.MockInstance<any, any[]>,\n  includes: TestLoggerIncludes,\n) {\n  expect(fn).toBeCalled()\n  if (includes.length > 0) {\n    const [lastCall] = fn.mock.calls\n    const concat = lastCall.filter(Boolean).map(String).join(', ')\n    const errors = includes.flatMap((includeTest) => {\n      if (typeof includeTest === 'string') {\n        return concat.includes(includeTest)\n          ? []\n          : [`didn't include ${JSON.stringify(includeTest)}`]\n      } else if ('test' in includeTest) {\n        return includeTest.test(concat)\n          ? []\n          : [`didn't match ${String(includeTest)}`]\n      } else if (typeof includeTest.not === 'string') {\n        return concat.includes(includeTest.not)\n          ? [`wasn't supposed to include ${JSON.stringify(includeTest.not)}`]\n          : []\n      } else if ('test' in includeTest.not) {\n        return includeTest.not.test(concat)\n          ? [`wasn't supposed to match ${String(includeTest.not)}`]\n          : []\n      }\n    })\n    if (errors.length > 0) {\n      throw new LoggerTestError(\n        `Last called with ${JSON.stringify(concat)}, but ${errors.join(', ')}`,\n      )\n    }\n  }\n}\n\nfunction objMap<T extends {}, U>(\n  template: T,\n  eachEntry: <P extends keyof T>(entry: [name: P, value: T[P]]) => U,\n): {[P in keyof T]: U} {\n  // @ts-ignore\n  return Object.fromEntries(\n    Object.entries(template).map((entry) => {\n      // @ts-ignore\n      return [entry[0], eachEntry(entry)]\n    }),\n  )\n}\n\ntype TestLoggerIncludes = ((string | RegExp) | {not: string | RegExp})[]\n\nfunction setupUtilLogger(\n  logger: IUtilLogger,\n  audience: keyof ILogger['utilFor'],\n  con: jest.Mocked<ITheatreConsoleLogger>,\n) {\n  return {\n    named(name: string, key?: string) {\n      return setupUtilLogger(logger.named(name, key), audience, con)\n    },\n    expectExcluded(kind: keyof IUtilLogger) {\n      try {\n        const message = `${audience} ${kind} message`\n        logger[kind](message)\n        expect(con.debug).not.toBeCalled()\n        expect(con.info).not.toBeCalled()\n        expect(con.warn).not.toBeCalled()\n        expect(con.error).not.toBeCalled()\n      } catch (err) {\n        throw new LoggerTestError(\n          `Expected \"${audience}\" logger.${kind}(...) excluded from logging\\n${(\n            err as Error\n          ).toString()}`,\n        )\n      }\n    },\n    expectIncluded(\n      kind: keyof IUtilLogger,\n      expectOutputted: keyof ITheatreConsoleLogger,\n      includes: TestLoggerIncludes = [],\n    ) {\n      try {\n        const message = `${audience} ${kind} message`\n        logger[kind](message)\n        if (expectOutputted !== 'debug') {\n          expect(con.debug).not.toBeCalled()\n        }\n        if (expectOutputted !== 'info') {\n          expect(con.info).not.toBeCalled()\n        }\n        if (expectOutputted !== 'warn') {\n          expect(con.warn).not.toBeCalled()\n        }\n        if (expectOutputted !== 'error') {\n          expect(con.error).not.toBeCalled()\n        }\n        expectLastCalledWith(con[expectOutputted], includes)\n      } catch (err) {\n        throw new LoggerTestError(\n          `Expected \"${audience}\" logger.${kind}(...) included and outputted via console.${expectOutputted}(...)\\n${(\n            err as Error\n          ).toString()}`,\n        )\n      }\n      con[expectOutputted].mockReset()\n    },\n  }\n}\n\nfunction spyConsole(): jest.Mocked<ITheatreConsoleLogger> {\n  return {\n    debug: jest.fn(),\n    info: jest.fn(),\n    error: jest.fn(),\n    warn: jest.fn(),\n  }\n}\n\n// remove these lines from thrown errors\nconst AT_NODE_INTERNAL_RE = /^\\s*at.+node:internal.+/gm\nconst AT_TEST_HELPERS_RE = /^\\s*(at|[^@]+@).+test\\-helpers.+/gm\n\n/** `TestError` removes the invariant line & test-helpers from the `Error.stack` */\nclass LoggerTestError extends Error {\n  found: any\n  constructor(message: string, found?: any) {\n    super(message)\n    if (found) {\n      this.found = found\n    }\n    // const before = this.stack\n    // prettier-ignore\n    this.stack = this.stack\n      ?.replace(AT_TEST_HELPERS_RE, \"\")\n      .replace(AT_NODE_INTERNAL_RE, \"\")\n    // console.error({ before, after: this.stack })\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/_logger/logger.test.ts",
    "content": "import {TheatreLoggerLevel} from './logger'\nimport {describeLogger} from './logger.test-helpers'\n\ndescribeLogger('Theatre.js internal logger', (setup) => {\n  describe('default logger', () => {\n    test('it reports public messages', () => {\n      const t = setup().t()\n\n      t.expectIncluded('errorPublic', 'error')\n      t.expectIncluded('warnPublic', 'warn')\n    })\n\n    test('it does not report dev messages', () => {\n      const t = setup().t()\n\n      t.expectExcluded('errorDev')\n      t.expectExcluded('warnDev')\n      t.expectExcluded('debugDev')\n      t.expectExcluded('traceDev')\n    })\n\n    test('it does not report internal messages', () => {\n      const t = setup().t()\n\n      t.expectExcluded('_hmm')\n      t.expectExcluded('_kapow')\n      t.expectExcluded('_debug')\n      t.expectExcluded('_trace')\n    })\n  })\n\n  describe('custom logging', () => {\n    test('it can include all dev and internal logs', () => {\n      const h = setup()\n\n      const initial = h.t()\n\n      h.internal.configureLogging({\n        dev: true,\n        internal: true,\n        min: TheatreLoggerLevel.TRACE,\n      })\n\n      const t = h.t()\n\n      // initial logger will not have been able to acknowledge\n      // the logging config update.\n      initial.expectExcluded('_hmm')\n      initial.expectExcluded('errorDev')\n\n      t.expectIncluded('_hmm', 'error')\n      t.expectIncluded('_kapow', 'warn')\n      t.expectIncluded('_debug', 'info')\n      t.expectIncluded('_trace', 'debug')\n\n      t.expectIncluded('errorDev', 'error')\n      t.expectIncluded('warnDev', 'warn')\n      t.expectIncluded('debugDev', 'info')\n      t.expectIncluded('traceDev', 'debug')\n    })\n\n    test('it can include WARN level dev and internal logs', () => {\n      const h = setup()\n\n      h.internal.configureLogging({\n        dev: true,\n        internal: true,\n        min: TheatreLoggerLevel.WARN,\n      })\n\n      const t = h.t()\n\n      t.expectIncluded('_hmm', 'error')\n      t.expectIncluded('_kapow', 'warn')\n      t.expectIncluded('errorDev', 'error')\n      t.expectIncluded('warnDev', 'warn')\n\n      t.expectExcluded('_debug')\n      t.expectExcluded('_trace')\n      t.expectExcluded('debugDev')\n      t.expectExcluded('traceDev')\n    })\n\n    test('it can include WARN level dev logs', () => {\n      const h = setup()\n\n      h.internal.configureLogging({\n        dev: true,\n        min: TheatreLoggerLevel.WARN,\n      })\n\n      const t = h.t()\n\n      t.expectIncluded('errorDev', 'error')\n      t.expectIncluded('warnDev', 'warn')\n\n      t.expectExcluded('_hmm')\n      t.expectExcluded('_kapow')\n      t.expectExcluded('_debug')\n      t.expectExcluded('_trace')\n      t.expectExcluded('debugDev')\n      t.expectExcluded('traceDev')\n    })\n  })\n\n  describe('named and keys', () => {\n    test('default with no name has no colors', () => {\n      const h = setup()\n      const app = h.t().named('App')\n      const appK2 = app.named('K', 1)\n\n      app.expectIncluded('errorPublic', 'error', ['App', {not: /K.*#1/}])\n      app.expectIncluded('warnPublic', 'warn', ['App', {not: /K.*#1/}])\n      appK2.expectIncluded('errorPublic', 'error', ['App', /App.*K.*#1/])\n      appK2.expectIncluded('warnPublic', 'warn', ['App', /App.*K.*#1/])\n    })\n  })\n\n  describe('named gets colors', () => {\n    test('default with no name has no colors', () => {\n      const h = setup()\n      const t = h.t()\n\n      t.expectIncluded('errorPublic', 'error', [{not: 'color:'}])\n      t.expectIncluded('warnPublic', 'warn', [{not: 'color:'}])\n    })\n\n    test('default with name has color', () => {\n      const h = setup()\n      const t = h.t().named('Test1')\n\n      t.expectIncluded('errorPublic', 'error', ['color:', 'Test1'])\n      t.expectIncluded('warnPublic', 'warn', ['color:', 'Test1'])\n    })\n\n    test('consoleStyle: false with name does not have color', () => {\n      const h = setup()\n      h.internal.configureLogging({\n        consoleStyle: false,\n      })\n\n      const t = h.t().named('Test1')\n\n      t.expectIncluded('errorPublic', 'error', [{not: 'color:'}, 'Test1'])\n      t.expectIncluded('warnPublic', 'warn', [{not: 'color:'}, 'Test1'])\n    })\n\n    test('console style: false with name does not have color', () => {\n      const h = setup()\n      h.internal.configureLogger({\n        type: 'console',\n        console: h.con,\n        style: false,\n      })\n\n      const t = h.t().named('Test1')\n\n      t.expectIncluded('errorPublic', 'error', [{not: 'color:'}, 'Test1'])\n      t.expectIncluded('warnPublic', 'warn', [{not: 'color:'}, 'Test1'])\n    })\n  })\n  describe('utilFor', () => {\n    test('.utilFor.public() with defaults', () => {\n      const h = setup()\n\n      const publ = h.t().utilFor.public()\n\n      publ.expectIncluded('error', 'error')\n      publ.expectIncluded('warn', 'warn')\n      publ.expectExcluded('debug')\n      publ.expectExcluded('trace')\n    })\n\n    test('.utilFor.dev() with defaults', () => {\n      const h = setup()\n\n      const dev = h.t().utilFor.dev()\n\n      dev.expectExcluded('error')\n      dev.expectExcluded('warn')\n      dev.expectExcluded('debug')\n      dev.expectExcluded('trace')\n    })\n\n    test('.utilFor.internal() with defaults', () => {\n      const h = setup()\n\n      const internal = h.t().utilFor.internal()\n\n      internal.expectExcluded('error')\n      internal.expectExcluded('warn')\n      internal.expectExcluded('debug')\n      internal.expectExcluded('trace')\n    })\n\n    test('.utilFor.internal() can be named', () => {\n      const h = setup()\n\n      h.internal.configureLogging({\n        internal: true,\n        min: TheatreLoggerLevel.TRACE,\n      })\n\n      const internal = h.t().utilFor.internal()\n      const appleInternal = internal.named('Apple')\n\n      internal.expectIncluded('error', 'error', [{not: 'Apple'}])\n      internal.expectIncluded('warn', 'warn', [{not: 'Apple'}])\n      internal.expectIncluded('debug', 'info', [{not: 'Apple'}])\n      internal.expectIncluded('trace', 'debug', [{not: 'Apple'}])\n\n      appleInternal.expectIncluded('error', 'error', ['Apple'])\n      appleInternal.expectIncluded('warn', 'warn', ['Apple'])\n      appleInternal.expectIncluded('debug', 'info', ['Apple'])\n      appleInternal.expectIncluded('trace', 'debug', ['Apple'])\n    })\n\n    test('.utilFor.public() debug/trace warns internal', () => {\n      const h = setup()\n      {\n        h.internal.configureLogging({\n          internal: true,\n        })\n        const publ = h.t().utilFor.public()\n\n        publ.expectIncluded('error', 'error', [{not: 'filtered out'}])\n        publ.expectIncluded('warn', 'warn', [{not: 'filtered out'}])\n\n        // warnings go through internal loggers since public loggers do not have a trace or debug level\n        publ.expectIncluded('debug', 'warn', ['filtered out'])\n        publ.expectIncluded('trace', 'warn', ['filtered out'])\n      }\n\n      {\n        h.internal.configureLogging({\n          dev: true,\n        })\n        const publ = h.t().utilFor.public()\n\n        publ.expectIncluded('error', 'error', [{not: /filtered out/}])\n        publ.expectIncluded('warn', 'warn', [{not: /filtered out/}])\n\n        // warnings only go through internal loggers\n        publ.expectExcluded('debug')\n        publ.expectExcluded('trace')\n      }\n    })\n  })\n})\n"
  },
  {
    "path": "packages/utils/src/_logger/logger.ts",
    "content": "/** @public configuration type */\nexport interface ITheatreLogger {\n  error(level: ITheatreLogMeta, message: string, args?: Loggable): void\n  warn(level: ITheatreLogMeta, message: string, args?: Loggable): void\n  debug(level: ITheatreLogMeta, message: string, args?: Loggable): void\n  trace(level: ITheatreLogMeta, message: string, args?: Loggable): void\n}\n\ntype ITheatreLogMeta = Readonly<{\n  audience: 'public' | 'dev' | 'internal'\n  category: 'general' | 'todo' | 'troubleshooting'\n  level: TheatreLoggerLevel\n}>\n\n/** @public configuration type */\nexport interface ITheatreConsoleLogger {\n  /** ERROR level logs */\n  error(message: string, ...args: any[]): void\n  /** WARN level logs */\n  warn(message: string, ...args: any[]): void\n  /** DEBUG level logs */\n  info(message: string, ...args: any[]): void\n  /** TRACE level logs */\n  debug(message: string, ...args: any[]): void\n}\n\n/**\n * \"Downgraded\" {@link ILogger} for passing down to utility functions.\n *\n * A util logger is usually back by some specific {@link _Audience}.\n */\nexport interface IUtilLogger {\n  /** Usually equivalent to `console.error`. */\n  error(message: string, args?: object): void\n  /** Usually equivalent to `console.warn`. */\n  warn(message: string, args?: object): void\n  /** Usually equivalent to `console.info`. */\n  debug(message: string, args?: object): void\n  /** Usually equivalent to `console.debug`. */\n  trace(message: string, args?: object): void\n  named(name: string, key?: string): IUtilLogger\n}\n\ntype Loggable = Record<string, any>\ntype LogFn = (message: string, args?: Loggable) => void\n/**\n * Allow for the arguments to only be computed if the level is included.\n * If the level is not included, then the fn will still be passed to the filtered\n * function.\n */\ntype LazyLogFn = (message: string, args: () => Loggable) => void\n\nfunction lazy(f: LogFn): LazyLogFn {\n  return function lazyLogIncluded(m, lazyArg) {\n    return f(m, lazyArg())\n  }\n}\n\nexport type _LogFns = Readonly<{\n  [P in keyof typeof LEVELS]: LogFn\n}>\n\nexport type _LazyLogFns = Readonly<{\n  [P in keyof typeof LEVELS]: LazyLogFn\n}>\n\n/** Internal library logger\n * TODO document these fns\n */\nexport interface ILogger extends _LogFns {\n  named(name: string, key?: string | number): ILogger\n  lazy: _LazyLogFns\n  readonly utilFor: {\n    internal(): IUtilLogger\n    dev(): IUtilLogger\n    public(): IUtilLogger\n  }\n}\n\nexport type ITheatreLoggerConfig =\n  | /** default {@link console} */\n  'console'\n  | {\n      type: 'console'\n      /** default `true` */\n      style?: boolean\n      /** default {@link console} */\n      console?: ITheatreConsoleLogger\n    }\n  | {\n      type: 'named'\n      named(names: string[]): ITheatreLogger\n    }\n  | {\n      type: 'keyed'\n      keyed(\n        nameAndKeys: {\n          name: string\n          key?: string | number\n        }[],\n      ): ITheatreLogger\n    }\n\nexport type ITheatreLogSource = {names: {name: string; key?: number | string}[]}\n\nexport type ITheatreLogIncludes = {\n  /**\n   * General information max level.\n   * e.g. `Project imported might be corrupted`\n   */\n  min?: TheatreLoggerLevel\n  /**\n   * Include logs meant for developers using Theatre.js\n   * e.g. `Created new project 'Abc' with options {...}`\n   *\n   * defaults to `true` if `internal: true` or defaults to `false`.\n   */\n  dev?: boolean\n  /**\n   * Include logs meant for internal development of Theatre.js\n   * e.g. `Migrated project 'Abc' { duration_ms: 34, from_version: 1, to_version: 3, imported_settings: false }`\n   *\n   * defaults to `false`\n   */\n  internal?: boolean\n}\n\nexport type ITheatreLoggingConfig = ITheatreLogIncludes & {\n  include?: (source: ITheatreLogSource) => ITheatreLogIncludes\n  consoleStyle?: boolean\n}\n\n/** @internal */\nenum _Category {\n  GENERAL = 1 << 0,\n  TODO = 1 << 1,\n  TROUBLESHOOTING = 1 << 2,\n}\n\n/** @internal */\nenum _Audience {\n  /** Logs for developers of Theatre.js */\n  INTERNAL = 1 << 3,\n  /** Logs for developers using Theatre.js */\n  DEV = 1 << 4,\n  /** Logs for users of the app using Theatre.js */\n  PUBLIC = 1 << 5,\n}\n\nexport enum TheatreLoggerLevel {\n  TRACE = 1 << 6,\n  DEBUG = 1 << 7,\n  WARN = 1 << 8,\n  ERROR = 1 << 9,\n}\n\n/**\n * @internal Theatre.js internal \"dev\" levels are odd numbers\n *\n * You can check if a level is odd quickly by doing `level & 1 === 1`\n */\nexport enum _LoggerLevel {\n  /** The highest logging level number. */\n  ERROR_PUBLIC = TheatreLoggerLevel.ERROR |\n    _Audience.PUBLIC |\n    _Category.GENERAL,\n  ERROR_DEV = TheatreLoggerLevel.ERROR | _Audience.DEV | _Category.GENERAL,\n  /** @internal this was an unexpected event */\n  _HMM = TheatreLoggerLevel.ERROR |\n    _Audience.INTERNAL |\n    _Category.TROUBLESHOOTING,\n  _TODO = TheatreLoggerLevel.ERROR | _Audience.INTERNAL | _Category.TODO,\n  _ERROR = TheatreLoggerLevel.ERROR | _Audience.INTERNAL | _Category.GENERAL,\n  WARN_PUBLIC = TheatreLoggerLevel.WARN | _Audience.PUBLIC | _Category.GENERAL,\n  WARN_DEV = TheatreLoggerLevel.WARN | _Audience.DEV | _Category.GENERAL,\n  /** @internal surface this in this moment, but it probably shouldn't be left in the code after debugging. */\n  _KAPOW = TheatreLoggerLevel.WARN |\n    _Audience.INTERNAL |\n    _Category.TROUBLESHOOTING,\n  _WARN = TheatreLoggerLevel.WARN | _Audience.INTERNAL | _Category.GENERAL,\n  DEBUG_DEV = TheatreLoggerLevel.DEBUG | _Audience.DEV | _Category.GENERAL,\n  /** @internal debug logs for implementation details */\n  _DEBUG = TheatreLoggerLevel.DEBUG | _Audience.INTERNAL | _Category.GENERAL,\n  /** trace logs like when the project is saved */\n  TRACE_DEV = TheatreLoggerLevel.TRACE | _Audience.DEV | _Category.GENERAL,\n  /**\n   * The lowest logging level number.\n   * @internal trace logs for implementation details\n   */\n  _TRACE = TheatreLoggerLevel.TRACE | _Audience.INTERNAL | _Category.GENERAL,\n}\n\nconst LEVELS = {\n  _hmm: getLogMeta(_LoggerLevel._HMM),\n  _todo: getLogMeta(_LoggerLevel._TODO),\n  _error: getLogMeta(_LoggerLevel._ERROR),\n  errorDev: getLogMeta(_LoggerLevel.ERROR_DEV),\n  errorPublic: getLogMeta(_LoggerLevel.ERROR_PUBLIC),\n  _kapow: getLogMeta(_LoggerLevel._KAPOW),\n  _warn: getLogMeta(_LoggerLevel._WARN),\n  warnDev: getLogMeta(_LoggerLevel.WARN_DEV),\n  warnPublic: getLogMeta(_LoggerLevel.WARN_PUBLIC),\n  _debug: getLogMeta(_LoggerLevel._DEBUG),\n  debugDev: getLogMeta(_LoggerLevel.DEBUG_DEV),\n  _trace: getLogMeta(_LoggerLevel._TRACE),\n  traceDev: getLogMeta(_LoggerLevel.TRACE_DEV),\n}\n\nfunction getLogMeta(level: _LoggerLevel): ITheatreLogMeta {\n  return Object.freeze({\n    audience: hasFlag(level, _Audience.INTERNAL)\n      ? 'internal'\n      : hasFlag(level, _Audience.DEV)\n        ? 'dev'\n        : 'public',\n    category: hasFlag(level, _Category.TROUBLESHOOTING)\n      ? 'troubleshooting'\n      : hasFlag(level, _Category.TODO)\n        ? 'todo'\n        : 'general',\n    level:\n      // I think this is equivalent... but I'm not using it until we have tests.\n      // this code won't really impact performance much anyway, since it's just computed once\n      // up front.\n      // level &\n      // (TheatreLoggerLevel.TRACE |\n      //   TheatreLoggerLevel.DEBUG |\n      //   TheatreLoggerLevel.WARN |\n      //   TheatreLoggerLevel.ERROR),\n      hasFlag(level, TheatreLoggerLevel.ERROR)\n        ? TheatreLoggerLevel.ERROR\n        : hasFlag(level, TheatreLoggerLevel.WARN)\n          ? TheatreLoggerLevel.WARN\n          : hasFlag(level, TheatreLoggerLevel.DEBUG)\n            ? TheatreLoggerLevel.DEBUG\n            : // no other option\n              TheatreLoggerLevel.TRACE,\n  })\n}\n\n/**\n * This is a helper function to determine whether the logger level has a bit flag set.\n *\n * Flags are interesting, because they give us an opportunity to very easily set up filtering\n * based on category and level. This is not available from public api, yet, but it's a good\n * start.\n */\nfunction hasFlag(level: _LoggerLevel, flag: number): boolean {\n  return (level & flag) === flag\n}\n\n/**\n * @internal\n *\n * You'd think max, means number \"max\", but since we use this system of bit flags,\n * we actually need to go the other way, with comparisons being math less than.\n *\n * NOTE: Keep this in the same file as {@link _Audience} to ensure basic compilers\n * can inline the enum values.\n */\nfunction shouldLog(\n  includes: Required<ITheatreLogIncludes>,\n  level: _LoggerLevel,\n) {\n  return (\n    ((level & _Audience.PUBLIC) === _Audience.PUBLIC\n      ? true\n      : (level & _Audience.DEV) === _Audience.DEV\n        ? includes.dev\n        : (level & _Audience.INTERNAL) === _Audience.INTERNAL\n          ? includes.internal\n          : false) && includes.min <= level\n  )\n}\n\nexport {shouldLog as _loggerShouldLog}\n\ntype InternalLoggerStyleRef = {\n  italic?: RegExp\n  bold?: RegExp\n  color?: (name: string) => string\n  collapseOnRE: RegExp\n  cssMemo: Map<string, string>\n  css(this: InternalLoggerStyleRef, name: string): string\n  collapsed(this: InternalLoggerStyleRef, name: string): string\n}\n\ntype InternalLoggerRef = {\n  loggingConsoleStyle: boolean\n  loggerConsoleStyle: boolean\n  includes: Required<ITheatreLogIncludes>\n  filtered: (\n    this: ITheatreLogSource,\n    level: _LoggerLevel,\n    message: string,\n    args?: Loggable | (() => Loggable),\n  ) => void\n  include: (obj: ITheatreLogSource) => ITheatreLogIncludes\n  create: (obj: ITheatreLogSource) => ILogger\n  creatExt: (obj: ITheatreLogSource) => ITheatreLogger\n  style: InternalLoggerStyleRef\n  named(\n    this: InternalLoggerRef,\n    parent: ITheatreLogSource,\n    name: string,\n    key?: number | string,\n  ): ILogger\n}\n\nconst DEFAULTS: InternalLoggerRef = {\n  loggingConsoleStyle: true,\n  loggerConsoleStyle: true,\n  includes: Object.freeze({\n    internal: false,\n    dev: false,\n    min: TheatreLoggerLevel.WARN,\n  }),\n  filtered: function defaultFiltered() {},\n  include: function defaultInclude() {\n    return {}\n  },\n  create: null!,\n  creatExt: null!,\n  named(this: InternalLoggerRef, parent, name, key) {\n    return this.create({\n      names: [...parent.names, {name, key}],\n    })\n  },\n  style: {\n    bold: undefined, // /Service$/\n    italic: undefined, // /Model$/\n    cssMemo: new Map<string, string>([\n      // handle empty names so we don't have to check for\n      // name.length > 0 during this.css('')\n      ['', ''],\n      // bring a specific override\n      // [\"Marker\", \"color:#aea9ff;font-size:0.75em;text-transform:uppercase\"]\n    ]),\n    collapseOnRE: /[a-z- ]+/g,\n    color: undefined,\n    // create collapsed name\n    // insert collapsed name into cssMemo with original's style\n    collapsed(this, name) {\n      if (name.length < 5) return name\n      const collapsed = name.replace(this.collapseOnRE, '')\n      if (!this.cssMemo.has(collapsed)) {\n        this.cssMemo.set(collapsed, this.css(name))\n      }\n      return collapsed\n    },\n    css(this, name): string {\n      const found = this.cssMemo.get(name)\n      if (found) return found\n      let css = `color:${\n        this.color?.(name) ??\n        `hsl(${\n          (name.charCodeAt(0) + name.charCodeAt(name.length - 1)) % 360\n        }, 100%, 60%)`\n      }`\n      if (this.bold?.test(name)) {\n        css += ';font-weight:600'\n      }\n      if (this.italic?.test(name)) {\n        css += ';font-style:italic'\n      }\n      this.cssMemo.set(name, css)\n      return css\n    },\n  },\n}\n\nexport type ITheatreInternalLogger = {\n  configureLogger(config: ITheatreLoggerConfig): void\n  configureLogging(config: ITheatreLoggingConfig): void\n  getLogger(): ILogger\n}\n\nexport type ITheatreInternalLoggerOptions = {\n  _error?: (message: string, args?: object) => void\n  _debug?: (message: string, args?: object) => void\n}\n\nexport function createTheatreInternalLogger(\n  useConsole: ITheatreConsoleLogger = console,\n  // Not yet, used, but good pattern to have in case we want to log something\n  // or report something interesting.\n  _options: ITheatreInternalLoggerOptions = {},\n): ITheatreInternalLogger {\n  const ref: InternalLoggerRef = {...DEFAULTS, includes: {...DEFAULTS.includes}}\n  const createConsole = {\n    styled: createConsoleLoggerStyled.bind(ref, useConsole),\n    noStyle: createConsoleLoggerNoStyle.bind(ref, useConsole),\n  }\n  const createExtBound = createExtLogger.bind(ref)\n  function getConCreate() {\n    return ref.loggingConsoleStyle && ref.loggerConsoleStyle\n      ? createConsole.styled\n      : createConsole.noStyle\n  }\n  ref.create = getConCreate()\n\n  return {\n    configureLogger(config) {\n      if (config === 'console') {\n        ref.loggerConsoleStyle = DEFAULTS.loggerConsoleStyle\n        ref.create = getConCreate()\n      } else if (config.type === 'console') {\n        ref.loggerConsoleStyle = config.style ?? DEFAULTS.loggerConsoleStyle\n        ref.create = getConCreate()\n      } else if (config.type === 'keyed') {\n        ref.creatExt = (source) => config.keyed(source.names)\n        ref.create = createExtBound\n      } else if (config.type === 'named') {\n        ref.creatExt = configNamedToKeyed.bind(null, config.named)\n        ref.create = createExtBound\n      }\n    },\n    configureLogging(config) {\n      ref.includes.dev = config.dev ?? DEFAULTS.includes.dev\n      ref.includes.internal = config.internal ?? DEFAULTS.includes.internal\n      ref.includes.min = config.min ?? DEFAULTS.includes.min\n      ref.include = config.include ?? DEFAULTS.include\n      ref.loggingConsoleStyle =\n        config.consoleStyle ?? DEFAULTS.loggingConsoleStyle\n      ref.create = getConCreate()\n    },\n    getLogger() {\n      return ref.create({names: []})\n    },\n  }\n}\n\n/** used by `configureLogger` for `'named'` */\nfunction configNamedToKeyed(\n  namedFn: (names: string[]) => ITheatreLogger,\n  source: ITheatreLogSource,\n): ITheatreLogger {\n  const names: string[] = []\n  for (let {name, key} of source.names) {\n    names.push(key == null ? name : `${name} (${key})`)\n  }\n  return namedFn(names)\n}\n\nfunction createExtLogger(\n  this: InternalLoggerRef,\n  source: ITheatreLogSource,\n): ILogger {\n  const includes = {...this.includes, ...this.include(source)}\n  const f = this.filtered\n  const named = this.named.bind(this, source)\n  const ext = this.creatExt(source)\n\n  const _HMM = shouldLog(includes, _LoggerLevel._HMM)\n  const _TODO = shouldLog(includes, _LoggerLevel._TODO)\n  const _ERROR = shouldLog(includes, _LoggerLevel._ERROR)\n  const ERROR_DEV = shouldLog(includes, _LoggerLevel.ERROR_DEV)\n  const ERROR_PUBLIC = shouldLog(includes, _LoggerLevel.ERROR_PUBLIC)\n  const _WARN = shouldLog(includes, _LoggerLevel._WARN)\n  const _KAPOW = shouldLog(includes, _LoggerLevel._KAPOW)\n  const WARN_DEV = shouldLog(includes, _LoggerLevel.WARN_DEV)\n  const WARN_PUBLIC = shouldLog(includes, _LoggerLevel.WARN_PUBLIC)\n  const _DEBUG = shouldLog(includes, _LoggerLevel._DEBUG)\n  const DEBUG_DEV = shouldLog(includes, _LoggerLevel.DEBUG_DEV)\n  const _TRACE = shouldLog(includes, _LoggerLevel._TRACE)\n  const TRACE_DEV = shouldLog(includes, _LoggerLevel.TRACE_DEV)\n  const _hmm = _HMM\n    ? ext.error.bind(ext, LEVELS._hmm)\n    : f.bind(source, _LoggerLevel._HMM)\n  const _todo = _TODO\n    ? ext.error.bind(ext, LEVELS._todo)\n    : f.bind(source, _LoggerLevel._TODO)\n  const _error = _ERROR\n    ? ext.error.bind(ext, LEVELS._error)\n    : f.bind(source, _LoggerLevel._ERROR)\n  const errorDev = ERROR_DEV\n    ? ext.error.bind(ext, LEVELS.errorDev)\n    : f.bind(source, _LoggerLevel.ERROR_DEV)\n  const errorPublic = ERROR_PUBLIC\n    ? ext.error.bind(ext, LEVELS.errorPublic)\n    : f.bind(source, _LoggerLevel.ERROR_PUBLIC)\n  const _kapow = _KAPOW\n    ? ext.warn.bind(ext, LEVELS._kapow)\n    : f.bind(source, _LoggerLevel._KAPOW)\n  const _warn = _WARN\n    ? ext.warn.bind(ext, LEVELS._warn)\n    : f.bind(source, _LoggerLevel._WARN)\n  const warnDev = WARN_DEV\n    ? ext.warn.bind(ext, LEVELS.warnDev)\n    : f.bind(source, _LoggerLevel.WARN_DEV)\n  const warnPublic = WARN_PUBLIC\n    ? ext.warn.bind(ext, LEVELS.warnPublic)\n    : f.bind(source, _LoggerLevel.WARN_DEV)\n  const _debug = _DEBUG\n    ? ext.debug.bind(ext, LEVELS._debug)\n    : f.bind(source, _LoggerLevel._DEBUG)\n  const debugDev = DEBUG_DEV\n    ? ext.debug.bind(ext, LEVELS.debugDev)\n    : f.bind(source, _LoggerLevel.DEBUG_DEV)\n  const _trace = _TRACE\n    ? ext.trace.bind(ext, LEVELS._trace)\n    : f.bind(source, _LoggerLevel._TRACE)\n  const traceDev = TRACE_DEV\n    ? ext.trace.bind(ext, LEVELS.traceDev)\n    : f.bind(source, _LoggerLevel.TRACE_DEV)\n  const logger: ILogger = {\n    _hmm,\n    _todo,\n    _error,\n    errorDev,\n    errorPublic,\n    _kapow,\n    _warn,\n    warnDev,\n    warnPublic,\n    _debug,\n    debugDev,\n    _trace,\n    traceDev,\n    lazy: {\n      _hmm: _HMM ? lazy(_hmm) : _hmm,\n      _todo: _TODO ? lazy(_todo) : _todo,\n      _error: _ERROR ? lazy(_error) : _error,\n      errorDev: ERROR_DEV ? lazy(errorDev) : errorDev,\n      errorPublic: ERROR_PUBLIC ? lazy(errorPublic) : errorPublic,\n      _kapow: _KAPOW ? lazy(_kapow) : _kapow,\n      _warn: _WARN ? lazy(_warn) : _warn,\n      warnDev: WARN_DEV ? lazy(warnDev) : warnDev,\n      warnPublic: WARN_PUBLIC ? lazy(warnPublic) : warnPublic,\n      _debug: _DEBUG ? lazy(_debug) : _debug,\n      debugDev: DEBUG_DEV ? lazy(debugDev) : debugDev,\n      _trace: _TRACE ? lazy(_trace) : _trace,\n      traceDev: TRACE_DEV ? lazy(traceDev) : traceDev,\n    },\n    //\n    named,\n    utilFor: {\n      internal() {\n        return {\n          debug: logger._debug,\n          error: logger._error,\n          warn: logger._warn,\n          trace: logger._trace,\n          named(name, key) {\n            return logger.named(name, key).utilFor.internal()\n          },\n        }\n      },\n      dev() {\n        return {\n          debug: logger.debugDev,\n          error: logger.errorDev,\n          warn: logger.warnDev,\n          trace: logger.traceDev,\n          named(name, key) {\n            return logger.named(name, key).utilFor.dev()\n          },\n        }\n      },\n      public() {\n        return {\n          error: logger.errorPublic,\n          warn: logger.warnPublic,\n          debug(message, obj) {\n            logger._warn(`(public \"debug\" filtered out) ${message}`, obj)\n          },\n          trace(message, obj) {\n            logger._warn(`(public \"trace\" filtered out) ${message}`, obj)\n          },\n          named(name, key) {\n            return logger.named(name, key).utilFor.public()\n          },\n        }\n      },\n    },\n  }\n\n  return logger\n}\n\nfunction createConsoleLoggerStyled(\n  this: InternalLoggerRef,\n  con: ITheatreConsoleLogger,\n  source: ITheatreLogSource,\n): ILogger {\n  const includes = {...this.includes, ...this.include(source)}\n\n  const styleArgs: any[] = []\n  let prefix = ''\n  for (let i = 0; i < source.names.length; i++) {\n    const {name, key} = source.names[i]\n    prefix += ` %c${name}`\n    styleArgs.push(this.style.css(name))\n    if (key != null) {\n      const keyStr = `%c#${key}`\n      prefix += keyStr\n      styleArgs.push(this.style.css(keyStr))\n    }\n  }\n\n  const f = this.filtered\n  const named = this.named.bind(this, source)\n  const prefixArr = [prefix, ...styleArgs]\n  return _createConsoleLogger(\n    f,\n    source,\n    includes,\n    con,\n    prefixArr,\n    styledKapowPrefix(prefixArr),\n    named,\n  )\n}\n\nfunction styledKapowPrefix(args: ReadonlyArray<string>): ReadonlyArray<string> {\n  const start = args.slice(0)\n  for (let i = 1; i < start.length; i++)\n    // add big font to all part styles\n    start[i] += ';background-color:#e0005a;padding:2px;color:white'\n  return start\n}\n\nfunction createConsoleLoggerNoStyle(\n  this: InternalLoggerRef,\n  con: ITheatreConsoleLogger,\n  source: ITheatreLogSource,\n): ILogger {\n  const includes = {...this.includes, ...this.include(source)}\n\n  let prefix = ''\n  for (let i = 0; i < source.names.length; i++) {\n    const {name, key} = source.names[i]\n    prefix += ` ${name}`\n    if (key != null) {\n      prefix += `#${key}`\n    }\n  }\n\n  const f = this.filtered\n  const named = this.named.bind(this, source)\n  const prefixArr = [prefix]\n  return _createConsoleLogger(\n    f,\n    source,\n    includes,\n    con,\n    prefixArr,\n    prefixArr,\n    named,\n  )\n}\n\n/** Used by {@link createConsoleLoggerNoStyle} and {@link createConsoleLoggerStyled} */\nfunction _createConsoleLogger(\n  f: (\n    this: ITheatreLogSource,\n    level: _LoggerLevel,\n    message: string,\n    args?: object | undefined,\n  ) => void,\n  source: ITheatreLogSource,\n  includes: {min: TheatreLoggerLevel; dev: boolean; internal: boolean},\n  con: ITheatreConsoleLogger,\n  prefix: ReadonlyArray<any>,\n  kapowPrefix: ReadonlyArray<any>,\n  named: (name: string, key?: string | number | undefined) => ILogger,\n) {\n  const _HMM = shouldLog(includes, _LoggerLevel._HMM)\n  const _TODO = shouldLog(includes, _LoggerLevel._TODO)\n  const _ERROR = shouldLog(includes, _LoggerLevel._ERROR)\n  const ERROR_DEV = shouldLog(includes, _LoggerLevel.ERROR_DEV)\n  const ERROR_PUBLIC = shouldLog(includes, _LoggerLevel.ERROR_PUBLIC)\n  const _WARN = shouldLog(includes, _LoggerLevel._WARN)\n  const _KAPOW = shouldLog(includes, _LoggerLevel._KAPOW)\n  const WARN_DEV = shouldLog(includes, _LoggerLevel.WARN_DEV)\n  const WARN_PUBLIC = shouldLog(includes, _LoggerLevel.WARN_PUBLIC)\n  const _DEBUG = shouldLog(includes, _LoggerLevel._DEBUG)\n  const DEBUG_DEV = shouldLog(includes, _LoggerLevel.DEBUG_DEV)\n  const _TRACE = shouldLog(includes, _LoggerLevel._TRACE)\n  const TRACE_DEV = shouldLog(includes, _LoggerLevel.TRACE_DEV)\n  const _hmm = _HMM\n    ? con.error.bind(con, ...prefix)\n    : f.bind(source, _LoggerLevel._HMM)\n  const _todo = _TODO\n    ? con.error.bind(con, ...prefix)\n    : f.bind(source, _LoggerLevel._TODO)\n  const _error = _ERROR\n    ? con.error.bind(con, ...prefix)\n    : f.bind(source, _LoggerLevel._ERROR)\n  const errorDev = ERROR_DEV\n    ? con.error.bind(con, ...prefix)\n    : f.bind(source, _LoggerLevel.ERROR_DEV)\n  const errorPublic = ERROR_PUBLIC\n    ? con.error.bind(con, ...prefix)\n    : f.bind(source, _LoggerLevel.ERROR_PUBLIC)\n  const _kapow = _KAPOW\n    ? con.warn.bind(con, ...kapowPrefix)\n    : f.bind(source, _LoggerLevel._KAPOW)\n  const _warn = _WARN\n    ? con.warn.bind(con, ...prefix)\n    : f.bind(source, _LoggerLevel._WARN)\n  const warnDev = WARN_DEV\n    ? con.warn.bind(con, ...prefix)\n    : f.bind(source, _LoggerLevel.WARN_DEV)\n  const warnPublic = WARN_PUBLIC\n    ? con.warn.bind(con, ...prefix)\n    : f.bind(source, _LoggerLevel.WARN_DEV)\n  const _debug = _DEBUG\n    ? con.info.bind(con, ...prefix)\n    : f.bind(source, _LoggerLevel._DEBUG)\n  const debugDev = DEBUG_DEV\n    ? con.info.bind(con, ...prefix)\n    : f.bind(source, _LoggerLevel.DEBUG_DEV)\n  const _trace = _TRACE\n    ? con.debug.bind(con, ...prefix)\n    : f.bind(source, _LoggerLevel._TRACE)\n  const traceDev = TRACE_DEV\n    ? con.debug.bind(con, ...prefix)\n    : f.bind(source, _LoggerLevel.TRACE_DEV)\n  const logger: ILogger = {\n    _hmm,\n    _todo,\n    _error,\n    errorDev,\n    errorPublic,\n    _kapow,\n    _warn,\n    warnDev,\n    warnPublic,\n    _debug,\n    debugDev,\n    _trace,\n    traceDev,\n    lazy: {\n      _hmm: _HMM ? lazy(_hmm) : _hmm,\n      _todo: _TODO ? lazy(_todo) : _todo,\n      _error: _ERROR ? lazy(_error) : _error,\n      errorDev: ERROR_DEV ? lazy(errorDev) : errorDev,\n      errorPublic: ERROR_PUBLIC ? lazy(errorPublic) : errorPublic,\n      _kapow: _KAPOW ? lazy(_kapow) : _kapow,\n      _warn: _WARN ? lazy(_warn) : _warn,\n      warnDev: WARN_DEV ? lazy(warnDev) : warnDev,\n      warnPublic: WARN_PUBLIC ? lazy(warnPublic) : warnPublic,\n      _debug: _DEBUG ? lazy(_debug) : _debug,\n      debugDev: DEBUG_DEV ? lazy(debugDev) : debugDev,\n      _trace: _TRACE ? lazy(_trace) : _trace,\n      traceDev: TRACE_DEV ? lazy(traceDev) : traceDev,\n    },\n    //\n    named,\n    utilFor: {\n      internal() {\n        return {\n          debug: logger._debug,\n          error: logger._error,\n          warn: logger._warn,\n          trace: logger._trace,\n          named(name, key) {\n            return logger.named(name, key).utilFor.internal()\n          },\n        }\n      },\n      dev() {\n        return {\n          debug: logger.debugDev,\n          error: logger.errorDev,\n          warn: logger.warnDev,\n          trace: logger.traceDev,\n          named(name, key) {\n            return logger.named(name, key).utilFor.dev()\n          },\n        }\n      },\n      public() {\n        return {\n          error: logger.errorPublic,\n          warn: logger.warnPublic,\n          debug(message, obj) {\n            logger._warn(`(public \"debug\" filtered out) ${message}`, obj)\n          },\n          trace(message, obj) {\n            logger._warn(`(public \"trace\" filtered out) ${message}`, obj)\n          },\n          named(name, key) {\n            return logger.named(name, key).utilFor.public()\n          },\n        }\n      },\n    },\n  }\n\n  return logger\n}\n"
  },
  {
    "path": "packages/utils/src/basicFSM.ts",
    "content": "import type {$IntentionalAny} from '@theatre/utils/types'\nimport type {Pointer} from '@theatre/dataverse'\nimport {Atom} from '@theatre/dataverse'\n\ntype TakeFn<EventType> = (e: EventType) => void\ntype TransitionFn<EventType, ContextType> = (\n  stateName: string,\n  context: ContextType,\n  take: TakeFn<EventType>,\n) => void\n\ntype Actor<EventType, ContextType> = {\n  pointer: Pointer<ContextType>\n  send: (s: EventType) => void\n}\n\n/**\n * This is a basic FSM implementation.\n */\nexport function basicFSM<EventType, ContextType>(\n  setup: (transition: TransitionFn<EventType, ContextType>) => void,\n): (actorOpts?: {\n  name?: string\n  log?: boolean\n}) => Actor<EventType, ContextType> {\n  return (actorOpts) => {\n    const log =\n      actorOpts?.log !== true\n        ? () => {}\n        : (...args: any[]) => {\n            console.log('actor:' + actorOpts?.name || 'undefined', ...args)\n          }\n\n    const atom = new Atom<{\n      stateName: string\n      context: ContextType\n      take: TakeFn<EventType>\n    }>({} as $IntentionalAny)\n\n    function transition(\n      stateName: string,\n      context: ContextType,\n      take: TakeFn<EventType>,\n    ) {\n      log('transition', stateName, context)\n      atom.set({stateName, context, take})\n    }\n\n    setup(transition)\n\n    function send(event: EventType) {\n      log('event', event)\n\n      let state = atom.get()\n      state.take(event)\n    }\n    return {\n      pointer: atom.pointer.context,\n      send,\n    }\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/color.ts",
    "content": "import {clamp} from 'lodash-es'\nimport memoizeFn from './memoizeFn'\n\n/**\n * Robust check for a valid hex value (without the \"#\") in a string\n *\n * @remarks\n *\n * Supports all the syntax variants of <hex-color>\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/hex-color#syntax}:\n *\n *\n * ```javascript\n * #RGB        // The three-value syntax\n * #RGBA       // The four-value syntax\n * #RRGGBB     // The six-value syntax\n * #RRGGBBAA   // The eight-value syntax\n * ```\n */\nexport const validHexRegExp = /^#*([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i\n\nexport function parseRgbaFromHex(rgba: string) {\n  rgba = rgba.trim().toLowerCase()\n\n  const match = rgba.match(validHexRegExp)\n\n  if (!match) {\n    return {\n      r: 0,\n      g: 0,\n      b: 0,\n      a: 1,\n    }\n  }\n\n  const hex = _hexInEightValueSyntax(match[1])\n\n  return {\n    r: parseInt(hex.substr(0, 2), 16) / 255,\n    g: parseInt(hex.substr(2, 2), 16) / 255,\n    b: parseInt(hex.substr(4, 2), 16) / 255,\n    a: parseInt(hex.substr(6, 2), 16) / 255,\n  }\n}\n\nexport function rgba2hex(\n  rgba: Rgba,\n  {\n    /** Alpha is usually an optional value for most hex inputs, so if it's opaque, we can omit its value. */\n    removeAlphaIfOpaque = false,\n  } = {},\n) {\n  const alpha = ((rgba.a * 255) | (1 << 8)).toString(16).slice(1)\n\n  const hex =\n    ((rgba.r * 255) | (1 << 8)).toString(16).slice(1) +\n    ((rgba.g * 255) | (1 << 8)).toString(16).slice(1) +\n    ((rgba.b * 255) | (1 << 8)).toString(16).slice(1) +\n    (removeAlphaIfOpaque && alpha === 'ff' ? '' : alpha)\n\n  return `#${hex}`\n}\n\n// TODO: We should add a decorate property to the propConfig too.\n// Right now, each place that has anything to do with a color is individually\n// responsible for defining a toString() function on the object it returns.\nexport const decorateRgba = memoizeFn((rgba: Rgba) => {\n  const obj = {\n    ...rgba,\n    // toString: () => rgba2hex(rgba),\n  }\n  Object.defineProperty(obj, 'toString', {\n    value: () => rgba2hex(rgba),\n    enumerable: false,\n    writable: false,\n    configurable: false,\n  })\n  return obj\n})\n\nexport function clampRgba(rgba: Rgba) {\n  return Object.fromEntries(\n    Object.entries(rgba).map(([key, value]) => [key, clamp(value, 0, 1)]),\n  ) as Rgba\n}\n\nexport function linearSrgbToSrgb(rgba: Rgba) {\n  function compress(x: number) {\n    // This looks funky because sRGB uses a linear scale below 0.0031308 in\n    // order to avoid an infinite slope, while trying to approximate gamma 2.2\n    // as closely as possible, hence the branching and the 2.4 exponent.\n    if (x >= 0.0031308) return 1.055 * x ** (1.0 / 2.4) - 0.055\n    else return 12.92 * x\n  }\n  return clampRgba({\n    r: compress(rgba.r),\n    g: compress(rgba.g),\n    b: compress(rgba.b),\n    a: rgba.a,\n  })\n}\n\nexport function srgbToLinearSrgb(rgba: Rgba) {\n  function expand(x: number) {\n    if (x >= 0.04045) return ((x + 0.055) / (1 + 0.055)) ** 2.4\n    else return x / 12.92\n  }\n  return {\n    r: expand(rgba.r),\n    g: expand(rgba.g),\n    b: expand(rgba.b),\n    a: rgba.a,\n  }\n}\n\nexport function linearSrgbToOklab(rgba: Rgba) {\n  let l = 0.4122214708 * rgba.r + 0.5363325363 * rgba.g + 0.0514459929 * rgba.b\n  let m = 0.2119034982 * rgba.r + 0.6806995451 * rgba.g + 0.1073969566 * rgba.b\n  let s = 0.0883024619 * rgba.r + 0.2817188376 * rgba.g + 0.6299787005 * rgba.b\n\n  let l_ = Math.cbrt(l)\n  let m_ = Math.cbrt(m)\n  let s_ = Math.cbrt(s)\n\n  return {\n    L: 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,\n    a: 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,\n    b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,\n    alpha: rgba.a,\n  }\n}\n\nexport function oklabToLinearSrgb(laba: Laba) {\n  let l_ = laba.L + 0.3963377774 * laba.a + 0.2158037573 * laba.b\n  let m_ = laba.L - 0.1055613458 * laba.a - 0.0638541728 * laba.b\n  let s_ = laba.L - 0.0894841775 * laba.a - 1.291485548 * laba.b\n\n  let l = l_ * l_ * l_\n  let m = m_ * m_ * m_\n  let s = s_ * s_ * s_\n\n  return {\n    r: +4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n    g: -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n    b: -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n    a: laba.alpha,\n  }\n}\n\n// let's not export the types, as they're duplicates of those  in core/types/public\ntype Rgba = {\n  r: number\n  g: number\n  b: number\n  a: number\n}\n\ntype Laba = {\n  L: number\n  a: number\n  b: number\n  alpha: number\n}\n\n/**\n * Returns a hex string in the eight-value syntax\n */\nfunction _hexInEightValueSyntax(hex: string): string {\n  switch (hex.length) {\n    case 3:\n      return `${hex.repeat(2)}ff`\n    case 4:\n      const rgb = hex.substr(0, 3)\n      const alpha = hex[3]\n      return `${rgb.repeat(2)}${alpha.repeat(2)}`\n    case 6:\n      return `${hex}ff`\n  }\n\n  return hex\n}\n"
  },
  {
    "path": "packages/utils/src/deepEqual.ts",
    "content": "import deepEqual from 'fast-deep-equal'\n\nexport default deepEqual\n"
  },
  {
    "path": "packages/utils/src/deepMergeWithCache.ts",
    "content": "import type {$IntentionalAny} from '@theatre/utils/types'\n\n/**\n * This is like `Object.assign(base, override)`, with the following differences:\n *\n * 1. It returns a new value, instead of mutating `base`:\n * ```js\n * const cache = new WeakMap()\n * const base = {foo: 1}\n * const override = {bar: 1}\n * const result = deepMergeWithCache(base, override, cache)\n * console.log(result) // {foo: 1, bar: 1}\n * console.log(base) // base is not mutated, so: {foo: 1}\n * ```\n *\n * 2. It does a recursive merge for objects:\n * ```js\n * const cache = new WeakMap()\n * const base = {a: {b: 1}}\n * const override = {a: {b: 2}}\n * const result = deepMergeWithCache(base, override, cache)\n * console.log(result) // {a: {b: 2}}\n * ```\n *\n * 2. It uses a WeakMap to cache its results at each level. So merges are referentially stable:\n * ```js\n * const cache = new WeakMap()\n * const base = {a: {b: 1}}\n * const override1 = {a: {b: 2}}\n * const result1 = deepMergeWithCache(base, override, cache)\n * console.log(result1 === deepMergeWithCache(base, override, cache)) // true\n *\n * const override2 = {...override, c: 1}\n * const result2 = deepMergeWithCache(base, override2, cache)\n *\n * console.log(result1.a === result2.a) // logs true, because override1.a === override2.a\n * ```\n *\n * 4. Both `base` and `override` must be plain JSON values and *NO* arrays, so: `boolean, string, number, undefined, {}`\n *\n * Rationale: This is used in {@link SheetObject.getValues} to deep-merge static and sequenced\n * and other types of overrides. If we were to do a deep-merge without a cache, we'd be creating and discarding\n * several JS objects on each frame for every Theatre object, and that would pressure the GC.\n * Plus, keeping the values referentially stable helps lib authors optimize how they patch these values\n * to the rendering engine.\n */\nexport default function deepMergeWithCache<T extends {}>(\n  base: Partial<T>,\n  override: Partial<T>,\n  cache: WeakMap<{}, unknown>,\n): Partial<T> {\n  const _cache: WeakMap<\n    {},\n    {\n      override: Partial<T>\n      merged: Partial<T>\n    }\n  > = cache as $IntentionalAny\n\n  const possibleCachedValue = _cache.get(base)\n\n  if (possibleCachedValue && possibleCachedValue.override === override) {\n    return possibleCachedValue.merged\n  }\n\n  const merged = {...base}\n  for (const key of Object.keys(override)) {\n    const valueInOverride = override[key]\n    const valueInBase = base[key]\n\n    // @ts-ignore @todo\n    merged[key] =\n      typeof valueInOverride === 'object' && typeof valueInBase === 'object'\n        ? deepMergeWithCache(valueInBase as {}, valueInOverride as {}, cache)\n        : valueInOverride === undefined\n          ? valueInBase\n          : valueInOverride\n  }\n\n  cache.set(base, {override, merged})\n  return merged\n}\n"
  },
  {
    "path": "packages/utils/src/defer.ts",
    "content": "export interface Deferred<PromiseType> {\n  resolve: (d: PromiseType) => void\n  reject: (d: unknown) => void\n  promise: Promise<PromiseType>\n  status: 'pending' | 'resolved' | 'rejected'\n  currentValue: PromiseType | undefined\n}\n\n/**\n * A simple imperative API for resolving/rejecting a promise.\n *\n * Example:\n * ```ts\n * function doSomethingAsync() {\n *  const deferred = defer()\n *\n *  setTimeout(() => {\n *    if (Math.random() > 0.5) {\n *      deferred.resolve('success')\n *    } else {\n *      deferred.reject('Something went wrong')\n *    }\n *  }, 1000)\n *\n *  // we're just returning the promise, so that the caller cannot resolve/reject it\n *  return deferred.promise\n * }\n *\n * ```\n */\nexport function defer<PromiseType>(): Deferred<PromiseType> {\n  let resolve: (d: PromiseType) => void\n  let reject: (d: unknown) => void\n  const promise = new Promise<PromiseType>((rs, rj) => {\n    resolve = (v) => {\n      rs(v)\n      deferred.status = 'resolved'\n      deferred.currentValue = v\n    }\n    reject = (v) => {\n      rj(v)\n      deferred.status = 'rejected'\n    }\n  })\n\n  const deferred: Deferred<PromiseType> = {\n    resolve: resolve!,\n    reject: reject!,\n    promise,\n    status: 'pending',\n    currentValue: undefined,\n  }\n  return deferred\n}\n"
  },
  {
    "path": "packages/utils/src/delay.ts",
    "content": "const delay = (dur: number, abortSignal?: AbortSignal) =>\n  abortSignal ? delayWithAbort(dur, abortSignal) : delayWithoutAbort(dur)\n\nfunction delayWithoutAbort(dur: number) {\n  return new Promise((resolve) => {\n    setTimeout(resolve, dur)\n  })\n}\n\nfunction delayWithAbort(dur: number, abortSignal: AbortSignal) {\n  return new Promise((resolve, reject) => {\n    let pending = true\n    const timeout = setTimeout(() => {\n      pending = false\n      resolve(void 0)\n    }, dur)\n\n    const onAbort = () => {\n      if (!pending) return\n      pending = false\n      clearTimeout(timeout)\n      reject(new Error('Aborted'))\n      abortSignal.removeEventListener('abort', onAbort)\n    }\n    abortSignal.addEventListener('abort', onAbort)\n  })\n}\n\nexport default delay\n"
  },
  {
    "path": "packages/utils/src/devStringify.ts",
    "content": "import {tightJsonStringify} from '@theatre/utils/tightJsonStringify'\n\n/**\n * Stringifies any value given. If an object is given and `indentJSON` is true,\n * then a developer-readable, command line friendly (not too spaced out, but with\n * enough whitespace to be readable).\n */\nexport function devStringify(input: any, indentJSON: boolean = true): string {\n  try {\n    return typeof input === 'string'\n      ? input\n      : typeof input === 'function' || input instanceof Error\n      ? input.toString()\n      : indentJSON\n      ? tightJsonStringify(input)\n      : JSON.stringify(input)\n  } catch (err) {\n    return input?.name || String(input)\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/didYouMean.ts",
    "content": "import propose from 'propose'\n\n/**\n * Proposes a suggestion to fix a typo in `str`, using the options provided in `dictionary`.\n *\n * Example:\n * ```ts\n * didYouMean('helo', ['hello', 'world']) // 'Did you mean \"hello\"?'\n * ```\n */\nexport default function didYouMean(\n  str: string,\n  dictionary: string[],\n  prepend: string = 'Did you mean ',\n  append: string = '?',\n): string {\n  const p = propose(str, dictionary, {\n    threshold: 0.7,\n  })\n\n  if (p) {\n    return prepend + JSON.stringify(p) + append\n  } else {\n    return ''\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/ellipsify.ts",
    "content": "/**\n * Truncates a string to a given length, adding an ellipsis if it was truncated.\n * Example:\n * ```ts\n * ellipsify('hello world', 5) // 'hello...'\n * ellipsify('hello world', 100) // 'hello world'\n * ```\n */\nexport default function ellipsify(str: string, maxLength: number) {\n  if (str.length <= maxLength) return str\n  return str.substr(0, maxLength - 3) + '...'\n}\n"
  },
  {
    "path": "packages/utils/src/errors.ts",
    "content": "/**\n * All errors thrown to end-users should be an instance of this class.\n */\nexport class TheatreError extends Error {}\n\n/**\n * If an end-user provided an invalid argument to a public API, the error thrown\n * should be an instance of this class.\n */\nexport class InvalidArgumentError extends TheatreError {}\n"
  },
  {
    "path": "packages/utils/src/getDeep.ts",
    "content": "import lodashGet from 'lodash-es/get'\nimport type {PathToProp} from '@theatre/utils/pathToProp'\n\n/**\n * Returns the value at `path` of `v`.\n *\n * Example:\n * ```ts\n * getDeep({a: {b: 1}}, ['a', 'b']) // 1\n * getDeep({a: {b: 1}}, ['a', 'c']) // undefined\n * getDeep({a: {b: 1}}, []) // {a: {b: 1}}\n * getDeep('hello', []) // 'hello''\n * getDeep('hello', ['a']) // undefined\n * ```\n */\nexport default function getDeep(v: {}, path: PathToProp): unknown {\n  if (path.length === 0) return v\n  return lodashGet(v, path)\n}\n"
  },
  {
    "path": "packages/utils/src/globals.d.ts",
    "content": "declare module 'propose' {\n  const propose: (\n    str: string,\n    dictionary: string[],\n    options?: {threshold?: number; ignoreCase?: boolean},\n  ) => string | null\n  export default propose\n}\n"
  },
  {
    "path": "packages/utils/src/index.ts",
    "content": "/**\n * This is just an empty object used in place of `{}` when you want to:\n * 1. Not create many new objects (less GC pressure)\n * 2. Have the empty object be a singleton (so that `===` works), so it can be fed to memoized functions.\n */\nexport const emptyObject = {}\n\n/**\n * The array equivalent of {@link emptyObject}.\n */\nexport const emptyArray: ReadonlyArray<unknown> = []\n"
  },
  {
    "path": "packages/utils/src/isMac.ts",
    "content": "export const isMac =\n  typeof navigator !== 'undefined' &&\n  navigator.platform.toUpperCase().indexOf('MAC') >= 0\n"
  },
  {
    "path": "packages/utils/src/keyboardUtils.ts",
    "content": "import {isMac} from './isMac'\n\n/**\n * On mac, it checks Cmd, on windows, ctrl\n */\nexport const cmdIsDown = (e: KeyboardEvent | MouseEvent) => {\n  if (isMac) {\n    return e.metaKey === true\n  } else {\n    return e.ctrlKey === true\n  }\n}\n\n/**\n * On mac, it checks for ctrl, on windows, Win\n */\nexport const ctrlIsDown = (e: KeyboardEvent | MouseEvent) => {\n  if (isMac) {\n    return e.ctrlKey === true\n  } else {\n    return e.metaKey === true\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/logger.ts",
    "content": "export type {\n  ILogger,\n  IUtilLogger,\n  ITheatreConsoleLogger,\n  ITheatreLogIncludes,\n  ITheatreLogSource,\n  ITheatreLoggerConfig,\n  ITheatreLoggingConfig,\n  ITheatreInternalLogger,\n} from '@theatre/utils/_logger/logger'\nimport {\n  createTheatreInternalLogger,\n  TheatreLoggerLevel,\n} from '@theatre/utils/_logger/logger'\nimport type {IUtilLogger} from '@theatre/utils/_logger/logger'\nexport {\n  TheatreLoggerLevel,\n  createTheatreInternalLogger,\n} from '@theatre/utils/_logger/logger'\n\n/**\n * Common object interface for the context to pass in to utility functions.\n *\n * Prefer to pass this into utility function rather than an {@link IUtilLogger}.\n */\nexport interface IUtilContext {\n  readonly logger: IUtilLogger\n}\n\nconst internal = createTheatreInternalLogger(console, {\n  _debug: function () {},\n  _error: function () {},\n})\n\ninternal.configureLogging({\n  dev: true,\n  min: TheatreLoggerLevel.TRACE,\n})\n\nexport default internal\n  .getLogger()\n  .named('Theatre.js (default logger)')\n  .utilFor.dev()\n"
  },
  {
    "path": "packages/utils/src/memoizeFn.ts",
    "content": "/**\n * Memoizes a unary function using a simple weakmap. The argument to the unary\n * function must be WeakCache-able, which means it must be an object and not a plain\n * number/string/boolean/etc.\n *\n * @example\n * ```ts\n * const fn = memoizeFn((el) => getBoundingClientRect(el))\n *\n * const b1 = fn(el)\n * const b2 = fn(el)\n * assert.equal(b1, b2)\n * ```\n */\nexport default function memoizeFn<K extends {}, V>(\n  producer: (k: K) => V,\n): (k: K) => V {\n  const cache = new WeakMap<K, V>()\n\n  return (k: K): V => {\n    if (!cache.has(k)) {\n      cache.set(k, producer(k))\n    }\n    return cache.get(k)!\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/minimalOverride.ts",
    "content": "import isPlainObject from 'lodash-es/isPlainObject'\nimport type {$IntentionalAny} from '@theatre/utils/types'\n\nenum ValueType {\n  Opaque = 0,\n  Array = 1,\n  Object = 2,\n}\n\nfunction typeOfValue(v: unknown): ValueType {\n  if (typeof v === 'object' && v !== null) {\n    if (Array.isArray(v)) {\n      return ValueType.Array\n    } else if (isPlainObject(v)) {\n      return ValueType.Object\n    } else {\n      return ValueType.Opaque\n    }\n  } else {\n    return ValueType.Opaque\n  }\n}\n\n/**\n * Returns an object that deep-equals `override`, but uses as much of the references from `base` as possible.\n *\n * It's better to explain this with a few examples:\n * ```ts\n * const base =     {a: {a1: 1}, b: 1}\n * const override = {a: {a1: 1}, b: 2} // notice how the value of b is different, but a deep-equals the value of a in base\n * const result = minimalOverride(base, override)\n * console.log(result === base) // false\n * console.log(result === override) // false\n * console.log(result.a === base.a) // true (base.a was re-used, because it deep-equals override.a)\n *\n * // Another example:\n * const base =     {a: {a1: 1}, b: 1}\n * const override = {a: {a1: 2}, b: 1} // notice how the value of a does not deep-equal the value of a in base\n * const result = minimalOverride(base, override)\n * console.log(result === base) // false\n * console.log(result === override) // false\n * console.log(result.a === base.a) // false\n * console.log(result.a === override.a) // true (override.a is used here, because it does not deep-equal base.a)\n * ```\n *\n * @remarks\n * We don't use this function anymore, but we're keeping it around as it's likely to be used again in the future.\n *\n * The way it used to be used, was in `transactionApi.set()`. Consider the following example:\n * ```ts\n * studio.transaction(({set}) => {\n *   set(light.props, {position: {x: 1, y: 2}, intensity: 1})\n * })\n *\n *  studio.transaction(({set}) => {\n *   // Notice that props.position is the same as before. We just want to change the intensity in this transaction.\n *   // So what will actually happen is that props.position will be re-used and untouched (and won't end up in the transaction record),\n *   // and this transaction will only touch the value for props.intensity.\n *   set(light.props, {position: {x: 1, y: 2}, intensity: 2})\n * })\n * ```\n */\nexport default function minimalOverride<T extends {}>(base: T, override: T): T {\n  const typeofOverride = typeOfValue(override)\n  if (typeofOverride === ValueType.Opaque) {\n    return override\n  }\n\n  const typeofBase = typeOfValue(base)\n\n  if (base === override) return override\n  if (typeofOverride !== typeofBase) return override\n\n  if (typeofOverride === ValueType.Object) {\n    return minimalOverrideObject(base, override)\n  } else {\n    return minimalOverrideArray(\n      base as $IntentionalAny,\n      override,\n    ) as $IntentionalAny\n  }\n}\n\nfunction minimalOverrideObject<T extends {}>(base: T, override: T): T {\n  const o: $IntentionalAny = {}\n  let atLeastOneKeyWasDifferent = false\n  const keysOfOverride = Object.keys(override) as Array<keyof T>\n  for (const key of keysOfOverride) {\n    const baseVal = base[key]\n    const overrideVal = override[key]\n    const minimalOverrideVal = minimalOverride(baseVal, overrideVal)\n    o[key] = minimalOverrideVal\n    if (minimalOverrideVal !== baseVal) {\n      atLeastOneKeyWasDifferent = true\n    }\n  }\n\n  if (atLeastOneKeyWasDifferent) {\n    return o\n  } else {\n    if (Object.keys(base).length === keysOfOverride.length) {\n      return base\n    } else {\n      return o\n    }\n  }\n}\n\nfunction minimalOverrideArray<T extends $IntentionalAny[]>(\n  base: T,\n  override: T,\n): T {\n  if (base.length !== override.length) return override\n  // Arrays are expected to only hold opaque values, so we'll only\n  // check for shallow equality here.\n  return base.every((val, i) => val === override[i]) ? base : override\n}\n"
  },
  {
    "path": "packages/utils/src/mutableSetDeep.ts",
    "content": "import type {Pointer} from '@theatre/dataverse'\nimport {getPointerParts, pointer} from '@theatre/dataverse'\nimport lodashSet from 'lodash-es/set'\n\n/**\n * Like `lodash.set`, but type-safe, as it uses `Pointer` instead of string/array.\n *\n * `getPointer` is a function that takes a pointer to `obj`, and returns a pointer\n * to the path that you want to set. This API looks funny but it is actually convenient\n * to mutate values type-safe, as you can see in the example below:\n *\n * ```ts\n * mutableSetDeep({a: {b: 1}}, (p) => p.a.b, 2) // {a: {b: 2}}\n * ```\n */\nexport default function mutableSetDeep<O extends {}, T>(\n  obj: O,\n  getPointer: (p: Pointer<O>) => Pointer<T>,\n  val: T,\n) {\n  const rootPointer = pointer<O>({root: {}, path: []})\n  const deepPointer = getPointer(rootPointer)\n\n  lodashSet(obj, getPointerParts(deepPointer).path, val)\n}\n"
  },
  {
    "path": "packages/utils/src/niceNumberUtils.test.ts",
    "content": "import {\n  getLastMultipleOf,\n  numberOfDecimals,\n  nicestFloatBetween,\n  nicestIntegerBetween,\n  nicestNumberBetween,\n  toPrecision,\n} from './niceNumberUtils'\nimport type {$IntentionalAny} from '@theatre/utils/types'\n\nconst example = <Args extends $IntentionalAny[], Return>(\n  fn: (...args: Args) => Return,\n  args: Args,\n  expectation: Return,\n  opts: Partial<{skip: boolean; debug: boolean}> = {},\n) => {\n  ;(opts.skip ? it.skip : it)(\n    `${fn.name}(${args.join(', ')}) => ${expectation}`,\n    () => {\n      // @ts-expect-error @ignore\n      if (opts.debug) global.dbg = true\n      const val = fn(...args)\n      // @ts-expect-error @ignore\n      global.dbg = false\n      expect(val).toEqual(expectation)\n    },\n  )\n}\n\ndescribe(`niceNumberUtils()`, () => {\n  describe(`nicestNumberBetween()`, () => {\n    example(nicestNumberBetween, [0.1, 1.1], 1)\n    example(nicestNumberBetween, [0.1111111123, 0.2943439448], 0.25)\n    example(nicestNumberBetween, [0.19, 0.23], 0.2)\n    example(nicestNumberBetween, [-0.19, 0.23], 0)\n    example(nicestNumberBetween, [-0.19, -0.02], -0.1, {debug: false})\n    example(nicestNumberBetween, [-0.19, -0.022], -0.1, {debug: false})\n    example(nicestNumberBetween, [-0.19, -0.022234324], -0.1, {\n      debug: false,\n    })\n    example(nicestNumberBetween, [-0.19, 0.0222222], 0)\n    example(nicestNumberBetween, [-0.19, 0.02], 0)\n    example(\n      nicestNumberBetween,\n      [22304.2398427391, 22304.2398427393],\n      22304.2398427392,\n    )\n    example(nicestNumberBetween, [22304.2398427391, 22304.4], 22304.25)\n    example(nicestNumberBetween, [902, 901], 902)\n    example(nicestNumberBetween, [-10, -5], -10)\n    example(nicestNumberBetween, [-5, -10], -10)\n    example(nicestNumberBetween, [-10, -5], -10)\n    example(\n      nicestNumberBetween,\n      [-0.00876370109231405, -2.909374013346118e-50],\n      0,\n      {debug: false},\n    )\n    example(\n      nicestNumberBetween,\n      [0.059449443526800295, 0.06682093143783596],\n      0.06,\n      {debug: false},\n    )\n    const getRandomNumber = () => {\n      const sign = Math.random() > 0.5 ? 1 : -1\n      return (\n        (Math.pow(Math.random(), Math.random()) /\n          Math.pow(10, Math.random() * 100)) *\n        sign\n      )\n    }\n    test(`nicestNumberBetween() => fuzzy`, () => {\n      for (let i = 0; i < 2000; i++) {\n        const from = toPrecision(getRandomNumber())\n        const to = toPrecision(getRandomNumber())\n\n        const result = nicestNumberBetween(from, to)\n        if (from < to) {\n          if (result < from || result > to) {\n            throw new Error(`Invalid: ${from} ${to} ${result}`)\n          }\n        } else {\n          if (result > from || result < to) {\n            throw new Error(`Invalid: ${to} ${from} ${result}`)\n          }\n        }\n      }\n    })\n  })\n  describe(`nicestIntegerBetween`, () => {\n    example(nicestIntegerBetween, [-1, 6], 0, {})\n    example(nicestIntegerBetween, [0, 6], 0, {})\n    example(nicestIntegerBetween, [-1, 0], 0, {})\n    example(nicestIntegerBetween, [-1850, -1740], -1750, {})\n    example(nicestIntegerBetween, [1, 6], 5, {})\n    example(nicestIntegerBetween, [1, 5], 5)\n    example(nicestIntegerBetween, [1, 2], 2)\n    example(nicestIntegerBetween, [1, 10], 10)\n    example(nicestIntegerBetween, [1, 12], 10)\n    example(nicestIntegerBetween, [11, 15], 15)\n    example(nicestIntegerBetween, [101, 102], 102, {debug: true})\n    example(nicestIntegerBetween, [11, 14, false], 12)\n    example(nicestIntegerBetween, [11, 14, true], 12.5)\n    example(nicestIntegerBetween, [11, 12], 12)\n    example(nicestIntegerBetween, [11, 12], 12, {})\n    example(nicestIntegerBetween, [10, 90], 50)\n    example(nicestIntegerBetween, [10, 100], 100)\n    example(nicestIntegerBetween, [10, 110], 100)\n    example(nicestIntegerBetween, [9, 100], 10)\n    example(nicestIntegerBetween, [9, 1100], 10)\n    example(nicestIntegerBetween, [9, 699], 10)\n    example(nicestIntegerBetween, [9, 400], 10)\n    example(nicestIntegerBetween, [9, 199], 10)\n    example(nicestIntegerBetween, [9, 1199], 10)\n    example(nicestIntegerBetween, [1921, 1998], 1950)\n    example(nicestIntegerBetween, [1921, 2020], 2000)\n    example(nicestIntegerBetween, [1601, 1998], 1750)\n    example(nicestIntegerBetween, [1919, 1921], 1920)\n    example(nicestIntegerBetween, [1919, 1919], 1919)\n    example(nicestIntegerBetween, [3901, 3902], 3902)\n    example(nicestIntegerBetween, [901, 902], 902)\n  })\n  describe(`nicestFloatBetween()`, () => {\n    example(nicestFloatBetween, [0.19, 0.2122], 0.2)\n    example(nicestFloatBetween, [0.19, 0.31], 0.25)\n    example(nicestFloatBetween, [0.19, 0.41], 0.25)\n    example(nicestFloatBetween, [0.19, 1.9], 0.5)\n  })\n  describe(`numberOfDecimals()`, () => {\n    example(numberOfDecimals, [1.1], 1)\n    example(numberOfDecimals, [1.12], 2)\n    example(numberOfDecimals, [1], 0)\n    example(numberOfDecimals, [10], 0)\n    example(numberOfDecimals, [0.1 + 0.2], 1)\n    example(numberOfDecimals, [0.12399993], 8)\n    example(numberOfDecimals, [0.12399993], 8)\n    example(numberOfDecimals, [0.123999931], 9)\n    example(numberOfDecimals, [0.1239999312], 10)\n    example(numberOfDecimals, [0.12399993121], 10)\n  })\n\n  describe(`toPrecision()`, () => {\n    example(toPrecision, [1.1], 1.1)\n    example(toPrecision, [0.1 + 0.2], 0.3)\n    example(toPrecision, [0.3 - 0.3], 0)\n    example(toPrecision, [0.4 - 0.1], 0.3)\n    example(toPrecision, [1.4 - 0.1], 1.3)\n  })\n\n  describe(`getLastMultipleOf()`, () => {\n    example(getLastMultipleOf, [1, 10], 0)\n    example(getLastMultipleOf, [11, 10], 10)\n    example(getLastMultipleOf, [11, 5], 10)\n    example(getLastMultipleOf, [11, 2], 10)\n    example(getLastMultipleOf, [4, 2], 4)\n  })\n})\n"
  },
  {
    "path": "packages/utils/src/niceNumberUtils.ts",
    "content": "import padEnd from 'lodash-es/padEnd'\n\n/**\n * Returns the _most aesthetically pleasing_ (aka \"nicest\") number `c`, such that `a <= c <= b`.\n * This is useful when a numeric value is being \"nudged\" by the user (e.g. dragged via mouse pointer),\n * and we want to avoid setting it to weird value like `101.1239293814314`, when we know that the user\n * probably just meant `100`.\n *\n * Examples\n * ```ts\n * nicestNumberBetween(0.1111111123, 0.2943439448) // 0.25\n * nicestNumberBetween(0.19, 0.23) // 0.2\n * nicestNumberBetween(1921, 1998) // 1950\n * nicestNumberBetween(10, 110) // 100\n * // There are more examples at `./niceNumberUtils.test.ts`\n * ```\n */\nexport function nicestNumberBetween(_a: number, _b: number): number {\n  if (_b < _a) {\n    return nicestNumberBetween(_b, _a)\n  }\n\n  if (_a < 0 && _b < 0) {\n    return noMinusZero(nicestNumberBetween(-_b, -_a) * -1)\n  }\n\n  if (_a <= 0 && _b >= 0) return 0\n\n  const aCeiling = Math.ceil(_a)\n  if (aCeiling <= _b) {\n    return nicestIntegerBetween(aCeiling, Math.floor(_b))\n  } else {\n    const [a, b] = [_a, _b]\n    const integer = Math.floor(a)\n\n    return integer + nicestFloatBetween(a - integer, b - integer)\n  }\n}\n\n// const multiplesOfInterest = [10, 5, 4, 2]\nconst halvesAndQuartiles = [5, 2.5, 7.5]\nconst multipliersWithoutQuartiles = [5, 2, 4, 6, 8, 1, 3, 7, 9]\n\nexport function nicestIntegerBetween(\n  _a: number,\n  _b: number,\n  decimalsAllowed: boolean = true,\n): number {\n  if (_a === 0 || (_a < 0 && _b >= 0)) return 0\n  const {a, b, fixSign} =\n    _a < 0 ? {a: -_b, b: -_a, fixSign: -1} : {a: _a, b: _b, fixSign: 1}\n\n  const largestExponentiationOfTenSmallerThanOrEqualToA = Math.pow(\n    10,\n    String(a).length - 1,\n  )\n\n  const nextExponentiation =\n    largestExponentiationOfTenSmallerThanOrEqualToA * 10\n\n  if (nextExponentiation >= a && nextExponentiation <= b)\n    return nextExponentiation * fixSign\n\n  let base = 0\n  let currentExponentiationOfTen =\n    largestExponentiationOfTenSmallerThanOrEqualToA || 1\n\n  let i = 0\n  while (true) {\n    if (i++ > 100) {\n      return NaN\n    }\n    if (currentExponentiationOfTen > 1 || decimalsAllowed) {\n      for (const multiplier of halvesAndQuartiles) {\n        const toAdd = multiplier * currentExponentiationOfTen\n        const total = toAdd + base\n        if (total >= a && total <= b) return total * fixSign\n      }\n    }\n\n    let highestTotalFound = base\n    for (const multiplier of multipliersWithoutQuartiles) {\n      const toAdd = multiplier * currentExponentiationOfTen\n      const total = base + toAdd\n      if (total >= a && total <= b) {\n        return total * fixSign\n      } else if (total <= a && total > highestTotalFound) {\n        highestTotalFound = total\n      }\n    }\n    base = highestTotalFound\n\n    if (currentExponentiationOfTen === 1) {\n      console.error(\n        `Coudn't find a human-readable number between ${a} and ${b}`,\n      )\n      return _a\n    } else {\n      currentExponentiationOfTen /= 10\n    }\n  }\n}\n\nexport function nextBestIntegerBetween(a: number, b: number): number {\n  if (b == Infinity) {\n    if (a === 0) {\n      return 10\n    } else {\n      return a * 10\n    }\n  } else {\n    const diff = b - a\n    return diff / 2\n  }\n}\n\nexport const getLastMultipleOf = (n: number, multipleOf: number): number => {\n  const m = n % multipleOf\n  return n - m\n}\n\nconst noMinusZero = (a: number): number => (a === -0 ? 0 : a)\n\nconst numberOfLeadingZeros = (s: string) => {\n  const leadingZeroMatches = s.match(/^0+/)\n  return leadingZeroMatches ? leadingZeroMatches[0].length : 0\n}\n\nlet formatter: Intl.NumberFormat\n\ntry {\n  formatter = new Intl.NumberFormat('fullwide', {\n    maximumFractionDigits: 10,\n    useGrouping: false,\n  })\n} catch (e) {}\n\nexport const stringifyNumber = (n: number): string => {\n  return formatter.format(n)\n}\n\n/**\n * The float-specific version of {@link nicestNumberBetween}.\n *\n * it is expected that both args are 0 \\< arg \\< 1\n */\nexport const nicestFloatBetween = (a: number, b: number): number => {\n  const inString = {\n    a: stringifyNumber(a),\n    b: stringifyNumber(b),\n  }\n  if (inString.a === '0' || inString.b === '0') {\n    return 0\n  }\n\n  const withoutInteger = {\n    a: inString.a.substr(2, inString.a.length),\n    b: inString.b.substr(2, inString.b.length),\n  }\n\n  const leadingZeros = {\n    a: numberOfLeadingZeros(withoutInteger.a),\n    b: numberOfLeadingZeros(withoutInteger.b),\n  }\n\n  const maxNumberOfLeadingZeros = Math.max(leadingZeros.a, leadingZeros.b)\n\n  const numberOfDecimals = {\n    a: withoutInteger.a.length,\n    b: withoutInteger.b.length,\n  }\n\n  const maxNumberOfDecimals = Math.max(numberOfDecimals.a, numberOfDecimals.b)\n\n  const withPaddedDecimals = {\n    a: padEnd(withoutInteger.a, maxNumberOfDecimals, '0'),\n    b: padEnd(withoutInteger.b, maxNumberOfDecimals, '0'),\n  }\n\n  const mostAestheticInt = nicestIntegerBetween(\n    parseInt(withPaddedDecimals.a, 10) * Math.pow(10, maxNumberOfLeadingZeros),\n    parseInt(withPaddedDecimals.b, 10) * Math.pow(10, maxNumberOfLeadingZeros),\n    true,\n  )\n\n  return toPrecision(\n    mostAestheticInt /\n      Math.pow(10, maxNumberOfLeadingZeros + maxNumberOfDecimals),\n  )\n}\n\nexport const numberOfDecimals = (n: number): number => {\n  const num = String(getIntAndFraction(n).fraction).length\n  return n % 1 > 0 ? num - 2 : 0\n}\n\nexport const toPrecision = (n: number): number => {\n  // const r = parseFloat(numberToString(n))\n  const fixed = parseFloat(String(n)).toFixed(10)\n  const r = parseFloat(fixed)\n  return r === -0 ? 0 : r\n}\n\nexport const getIntAndFraction = (\n  n: number,\n): {int: number; fraction: number} => {\n  const int = Math.floor(n)\n  const fraction = toPrecision(n - int)\n  return {int, fraction}\n}\n"
  },
  {
    "path": "packages/utils/src/noop.ts",
    "content": "/**\n * Just an empty function\n */\nconst noop = () => {}\n\nexport default noop\n"
  },
  {
    "path": "packages/utils/src/pathToProp.ts",
    "content": "import memoizeFn from '@theatre/utils/memoizeFn'\nimport type {Nominal} from '@theatre/utils/Nominal'\n\n/**\n * This is a simple array representing the path to a prop, without specifying the object.\n */\nexport type PathToProp = Array<string | number>\n\n/**\n * Just like {@link PathToProp}, but encoded as a string. Since this type is nominal,\n * it can only be generated using {@link encodePathToProp}.\n */\nexport type PathToProp_Encoded = Nominal<'PathToProp_Encoded'>\n\n/**\n * Encodes a {@link PathToProp} as a string, and caches the result, so as long\n * as the input is the same, the output won't have to be re-generated.\n */\nexport const encodePathToProp = memoizeFn(\n  (p: PathToProp): PathToProp_Encoded =>\n    // we're using JSON.stringify here, but we could use a faster alternative.\n    // If you happen to do that, first make sure no `PathToProp_Encoded` is ever\n    // used in the store, otherwise you'll have to write a migration.\n    JSON.stringify(p) as PathToProp_Encoded,\n)\n\n/**\n * The decoder of {@link encodePathToProp}.\n */\nexport const decodePathToProp = (s: PathToProp_Encoded): PathToProp =>\n  JSON.parse(s)\n\n/**\n * Returns true if `path` starts with `pathPrefix`.\n *\n * Example:\n * ```ts\n * const prefix: PathToProp = ['a', 'b']\n * console.log(doesPathStartWith(['a', 'b', 'c'], prefix)) // true\n * console.log(doesPathStartWith(['x', 'b', 'c'], prefix)) // false\n * ```\n */\nexport function doesPathStartWith(path: PathToProp, pathPrefix: PathToProp) {\n  return pathPrefix.every((pathPart, i) => pathPart === path[i])\n}\n\n/**\n * Returns true if pathToPropA and pathToPropB are equal.\n */\nexport function arePathsEqual(\n  pathToPropA: PathToProp,\n  pathToPropB: PathToProp,\n) {\n  if (pathToPropA.length !== pathToPropB.length) return false\n  for (let i = 0; i < pathToPropA.length; i++) {\n    if (pathToPropA[i] !== pathToPropB[i]) return false\n  }\n  return true\n}\n\n/**\n * Given an array of `PathToProp`s, returns the longest common prefix.\n *\n * Example\n * ```\n * commonRootOfPathsToProps([\n *   ['a','b','c','d','e'],\n *   ['a','b','x','y','z'],\n *   ['a','b','c']\n *  ]) // = ['a','b']\n * ```\n */\nexport function commonRootOfPathsToProps(pathsToProps: PathToProp[]) {\n  const commonPathToProp: PathToProp = []\n  while (true) {\n    const i = commonPathToProp.length\n    let candidatePathPart = pathsToProps[0]?.[i]\n    if (candidatePathPart === undefined) return commonPathToProp\n\n    for (const pathToProp of pathsToProps) {\n      if (candidatePathPart !== pathToProp[i]) {\n        return commonPathToProp\n      }\n    }\n\n    commonPathToProp.push(candidatePathPart)\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/persistAtom.ts",
    "content": "import type {Atom, Pointer} from '@theatre/dataverse'\nimport {prism, val} from '@theatre/dataverse'\nimport debounce from 'lodash-es/debounce'\n\nconst lastStateByStore = new WeakMap<Atom<{}>, {}>()\n\nexport type AtomPersistor = {\n  refresh: () => void\n  flush: () => void\n}\n\nexport const persistAtom = (\n  atom: Atom<{}>,\n  pointer: Pointer<{}>,\n  onInitialize: () => void,\n  storageKey: string,\n): AtomPersistor => {\n  const loadState = (s: {}) => {\n    atom.setByPointer(pointer, s)\n  }\n\n  const getState = () => atom.getByPointer(pointer)\n\n  loadFromPersistentStorage()\n\n  const persist = () => {\n    const newState = getState()\n    const lastState = lastStateByStore.get(atom)\n    if (newState === lastState) return\n    lastStateByStore.set(atom, newState)\n    localStorage.setItem(storageKey, JSON.stringify(newState))\n  }\n  const p = prism(() => val(pointer))\n\n  const schedulePersist = debounce(persist, 1000)\n\n  p.onStale(() => {\n    p.getValue()\n    schedulePersist()\n  })\n\n  if (window) {\n    window.addEventListener('beforeunload', () => schedulePersist.flush())\n  }\n\n  return {\n    refresh: () => {\n      schedulePersist.flush()\n      loadFromPersistentStorage()\n    },\n    flush: () => {\n      schedulePersist.flush()\n    },\n  }\n\n  function loadFromPersistentStorage() {\n    const persistedS = localStorage.getItem(storageKey)\n    if (persistedS) {\n      let persistedObj\n      let errored = true\n      try {\n        persistedObj = JSON.parse(persistedS)\n        errored = false\n      } catch (e) {\n        console.warn(\n          `Could not parse the Atom's persisted state. This must be a bug. Please report it.`,\n          e,\n        )\n      } finally {\n        if (!errored) {\n          loadState(persistedObj)\n        }\n        onInitialize()\n      }\n    } else {\n      onInitialize()\n    }\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/pointerDeep.ts",
    "content": "import type {Pointer} from '@theatre/dataverse'\nimport type {PathToProp} from '@theatre/utils/pathToProp'\nimport type {$IntentionalAny} from '@theatre/utils/types'\n\n/**\n * Points deep into a pointer, using `toAppend` as the path. This is _NOT_ type-safe, so use with caution.\n */\nexport default function pointerDeep<T>(\n  base: Pointer<T>,\n  toAppend: PathToProp,\n): Pointer<unknown> {\n  let p = base as $IntentionalAny\n  for (const k of toAppend) {\n    p = p[k]\n  }\n  return p\n}\n"
  },
  {
    "path": "packages/utils/src/removePathFromObject.test.ts",
    "content": "import {deepStrictEqual} from 'assert'\nimport type {PathToProp} from '@theatre/utils/pathToProp'\nimport removePathFromObject from './removePathFromObject'\n\nconst t = (objIn: {}, path: PathToProp, objOut: {}) => {\n  removePathFromObject(objIn, path)\n  deepStrictEqual(objIn, objOut)\n  // expect(objIn).tomatch(objOut)\n}\n\ndescribe(`removePathFromObject()`, () => {\n  test('tests', () => {\n    t({foo: 'foo'}, [], {})\n    t({toDelete: 'toDelete'}, ['toDelete'], {})\n    t({toDelete: 'toDelete', bar: 'bar'}, ['toDelete'], {bar: 'bar'})\n    t({foo: 'foo', toDelete: {baz: 'baz'}}, ['toDelete'], {foo: 'foo'})\n    t(\n      {foo: 'foo', toDelete: {toDelete2: 'toDelete2'}},\n      ['toDelete', 'toDelete2'],\n      {foo: 'foo'},\n    )\n    t(\n      {foo: 'foo', bar: {toDelete: 'toDelete', extra: 'extra'}},\n      ['bar', 'toDelete'],\n      {\n        foo: 'foo',\n        bar: {\n          extra: 'extra',\n        },\n      },\n    )\n    t({foo: 'foo'}, ['none'], {foo: 'foo'})\n    t({foo: 'foo'}, ['none', 'existing', 'prop'], {foo: 'foo'})\n\n    const foo = {one: {two: {three: 'three'}}}\n    removePathFromObject(foo.one, ['two', 'three'])\n    // make sure it doesn't delete above the base object\n    deepStrictEqual(foo, {one: {}})\n  })\n})\n"
  },
  {
    "path": "packages/utils/src/removePathFromObject.ts",
    "content": "import type {PathToProp} from './pathToProp'\nimport type {$FixMe, $IntentionalAny} from './types'\n\n/**\n * Mutates `base` to remove the path `path` from it. And if deleting a key makes\n * its parent object empty of keys, that parent object will be deleted too, and so on.\n *\n * If `path` is `[]`, then `base` it'll remove all props from `base`.\n *\n * Example:\n * ```ts\n * removePathFromObject({a: {b: 1, c: 2}}, ['a', 'b']) // base is mutated to: {a: {c: 2}}\n * removePathFromObject({a: {b: 1}}, ['a', 'b']) // base is mutated to: {}, because base.a is now empty.\n * ```\n */\nexport default function removePathFromObject(\n  base: Record<string, unknown>,\n  path: PathToProp,\n) {\n  if (typeof base !== 'object' || base === null) return\n\n  if (path.length === 0) {\n    for (const key of Object.keys(base)) {\n      delete base[key]\n    }\n    return\n  }\n\n  // if path is ['a', 'b', 'c'], then this will be ['a', 'b']\n  const keysUpToLastKey = path.slice(0, path.length - 1)\n\n  let cur: $IntentionalAny = base\n\n  // we use this weakmap to be able to get the parent of a a child object\n  const childToParentMapping = new WeakMap()\n\n  // The algorithm has two passes.\n\n  // On the first pass, we traverse the path and keep note of parent->child relationships.\n  // We also can bail out early  if we find that the path doesn't exist.\n  for (const key of keysUpToLastKey) {\n    const parent = cur\n    const child = parent[key as $FixMe]\n\n    if (typeof child !== 'object' || child === null) {\n      // the path either doesn't exist, or it doesn't point to an object, so we can just return\n      return\n    } else {\n      // the path _does_ exist so far. let's note the parent-child relationship.\n      childToParentMapping.set(child, parent)\n      cur = child\n    }\n  }\n  // if path is ['a', 'b', 'c'], then this will be ['c', 'b', 'a']\n  const keysReversed = path.slice().reverse()\n\n  // on the second pass, we traverse the path in reverse, and delete the keys,\n  // and also delete the parent objects if they become empty.\n  for (const key of keysReversed) {\n    delete cur[key]\n\n    // if the current object is _not_ empty, then we can stop here.\n    if (Object.keys(cur).length > 0) {\n      return\n    } else {\n      // otherwise, we need to delete the parent object too.\n      cur = childToParentMapping.get(cur)!\n      continue\n    }\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/resolvedPromise.ts",
    "content": "/**\n * A resolved promise\n */\nconst resolvedPromise = new Promise<void>((r) => r())\nexport default resolvedPromise\n"
  },
  {
    "path": "packages/utils/src/sanitizers.ts",
    "content": "import userReadableTypeOfValue from '@theatre/utils/userReadableTypeOfValue'\nimport {InvalidArgumentError} from '@theatre/utils/errors'\n\nconst _validateSym = (\n  val: string,\n  thingy: string, // there are two unsolved problems in computer science: cache invalidation and naming things.\n  range: [min: number, max: number],\n): void | string => {\n  if (typeof val !== 'string') {\n    return `${thingy} must be a string. ${userReadableTypeOfValue(val)} given.`\n  } else if (val.trim().length !== val.length) {\n    return `${thingy} must not have leading or trailing spaces. '${val}' given.`\n  } else if (val.length < range[0] || val.length > range[1]) {\n    return `${thingy} must have between ${range[0]} and ${range[1]} characters. '${val}' given.`\n  }\n}\n\n/**\n * Validates a name, so that:\n * - It's a string\n * - It doesn't have leading or trailing spaces\n * - It's between 3 and 32 characters long\n */\nexport const validateName = (\n  name: string,\n  thingy: string,\n  shouldThrow: boolean = false,\n) => {\n  const result = _validateSym(name, thingy, [3, 32])\n  if (typeof result === 'string' && shouldThrow) {\n    throw new InvalidArgumentError(result)\n  } else {\n    return result\n  }\n}\n\n/**\n * Validates an instanceId, so that:\n * - It's a string\n * - It doesn't have leading or trailing spaces\n * - It's between 1 and 32 characters long\n */\nexport const validateInstanceId = (\n  name: string,\n  thingy: string,\n  shouldThrow: boolean = false,\n) => {\n  const result = _validateSym(name, thingy, [1, 32])\n  if (typeof result === 'string' && shouldThrow) {\n    throw new InvalidArgumentError(result)\n  } else {\n    return result\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/setDeepImmutable.ts",
    "content": "import type {PathToProp} from './pathToProp'\nimport type {$IntentionalAny} from '@theatre/utils/types'\nimport updateImmutable from './updateDeep'\n\n/**\n * Returns an immutable clone of `obj`, with its `path` replaced with `replace`. This is _NOT_ type-safe, so use with caution.\n *\n * TODO Make a type-safe version of this, like ./mutableSetDeep.ts.\n */\nexport default function setDeepImmutable<S>(\n  obj: S,\n  path: PathToProp,\n  replace: $IntentionalAny,\n): S {\n  return updateImmutable(obj, path, () => replace) as $IntentionalAny as S\n}\n"
  },
  {
    "path": "packages/utils/src/slashedPaths.ts",
    "content": "import {InvalidArgumentError} from '@theatre/utils/errors'\n// import {notify} from '@theatre/shared/notify'\n\n/**\n * Make the given string's \"path\" slashes normalized with preceding and trailing spaces.\n *\n * - It removes starting and trailing slashes: `/foo/bar/` becomes `foo / bar`\n * - It adds wraps each slash with a single space, so that `foo/bar` becomes `foo / bar`\n *\n */\nconst normalizeSlashedPath = (p: string): string =>\n  p\n    // remove starting slashes\n    .replace(/^[\\s\\/]*/, '')\n    // remove ending slashes\n    .replace(/[\\s\\/]*$/, '')\n    // make middle slashes consistent\n    .replace(/\\s*\\/\\s*/g, ' / ')\n\nconst getValidationErrorsOfSlashedPath = (p: string): void | string => {\n  if (typeof p !== 'string') return `it is not a string. (it is a ${typeof p})`\n\n  const components = p.split(/\\//)\n  if (components.length === 0) return `it is empty.`\n\n  for (let i = 0; i < components.length; i++) {\n    const component = components[i].trim()\n    if (component.length === 0) return `the component #${i + 1} is empty.`\n    if (component.length > 64)\n      return `the component '${component}' must have 64 characters or less.`\n  }\n}\n\n/**\n * Sanitizes a `path` and warns the user if the input doesn't match the sanitized output.\n *\n * See {@link normalizeSlashedPath} for examples of how we do sanitization.\n */\nexport function validateAndSanitiseSlashedPathOrThrow(\n  unsanitisedPath: string,\n  fnName: string,\n  warn: (\n    /**\n     * The title of the notification.\n     */\n    title: string,\n    /**\n     * The message of the notification.\n     */\n    message: string,\n    /**\n     * An array of doc pages to link to.\n     */\n    docs?: {url: string; title: string}[],\n    /**\n     * Whether duplicate notifications should be allowed.\n     */\n    allowDuplicates?: boolean,\n  ) => void,\n) {\n  const sanitisedPath = normalizeSlashedPath(unsanitisedPath)\n  if (process.env.NODE_ENV !== 'development') {\n    return sanitisedPath\n  }\n  const validation = getValidationErrorsOfSlashedPath(sanitisedPath)\n  if (validation) {\n    throw new InvalidArgumentError(\n      `The path in ${fnName}(${\n        typeof unsanitisedPath === 'string' ? `\"${unsanitisedPath}\"` : ''\n      }) is invalid because ${validation}`,\n    )\n  }\n  if (unsanitisedPath !== sanitisedPath) {\n    warn(\n      'Invalid path provided to object',\n      `The path in \\`${fnName}(\"${unsanitisedPath}\")\\` was sanitized to \\`\"${sanitisedPath}\"\\`.\\n\\n` +\n        'Please replace the path with the sanitized one, otherwise it will likely break in the future.',\n      [\n        {\n          url: 'https://www.theatrejs.com/docs/latest/manual/objects#creating-sheet-objects',\n          title: 'Sheet Objects',\n        },\n        {\n          url: 'https://www.theatrejs.com/docs/latest/api/core#sheet.object',\n          title: 'API',\n        },\n      ],\n    )\n  }\n  return sanitisedPath\n}\n"
  },
  {
    "path": "packages/utils/src/stableJsonStringify.ts",
    "content": "import {isPlainObject} from 'lodash-es'\nimport type {$IntentionalAny} from '@theatre/utils/types'\n\n/**\n * Like JSON.stringify, but sorts the keys of objects so the stringified value\n * remains stable if the keys are set in different order.\n *\n * Credit: https://github.com/tannerlinsley/react-query/blob/1896ca27abf46d14df7c6f463d98eb285b8d9492/src/core/utils.ts#L301\n */\nexport default function stableJsonStringify(value: $IntentionalAny): string {\n  return JSON.stringify(deepSortValue(value))\n}\n\n// alias\nexport const stableValueHash = stableJsonStringify\n\nfunction deepSortValue<S extends $IntentionalAny>(val: S): S {\n  return isPlainObject(val)\n    ? Object.keys(val as $IntentionalAny)\n        .sort()\n        .reduce((result, key) => {\n          result[key] = deepSortValue((val as $IntentionalAny)[key])\n          return result\n        }, {} as any)\n    : Array.isArray(val)\n    ? val.map(deepSortValue)\n    : val\n}\n"
  },
  {
    "path": "packages/utils/src/subPrism.ts",
    "content": "import {prism} from '@theatre/dataverse'\nimport type {$IntentionalAny} from '@theatre/utils/types'\n\n/**\n * A prism hook that runs fn() into a prism() call and returns the result\n */\nexport default function subPrism<T, Deps extends undefined | $IntentionalAny[]>(\n  key: string,\n  fn: () => T,\n  deps: Deps,\n): T {\n  const m = prism.memo(key, () => prism(fn), deps)\n\n  return m.getValue()\n}\n"
  },
  {
    "path": "packages/utils/src/subscribeDebounced.ts",
    "content": "import type {Pointer, Prism} from '@theatre/dataverse'\nimport {isPointer, prism, val} from '@theatre/dataverse'\nimport type {$IntentionalAny} from './types'\n\n/**\n * A utility function for subscribing to a prism and debouncing the callback. It makes sure that only one callback is running at a time.\n *\n * @param p - a prism or a pointer (which will be turned into a prism)\n * @param cb - a callback that will be called when the prism changes. This callback should return a promise. The promise will be awaited before the next call to the callback.\n * @returns a function that stops the subscription\n */\nexport function subscribeDebounced<T>(\n  p: Prism<T> | Pointer<T>,\n  cb: (val: T) => Promise<void>,\n): () => void {\n  const pr: Prism<T> = isPointer(p)\n    ? prism(() => val(p))\n    : (p as $IntentionalAny)\n\n  let state: 'idle' | 'processing' | 'queued' = 'idle'\n  let lastValue: T | {} = {} // the {} is unique, so it'll never be equal to anything else\n  const onStale = async () => {\n    if (state === 'queued') return\n    if (state === 'processing') {\n      state = 'queued'\n      return\n    }\n    const newValue = pr.getValue()\n    if (newValue === lastValue) return\n    lastValue = newValue\n    state = 'processing'\n\n    try {\n      await cb(newValue)\n    } catch (error) {\n      console.error(error)\n    } finally {\n      // @ts-ignore\n      if (state === 'queued') {\n        state = 'idle'\n        void onStale()\n      } else {\n        state = 'idle'\n      }\n    }\n  }\n  const stop = pr.onStale(() => onStale())\n  void onStale()\n\n  return stop\n}\n"
  },
  {
    "path": "packages/utils/src/tightJsonStringify.test.ts",
    "content": "import {tightJsonStringify} from './tightJsonStringify'\ndescribe('tightJsonStringify', () => {\n  it('matches a series of expectations', () => {\n    expect(tightJsonStringify({a: 1, b: 2, c: {y: 4, z: 745}}))\n      .toMatchInlineSnapshot(`\n      \"{ \"a\": 1,\n        \"b\": 2,\n        \"c\": {\n          \"y\": 4,\n          \"z\": 745 } }\"\n    `)\n    expect(tightJsonStringify(true)).toMatchInlineSnapshot(`\"true\"`)\n    expect(tightJsonStringify('Already a string')).toMatchInlineSnapshot(\n      `\"\"Already a string\"\"`,\n    )\n    expect(tightJsonStringify({a: 1, b: {c: [1, 2, {d: 4}], e: 8}}))\n      .toMatchInlineSnapshot(`\n      \"{ \"a\": 1,\n        \"b\": {\n          \"c\": [\n            1,\n            2,\n            { \"d\": 4 } ],\n          \"e\": 8 } }\"\n    `)\n  })\n})\n"
  },
  {
    "path": "packages/utils/src/tightJsonStringify.ts",
    "content": "/**\n * Stringifies an object in a developer-readable, command line friendly way\n * (not too spaced out, but with enough whitespace to be readable).\n *\n * e.g.\n * ```ts\n * tightJsonStringify({a:1, b: {c: [1, 2, {d: 4}], e: 8}})\n * ```\n * becomes\n * ```json\n * { \"a\": 1,\n *   \"b\": {\n *     \"c\": [\n *       1,\n *       2,\n *       { \"d\": 4 } ],\n *     \"e\": 8 } }\n * ```\n *\n * Also, see the examples in [`./tightJsonStringify.test.ts`](./tightJsonStringify.test.ts)\n */\nexport function tightJsonStringify(\n  obj: any,\n  replacer?: ((this: any, key: string, value: any) => any) | undefined,\n) {\n  return JSON.stringify(obj, replacer, 2)\n    .replace(/^([\\{\\[])\\n (\\s+)/, '$1$2')\n    .replace(/(\\n[ ]+[\\{\\[])\\n\\s+/g, '$1 ')\n    .replace(/\\n\\s*([\\]\\}])/g, ' $1')\n}\n"
  },
  {
    "path": "packages/utils/src/transformNumber.ts",
    "content": "/**\n * Transforms `initialPos` by scaling and translating it around `origin`.\n */\nexport function transformNumber(\n  initialPos: number,\n  {\n    scale,\n    origin,\n    translate,\n  }: {scale: number; origin: number; translate: number},\n): number {\n  const scaled = origin + (initialPos - origin) * scale\n  return translate + scaled\n}\n"
  },
  {
    "path": "packages/utils/src/types.ts",
    "content": "/** For `any`s that aren't meant to stay `any`*/\nexport type $FixMe = any\n/** For `any`s that we don't care about */\nexport type $IntentionalAny = any\n\n/** temporary any type until we move all of studio's types to core */\nexport type $____FixmeStudio = any\n\nexport type VoidFn = () => void\n\n/**\n * This is equivalent to `Partial<Record<Key, V>>` being used to describe a sort of Map\n * where the keys might not have values.\n *\n * We do not use `Map`s or `Set`s, because they add complexity with converting to\n * `JSON.stringify` + pointer types.\n */\nexport type StrictRecord<Key extends string, V> = {[K in Key]?: V}\n"
  },
  {
    "path": "packages/utils/src/uniqueKeyForAnyObject.ts",
    "content": "const cache = new WeakMap<object, string>()\nlet nextKey = 0\n\n/**\n * This function returns a unique string key for any JS object. This is useful for key-ing react components\n * based on the identity of an object.\n *\n * @param obj - any JS object\n * @returns a unique string key for the object\n */\nexport default function uniqueKeyForAnyObject(obj: object): string {\n  if (!cache.has(obj)) {\n    cache.set(obj, (nextKey++).toString())\n  }\n  return cache.get(obj)!\n}\n"
  },
  {
    "path": "packages/utils/src/updateDeep.ts",
    "content": "import type {$FixMe, $IntentionalAny} from '@theatre/utils/types'\n\n/**\n * Returns a new object with the value at `path` replaced with the result of `reducer(oldValue)`.\n *\n * Example:\n * ```ts\n * updateDeep({a: {b: 1}}, ['a', 'b'], (x) => x + 1) // {a: {b: 2}}\n * updateDeep({a: {b: 1}}, [], (x) => Object.keys(x).length) // 1\n * updateDeep({a: {b: 1}}, ['a', 'c'], (x) => (x ?? 0) + 1) // {a: {b: 1, c: 1}}\n * ```\n */\nexport default function updateDeep<S>(\n  obj: S,\n  path: (string | number | undefined)[],\n  reducer: (...args: $IntentionalAny[]) => $IntentionalAny,\n): S {\n  if (path.length === 0) return reducer(obj)\n  return hoop(obj, path as $IntentionalAny, reducer)\n}\n\nconst hoop = (\n  s: $FixMe,\n  path: (string | number)[],\n  reducer: $FixMe,\n): $FixMe => {\n  if (path.length === 0) {\n    return reducer(s)\n  }\n  if (Array.isArray(s)) {\n    let [index, ...restOfPath] = path\n    index = parseInt(String(index), 10)\n    if (isNaN(index)) index = 0\n    const oldVal = s[index]\n    const newVal = hoop(oldVal, restOfPath, reducer)\n    if (oldVal === newVal) return s\n    const newS = [...s]\n    newS.splice(index, 1, newVal)\n    return newS\n  } else if (typeof s === 'object' && s !== null) {\n    const [key, ...restOfPath] = path\n    const oldVal = s[key]\n    const newVal = hoop(oldVal, restOfPath, reducer)\n    if (oldVal === newVal) return s\n    const newS = {...s, [key]: newVal}\n    return newS\n  } else {\n    const [key, ...restOfPath] = path\n\n    return {[key]: hoop(undefined, restOfPath, reducer)}\n  }\n}\n"
  },
  {
    "path": "packages/utils/src/userReadableTypeOfValue.ts",
    "content": "import ellipsify from './ellipsify'\n\n/**\n * Returns a short, user-readable description of the type of `value`.\n * Examples:\n * ```ts\n * userReadableTypeOfValue(1) // 'number(1)'\n * userReadableTypeOfValue(12345678901112) // 'number(1234567...)'\n * userReadableTypeOfValue('hello') // 'string(\"hello\")'\n * userReadableTypeOfValue('hello world this is a long string') // 'string(\"hello wo...\")'\n * userReadableTypeOfValue({a: 1, b: 2}) // 'object'\n * userReadableTypeOfValue([1, 2, 3]) // 'array'\n * userReadableTypeOfValue(null) // 'null'\n * userReadableTypeOfValue(undefined) // 'undefined'\n * userReadableTypeOfValue(true) // 'true'\n * ```\n */\nconst userReadableTypeOfValue = (v: unknown): string => {\n  if (typeof v === 'string') {\n    return `string(\"${ellipsify(v, 10)}\")`\n  } else if (typeof v === 'number') {\n    return `number(${ellipsify(String(v), 10)})`\n  } else if (v === null) {\n    return 'null'\n  } else if (v === undefined) {\n    return 'undefined'\n  } else if (typeof v === 'boolean') {\n    return String(v)\n  } else if (Array.isArray(v)) {\n    return 'array'\n  } else if (typeof v === 'object') {\n    return 'object'\n  } else {\n    return 'unknown'\n  }\n}\n\nexport default userReadableTypeOfValue\n"
  },
  {
    "path": "packages/utils/src/valToAtom.ts",
    "content": "import {Atom, prism} from '@theatre/dataverse'\n\n/**\n * A prism hook that converts `val` into an atom, and returns that atom.\n */\nexport const valToAtom = <T>(key: string, vals: T): Atom<T> => {\n  const a = prism.memo(key, () => new Atom(vals), [])\n  a.set(vals)\n  return a\n}\n"
  },
  {
    "path": "packages/utils/src/waitForPrism.ts",
    "content": "import type {Prism} from '@theatre/dataverse'\nimport {defer} from '@theatre/utils/defer'\n\n/**\n * Returns a promise that resolved when the given prism's value satisfies the given condition.\n * Example:\n * ```ts\n * const prism = prism(...)\n * const value = await waitForPrism(prism, (value) => value % 2 === 0)\n * ```\n */\nexport default async function waitForPrism<T>(\n  pr: Prism<T>,\n  condition: (value: T) => boolean,\n): Promise<T> {\n  const deferred = defer<T>()\n  const resolve = (value: T) => {\n    unsub()\n    deferred.resolve(value)\n  }\n  const check = () => {\n    const value = pr.getValue()\n    const r = condition(value)\n    if (r === true) {\n      resolve(value)\n    } else if (typeof r !== 'boolean') {\n      console.error(`waitForPrism condition must return a boolean, got ${r}`)\n    }\n  }\n  const unsub = pr.onStale(check)\n  check()\n\n  return deferred.promise\n}\n"
  },
  {
    "path": "packages/utils/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"lib\": [\"ESNext\", \"DOM\"],\n    \"rootDir\": \"src\",\n    \"types\": [\"jest\", \"node\"],\n    \"target\": \"es6\",\n    \"composite\": true\n  },\n  \"include\": [\"./src/**/*\", \"./src/globals.d.ts\"],\n  \"references\": [\n    {\n      \"path\": \"../dataverse\"\n    }\n  ]\n}\n"
  },
  {
    "path": "packages/utils/typedoc.json",
    "content": "{\n  \"visibilityFilters\": {\n    \"protected\": false,\n    \"private\": false,\n    \"inherited\": true,\n    \"external\": false,\n    \"@alpha\": false,\n    \"@beta\": false\n  },\n  \"excludeTags\": [\n    \"@override\",\n    \"@virtual\",\n    \"@privateRemarks\",\n    \"@satisfies\",\n    \"@overload\",\n    \"@remarks\"\n  ],\n  \"categorizeByGroup\": false,\n  \"excludeInternal\": true,\n  \"excludeProtected\": true,\n  \"excludePrivate\": true,\n  \"sourceLinkTemplate\": \"https://github.com/theatre-js/theatre/blob/main/{path}#L{line}\"\n}\n"
  },
  {
    "path": "render.yaml",
    "content": "# render.yaml is a YAML file that describes the Render deployment.\n# See https://render.com/docs/blueprint-spec for more info.\n# I couldn't find a schema online, and the docs are a bit lacking, but there are\n# examples on github: https://github.com/search?q=language%3Ayaml+render.yaml+%22runtime%3A+node%22&type=code\n# and their api reference: https://api-docs.render.com/reference/create-service\nservices:\n  # packages/app\n  - type: web\n    name: app\n    runtime: node\n    plan: free\n    region: frankfurt\n    buildCommand:\n      YARN_NM_MODE=hardlinks-local yarn install && yarn workspace @theatre/app\n      run cli prod build\n    # todo\n    startCommand: yarn workspace @theatre/app run start\n    healthCheckPath: /\n    envVars:\n      - key: DATABASE_URL\n        fromDatabase:\n          name: app-postgres\n          property: connectionString\n      - key: NODE_ENV\n        value: production\n      - key: GITHUB_ID\n        sync: false\n      - key: GITHUB_SECRET\n        sync: false\n\n      # port is provided by render\n      # - key: PORT\n      #   sync: false\n      - key: HOST\n        value: localhost\n      - key: STUDIO_AUTH_JWT_PRIVATE_KEY\n        sync: false\n      - key: STUDIO_AUTH_JWT_PUBLIC_KEY\n        sync: false\n      - key: NEXT_PUBLIC_WEBAPP_URL\n        fromService:\n          name: app\n          type: web\n          envVarKey: RENDER_EXTERNAL_URL\n  # packages/syncServer\n  - type: web\n    name: syncServer\n    runtime: node\n    plan: free\n    region: frankfurt\n    buildCommand:\n      YARN_NM_MODE=hardlinks-local yarn install && yarn workspace\n      @theatre/sync-server run cli prod build\n    startCommand: yarn workspace @theatre/sync-server run cli prod start\n    healthCheckPath: /\n    envVars:\n      - key: DATABASE_URL\n        fromDatabase:\n          name: syncServer-postgres\n          property: connectionString\n      - key: NODE_ENV\n        value: production\n      - key: HOST\n        value: localhost\n      # port is provided by render\n      - key: APP_URL\n        fromService:\n          name: app\n          type: web\n          envVarKey: RENDER_EXTERNAL_URL\n\ndatabases:\n  - name: app-postgres\n    plan: free\n    region: frankfurt\n    ipAllowList: [] # only allow internal connections\n    postgresMajorVersion: 15\n  - name: syncServer-postgres\n    plan: free\n    region: frankfurt\n    ipAllowList: [] # only allow internal connections\n    postgresMajorVersion: 15\n"
  },
  {
    "path": "tsconfig.base.json",
    "content": "{\n  \"compileOnSave\": false,\n  \"compilerOptions\": {\n    \"moduleResolution\": \"node\",\n    \"strict\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"module\": \"ESNext\",\n    \"target\": \"ESNext\",\n    \"lib\": [\"es2017\", \"dom\", \"ESNext\"],\n    \"isolatedModules\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"jsx\": \"react\",\n    \"skipLibCheck\": true,\n    \"skipDefaultLibCheck\": true,\n    \"declarationMap\": true,\n    \"stripInternal\": true,\n    \"declaration\": true,\n    \"paths\": {\n      \"@theatre/core\": [\"./packages/core/src/index.ts\"],\n      \"@theatre/core/*\": [\"./packages/core/src/*\"],\n      \"@theatre/studio\": [\"./packages/studio/src/index.ts\"],\n      \"@theatre/studio/*\": [\"./packages/studio/src/*\"],\n      \"@theatre/utils\": [\"./packages/utils/src/index.ts\"],\n      \"@theatre/utils/*\": [\"./packages/utils/src/*\"],\n      \"@theatre/saaz\": [\"./packages/saaz/src/index.ts\"],\n      \"@theatre/app/*\": [\"./packages/app/src/*\"],\n      \"@theatre/sync-server/*\": [\"./packages/sync-server/src/*\"],\n      \"@theatre/dataverse\": [\"./packages/dataverse/src/index.ts\"],\n      \"@theatre/react\": [\"./packages/react/src/index.ts\"],\n      \"@theatre/r3f\": [\"./packages/r3f/src/index.ts\"],\n      \"@theatre/r3f/dist/extension\": [\"./packages/r3f/src/extension/index.ts\"],\n      \"@theatre/dataverse-experiments\": [\n        \"./packages/dataverse-experiments/src/index.ts\"\n      ],\n      \"theatric\": [\"./packages/theatric/src/index.ts\"]\n    },\n    \"forceConsistentCasingInFileNames\": true\n  },\n  \"exclude\": [\"**/node_modules\", \"**/.*\", \"**/xeno\", \"**/dist\", \"**/.temp\"]\n}\n"
  },
  {
    "path": "wallaby.conf.js",
    "content": "module.exports = () => {\n  return {\n    autoDetect: true,\n    tests: [\n      'theatre/**/*.test.ts',\n      'packages/dataverse/**/*.test.ts',\n      '!**/node_modules/**',\n    ],\n    testFramework: {\n      configFile: './jest.config.js',\n    },\n  }\n}\n"
  }
]